npm install schema
The environment is a context, where your schemas and validations live in. You need to create an environment before creating your schemas to define some default settings that will affect all schemas created in this environment:
var myEnv = require('schema')('envIdentifier', options)
options
is an object that can have the following keys:
'i18n'
is a list of module identifiers or i18n packages that will be used inside this environment. To omit all messages in the validation errors, just use []
. Example for an i18n module
Default: [ '../i18n/default' ]
'fallbacks'
defines the default fallbacks that are used when a schema is defined without the "fallbacks"
attribute. Options: 'TOLERANT_FALLBACKS'
, 'STRICT_FALLBACKS'
or any other legal definition of the "fallbacks"
attribute. Default: 'TOLERANT_FALLBACKS'
'v'
: Default and only supported option: 'draft-02'
'detectRecursion'
defines whether recursions should be detected on validation. Not recommended to set to false
. Default: true
Instances contain a JSON Schema:
var schema = myEnv.Schema.create({
type: 'object',
properties: {
q: {
type: 'string',
minLength: 1,
maxLength: 200,
'default': '',
fallbacks: {
maxLength: 'truncateToMaxLength'
}
},
hl: {
type: 'string',
enum: [ 'en', 'de', 'fr' ],
'default': 'en',
pre: function (value) {
if (typeof value === 'object') return value;
return String(value).toLowerCase();
}
},
start: {
type: 'integer',
minimum: 0,
maximum: 991,
maximumCanEqual: false,
'default': 0
},
order: {
type: 'string',
enum: [ 'name', 'date' ],
'default': 'date'
}
},
additionalProperties: false
})
'fallbacks'
...'pre'
handler called before applying this schema. See example above.'post'
handler called after applying this schema.'unqiueItems'
'divisibleBy'
'disallow'
'type'
: usage of schemas'format'
When writing a new schema, you can use the file PROPERTY_OVERVIEW_02 to get a quick overview over all supported properties.
var validation = schema.validate({
q: 'OK',
start: -5,
num: -100.99,
xyz: 'additionalProperty'
})
var assert = require('assert')
assert.deepEqual(
validation.instance,
{
q: 'OK',
start: 0,
order: 'date',
hl: 'en'
}
)
assert.strictEqual(
validation.isError(),
false
)
With this little utility, you create a secure JavaScript function with an implicit schema.
Example: http://github.com/akidee/schema.js/blob/master/examples/myEnv.f.js