npm.io
1.1.4 • Published 6 years ago

vqp

Licence
MIT
Version
1.1.4
Deps
3
Size
80 kB
Vulns
0
Weekly
0

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.path(). Свойства также создаются внутри, когда объект передается конструктору схемы.

Parameters
  • name String название свойства
  • schema Schema вложеная схема
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
  • rules (Object | Number) ОбЪект с .min и .max свойствами или Number
    • rules.min Number минимальная длина
    • rules.max Number максимальная длина
Examples
prop.length({ min: 8, max: 255 })
prop.length(10)

Returns Property

size

Регистрирует валидатор, который проверяет размер.

Parameters
  • rules (Object | Number) ОбЪект с .min и .max свойствами или Number
    • rules.min Number минимальный размер
    • rules.max Number максимальный размер
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
  • obj Object? определение схемы (optional, default {})
  • opts Object? опции (optional, default {})
    • opts.typecast Boolean Типовые значения перед проверкой (optional, default false)
    • opts.strip Boolean свойства не определены в схеме (optional, default true)
    • opts.strict Boolean проверка завершается неудачно, когда объект содержит свойства, не определенные в схеме (optional, default false)
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
Examples
const schema = new Schema()
schema.path('name.first', { type: String })
schema.path('name.last').type(String).required()

Returns Property

validate

Проверить obj.

Parameters
  • obj Object объект для проверки
  • opts Object? варианты см. Schema (optional, default {})
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

Экземпляр свойства возвращается при каждом вызове __INLINE_CODE_15__. Свойства также создаются внутри, когда объект передается конструктору схемы.

Parameters
  • __INLINE_CODE_16__ String название свойства
  • __INLINE_CODE_17__ Schema вложеная схема
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
  • __INLINE_CODE_26__ (String | Function) тип для проверки
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
    • __INLINE_CODE_34__ Number минимальная длина
    • __INLINE_CODE_35__ Number максимальная длина
Examples
__CODE_BLOCK_30__

Returns Property

size

Регистрирует валидатор, который проверяет размер.

Parameters
  • __INLINE_CODE_36__ (Object | Number) ОбЪект с __INLINE_CODE_37__ и __INLINE_CODE_38__ свойствами или Number
    • __INLINE_CODE_39__ Number минимальный размер
    • __INLINE_CODE_40__ 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

Keywords