Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/goliatone/gkeypath
Simple keypath module
https://github.com/goliatone/gkeypath
Last synced: 11 days ago
JSON representation
Simple keypath module
- Host: GitHub
- URL: https://github.com/goliatone/gkeypath
- Owner: goliatone
- License: mit
- Created: 2014-06-30T15:08:12.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-01-06T15:51:27.000Z (almost 2 years ago)
- Last Synced: 2024-10-11T09:08:22.036Z (27 days ago)
- Language: JavaScript
- Size: 429 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-MIT
Awesome Lists containing this project
README
# KeyPath
[![Build Status](https://secure.travis-ci.org/goliatone/gkeypath.png)](http://travis-ci.org/goliatone/gkeypath)
Helper library to get/set keypaths on any object.
## Documentation
`KeyPath` is defined as a [requirejs][1] module.
It can be imported as a `npm` package to be used in Node.js applications:
```
$ npm i gkeypath
```## API
* `KeyPath.get`: Get a value in target at given keypath
* `KeyPath.set`: Set a value in target at given keypath
* `KeyPath.del`: Delete a value in target at given keypath
* `KeyPath.has`: Check if target has a property at given keypath.
* `KeyPath.oneOf`: Get a value in target at array of keypaths
* `KeyPath.ifNotSet`: If no property at keypath then set. Return value at keypath
* `KeyPath.assert`: If target does not have keypath call `onError`
* `KeyPath.onError`: Developer should override with custom assertion handler.## Examples
```js
let foo = { bar: { baz: 'fiz', buzs: ['fizbuz']} };console.log(KeyPath.get(foo, 'bar.baz')); //fiz
console.log(foo.path.get('bar.bar')); //undefined
console.log(foo.path.get('bar.baz.buzs[0]')); //fizbuz
console.log(foo.path.get('bar.bar', 'fuz')); //fuz
```#### Wrapping
You can wrap your object to get a `get` and `set` functions to access values.
The wrap function has different signatures.
```js
let foo = { bar: { baz: 'fiz', buzs: ['fizbuz']} };KeyPath.wrap(foo, '$path');
console.log(foo.$path.get('bar.baz')); //fiz
console.log(foo.$path.get('bar.bar')); //undefined
console.log(foo.$path.get('bar.baz.buzs[0]')); //fizbuz
console.log(foo.$path.get('bar.bar', 'fuz')); //fuz
``````js
let foo = { bar: { baz: 'fiz' } };KeyPath.wrap(foo, (target, wrapper) => {
...
});
```##### Proxy
The wrapped object will be wrapped in an ES6 Proxy object, in which case you can access properties using dot notation instead of having to use the `get`/`set` functions.
```js
let config = { bar: { baz: 'fiz' } };config = KeyPath.wrap(config);
console.log(config.bar.baz) //fiz
```## Getting Started
Download the [production version][min] or the [development version][max].
[min]: https://raw.github.com/emiliano/gkeypath/master/dist/gkeypath.min.js
[max]: https://raw.github.com/emiliano/gkeypath/master/dist/gkeypath.js## Development
`npm install && bower install`
If you need to `sudo` the `npm` command, you can try to:
```terminal
sudo chown $(whoami) ~/.npm
sudo chown $(whoami) /usr/local/share/npm/bin
sudo chown -R $(whoami) /usr/local/lib/node_modules
```If you bump versions, remember to update:
- package.json
- bower.json
- component.json
- etc.## Bower
>Bower is a package manager for the web. It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.
To register gkeypath in the [bower](http://bower.io/) [registry](http://sindresorhus.com/bower-components/):
`bower register gkeypath git://github.com/goliatone/gkeypath.git`Then, make sure to tag your module:
`git tag -a v0.1.0 -m "Initial release."`
And push it:
`git push --tags`
## Travis
In order to enable Travis for this specific project, you need to do so on your Travi's [profile](https://travis-ci.org/profile). Look for the entry `goliatone/gkeypath`, activate, and sync.
## Release History
_(Nothing yet)_[1]: http://requirejs.org