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();
options.register("name", "John");
options.register({
name: "John",
familyName: "Doe",
age: 34,
car: {
name: "Mini",
color: "Red",
wheels: 4
}
});
Set and get values
options.set("age", 40);
options.set("car.color", "blue");
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);
});
options.observe("*", (name, value) => {
console.log(name, value);
});
options.observe("car", (name, value) => {
console.log(name, value);
});
let callback = (name, value) => {
console.log(name, value);
};
options.observe("car.name", callback);
options.dontObserve("car.name", callback);
options.observe(["car.name", "name", "familyName"], callback);
options.dontObserve(["car.name", "name", "familyName"], callback);
Disable observers on set
options.internalChange();
options.set("name", "Johnny");
options.set("age", 54);
options.endInternalChange();
options.set("name", "bob", true);
Reset to default
options.reset("age");
options.reset("car.color");
options.reset("car");
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.
let values = {
name: "Jane",
age: 26,
vegetarian: true,
car: {
name: "Fiat 500",
color: "blue"
}
};
options.inject(values);
options.register("vegetarian", false);
Alias
options.alias("color", "car.color");
options.alias("surname", "familyName");
options.set("color", "white");
options.get("color");
options.set("surname", "Roe");
options.register("postalCode", 0);
options.alias("zipCode", "postalCode");
let values = {
name: "Jane",
zipCode: 23301
};
options.inject(values);
Check for option existence
options.has("name");
options.has("car.color");
options.has("gender");