VQP
Проверьте свойства объекта в javascript.
Использование
Определить схему и вызвать .validate() с объектом, который вы хотите проверить.
Эта функция возвращает массив ошибок проверки.
import Schema from 'vqp'
const user = new Schema({
username: {
type: String,
required: true,
length: { min: 3, max: 32 }
},
pets: [{
name: {
type: String
required: true
},
animal: {
type: String
enum: ['cat', 'dog', 'cow']
}
}],
address: {
street: {
type: String,
required: true
},
city: {
type: String,
required: true
}
zip: {
type: String,
match: /^[0-9]+$/,
required: true
}
}
})
const errors = user.validate(obj)
Каждая ошибка имеет .path, описывающий полный путь свойства, которое не прошло проверку, и.message, описывающий ошибку.
errors[0].path //=> 'address.street'
errors[0].message //=> 'address.street is required.'
Собственные сообщения об ошибках
Вы можете переопределить сообщения об ошибках по умолчанию, передав объект Schema#message().
const post = new Schema({
title: { required: true }
})
post.message({
required: (path) => `${path} не может быть пустым.`
})
const [error] = post.validate({})
assert(error.message = 'Название не может быть пустым.')
Также возможно определить сообщения для отдельных свойств:
const post = new Schema({
title: {
required: true,
message: 'Название обязательно.'
}
})
И для отдельных валидаторов:
const post = new Schema({
title: {
type: String,
required: true,
message: {
type: 'Название должно быть строкой.',
required: 'Название обязательно.'
}
}
})
Вложенность
Объекты и массивы могут быть вложены так глубоко, как вы хотите:
const event = new Schema({
title: {
type: String,
required: true
},
participants: [{
name: String,
email: {
type: String,
required: true
},
things: [{
name: String,
amount: Number
}]
}]
})
Массивы могут быть определены неявно, как в примере выше, или явно:
const post = new Schema({
keywords: {
type: Array,
each: { type: String }
}
})
Элементы массива также могут быть определены индивидуально:
const user = new Schema({
something: {
type: Array,
elements: [
{ type: Number },
{ type: String }
]
}
})
Вложенность также работает со схемами:
const user = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
}
})
const post = new Schema({
title: {
type: String,
required: true
},
content: {
type: String,
required: true
},
author: user
})
Если вы думаете, что это должно сработать, то это, вероятно, работает.
Naming conflicts
Проверка будет наивно предполагать, что вложенный объект, в котором имена свойств all являются валидаторами, не является вложенным объектом.
const schema = new Schema({
pet: {
type: {
required: true,
type: String,
enum: ['cat', 'dog']
}
}
});
В этом примере свойство pet.type будет интерпретироваться как правилоtype, и проверки не будут работать так, как задумано. Чтобы обойти это, мы могли бы использовать более подробное правило properties:
const schema = new Schema({
pet: {
properties: {
type: {
required: true,
type: String,
enum: ['cat', 'dog']
}
}
}
});
В этом случае свойство type для pets.properties` будет интерпретироваться как вложенное свойство, и проверки будут работать так, как задумано.
Пользовательские валидаторы
Пользовательские валидаторы могут быть определены путем передачи объекта с именованными валидаторами в .use:
const hexColor = val => /^#[0-9a-fA-F]$/.test(val)
const car = new Schema({
color: {
type: String,
use: { hexColor }
}
})
Определите пользовательское сообщение об ошибке для валидатора:
car.message({
hexColor: path => `${path} должен быть действительным цветом.`
})
Пользовательские типы
Передайте конструктор в .type для проверки на соответствие пользовательскому типу:
class Car {}
const user = new Schema({
car: { type: Car }
})
Цепочка API
Если вы хотите избежать построения больших объектов, вы можете добавить пути к схеме с помощью цепочки API:
const user = new Schema()
user
.path('username').type(String).required()
.path('address.zip').type(String).required()
Элементы массива могут быть определены с помощью $ в качестве заполнителя для индексов:
const user = new Schema()
user.path('pets.
Это эквивалентно написанию
const user = new Schema({ pets: [{ type: String }]})
Приведение типов
Значения могут быть автоматически переданы перед проверкой.
Чтобы включить приведение типов, передайте объект параметров конструктору Schema с параметром typecast, установленным в значение true.
const user = new Schema(definition, { typecast: true })
Вы можете переопределить этот параметр, передав опцию .validate().
user.validate(obj, { typecast: false })
Чтобы настраивать пользовательские типы, вы можете зарегистрировать собственный тип:
class Car {}
const user = new Schema({
car: { type: Car }
})
user.typecaster({
Car: (val) => new Car(val)
})
Property stripping
По умолчанию все значения, не определенные в схеме, будут удалены из объекта.
Установите .strip = false на объекте параметров, чтобы отключить это поведение. Это, вероятно, будет изменено в будущей версии.
Строгий режим
Когда строгий режим включен, свойства, которые не определены в схеме, вызовут ошибку проверки. Установите .strict = true для объекта параметров, чтобы включить строгий режим.
API
Table of Contents
- Property
- Schema
Property
Экземпляр свойства возвращается при каждом вызове schema.path().
Свойства также создаются внутри, когда объект передается конструктору схемы.
Parameters
message
Регистрирует сообщения.
Parameters
Examples
prop.message('что-то не так')
prop.message({ required: 'параметр обязателен.' })
Returns Property
schema
Смонтировать заданную схему на текущем пути.
Parameters
schema Schema схема для монтирования
Examples
const user = new Schema({ email: String })
prop.schema(user)
Returns Property
use
Проверка с использованием именованных функций из данного объекта.
Сообщения об ошибках можно определить, предоставив объекту
именованные сообщения об ошибках / генераторы для schema.message()
Генератор сообщений получает проверяемое значение,
объект, к которому он принадлежит, и любые дополнительные аргументы.
Parameters
fns Object объект с именованными функциями проверки для вызова
Examples
const schema = new Schema()
const prop = schema.path('some.path')
schema.message({
binary: (path, ctx) => `${path} must be binary.`,
bits: (path, ctx, bits) => `${path} must be ${bits}-bit`
})
prop.use({
binary: (val, ctx) => /^[01]+$/i.test(val),
bits: [(val, ctx, bits) => val.length == bits, 32]
})
Returns Property
required
Регистрирует валидатор, который проверяет наличие.
Parameters
bool Boolean? true если требуется,false в противном случае (optional, default true)
Examples
prop.required()
Returns Property
type
Регистрирует валидатор, который проверяет, имеет ли значение заданный тип
Parameters
Examples
prop.type(String)
prop.type('string')
Returns Property
string
Удобный метод для установки типа в String
Examples
prop.string()
Returns Property
number
Удобный метод для установки типа на Number
Examples
prop.number()
Returns Property
array
Удобный метод для установки типа в Array
Examples
prop.array()
Returns Property
date
Удобный метод для установки типа на Date
Examples
prop.date()
Returns Property
length
Регистрирует валидатор, который проверяет длину.
Parameters
Examples
prop.length({ min: 8, max: 255 })
prop.length(10)
Returns Property
size
Регистрирует валидатор, который проверяет размер.
Parameters
Examples
prop.size({ min: 8, max: 255 })
prop.size(10)
Returns Property
enum
Регистрирует валидатор для перечислений.
Parameters
enums
rules Array допустимые значения
Examples
prop.enum(['cat', 'dog'])
Returns Property
match
Регистрирует валидатор, который проверяет, соответствует ли значение заданному regexp.
Parameters
regexp RegExp регулярное выражение для соответствия
Examples
prop.match(/some\sregular\sexpression/)
Returns Property
each
Регистрирует валидатор, который проверяет каждое значение в массиве на соответствие заданным «правилам».
Parameters
Examples
prop.each({ type: String })
prop.each([{ type: Number }])
prop.each({ things: [{ type: String }]})
prop.each(schema)
Returns Property
elements
Регистрирует пути для элементов массива в родительской схеме с заданным массивом правил.
Parameters
arr Array массив правил для использования
Examples
prop.elements([{ type: String }, { type: Number }])
Returns Property
properties
Регистрирует все свойства данного объекта как вложенные свойства
Parameters
props Object свойства с правилами
Examples
prop.properties({
name: String,
email: String
})
Returns Property
path
Прокси-метод для пути к схеме. Упрощает сцепление свойств.
Parameters
args ...any
Examples
schema
.path('name').type(String).required()
.path('email').type(String).required()
typecast
Приводит значение к заданому типу
Parameters
value Mixed значение
Examples
prop.type(String)
prop.typecast(123) // => '123'
Returns Mixed
validate
Проверка заданного "значения"
Parameters
value Mixed значение для проверки
ctx Object объект, содержащий значение
path String? путь к проверяемому значению (optional, default this.name)
Examples
prop.type(Number)
assert(prop.validate(2) == null)
assert(prop.validate('hello world') instanceof Error)
Returns ValidationError
Schema
Схема определяет структуру, по которой объекты должны проверяться.
Parameters
Examples
const post = new Schema({
title: {
type: String,
required: true,
length: { min: 1, max: 255 }
},
content: {
type: String,
required: true
},
published: {
type: Date,
required: true
},
keywords: [{ type: String }]
})
const author = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
posts: [post]
})
path
Создать или обновить путь с помощью заданных правил.
Parameters
path String полный путь с использованием dot-notation
rules (Object | Array | String | Schema | Property)? правила для применения
Examples
const schema = new Schema()
schema.path('name.first', { type: String })
schema.path('name.last').type(String).required()
Returns Property
validate
Проверить obj.
Parameters
Examples
const schema = new Schema({ name: { required: true }})
const errors = schema.validate({})
assert(errors.length == 1)
assert(errors[0].message == 'name is required')
assert(errors[0].path == 'name')
Returns Array
assert
Утверждайте, что данный "объект" является валидным.
Parameters
Examples
const schema = new Schema({ name: String })
schema.assert({ name: 1 }) // Throws an error
message
Переопределить сообщения об ошибках по умолчанию.
Parameters
name (String | Object) имя валидатора или объекта с парами имя-сообщение
message (String | Function)? сообщение или генератор сообщений для использования
Examples
const hex = (val) => /^0x[0-9a-f]+$/.test(val)
schema.path('some.path').use({ hex })
schema.message('hex', path => `${path} must be hexadecimal`)
schema.message({ hex: path => `${path} must be hexadecimal` })
Returns Schema
validator
Переопределить валидаторы по умолчанию.
Parameters
name (String | Object) имя валидатора или объекта с парами имя-функция
fn Function? функция обратного вызова
Examples
schema.validator('required', val => val != null)
schema.validator({ required: val => val != null })
Returns Schema
typecaster
Переопределить стандартные типы типов.
Parameters
name (String | Object) имя валидатора или объекта с парами имя-функция
fn Function? функция обратного вызова
Examples
schema.typecaster('SomeClass', val => new SomeClass(val))
schema.typecaster({ SomeClass: val => new SomeClass(val) })
Returns Schema
Licence
MIT
).type(String)
Это эквивалентно написанию
__CODE_BLOCK_16__Приведение типов
Значения могут быть автоматически переданы перед проверкой. Чтобы включить приведение типов, передайте объект параметров конструктору __INLINE_CODE_11__ с параметром typecast, установленным в значение true.
__CODE_BLOCK_17__Вы можете переопределить этот параметр, передав опцию __INLINE_CODE_12__.
__CODE_BLOCK_18__Чтобы настраивать пользовательские типы, вы можете зарегистрировать собственный тип:
__CODE_BLOCK_19__Property stripping
По умолчанию все значения, не определенные в схеме, будут удалены из объекта. Установите __INLINE_CODE_13__ на объекте параметров, чтобы отключить это поведение. Это, вероятно, будет изменено в будущей версии.
Строгий режим
Когда строгий режим включен, свойства, которые не определены в схеме, вызовут ошибку проверки. Установите __INLINE_CODE_14__ для объекта параметров, чтобы включить строгий режим.
API
Table of Contents
- Property
- Schema
Property
Экземпляр свойства возвращается при каждом вызове __INLINE_CODE_15__. Свойства также создаются внутри, когда объект передается конструктору схемы.
Parameters
message
Регистрирует сообщения.
Parameters
Examples
__CODE_BLOCK_20__Returns Property
schema
Смонтировать заданную схему на текущем пути.
Parameters
- __INLINE_CODE_19__ Schema схема для монтирования
Examples
__CODE_BLOCK_21__Returns Property
use
Проверка с использованием именованных функций из данного объекта. Сообщения об ошибках можно определить, предоставив объекту именованные сообщения об ошибках / генераторы для __INLINE_CODE_20__
Генератор сообщений получает проверяемое значение, объект, к которому он принадлежит, и любые дополнительные аргументы.
Parameters
- __INLINE_CODE_21__ Object объект с именованными функциями проверки для вызова
Examples
__CODE_BLOCK_22__Returns Property
required
Регистрирует валидатор, который проверяет наличие.
Parameters
- __INLINE_CODE_22__ Boolean? __INLINE_CODE_23__ если требуется,__INLINE_CODE_24__ в противном случае (optional, default __INLINE_CODE_25__)
Examples
__CODE_BLOCK_23__Returns Property
type
Регистрирует валидатор, который проверяет, имеет ли значение заданный тип
Parameters
Examples
__CODE_BLOCK_24__ __CODE_BLOCK_25__Returns Property
string
Удобный метод для установки типа в __INLINE_CODE_27__
Examples
__CODE_BLOCK_26__Returns Property
number
Удобный метод для установки типа на __INLINE_CODE_28__
Examples
__CODE_BLOCK_27__Returns Property
array
Удобный метод для установки типа в __INLINE_CODE_29__
Examples
__CODE_BLOCK_28__Returns Property
date
Удобный метод для установки типа на __INLINE_CODE_30__
Examples
__CODE_BLOCK_29__Returns Property
length
Регистрирует валидатор, который проверяет длину.
Parameters
- __INLINE_CODE_31__ (Object | Number) ОбЪект с __INLINE_CODE_32__ и __INLINE_CODE_33__ свойствами или Number
Examples
__CODE_BLOCK_30__Returns Property
size
Регистрирует валидатор, который проверяет размер.
Parameters
- __INLINE_CODE_36__ (Object | Number) ОбЪект с __INLINE_CODE_37__ и __INLINE_CODE_38__ свойствами или Number
Examples
__CODE_BLOCK_31__Returns Property
enum
Регистрирует валидатор для перечислений.
Parameters
- __INLINE_CODE_41__
- __INLINE_CODE_42__ Array допустимые значения
Examples
__CODE_BLOCK_32__Returns Property
match
Регистрирует валидатор, который проверяет, соответствует ли значение заданному __INLINE_CODE_43__.
Parameters
- __INLINE_CODE_44__ RegExp регулярное выражение для соответствия
Examples
__CODE_BLOCK_33__Returns Property
each
Регистрирует валидатор, который проверяет каждое значение в массиве на соответствие заданным «правилам».
Parameters
Examples
__CODE_BLOCK_34__Returns Property
elements
Регистрирует пути для элементов массива в родительской схеме с заданным массивом правил.
Parameters
- __INLINE_CODE_46__ Array массив правил для использования
Examples
__CODE_BLOCK_35__Returns Property
properties
Регистрирует все свойства данного объекта как вложенные свойства
Parameters
- __INLINE_CODE_47__ Object свойства с правилами
Examples
__CODE_BLOCK_36__Returns Property
path
Прокси-метод для пути к схеме. Упрощает сцепление свойств.
Parameters
- __INLINE_CODE_48__ ...any
Examples
__CODE_BLOCK_37__typecast
Приводит значение к заданому типу
Parameters
- __INLINE_CODE_49__ Mixed значение
Examples
__CODE_BLOCK_38__Returns Mixed
validate
Проверка заданного "значения"
Parameters
- __INLINE_CODE_50__ Mixed значение для проверки
- __INLINE_CODE_51__ Object объект, содержащий значение
- __INLINE_CODE_52__ String? путь к проверяемому значению (optional, default __INLINE_CODE_53__)
Examples
__CODE_BLOCK_39__Returns ValidationError
Schema
Схема определяет структуру, по которой объекты должны проверяться.
Parameters
- __INLINE_CODE_54__ Object? определение схемы (optional, default __INLINE_CODE_55__)
- __INLINE_CODE_56__ Object? опции (optional, default __INLINE_CODE_57__)
- __INLINE_CODE_58__ Boolean Типовые значения перед проверкой (optional, default __INLINE_CODE_59__)
- __INLINE_CODE_60__ Boolean свойства не определены в схеме (optional, default __INLINE_CODE_61__)
- __INLINE_CODE_62__ Boolean проверка завершается неудачно, когда объект содержит свойства, не определенные в схеме (optional, default __INLINE_CODE_63__)
Examples
__CODE_BLOCK_40__ __CODE_BLOCK_41__path
Создать или обновить __INLINE_CODE_64__ с помощью заданных правил.
Parameters
- __INLINE_CODE_65__ String полный путь с использованием dot-notation
- __INLINE_CODE_66__ (Object | Array | String | Schema | Property)? правила для применения
Examples
__CODE_BLOCK_42__Returns Property
validate
Проверить __INLINE_CODE_67__.
Parameters
- __INLINE_CODE_68__ Object объект для проверки
- __INLINE_CODE_69__ Object? варианты см. Schema (optional, default __INLINE_CODE_70__)
Examples
__CODE_BLOCK_43__Returns Array
assert
Утверждайте, что данный "объект" является валидным.
Parameters
Examples
__CODE_BLOCK_44__message
Переопределить сообщения об ошибках по умолчанию.
Parameters
- __INLINE_CODE_73__ (String | Object) имя валидатора или объекта с парами имя-сообщение
- __INLINE_CODE_74__ (String | Function)? сообщение или генератор сообщений для использования
Examples
__CODE_BLOCK_45__ __CODE_BLOCK_46__Returns Schema
validator
Переопределить валидаторы по умолчанию.
Parameters
- __INLINE_CODE_75__ (String | Object) имя валидатора или объекта с парами имя-функция
- __INLINE_CODE_76__ Function? функция обратного вызова
Examples
__CODE_BLOCK_47__ __CODE_BLOCK_48__Returns Schema
typecaster
Переопределить стандартные типы типов.
Parameters
- __INLINE_CODE_77__ (String | Object) имя валидатора или объекта с парами имя-функция
- __INLINE_CODE_78__ Function? функция обратного вызова
Examples
__CODE_BLOCK_49__ __CODE_BLOCK_50__Returns Schema
Licence
MIT