Awesome
expand-pkg
Parse string values in package.json into objects.
You might also be interested in normalize-pkg.
Install
Install with npm:
$ npm install --save expand-pkg
Usage
var Config = require('./');
var config = new Config();
console.log(config.expand(require('./package')));
Schema
Values are parsed using a schema that is passed to map-schema (builds on the schema from normalize-pkg as a starting point):
- only properties that have a corresponding field on the schema will be parsed.
- any properties that do not have a corresponding field are returned unmodified.
See the .field docs to learn how to add or overwrite a field on the schema.
Defaults
A default
value may optionally be defined when a .field
is registered. When .expand
is run and a property that is required or recommended by npm is missing, expand-pkg
attempts to create the field if valid data can be found in the repository.
The following fields are the only built-in fields with default values:
version
:'0.1.0'
license
:'MIT'
engines
:{node: '>= 0.10.0'}
API
Config
Create an instance of Config
with the given options
.
Example
var config = new Config();
var pkg = config.expand({
author: 'Jon Schlinkert (https://github.com/jonschlinkert)'
});
console.log(pkg);
//=> {name: 'Jon Schlinkert', url: 'https://github.com/jonschlinkert'}
Params
options
{Object}
.field
Add a field to the schema, or overwrite or extend an existing field. The last argument is an options
object that supports the following properties:
normalize
{Function}: function to be called on the given package.json value when the.expand
method is calleddefault
{any}: default value to be used when the package.json property is undefined.required
{Boolean}: definetrue
if the property is required
Example
var config = new Config();
config.field('foo', 'string', {
default: 'bar'
});
var pkg = config.expand({});
console.log(pkg);
//=> {foo: 'bar'}
Params
name
{String}: Field name (required)type
{String|Array}: One or more native javascript types allowed for the property value (required)options
{Object}returns
{Object}: Returns the instance
.expand
Iterate over pkg
properties and expand values that have corresponding fields registered on the schema.
Example
var config = new Config();
var pkg = config.expand(require('./package.json'));
Params
pkg
{Object}: Thepackage.json
object to expandoptions
{Object}returns
{Object}: Returns an expanded package.json object.
Options
options.knownOnly
Type: boolean
Default: undefined
Omit properties from package.json that do not have a field registered on the schema.
var Config = require('expand-pkg');
var config = new Config({knownOnly: true});
console.log(config.expand({author: 'Brian Woodward', foo: 'bar'}));
//=> {author: {name: 'Brian Woodward'}}
options.pick
Type: array
Default: undefined
Filter the resulting object to contain only the specified keys.
options.omit
Type: array
Default: undefined
Remove the specified keys from the resulting object.
options.fields
Pass a fields
object on the options to customize any fields on the schema (also see options.extend):
var pkg = config.expand(require('./package'), {
extend: true,
fields: {
name: {
normalize: function() {
return 'bar'
}
}
}
});
console.log(pkg.name);
//=> 'bar'
options.extend
Type: boolean
Default: undefined
Used with options.field, pass true
if you want to extend a field that is already defined on the schema.
var pkg = config.expand(require('./package'), {
extend: true,
fields: {
name: {
normalize: function() {
return 'bar'
}
}
}
});
console.log(pkg.name);
//=> 'bar'
About
Related projects
- normalize-pkg: Normalize values in package.json using the map-schema library. | homepage
- repo-utils: Utils for normalizing and formatting repo data. | homepage
- sync-pkg: CLI to sync only basic properties from package.json to bower.json. | homepage
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Contributors
Commits | Contributor |
---|---|
27 | jonschlinkert |
4 | doowb |
Building docs
(This document was generated by verb-generate-readme (a verb generator), please don't edit the readme directly. Any changes to the readme must be made in .verb.md.)
To generate the readme and API documentation with verb:
$ npm install -g verb verb-generate-readme && verb
Running tests
Install dev dependencies:
$ npm install -d && npm test
Author
Jon Schlinkert
License
Copyright © 2016, Jon Schlinkert. Released under the MIT license.
This file was generated by verb-generate-readme, v0.2.0, on December 02, 2016.