map-schema

Normalize an object by running normalizers and validators that are mapped to a schema.
You might also be interested in normalize-pkg.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Table of Contents
Install
Install with npm (requires Node.js >=10):
$ npm install --save map-schema
Usage
var schema = require('map-schema');
Example
This is a basic example schema for normalizing and validating fields on package.json
(a full version of this will be available on normalize-pkg when complete):
var fs = require('fs');
var isObject = require('isobject');
var Schema = require('map-schema');
// create a schema
var schema = new Schema()
.field('name', 'string')
.field('description', 'string')
.field('repository', ['object', 'string'], {
normalize: function(val) {
return isObject(val) ? val.url : val;
}
})
.field('main', 'string', {
validate: function(filepath) {
return fs.existsSync(filepath);
}
})
.field('version', 'string', {
default: '0.1.0'
})
.field('license', 'string', {
default: 'MIT'
})
var pkg = require('./package');
// normalize an object
console.log(schema.normalize(pkg));
// validation errors array
console.log(schema.errors);
Errors
Validation errors are exposed on schema.errors
. Error reporting is pretty basic right now but I plan to implement something better soon.
API
Params
options
{Object}
Example
var schema = new Schema()
.field('name', 'string')
.field('version', 'string')
.field('license', 'string')
.field('licenses', 'array', {
normalize: function(val, key, config) {
// convert license array to `license` string
config.license = val[0].type;
delete config[key];
}
})
.normalize(require('./package'))
Set key
on the instance with the given value
.
Params
key
{String}value
{Object}
Push a warning onto the schema.warnings
array. Placeholder for
better message handling and a reporter (planned).
Params
method
{String}: The name of the method where the warning is recorded.prop
{String}: The name of the field for which the warning is being created.message
{String}: The warning message.value
{String}: The value associated with the warning.returns
{any}
Params
name
{String}type
{String|Array}options
{Object}returns
{Object}: Returns the instance for chaining.
Example
var semver = require('semver');
schema
.field('keywords', 'array')
.field('version', 'string', {
validate: function(val, key, config, schema) {
return semver.valid(val) !== null;
}
})
Params
name
{Strign}prop
{String}returns
{Object|any}: Returns the field instance or the value ofprop
if specified.
Example
schema.field('bugs', ['object', 'string']);
var field = schema.get('bugs', 'types');
//=> ['object', 'string']
Omit a property from the returned object. This method can be used in normalize functions as a way of removing undesired properties.
Params
key
{String}: The property to removereturns
{Object}: Returns the instance for chaining.
Update a property on the returned object. This method will trigger validation and normalization of the updated property.
Params
key
{String}: The property to update.val
{any}: Value of the property to update.returns
{Object}: Returns the instance for chaining.
Returns true if field name
is an optional field.
Params
name
{String}returns
{Boolean}
Returns true if field name
was defined as a required field.
Params
name
{String}returns
{Boolean}
Checks the config object for missing fields and. If found,
a warning message is pushed onto the schema.warnings
array,
which can be used for reporting.
Params
config
{Object}returns
{Array}
Params
config
{Object}returns
{Object}: Returns the config object with keys sorted to match the given array of keys.
Example
schema.sortObject({z: '', a: ''}, ['a', 'z']);
//=> {a: '', z: ''}
When options.sortArrays
is not false, sorts all arrays in the
given config
object using JavaScript's native .localeCompare
method.
Params
config
{Object}returns
{Object}: returns the config object with sorted arrays
Returns true if the given value is valid for field key
.
Params
key
{String}val
{any}config
{Object}returns
{Boolean}
Normalize the given config
object.
Params
- {String}: key
- {any}: value
- {Object}: config
returns
{Object}
Normalize a field on the schema.
Params
- {String}: key
- {any}: value
- {Object}: config
returns
{Object}
Visit method
over the given object or array.
Params
method
{String}value
{Object|Array}returns
{Object}: Returns the instance for chaining.
Field
Create a new Field
of the given type
to validate against, and optional config
object.
Params
type
{String|Array}: One more JavaScript native types to use for validation.config
{Object}
Example
const field = new Field('string', {
normalize: function(val) {
// do stuff to `val`
return val;
}
});
.isValidType
Returns true if the given type
is a valid type.
Params
type
{String}returns
{Boolean}
.validate
Called in schema.validate
, returns true if the given value
is valid. This default validate method returns true unless overridden with a custom validate
method.
returns
{Boolean}
Example
var field = new Field({
types: ['string']
});
field.validate('name', {});
//=> false
.normalize
Normalize the field's value.
Example
var field = new Field({
types: ['string'],
normalize: function(val, key, config, schema) {
// do stuff to `val`
return val;
}
});
About
sh
$ npm install && npm test
sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
Related projects
You might also be interested in these projects:
- get-value: Use property paths like 'a.b.c' to get a nested value from an object. Even works… more | homepage
- normalize-pkg: Normalize values in package.json using the map-schema library. | homepage
- object.omit: Return a copy of an object excluding the given key, or array of keys. Also… more | homepage
- object.pick: Returns a filtered copy of an object with only the specified keys, similar to
_.pick… [more](https://github.com/jonschlinkert/object.pick) | [homepage](https://github.com/jonschlinkert/object.pick "Returns a filtered copy of an object with only the specified keys, similar to
_.pick` from lodash / underscore.") - set-value: Create nested values and any intermediaries using dot notation (
'a.b.c'
) paths. | homepage
Author
Jon Schlinkert
License
Copyright © 2020, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.8.0, on March 01, 2020.