keyvalue
Simple key/value manager suitable for configuration data.
Supports loading and saving YAML and JSON formatted files. Format can be
implicitely detected based on the filename, or explicitly given as an option to
the .load() and .save() methods.
- Getting a value that does not exist will return null.
- Setting a value that is not a valid JSON type will throw an exception.
- Setting a value to
null or undefined removes it.
Installation
npm install keyvalue --save
Example
var KeyValue = require('keyvalue');
var instance = new KeyValue({
indent: 4,
atomic: false
});
instance.load('./filename.yaml');
instance.set('key', value);
instance.setIfMissing('key', value);
instance.setIfExists('key', value);
console.log(instance.get('key'));
console.log(instance.getOrDefault('key', "key was not set"));
instance.save('./filename', {
format: 'yaml',
indent: 8,
atomic: true
});
API
new KeyValue([options])
Create a new KeyValue instance.
The options argument is optional.
options
- indent
number|String
- Default value: 2
- Number values indicate the number of spaces to indent formatted data.
- String values are interpreted as numbers for YAML, and as the literal
indent string for JSON.
- atomic
boolean
- Default value: true
- If this option is not present or true, a temporary file will be used for
saving, and then moved to replace the destination file. This is a safer way
to write files than simply replacing the contents in place, but it may
confuse some filesystem watchers.
- If this option is false, the file contents will be overwritten in place
and no temporary file will be used.
.load(filename, [options])
Read JSON or YAML formatted data from a file.
If the KeyValue instance already has keys that do not exist in the file, they
will NOT be deleted by loading. Loading only adds or replaces keys in the
instance.
The options argument is optional.
This method is synchronous.
Returns the KeyValue instance.
options
- format
String
- Valid values: 'json', 'yaml', null
- Default value: null
- If this option is not set or null, then the filename extension will be
used to determine the format. It will default to JSON if the filename does
not end with '.yaml' or '.yml'.
.set(key, [subkey1, subkey2, ...], value)
Set a value in the KeyValue instance. If the key or any intermediate subkey does
not exist or is null, it will be replaced with an object. If any parent value is
a non-object, it will be auto-boxed.
If the value to be set is null or undefined, then the value will be deleted.
Using the set method will never throw an exception, unlike accessing the subkeys
directly. If any parent values are not set, then plain objects will be
automatically inserted.
Returns the previous value or null.
.setIfMissing(key, [subkey1, subkey2, ...], value)
Identical to the .set() method, except that if the value is already set, then
this is a no-op and the value will not be changed.
Returns the previous value or null.
.setIfExists(key, [subkey1, subkey2, ...], value)
Identical to the .set() method, except that if the value is NOT set, then this
is a no-op and the value will not be changed.
Returns the previous value or null.
.get(key, [subkey1, subkey2, ...])
Get a value from the KeyValue instance. If the value for any key does not exist,
null will be returned.
Using the .get() method will never throw an exception, unlike accessing the
subkeys directly. If any parent values are not set, then null will be
returned.
Returns the value or null.
.getOrDefault(key, [subkey1, subkey2, ...], defaultValue)
Identical to the .get() method, except that if null would be returned, then
defaultValue is returned instead.
Returns the value or the default value if the actual value is unset.
.save(filename, [options])
Write JSON or YAML formatted data to a file.
The options argument is optional.
This method is synchronous.
Returns this KeyValue instance.
options
- format
String
- Valid values: 'json', 'yaml', null
- Default value: null
- If this option is not set or null, then the filename extension will be
used to determine the format. It will default to JSON if the filename does
not end with '.yaml' or '.yml'.
- indent
number|String
- Overrides the constructor indent option.
- atomic
boolean
- Overrides the constructor atomic option.