UNPKG

@angular-extensions/model

Version:

Angular Model - Simple state management with minimalistic API, one way data flow, multiple model support and immutable data exposed as RxJS Observable.

129 lines (128 loc) 7.39 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { map, shareReplay } from 'rxjs/operators'; import * as i0 from "@angular/core"; /** * @template T */ var /** * @template T */ Model = /** @class */ (function () { function Model(initialData, immutable, sharedSubscription, clone) { this._data = new BehaviorSubject(initialData); this.data$ = this._data.asObservable().pipe(map(function (data) { return immutable ? clone ? clone(data) : JSON.parse(JSON.stringify(data)) : data; }), sharedSubscription ? shareReplay(1) : map(function (data) { return data; })); } /** * @return {?} */ Model.prototype.get = /** * @return {?} */ function () { return this._data.getValue(); }; /** * @param {?} data * @return {?} */ Model.prototype.set = /** * @param {?} data * @return {?} */ function (data) { this._data.next(data); }; return Model; }()); /** * @template T */ export { Model }; function Model_tsickle_Closure_declarations() { /** @type {?} */ Model.prototype._data; /** @type {?} */ Model.prototype.data$; } /** * @template T */ var ModelFactory = /** @class */ (function () { function ModelFactory() { } /** * @param {?} initialData * @return {?} */ ModelFactory.prototype.create = /** * @param {?} initialData * @return {?} */ function (initialData) { return new Model(initialData, true, false); }; /** * @param {?} initialData * @return {?} */ ModelFactory.prototype.createMutable = /** * @param {?} initialData * @return {?} */ function (initialData) { return new Model(initialData, false, false); }; /** * @param {?} initialData * @return {?} */ ModelFactory.prototype.createMutableWithSharedSubscription = /** * @param {?} initialData * @return {?} */ function (initialData) { return new Model(initialData, false, true); }; /** * @param {?} initialData * @param {?} clone * @return {?} */ ModelFactory.prototype.createWithCustomClone = /** * @param {?} initialData * @param {?} clone * @return {?} */ function (initialData, clone) { return new Model(initialData, true, false, clone); }; ModelFactory.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ ModelFactory.ngInjectableDef = i0.defineInjectable({ factory: function ModelFactory_Factory() { return new ModelFactory(); }, token: ModelFactory, providedIn: "root" }); return ModelFactory; }()); export { ModelFactory }; function ModelFactory_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ModelFactory.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ModelFactory.ctorParameters; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYW5ndWxhci1leHRlbnNpb25zL21vZGVsLyIsInNvdXJjZXMiOlsibW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUVsRDs7O0FBQUE7SUFLRSxlQUNFLFdBQWdCLEVBQ2hCLFNBQWtCLEVBQ2xCLGtCQUEyQixFQUMzQixLQUFzQjtRQUV0QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3pDLEdBQUcsQ0FDRCxVQUFDLElBQU87WUFDTixPQUFBLFNBQVM7Z0JBQ1AsQ0FBQyxDQUFDLEtBQUs7b0JBQ0wsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLElBQUk7UUFKUixDQUlRLENBQ1gsRUFDRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFPLElBQUssT0FBQSxJQUFJLEVBQUosQ0FBSSxDQUFDLENBQzdELENBQUM7S0FDSDs7OztJQUVELG1CQUFHOzs7SUFBSDtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUM5Qjs7Ozs7SUFFRCxtQkFBRzs7OztJQUFILFVBQUksSUFBTztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZCO2dCQW5DSDtJQW9DQyxDQUFBOzs7O0FBaENELGlCQWdDQzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFNQyw2QkFBTTs7OztJQUFOLFVBQU8sV0FBYztRQUNuQixPQUFPLElBQUksS0FBSyxDQUFJLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDL0M7Ozs7O0lBRUQsb0NBQWE7Ozs7SUFBYixVQUFjLFdBQWM7UUFDMUIsT0FBTyxJQUFJLEtBQUssQ0FBSSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2hEOzs7OztJQUVELDBEQUFtQzs7OztJQUFuQyxVQUFvQyxXQUFjO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUksV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQzs7Ozs7O0lBRUQsNENBQXFCOzs7OztJQUFyQixVQUFzQixXQUFjLEVBQUUsS0FBcUI7UUFDekQsT0FBTyxJQUFJLEtBQUssQ0FBSSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN0RDs7Z0JBbEJGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozt1QkF4Q0Q7O1NBeUNhLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbDxUPiB7XG4gIHByaXZhdGUgX2RhdGE6IEJlaGF2aW9yU3ViamVjdDxUPjtcblxuICBkYXRhJDogT2JzZXJ2YWJsZTxUPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbml0aWFsRGF0YTogYW55LFxuICAgIGltbXV0YWJsZTogYm9vbGVhbixcbiAgICBzaGFyZWRTdWJzY3JpcHRpb246IGJvb2xlYW4sXG4gICAgY2xvbmU/OiAoZGF0YTogVCkgPT4gVFxuICApIHtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0aWFsRGF0YSk7XG4gICAgdGhpcy5kYXRhJCA9IHRoaXMuX2RhdGEuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGRhdGE6IFQpID0+XG4gICAgICAgICAgaW1tdXRhYmxlXG4gICAgICAgICAgICA/IGNsb25lXG4gICAgICAgICAgICAgID8gY2xvbmUoZGF0YSlcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgc2hhcmVkU3Vic2NyaXB0aW9uID8gc2hhcmVSZXBsYXkoMSkgOiBtYXAoKGRhdGE6IFQpID0+IGRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldCgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0KGRhdGE6IFQpIHtcbiAgICB0aGlzLl9kYXRhLm5leHQoZGF0YSk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxGYWN0b3J5PFQ+IHtcbiAgY3JlYXRlKGluaXRpYWxEYXRhOiBUKTogTW9kZWw8VD4ge1xuICAgIHJldHVybiBuZXcgTW9kZWw8VD4oaW5pdGlhbERhdGEsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIGNyZWF0ZU11dGFibGUoaW5pdGlhbERhdGE6IFQpOiBNb2RlbDxUPiB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIGNyZWF0ZU11dGFibGVXaXRoU2hhcmVkU3Vic2NyaXB0aW9uKGluaXRpYWxEYXRhOiBUKTogTW9kZWw8VD4ge1xuICAgIHJldHVybiBuZXcgTW9kZWw8VD4oaW5pdGlhbERhdGEsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIGNyZWF0ZVdpdGhDdXN0b21DbG9uZShpbml0aWFsRGF0YTogVCwgY2xvbmU6IChkYXRhOiBUKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgdHJ1ZSwgZmFsc2UsIGNsb25lKTtcbiAgfVxufVxuIl19