typedux
Version:
Slightly adjusted Redux (awesome by default) for TS
47 lines • 1.67 kB
JavaScript
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.selector = void 0;
/**
* Optional chaining with default values. To inspect a property value in
* a tree-like structure, invoke it as a function, optionally passing a default value.
*
* @example
* // Given:
* const x = oc<T>({
* a: 'hello',
* b: { d: 'world' },
* c: [-100, 200, -300],
* });
*
* // Then:
* x.a() === 'hello'
* x.b.d() === 'world'
* x.c[0]() === -100
* x.c[100]() === undefined
* x.c[100](1234) === 1234
* x.c.map((e) => e()) === [-100, 200, -300]
* x.d.e() === undefined
* x.d.e('optional default value') === 'optional default value'
* (x as any).y.z.a.b.c.d.e.f.g.h.i.j.k() === undefined
*/
//export declare function oc<T>(data?: T): SelectorChainType<T>;
function selector(data) {
return new Proxy((function (defaultValue) { return (data == null ? defaultValue : data); }), {
get: function (target, key) {
var obj = target();
return selector(typeof obj === "object" ? obj[key] : undefined);
}
});
}
exports.selector = selector;
});
//# sourceMappingURL=SelectorBuilder.js.map