Package Exports
- expand-object
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (expand-object) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
expand-object 
Expand a string into a JavaScript object using a simple notation. Use the CLI or as a node.js lib.
I created this to make it easier to generate objects for unit tests. I'd love to hear about other use cases!
Examples
expand('a')
//=> {a: ''}
expand('a.b')
//=> {a: {b: ''}}
expand('a|b')
//=> {a: '', b: ''}
expand('a:b')
//=> {a: 'b'}
expand('a,b')
//=> ['a', 'b']
Type casting
Introduced in v0.2.2, some values are cast to their JavaScript type.
Booleans
If the value is "true"
or "false"
it will be coerced to a boolean value.
expand('a:true')
//=> {a: true}
expand('a:false')
//=> {a: false}
Numbers
If the value is an integer it will be coerced to a number.
expand('a:1')
//=> {a: 1}
expand('a:123')
//=> {a: 123}
Regex
If the value is a simple regular expression it will be coerced to a new RegExp()
.
expand('a:/foo/')
//=> {a: /foo/}
expand('a.b.c:/^bar/gmi')
//=> {a: {b: {c: /^bar/gmi}}}
Install
Install with npm
$ npm i expand-object --save
CLI
Usage with cli:
❯ expand-object --help
Usage: expand-object [options] <string>
Expand a string into a JavaScript object using a simple notation.
Options:
-h, --help output usage information
-V, --version output the version number
-r, --raw Output as raw javascript object - not stringified
Examples:
$ expand-object "a:b"
$ expand-object --raw "a:b"
$ echo "a:b" | expand-object
node.js
To use as a node.js library:
var expand = require('expand-object');
children
Expand dots into child objects:
expand('a')
//=> {a: ''}
expand('a.b')
//=> {a: {b: ''}}
expand('a.b.c')
//=> {a: {b: {c: ''}}}
expand('a.b.c.d')
//=> {a: {b: {c: {d: ''}}}}
siblings
expand-object supports two kinds of siblings, general and adjacent. It's much easier to understand the difference in the last example.
general siblings
Use pipes (
|
) to expand general siblings:
expand('a|b')
//=> {a: '', b: ''}
expand('a|b|c')
//=> {a: '', b: '', c: ''}
expand('a|b|c|d')
//=> {a: '', b: '', c: '', d: ''}
expand('a:b|c:d')
//=> {a: 'b', c: 'd'}
adjacent siblings
Use plus (
+
) to expand adjacent siblings:
Adjacent siblings are objects that immediately follow one another.
expand('a:b+c:d')
//=> {a: 'b', c: 'd'}
expand('a.b:c+d:e')
//=> {a: {b: 'c', d: 'e'}}
difference between sibling types
In the example below:
- general:
d
is a sibling toa
- adjacent:
d
is a sibling tob
// general siblings
expand('a.b:c|d:e')
//=> { a: { b: 'c' }, d: 'e' }
// adjacent siblings
expand('a.b:c+d:e')
//=> { a: { b: 'c', d: 'e' } }
key-value pairs
Expand colons into key-value pairs:
expand('a:b')
//=> {a: 'b'}
expand('a.b:c')
//=> {a: {b: 'c'}}
expand('a.b.c:d')
//=> {a: {b: {c: 'd'}}}
arrays
Expand comma separated values into arrays:
expand('a,b')
//=> ['a', 'b']
expand('a,b,c')
//=> ['a', 'b', 'c']
expand('a:b,c,d|e:f,g,h')
//=> {a: ['b', 'c', 'd'], e: ['f', 'g', 'h']}
Usage examples
Expand siblings with comma separated values into arrays:
expand('a:b,c,d|e:f,g,h')
//=> {a: ['b', 'c', 'd'], e: ['f', 'g', 'h']}
Expand children with comma separated values into arrays:
expand('a.b.c:d,e,f|g.h:i,j,k')
//=> {a: { b: {c: ['d', 'e', 'f']}}, g: {h: ['i', 'j', 'k']}}
Expand sibling objects into key-value pairs:
expand('a:b|c:d')
//=> {a: 'b', c: 'd'}
expand('a:b|c:d|e:f')
//=> {a: 'b', c: 'd', e: 'f'}
expand('a:b|c:d|e:f|g:h')
//=> {a: 'b', c: 'd', e: 'f', g: 'h'}
Expand child objects into key-value pairs:
expand('a.b:c')
//=> {a: {b: 'c'}}
expand('a.b.c:d')
//=> {a: {b: {c: 'd'}}}
expand('a.b.c.d:e')
//=> {a: {b: {c: {d: 'e'}}}}
Expand sibling and child objects into key-value pairs:
expand('a:b|c:d')
//=> {a: 'b', c: 'd'}
expand('a.b.c|d.e:f')
//=> {a: {b: {c: ''}}, d: {e: 'f'}}
expand('a.b:c|d.e:f')
//=> {a: {b: 'c'}, d: {e: 'f'}}
expand('a.b.c:d|e.f.g:h')
//=> {a: {b: {c: 'd'}}, e: {f: {g: 'h'}}}
Related projects
- get-value: Use property paths (
a.b.c
) to get a nested value from an object. - has-value: Returns true if a value exists, false if empty. Works with deeply nested values using… more
- stringify-keys: Build an array of key paths from an object.
- set-value: Create nested values and any intermediaries using dot notation (
'a.b.c'
) paths.
Running tests
Install dev dependencies:
$ npm i -d && npm test
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue
Author
Jon Schlinkert
License
Copyright © 2015 Jon Schlinkert Released under the MIT license.
This file was generated by verb-cli on August 05, 2015.