observable-options
v1.4.3
Published
Manage options and observe changes easily.
Downloads
1
Readme
Observable Options
A simple library for defining and managing options. It lets you register options, nest options, observe changes, reset to default value and define alias names.
Install
npm install --save-dev observable-options
API
Register options
const options = new Observable();
// registers new option in options list and sets a default value: `John`
options.register("name", "John");
// registers multiple and nested options
options.register({
name: "John",
familyName: "Doe",
age: 34,
car: {
name: "Mini",
color: "Red",
wheels: 4
}
});
Set and get values
// Change age value
options.set("age", 40);
// Change nested option value
options.set("car.color", "blue");
// get value
options.get("age");
options.get("car.color");
Observe changes
options.observe("name", (name, value) => {
console.log(name, value);
});
options.observe("car.color", (name, value) => {
console.log(name, value);
});
// observes any changes in options
options.observe("*", (name, value) => {
console.log(name, value);
});
// observes any changes in car
options.observe("car", (name, value) => {
console.log(name, value);
});
// add and remove observer
let callback = (name, value) => {
console.log(name, value);
};
options.observe("car.name", callback);
// remove observer
options.dontObserve("car.name", callback);
// Observes multiple options
options.observe(["car.name", "name", "familyName"], callback);
// remove observer
options.dontObserve(["car.name", "name", "familyName"], callback);
Disable observers on set
// starts denying observers
options.internalChange();
options.set("name", "Johnny");
options.set("age", 54);
options.endInternalChange();
// denies observer on set
options.set("name", "bob", true);
Reset to default
// resets age to default
options.reset("age"); // 34
// resets a nested option
options.reset("car.color"); // red
// resets all options of car
options.reset("car");
// resets all options
options.reset("*");
Inject values
Sets multiple values to the options even if some of the options were not registered yet. It is useful when you need to set all options before any other action in your script.
// injects new values to the options
let values = {
name: "Jane",
age: 26,
vegetarian: true,
car: {
name: "Fiat 500",
color: "blue"
}
};
options.inject(values);
// you can register "vegetarian" even later after value injection
options.register("vegetarian", false);
Alias
options.alias("color", "car.color");
options.alias("surname", "familyName");
// set and get value by alias
options.set("color", "white");
options.get("color");
options.set("surname", "Roe");
// aliases are supported for value injection too
options.register("postalCode", 0);
options.alias("zipCode", "postalCode");
let values = {
name: "Jane",
zipCode: 23301
};
options.inject(values);
Check for option existence
options.has("name"); // true
options.has("car.color"); // true
options.has("gender"); // false