@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
JavaScript
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==