@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.
122 lines (116 loc) • 7.79 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators')) :
typeof define === 'function' && define.amd ? define('@angular-extensions/model', ['exports', '@angular/core', 'rxjs', 'rxjs/operators'], factory) :
(factory((global['angular-extensions'] = global['angular-extensions'] || {}, global['angular-extensions'].model = {}),global.ng.core,global.rxjs,global.rxjs.operators));
}(this, (function (exports,i0,rxjs,operators) { 'use strict';
/**
* @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 rxjs.BehaviorSubject(initialData);
this.data$ = this._data.asObservable().pipe(operators.map(function (data) {
return immutable
? clone
? clone(data)
: JSON.parse(JSON.stringify(data))
: data;
}), sharedSubscription ? operators.shareReplay(1) : operators.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: i0.Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */ ModelFactory.ngInjectableDef = i0.defineInjectable({ factory: function ModelFactory_Factory() { return new ModelFactory(); }, token: ModelFactory, providedIn: "root" });
return ModelFactory;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.Model = Model;
exports.ModelFactory = ModelFactory;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1leHRlbnNpb25zLW1vZGVsLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQGFuZ3VsYXItZXh0ZW5zaW9ucy9tb2RlbC9tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbDxUPiB7XG4gIHByaXZhdGUgX2RhdGE6IEJlaGF2aW9yU3ViamVjdDxUPjtcblxuICBkYXRhJDogT2JzZXJ2YWJsZTxUPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbml0aWFsRGF0YTogYW55LFxuICAgIGltbXV0YWJsZTogYm9vbGVhbixcbiAgICBzaGFyZWRTdWJzY3JpcHRpb246IGJvb2xlYW4sXG4gICAgY2xvbmU/OiAoZGF0YTogVCkgPT4gVFxuICApIHtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdChpbml0aWFsRGF0YSk7XG4gICAgdGhpcy5kYXRhJCA9IHRoaXMuX2RhdGEuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGRhdGE6IFQpID0+XG4gICAgICAgICAgaW1tdXRhYmxlXG4gICAgICAgICAgICA/IGNsb25lXG4gICAgICAgICAgICAgID8gY2xvbmUoZGF0YSlcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgc2hhcmVkU3Vic2NyaXB0aW9uID8gc2hhcmVSZXBsYXkoMSkgOiBtYXAoKGRhdGE6IFQpID0+IGRhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldCgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0KGRhdGE6IFQpIHtcbiAgICB0aGlzLl9kYXRhLm5leHQoZGF0YSk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxGYWN0b3J5PFQ+IHtcbiAgY3JlYXRlKGluaXRpYWxEYXRhOiBUKTogTW9kZWw8VD4ge1xuICAgIHJldHVybiBuZXcgTW9kZWw8VD4oaW5pdGlhbERhdGEsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIGNyZWF0ZU11dGFibGUoaW5pdGlhbERhdGE6IFQpOiBNb2RlbDxUPiB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIGNyZWF0ZU11dGFibGVXaXRoU2hhcmVkU3Vic2NyaXB0aW9uKGluaXRpYWxEYXRhOiBUKTogTW9kZWw8VD4ge1xuICAgIHJldHVybiBuZXcgTW9kZWw8VD4oaW5pdGlhbERhdGEsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIGNyZWF0ZVdpdGhDdXN0b21DbG9uZShpbml0aWFsRGF0YTogVCwgY2xvbmU6IChkYXRhOiBUKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbDxUPihpbml0aWFsRGF0YSwgdHJ1ZSwgZmFsc2UsIGNsb25lKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkJlaGF2aW9yU3ViamVjdCIsIm1hcCIsInNoYXJlUmVwbGF5IiwiSW5qZWN0YWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7QUFJQTs7UUFBQTtRQUtFLGVBQ0UsV0FBZ0IsRUFDaEIsU0FBa0IsRUFDbEIsa0JBQTJCLEVBQzNCLEtBQXNCO1lBRXRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSUEsb0JBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUN6Q0MsYUFBRyxDQUNELFVBQUMsSUFBTztnQkFDTixPQUFBLFNBQVM7c0JBQ0wsS0FBSzswQkFDSCxLQUFLLENBQUMsSUFBSSxDQUFDOzBCQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztzQkFDbEMsSUFBSTthQUFBLENBQ1gsRUFDRCxrQkFBa0IsR0FBR0MscUJBQVcsQ0FBQyxDQUFDLENBQUMsR0FBR0QsYUFBRyxDQUFDLFVBQUMsSUFBTyxJQUFLLE9BQUEsSUFBSSxHQUFBLENBQUMsQ0FDN0QsQ0FBQztTQUNIOzs7O1FBRUQsbUJBQUc7OztZQUFIO2dCQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUM5Qjs7Ozs7UUFFRCxtQkFBRzs7OztZQUFILFVBQUksSUFBTztnQkFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtvQkFuQ0g7UUFvQ0MsQ0FBQTs7Ozs7Ozs7Ozs7UUFNQyw2QkFBTTs7OztZQUFOLFVBQU8sV0FBYztnQkFDbkIsT0FBTyxJQUFJLEtBQUssQ0FBSSxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQy9DOzs7OztRQUVELG9DQUFhOzs7O1lBQWIsVUFBYyxXQUFjO2dCQUMxQixPQUFPLElBQUksS0FBSyxDQUFJLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEQ7Ozs7O1FBRUQsMERBQW1DOzs7O1lBQW5DLFVBQW9DLFdBQWM7Z0JBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUksV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQzs7Ozs7O1FBRUQsNENBQXFCOzs7OztZQUFyQixVQUFzQixXQUFjLEVBQUUsS0FBcUI7Z0JBQ3pELE9BQU8sSUFBSSxLQUFLLENBQUksV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEQ7O29CQWxCRkUsYUFBVSxTQUFDO3dCQUNWLFVBQVUsRUFBRSxNQUFNO3FCQUNuQjs7OzJCQXhDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==