map-schema

Normalize an object by running normalizers and validators that are mapped to a schema.
You might also be interested in normalize-pkg.
Table of Contents
- [Install](#install)
- [Usage](#usage)
- [API](#api)
- [About](#about)
Install
Install with npm:
$ 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');
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');
console.log(schema.normalize(pkg));
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
Create a new Schema
with the given options
.
Params
Example
var schema = new Schema()
.field('name', 'string')
.field('version', 'string')
.field('license', 'string')
.field('licenses', 'array', {
normalize: function(val, key, config) {
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}
Add a field to the schema with the given name
, type
or types, and options.
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;
}
})
Get field name
from the schema. Get a specific property from the field by passing the property name as a second argument.
Params
name
{Strign}prop
{String}returns
{Object|any}: Returns the field instance or the value of prop
if specified.
Example
schema.field('bugs', ['object', 'string']);
var field = schema.get('bugs', 'types');
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}
If a keys
array is passed on the constructor options, or as a second argument to sortObject
, this sorts the given object so that keys are in the same order as the supplied array of keys
.
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']);
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.
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
var field = new Field('string', {
normalize: function(val) {
return val;
}
});
Returns true if the given type
is a valid type.
Params
type
{String}returns
{Boolean}
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.
Example
var field = new Field({
types: ['string']
});
field.validate('name', {});
Normalize the field's value.
Example
var field = new Field({
types: ['string'],
normalize: function(val, key, config, schema) {
return val;
}
});
About
Related projects
- get-value: Use property paths (
a.b.c
) to get a nested value from an object. | 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
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Building docs
(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)
To generate the readme, run the following command:
$ npm install -g verbose/verb
Running tests
Install dev dependencies:
$ npm install && npm test
Author
Jon Schlinkert
License
Copyright © 2017, Jon Schlinkert.
MIT
This file was generated by verb-generate-readme, v0.4.2, on January 30, 2017.