@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
JavaScript
/**
* @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