Basic object cache with `get`, `set`, `del`, and `has` methods for node.js/javascript projects.
npm install cache-base> Basic object cache with get, set, del, and has methods for node.js/javascript projects.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
- Install
- Quickstart
- API
- Usage examples
- About
_(TOC generated by verb using markdown-toc)_
Install with npm:
``sh`
$ npm install --save cache-base
`js
const CacheBase = require('cache-base');
const app = new CacheBase();
app.set('a.b', 'c');
console.log(app.cache.a); //=> { b: 'c' }
console.log(app.cache.a.b); //=> 'c'
console.log(app.get('a')); //=> { b: 'c' }
console.log(app.get('a.b')); //=> 'c'
`
More usage examples below.
Params
* prop {String|Object}: (optional) Property name to use for the cache, or the object to initialize with.cache
* {Object}: (optional) An object to initialize with.
Example
`js`
const app = new CacheBase();
Assign value to key. Also emits set with the key and value.
Params
* key {String|Array}: The name of the property to set. Dot-notation may be used to set nested properties.value
* {any}returns
* {Object}: Returns the instance for chaining.
Events
* emits: set with key and value as arguments.
Example
`jsset
app.on('set', function(key, val) {
// do something when is emitted
});
app.set('admin', true);
// also takes an object or an array of objects
app.set({ name: 'Brian' });
app.set([{ foo: 'bar' }, { baz: 'quux' }]);
console.log(app);
//=> { name: 'Brian', foo: 'bar', baz: 'quux' }
`
Return the value of key.
Params
* key {String|Array}: The name of the property to get. Dot-notation may be used to set nested properties.returns
* {any}: Returns the value of key
Events
* emits: get with key and value as arguments.
Example
`js`
app.set('a.b.c', 'd');
app.get('a.b');
//=> { c: 'd' }
Create a property on the cache with the given value only if it doesn't already exist.
Params
* key {String}: Property name or object path notation.val
* {any}returns
* {Object}: Returns the instance for chaining.
Example
`js`
console.log(app.cache); //=> {}
app.set('one', { foo: 'bar' });
app.prime('one', { a: 'b' });
app.prime('two', { c: 'd' });
console.log(app.cache.one); //=> { foo: 'bar' }
console.log(app.cache.two); //=> { c: 'd' }
Set a default value to be used when .get() is called and the value is not defined on the cache. Returns a value from the defaults when only a key is passed.
Params
* key {String|Array}: The name of the property to set. Dot-notation may be used to set nested properties.value
* {any}: (optional) The value to set on the defaults object.returns
* {Object}: Returns the instance for chaining.
Example
`js
app.set('foo', 'xxx');
app.default('foo', 'one');
app.default('bar', 'two');
app.default('baz', 'three');
app.set('baz', 'zzz');
console.log(app.get('foo'));
//=> 'xxx'
console.log(app.get('bar'));
//=> 'two'
console.log(app.get('baz'));
//=> 'zzz'
console.log(app);
// CacheBase {
// cache: { foo: 'xxx', bar: 'two', baz: 'zzz' },
// defaults: { foo: 'one', bar: 'two', baz: 'three' } }
`
Set an array of unique values on cache key.
Params
* key {String|Array}: The name of the property to union. Dot-notation may be used to set nested properties.value
* {any}returns
* {Object}: Returns the instance for chaining.
Example
`js`
app.union('a.b.c', 'foo');
app.union('a.b.c', 'bar');
app.union('a.b.c', ['bar', 'baz']);
console.log(app.get('a'));
//=> { b: { c: ['foo', 'bar', 'baz'] } }
Return true if the value of property key is not undefined.
Params
* key {String|Array}: The name of the property to check. Dot-notation may be used to set nested properties.returns
* {Boolean}
Example
`js
app.set('foo', true);
app.set('baz', null);
app.set('bar', undefined);
app.has('foo'); //=> true
app.has('bar'); //=> true
app.has('baz'); //=> false
`
Returns true if the specified property is an own (not inherited) property. Similar to .has(), but returns true if the key exists, even if the value is undefined.
Params
* key {String}returns
* {Boolean}: Returns true if object key exists. Dot-notation may be used to set nested properties.
Example
`js
app.set('a.b.c', 'd');
app.set('x', false);
app.set('y', null);
app.set('z', undefined);
app.hasOwn('a'); //=> true
app.hasOwn('b'); //=> true
app.hasOwn('c'); //=> true
app.hasOwn('a.b.c'); //=> true
app.hasOwn('x'); //=> true
app.hasOwn('y'); //=> true
app.hasOwn('z'); //=> true
app.hasOwn('lslsls'); //=> false
`
Delete one or more properties from the instance.
Params
* key {String|Array}: The name of the property to delete. Dot-notation may be used to set nested properties.returns
* {Object}: Returns the instance for chaining.
Events
* emits: del with the key as the only argument.
Example
`js
// setup a listener to update a property with a default
// value when it's deleted by the user
app.on('del', key => app.set(key, app.default(key)));
app.del(); // delete all properties on the cache
// or
app.del('foo');
// or an array of keys
app.del(['foo', 'bar']);
`
Reset the entire cache to an empty object. Note that this does not also clear the defaults object, since you can manually do cache.defaults = {} if you want to reset that object as well.
Example
`js`
// clear "defaults" whenever the cache is cleared
app.on('clear', key => (app.defaults = {}));
app.clear();
Visit (or map visit) the specified method (key) over the properties in the
given object or array.
Params
* key {String|Array}: The name of the method to visit.val
* {Object|Array}: The object or array to iterate over.returns
* {Object}: Returns the instance for chaining.
Gets an array of names of all enumerable properties on the cache.
Example
`js
const app = new CacheBase();
app.set('user', true);
app.set('admin', false);
console.log(app.keys);
//=> ['user', 'admin']
`
Gets the length of keys.
Example
`js
const app = new CacheBase();
app.set('user', true);
app.set('admin', false);
console.log(app.size);
//=> 2
`
Create an instance of cache-base
`js
const app = new CacheBase();
app.set('a', 'b');
app.set('c.d', 'e');
console.log(app.get('a'));
//=> 'b'
console.log(app.get('c'));
//=> { d: 'e' }
console.log(app);
//=> CacheBase { a: 'b' }
`
Initialize with an object
`js
const app = new CacheBase({ a: 'b', c: { d: 'e' } });
console.log(app.get('a'));
//=> 'b'
console.log(app.get('c'));
//=> { d: 'e' }
console.log(app.get('c.d'));
//=> 'e'
console.log(app);
//=> CacheBase { cache: { a: 'b' } }
`
Inherit
`js
class MyApp extends CacheBase {}
const app = new MyApp();
app.set('a', 'b');
app.set('c', 'd');
console.log(app.get('a'));
//=> 'b'
console.log(app);
//=> MyApp { cache: { a: 'b', c: 'd' } }
`
Custom namespace
Pass a string as the first value to the contructor to define a custom property name to use for the cache. By default values are stored on the cache property.
`js
const CacheBase = require('cache-base');
const app = new CacheBase('data', { a: 'b' });
app.set('c.d', 'e');
// get values
console.log(app.get('a'));
//=> 'b'
console.log(app.get('c'));
//=> { d: 'e' }
console.log(app.data);
//=> { a: 'b', c: { d: 'e' } }
console.log(app);
//=> CacheBase { data: { a: 'b', c: { d: 'e' } } }
`
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
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:
`sh`
$ npm install && npm test
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:
`sh`
$ npm install -g verbose/verb#dev verb-generate-readme && verb
You might also be interested in these projects:
* base-methods: base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… more | set, get, del and use."" class="text-primary hover:underline" target="_blank" rel="noopener noreferrer">homepage
* get-value: Use property paths like 'a.b.c' to get a nested value from an object. Even works… more | homepage.")
* has-value: Returns true if a value exists, false if empty. Works with deeply nested values using… more | homepage
* option-cache: Simple API for managing options in JavaScript applications. | homepage
* set-value: Create nested values and any intermediaries using dot notation ('a.b.c') paths. | 'a.b.c'`" class="text-primary hover:underline" target="_blank" rel="noopener noreferrer">homepage paths.")
* unset-value: Delete nested properties from an object using dot notation. | homepage
| Commits | Contributor |
| --- | --- |
| 67 | jonschlinkert |
| 2 | wtgtybhertgeghgtwtg |
Jon Schlinkert
* LinkedIn Profile
* GitHub Profile
* Twitter Profile
Copyright © 2018, Jon Schlinkert.
Released under the MIT License.
*
_This file was generated by verb-generate-readme, v0.6.0, on March 23, 2018._