koalaesce
v0.6.5
Published
Null coalescing library for JS
Readme
koalaesce
About
A simple null-coalescing library for JS, providing behavior much like
C#'s ?? operator or
Groovy's ?. operator.
koalaesce.get allows you to pass a base object and chain of property names and retrieve the
last link in the chain, without worrying about the intermediate null checks. It also features
invocation of functions found along the way, and the ability to specify a default value if the
chain could not be resolved.
Usage
koalaesce is set up as a utility class, so you should start by requiring it:
let koalaesce = require("koalaesce");The gulpfile included with koalaesce builds UMD modules, so koalaesce should be with most
module systems and is usable within the browser as well as node/io tools.
Two primary methods are exposed from this class: get and getOrDefault. For users preferring
exceptions over null, the getOrThrow method is provided. All use the same underlying
implementation.
get
koalaesce.get works down through a chain, returning the last link (if it can be found). If a
link is missing or a null link is encountered before the end of the chain, it will return null.
For example:
let obj = {foo: {bar: 3}};
koalaesce.get(obj, "foo", "bar") === 3;
let obj = {foo: null};
koalaesce.get(obj, "foo", "bar") === null; // null since foo is null, but we still need bar
let obj = {foo: {baz: 3}};
koalaesce.get(obj, "foo", "bar") === null; // null since foo does not have a bar, only bazTo invoke a function encountered along the chain, the function name (and any arguments) should be provided as an array:
let obj = {foo: (a) => { return a+1; }};
koalaesce.get(obj, ["foo", 2]) === 3;Normal links must not be provided as an array, koalaesce uses arrays to detect when it should
attempt to invoke a link.
getOrDefault
koalaesce.getOrDefault behaves almost identically to koalaesce.get, but allows you to specify
a default value to be returned rather than null:
let obj = {foo: null};
koalaesce.getOrDefault(obj, 3, "foo", "bar") === 3;
let obj = {foo: {baz: 3}};
koalaesce.getOrDefault(obj, 4, "foo", "bar") === 4;getOrThrow
koalaesce.getOrThrow will throw an exception rather than returning null if a missing or null
link is encountered:
let obj = {foo: null};
try {
koalaesce.get(obj, "foo", "bar");
} catch (e) {
e.constructor === NullLinkError;
}
let obj = {foo: {baz: 3}};
try {
koalaesce.get(obj, "foo", "bar");
} catch (e) {
e.constructor === MissingLinkError;
}This can be useful in environments where an exception may trigger other behavior, or if a stacktrace is desired. The link where the error was encountered will be included in the error message.
getNamed
koalaesce.getNamed behaves much like koalaesce.get, but only takes two arguments: the base
object and a string of all links in the chain, separated by .s. This is stylistically similar
to using the obj.foo.bar syntax, with the additional checks koalaesce provides.
let obj = {foo: {bar: 3}};
koalaesce.getNamed(obj, "foo.bar") === 3;Note: This does not support property names containing the '.' character, yet. Support for those is planned.
getNamedOrDefault
koalaesce.getNamedOrDefault behaves much like koalaesce.getOrDefault, but only takes three
arguments: the base object, a default return value, and a string of links in the chain. It uses
the same '.'-separated behavior as getNamed:
let obj = {foo: {baz: 3}};
koalaesce.getNamedOrDefault(obj, 4, "foo.bar") === 4;Note: The same caveat about property names containing the '.' character applies to
getNamedOrDefault as to getNamed.
