UNPKG

@simplux/angular

Version:

The Angular extension package of simplux. Provides a simple way to use simplux in Angular applications.

67 lines (62 loc) 12.4 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('rxjs/operators')) : typeof define === 'function' && define.amd ? define(['exports', 'rxjs', 'rxjs/operators'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@simplux/angular"] = {}, global.rxjs, global.rxjs.operators)); })(this, (function (exports, rxjs, operators) { 'use strict'; var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) to[j] = from[i]; return to; }; /** * Create a base which contains methods for interacting with a module. * This base class should be extended from an Angular service. * * For each mutation the service has a method to execute the mutation. * * For each selector the service has a method that returns an observable. * The observable immediately emits the result of the selector applied * to the module's current state when subscribed to. New values are * emitted whenever the state and the selector's result for that state * change. * * @param simpluxModule - the module to create the base class for * @param mutations - the mutations to add to the class * @param selectors - the selectors to add to the class * * @returns a base class that should be extended from an Angular service * * @public */ function createModuleServiceBaseClass(simpluxModule, mutations, selectors) { return /** @class */ (function () { function class_1() { this.getCurrentState = simpluxModule.state; this.selectState = function () { return observeState(simpluxModule); }; Object.assign(this, mutations); Object.assign(this, createObservableSelectors(simpluxModule, selectors)); } return class_1; }()); } function createObservableSelectors(simpluxModule, selectors) { var stateChanges$ = observeState(simpluxModule); return Object.keys(selectors).reduce(function (acc, selectorName) { var selector = selectors[selectorName]; acc[selectorName] = (function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return stateChanges$.pipe(operators.map(function (state) { return selector.withState.apply(selector, __spreadArray([state], args)); }), operators.distinctUntilChanged()); }); return acc; }, {}); } function observeState(simpluxModule) { return new rxjs.Observable(function (sub) { return simpluxModule.subscribeToStateChanges(function (state) { return sub.next(state); }); }); } exports.createModuleServiceBaseClass = createModuleServiceBaseClass; Object.defineProperty(exports, '__esModule', { value: true }); })); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGx1eC5hbmd1bGFyLmRldmVsb3BtZW50LmpzIiwic291cmNlcyI6WyJAc2ltcGx1eC9hbmd1bGFyL3NyYy9zZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcclxuICBJbW11dGFibGUsXHJcbiAgTXV0YXRpb25EZWZpbml0aW9ucyxcclxuICBTZWxlY3RvckRlZmluaXRpb25zLFxyXG4gIFNpbXBsdXhNb2R1bGUsXHJcbiAgU2ltcGx1eE11dGF0aW9ucyxcclxuICBTaW1wbHV4U2VsZWN0b3JzLFxyXG59IGZyb20gJ0BzaW1wbHV4L2NvcmUnXHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcblxyXG4vKipcclxuICogVGhlIGJhc2ljIG1ldGhvZHMgZm9yIGEgbW9kdWxlIHNlcnZpY2UuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlU2VydmljZVN0YXRlPFRTdGF0ZT4ge1xyXG4gIC8qKlxyXG4gICAqIEdldCBhIHNuYXBzaG90IG9mIHRoZSBtb2R1bGUncyBjdXJyZW50IHN0YXRlLiBUaGUgc25hcHNob3QgaXNcclxuICAgKiBpbW11dGFibGUgYW5kIHdpbGwgdGhlcmVmb3JlIG5vdCBiZSBjaGFuZ2VkIGV2ZW4gaWYgdGhlIG1vZHVsZVxyXG4gICAqIGlzIHVwZGF0ZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBtb2R1bGUncyBjdXJyZW50IHN0YXRlXHJcbiAgICovXHJcbiAgZ2V0Q3VycmVudFN0YXRlOiAoKSA9PiBUU3RhdGVcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFuIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcyBvZiB0aGUgbW9kdWxlLiBUaGUgb2JzZXJ2YWJsZVxyXG4gICAqIGVtaXRzIHRoZSBtb2R1bGUncyBjdXJyZW50IHN0YXRlIGltbWVkaWF0ZWx5IHdoZW4gc3Vic2NyaWJlZCB0by5cclxuICAgKiBBZnRlcndhcmRzIGl0IHdpbGwgZW1pdCBhIG5ldyB2YWx1ZSB3aGVuZXZlciB0aGUgbW9kdWxlIGdldHNcclxuICAgKiB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBtb2R1bGVcclxuICAgKi9cclxuICBzZWxlY3RTdGF0ZTogKCkgPT4gT2JzZXJ2YWJsZTxUU3RhdGU+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZSB0byB0cmFuc2Zvcm0gYSBzZWxlY3RvciBpbnRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zXHJcbiAqIGFuIG9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGVkIHZhbHVlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBPYnNlcnZhYmxlU2VsZWN0b3I8VFNlbGVjdG9yPiA9IFRTZWxlY3RvciBleHRlbmRzIChcclxuICAuLi5hcmdzOiBpbmZlciBUQXJnc1xyXG4pID0+IGluZmVyIFRSZXR1cm5cclxuICA/ICguLi5hcmdzOiBUQXJncykgPT4gT2JzZXJ2YWJsZTxUUmV0dXJuPlxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2Ygb2JzZXJ2YWJsZSBtb2R1bGUgc2VsZWN0b3JzLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNb2R1bGVTZXJ2aWNlU2VsZWN0b3JzPFxyXG4gIFRTdGF0ZSxcclxuICBUU2VsZWN0b3JzIGV4dGVuZHMgU2VsZWN0b3JEZWZpbml0aW9uczxUU3RhdGU+LFxyXG4gIFRTaW1wbHV4U2VsZWN0b3JzIGV4dGVuZHMgU2ltcGx1eFNlbGVjdG9yczxUU3RhdGUsIFRTZWxlY3RvcnM+XHJcbj4gPSB7XHJcbiAgW3NlbGVjdG9yTmFtZSBpbiBrZXlvZiBUU2ltcGx1eFNlbGVjdG9yc106IE9ic2VydmFibGVTZWxlY3RvcjxcclxuICAgIFRTaW1wbHV4U2VsZWN0b3JzW3NlbGVjdG9yTmFtZV1cclxuICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHNlcnZpY2UgZm9yIGludGVyYWN0aW5nIHdpdGggYSBtb2R1bGUuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIE1vZHVsZVNlcnZpY2U8XHJcbiAgVFN0YXRlLFxyXG4gIFRNdXRhdGlvbnMgZXh0ZW5kcyBNdXRhdGlvbkRlZmluaXRpb25zPFRTdGF0ZT4sXHJcbiAgVFNpbXBsdXhNdXRhdGlvbnMgZXh0ZW5kcyBTaW1wbHV4TXV0YXRpb25zPFRTdGF0ZSwgVE11dGF0aW9ucz4sXHJcbiAgVFNlbGVjdG9ycyBleHRlbmRzIFNlbGVjdG9yRGVmaW5pdGlvbnM8VFN0YXRlPixcclxuICBUU2ltcGx1eFNlbGVjdG9ycyBleHRlbmRzIFNpbXBsdXhTZWxlY3RvcnM8VFN0YXRlLCBUU2VsZWN0b3JzPlxyXG4+ID0gTW9kdWxlU2VydmljZVN0YXRlPFRTdGF0ZT4gJlxyXG4gIFRTaW1wbHV4TXV0YXRpb25zICZcclxuICBNb2R1bGVTZXJ2aWNlU2VsZWN0b3JzPFRTdGF0ZSwgVFNlbGVjdG9ycywgVFNpbXBsdXhTZWxlY3RvcnM+XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYmFzZSB3aGljaCBjb250YWlucyBtZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIGEgbW9kdWxlLlxyXG4gKiBUaGlzIGJhc2UgY2xhc3Mgc2hvdWxkIGJlIGV4dGVuZGVkIGZyb20gYW4gQW5ndWxhciBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBGb3IgZWFjaCBtdXRhdGlvbiB0aGUgc2VydmljZSBoYXMgYSBtZXRob2QgdG8gZXhlY3V0ZSB0aGUgbXV0YXRpb24uXHJcbiAqXHJcbiAqIEZvciBlYWNoIHNlbGVjdG9yIHRoZSBzZXJ2aWNlIGhhcyBhIG1ldGhvZCB0aGF0IHJldHVybnMgYW4gb2JzZXJ2YWJsZS5cclxuICogVGhlIG9ic2VydmFibGUgaW1tZWRpYXRlbHkgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgc2VsZWN0b3IgYXBwbGllZFxyXG4gKiB0byB0aGUgbW9kdWxlJ3MgY3VycmVudCBzdGF0ZSB3aGVuIHN1YnNjcmliZWQgdG8uIE5ldyB2YWx1ZXMgYXJlXHJcbiAqIGVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHN0YXRlIGFuZCB0aGUgc2VsZWN0b3IncyByZXN1bHQgZm9yIHRoYXQgc3RhdGVcclxuICogY2hhbmdlLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2ltcGx1eE1vZHVsZSAtIHRoZSBtb2R1bGUgdG8gY3JlYXRlIHRoZSBiYXNlIGNsYXNzIGZvclxyXG4gKiBAcGFyYW0gbXV0YXRpb25zIC0gdGhlIG11dGF0aW9ucyB0byBhZGQgdG8gdGhlIGNsYXNzXHJcbiAqIEBwYXJhbSBzZWxlY3RvcnMgLSB0aGUgc2VsZWN0b3JzIHRvIGFkZCB0byB0aGUgY2xhc3NcclxuICpcclxuICogQHJldHVybnMgYSBiYXNlIGNsYXNzIHRoYXQgc2hvdWxkIGJlIGV4dGVuZGVkIGZyb20gYW4gQW5ndWxhciBzZXJ2aWNlXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2R1bGVTZXJ2aWNlQmFzZUNsYXNzPFxyXG4gIFRTdGF0ZSxcclxuICBUTXV0YXRpb25zIGV4dGVuZHMgTXV0YXRpb25EZWZpbml0aW9uczxUU3RhdGU+LFxyXG4gIFRTaW1wbHV4TXV0YXRpb25zIGV4dGVuZHMgU2ltcGx1eE11dGF0aW9uczxUU3RhdGUsIFRNdXRhdGlvbnM+LFxyXG4gIFRTZWxlY3RvcnMgZXh0ZW5kcyBTZWxlY3RvckRlZmluaXRpb25zPFRTdGF0ZT4sXHJcbiAgVFNpbXBsdXhTZWxlY3RvcnMgZXh0ZW5kcyBTaW1wbHV4U2VsZWN0b3JzPFRTdGF0ZSwgVFNlbGVjdG9ycz5cclxuPihcclxuICBzaW1wbHV4TW9kdWxlOiBTaW1wbHV4TW9kdWxlPFRTdGF0ZT4sXHJcbiAgbXV0YXRpb25zOiBUU2ltcGx1eE11dGF0aW9ucyxcclxuICBzZWxlY3RvcnM6IFRTaW1wbHV4U2VsZWN0b3JzLFxyXG4pOiBuZXcgKCkgPT4gTW9kdWxlU2VydmljZTxcclxuICBUU3RhdGUsXHJcbiAgVE11dGF0aW9ucyxcclxuICBUU2ltcGx1eE11dGF0aW9ucyxcclxuICBUU2VsZWN0b3JzLFxyXG4gIFRTaW1wbHV4U2VsZWN0b3JzXHJcbj4ge1xyXG4gIHJldHVybiBjbGFzcyB7XHJcbiAgICBnZXRDdXJyZW50U3RhdGUgPSBzaW1wbHV4TW9kdWxlLnN0YXRlXHJcbiAgICBzZWxlY3RTdGF0ZSA9ICgpID0+IG9ic2VydmVTdGF0ZShzaW1wbHV4TW9kdWxlKVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG11dGF0aW9ucylcclxuICAgICAgT2JqZWN0LmFzc2lnbihcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGNyZWF0ZU9ic2VydmFibGVTZWxlY3RvcnM8VFN0YXRlLCBUU2VsZWN0b3JzLCBUU2ltcGx1eFNlbGVjdG9ycz4oXHJcbiAgICAgICAgICBzaW1wbHV4TW9kdWxlLFxyXG4gICAgICAgICAgc2VsZWN0b3JzLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9IGFzIGFueVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZhYmxlU2VsZWN0b3JzPFxyXG4gIFRTdGF0ZSxcclxuICBUU2VsZWN0b3JzIGV4dGVuZHMgU2VsZWN0b3JEZWZpbml0aW9uczxUU3RhdGU+LFxyXG4gIFRTaW1wbHV4U2VsZWN0b3JzIGV4dGVuZHMgU2ltcGx1eFNlbGVjdG9yczxUU3RhdGUsIFRTZWxlY3RvcnM+XHJcbj4oXHJcbiAgc2ltcGx1eE1vZHVsZTogU2ltcGx1eE1vZHVsZTxUU3RhdGU+LFxyXG4gIHNlbGVjdG9yczogVFNpbXBsdXhTZWxlY3RvcnMsXHJcbik6IE1vZHVsZVNlcnZpY2VTZWxlY3RvcnM8VFN0YXRlLCBUU2VsZWN0b3JzLCBUU2ltcGx1eFNlbGVjdG9ycz4ge1xyXG4gIGNvbnN0IHN0YXRlQ2hhbmdlcyQgPSBvYnNlcnZlU3RhdGUoc2ltcGx1eE1vZHVsZSlcclxuXHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNlbGVjdG9ycykucmVkdWNlKFxyXG4gICAgKGFjYywgc2VsZWN0b3JOYW1lOiBrZXlvZiBUU2VsZWN0b3JzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gc2VsZWN0b3JzW3NlbGVjdG9yTmFtZV1cclxuICAgICAgYWNjW3NlbGVjdG9yTmFtZV0gPSAoKC4uLmFyZ3M6IGFueVtdKSA9PlxyXG4gICAgICAgIHN0YXRlQ2hhbmdlcyQucGlwZShcclxuICAgICAgICAgIG1hcCgoc3RhdGUpID0+IHNlbGVjdG9yLndpdGhTdGF0ZShzdGF0ZSwgLi4uYXJncykpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICApKSBhcyBhbnlcclxuICAgICAgcmV0dXJuIGFjY1xyXG4gICAgfSxcclxuICAgIHt9IGFzIE1vZHVsZVNlcnZpY2VTZWxlY3RvcnM8VFN0YXRlLCBUU2VsZWN0b3JzLCBUU2ltcGx1eFNlbGVjdG9ycz4sXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBvYnNlcnZlU3RhdGU8VFN0YXRlPihzaW1wbHV4TW9kdWxlOiBTaW1wbHV4TW9kdWxlPFRTdGF0ZT4pIHtcclxuICByZXR1cm4gbmV3IE9ic2VydmFibGU8SW1tdXRhYmxlPFRTdGF0ZT4+KChzdWIpID0+XHJcbiAgICBzaW1wbHV4TW9kdWxlLnN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKChzdGF0ZSkgPT4gc3ViLm5leHQoc3RhdGUpKSxcclxuICApXHJcbn1cclxuIl0sIm5hbWVzIjpbIk9ic2VydmFibGUiLCJtYXAiLCJkaXN0aW5jdFVudGlsQ2hhbmdlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUErRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFtQkE7SUFDQSxTQUFnQiw0QkFBNEIsQ0FPMUMsYUFBb0MsRUFDcEMsU0FBNEIsRUFDNUIsU0FBNEIsRUFUOUI7SUFpQkEsSUFBRSxzQkFBRixZQUFBO0lBSUEsUUFBSSxTQUFKLE9BQUEsR0FBQTtJQUhBLFlBQUksSUFBSixDQUFBLGVBQW1CLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQTtJQUN6QyxZQUFJLElBQUosQ0FBQSxXQUFlLEdBQUcsWUFBbEIsRUFBd0IsT0FBQSxZQUFZLENBQUMsYUFBYSxDQUFDLENBQW5ELEVBQW1ELENBQUE7SUFHbkQsWUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNwQyxZQUFNLE1BQU0sQ0FBQyxNQUFNLENBQ1gsSUFBSSxFQUNKLHlCQUF5QixDQUN2QixhQUFhLEVBQ2IsU0FBUyxDQUNWLENBQ0YsQ0FBQTtJQUNQLFNBQUs7SUFDTCxRQUFBLE9BQUEsT0FBVSxDQUFWO0lBQUEsS0FBVSxFQUFWLEVBQVU7SUFDVixDQUFDO0lBRUQsU0FBUyx5QkFBeUIsQ0FLaEMsYUFBb0MsRUFDcEMsU0FBNEIsRUFOOUI7SUFRQSxJQUFFLElBQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUVuRCxJQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQ2xDLFVBQUMsR0FBRyxFQUFFLFlBQThCLEVBRHhDO0lBRUEsUUFBTSxJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDOUMsUUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksWUFBM0I7SUFBQSxZQUE0QixJQUE1QixJQUFBLEdBQUEsRUFBQSxDQUEwQztJQUExQyxZQUFBLEtBQTRCLElBQTVCLEVBQUEsR0FBQSxDQUEwQyxFQUFkLEVBQTVCLEdBQUEsU0FBQSxDQUFBLE1BQTBDLEVBQWQsRUFBNUIsRUFBMEMsRUFBMUM7SUFBQSxnQkFBNEIsSUFBNUIsQ0FBQSxFQUFBLENBQUEsR0FBQSxTQUFBLENBQUEsRUFBQSxDQUFBLENBQTBDOztJQUMxQyxZQUFRLE9BQUEsYUFBYSxDQUFDLElBQUksQ0FDaEJDLGFBQUcsQ0FBQyxVQUFDLEtBQUssRUFEcEIsRUFDeUIsT0FBQSxRQUFRLENBQUMsU0FBUyxDQUQzQyxLQUFBLENBQ3lCLFFBQVEsRUFEakMsYUFBQSxDQUFBLENBQzRDLEtBQUssQ0FEakQsRUFDc0QsSUFBSSxDQUQxRCxDQUFBLENBQUEsRUFDMkQsQ0FBQyxFQUNsREMsOEJBQW9CLEVBQUUsQ0FDdkIsQ0FIVDtJQUFBLFNBR1MsQ0FBUSxDQUFBO0lBQ2pCLFFBQU0sT0FBTyxHQUFHLENBQUE7SUFDaEIsS0FBSyxFQUNELEVBQW1FLENBQ3BFLENBQUE7SUFDSCxDQUFDO0lBRUQsU0FBUyxZQUFZLENBQVMsYUFBb0MsRUFBbEU7SUFDQSxJQUFFLE9BQU8sSUFBSUYsZUFBVSxDQUFvQixVQUFDLEdBQUcsRUFBL0MsRUFDSSxPQUFBLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFDLEtBQUssRUFEaEQsRUFDcUQsT0FBQSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQURwRSxFQUNvRSxDQUFDLENBRHJFLEVBQ3FFLENBQ2xFLENBQUE7SUFDSDs7Ozs7Ozs7OzsifQ==