Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
map-schema
Advanced tools
Normalize an object by running normalizers and validators that are mapped to a 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.
Install with npm (requires Node.js >=10):
$ npm install --save map-schema
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.
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 of prop
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 arraysReturns 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
returns
{Object}Normalize a field on the schema.
Params
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
const field = new Field('string', {
normalize: function(val) {
// do stuff to `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.
returns
{Boolean}Example
var field = new Field({
types: ['string']
});
field.validate('name', {});
//=> false
Normalize the field's value.
Example
var field = new Field({
types: ['string'],
normalize: function(val, key, config, schema) {
// do stuff to `val`
return val;
}
});
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
$ npm install && npm test
(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
You might also be interested in these projects:
_.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.")'a.b.c'
) paths. | homepageJon Schlinkert
Copyright © 2020, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.8.0, on March 01, 2020.
FAQs
Normalize an object by running normalizers and validators that are mapped to a schema.
We found that map-schema demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.