|
4 years ago | |
---|---|---|
.. | ||
lib | 4 years ago | |
node_modules | 4 years ago | |
LICENSE | 4 years ago | |
index.js | 4 years ago | |
package.json | 4 years ago | |
readme.md | 4 years ago |
readme.md
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');
// 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
Schema
Create a new Schema
with the given options
.
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
Set key
on the instance with the given value
.
Params
key
{String}value
{Object}
.warning
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}
.field
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
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 ofprop
if specified.
Example
schema.field('bugs', ['object', 'string']);
var field = schema.get('bugs', 'types');
//=> ['object', 'string']
.omit
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
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.
.isOptional
Returns true if field name
is an optional field.
Params
name
{String}returns
{Boolean}
.isRequired
Returns true if field name
was defined as a required field.
Params
name
{String}returns
{Boolean}
.missingFields
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}
.sortObject
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']);
//=> {a: '', z: ''}
.sortArrays
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
.isValidField
Returns true if the given value is valid for field key
.
Params
key
{String}val
{any}config
{Object}returns
{Boolean}
.normalize
Normalize the given config
object.
Params
- {String}: key
- {any}: value
- {Object}: config
returns
{Object}
.normalizeField
Normalize a field on the schema.
Params
- {String}: key
- {any}: value
- {Object}: config
returns
{Object}
.visit
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
var 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
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#dev verb-generate-readme && 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.