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.

116 lines (112 loc) 6.62 kB
import { Injectable, defineInjectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; import { map, shareReplay } from 'rxjs/operators'; /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ /** * @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 */ 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 = defineInjectable({ factory: function ModelFactory_Factory() { return new ModelFactory(); }, token: ModelFactory, providedIn: "root" }); return ModelFactory; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export { Model, ModelFactory }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1leHRlbnNpb25zLW1vZGVsLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9AYW5ndWxhci1leHRlbnNpb25zL21vZGVsL21vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsPFQ+IHtcbiAgcHJpdmF0ZSBfZGF0YTogQmVoYXZpb3JTdWJqZWN0PFQ+O1xuXG4gIGRhdGEkOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxEYXRhOiBhbnksXG4gICAgaW1tdXRhYmxlOiBib29sZWFuLFxuICAgIHNoYXJlZFN1YnNjcmlwdGlvbjogYm9vbGVhbixcbiAgICBjbG9uZT86IChkYXRhOiBUKSA9PiBUXG4gICkge1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGluaXRpYWxEYXRhKTtcbiAgICB0aGlzLmRhdGEkID0gdGhpcy5fZGF0YS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoZGF0YTogVCkgPT5cbiAgICAgICAgICBpbW11dGFibGVcbiAgICAgICAgICAgID8gY2xvbmVcbiAgICAgICAgICAgICAgPyBjbG9uZShkYXRhKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBzaGFyZWRTdWJzY3JpcHRpb24gPyBzaGFyZVJlcGxheSgxKSA6IG1hcCgoZGF0YTogVCkgPT4gZGF0YSlcbiAgICApO1xuICB9XG5cbiAgZ2V0KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQoZGF0YTogVCkge1xuICAgIHRoaXMuX2RhdGEubmV4dChkYXRhKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZhY3Rvcnk8VD4ge1xuICBjcmVhdGUoaW5pdGlhbERhdGE6IFQpOiBNb2RlbDxUPiB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgdHJ1ZSwgZmFsc2UpO1xuICB9XG5cbiAgY3JlYXRlTXV0YWJsZShpbml0aWFsRGF0YTogVCk6IE1vZGVsPFQ+IHtcbiAgICByZXR1cm4gbmV3IE1vZGVsPFQ+KGluaXRpYWxEYXRhLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgY3JlYXRlTXV0YWJsZVdpdGhTaGFyZWRTdWJzY3JpcHRpb24oaW5pdGlhbERhdGE6IFQpOiBNb2RlbDxUPiB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgY3JlYXRlV2l0aEN1c3RvbUNsb25lKGluaXRpYWxEYXRhOiBULCBjbG9uZTogKGRhdGE6IFQpID0+IFQpIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsPFQ+KGluaXRpYWxEYXRhLCB0cnVlLCBmYWxzZSwgY2xvbmUpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7O0FBSUE7OztBQUFBO0lBS0UsZUFDRSxXQUFnQixFQUNoQixTQUFrQixFQUNsQixrQkFBMkIsRUFDM0IsS0FBc0I7UUFFdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQ0QsVUFBQyxJQUFPO1lBQ04sT0FBQSxTQUFTO2tCQUNMLEtBQUs7c0JBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQztzQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7a0JBQ2xDLElBQUk7U0FBQSxDQUNYLEVBQ0Qsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFDLElBQU8sSUFBSyxPQUFBLElBQUksR0FBQSxDQUFDLENBQzdELENBQUM7S0FDSDs7OztJQUVELG1CQUFHOzs7SUFBSDtRQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUM5Qjs7Ozs7SUFFRCxtQkFBRzs7OztJQUFILFVBQUksSUFBTztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3ZCO2dCQW5DSDtJQW9DQyxDQUFBOzs7Ozs7Ozs7OztJQU1DLDZCQUFNOzs7O0lBQU4sVUFBTyxXQUFjO1FBQ25CLE9BQU8sSUFBSSxLQUFLLENBQUksV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMvQzs7Ozs7SUFFRCxvQ0FBYTs7OztJQUFiLFVBQWMsV0FBYztRQUMxQixPQUFPLElBQUksS0FBSyxDQUFJLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEQ7Ozs7O0lBRUQsMERBQW1DOzs7O0lBQW5DLFVBQW9DLFdBQWM7UUFDaEQsT0FBTyxJQUFJLEtBQUssQ0FBSSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9DOzs7Ozs7SUFFRCw0Q0FBcUI7Ozs7O0lBQXJCLFVBQXNCLFdBQWMsRUFBRSxLQUFxQjtRQUN6RCxPQUFPLElBQUksS0FBSyxDQUFJLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3REOztnQkFsQkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7O3VCQXhDRDs7Ozs7Ozs7OzsifQ==