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 ofpropif 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.