UNPKG

@datorama/akita

Version:

State Management Tailored-Made for JS Applications

275 lines 14.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { queryConfigKey } from './queryConfig'; import { isString } from './isString'; import { isFunction } from './isFunction'; import { isDev } from './env'; import { __queries__ } from './stores'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { compareKeys } from './compareKeys'; /** * @template S */ var /** * @template S */ Query = /** @class */ (function () { function Query(store) { this.store = store; this.__store__ = store; if (isDev()) { // @internal __queries__[store.storeName] = this; } } /** * @template R * @param {?=} project * @return {?} */ Query.prototype.select = /** * @template R * @param {?=} project * @return {?} */ function (project) { /** @type {?} */ var mapFn; if (isFunction(project)) { mapFn = project; } else if (isString(project)) { mapFn = (/** * @param {?} state * @return {?} */ function (state) { return state[project]; }); } else if (Array.isArray(project)) { return (/** @type {?} */ (this.store ._select((/** * @param {?} state * @return {?} */ function (state) { return state; })) .pipe(distinctUntilChanged(compareKeys(project)), map((/** * @param {?} state * @return {?} */ function (state) { if (isFunction(project[0])) { return ((/** @type {?} */ (project))).map((/** * @param {?} func * @return {?} */ function (func) { return func(state); })); } return ((/** @type {?} */ (project))).reduce((/** * @param {?} acc * @param {?} k * @return {?} */ function (acc, k) { acc[(/** @type {?} */ (k))] = state[k]; return acc; }), {}); }))))); } else { mapFn = (/** * @param {?} state * @return {?} */ function (state) { return state; }); } return this.store._select(mapFn); }; /** * Select the loading state * * @example * * this.query.selectLoading().subscribe(isLoading => {}) */ /** * Select the loading state * * \@example * * this.query.selectLoading().subscribe(isLoading => {}) * @return {?} */ Query.prototype.selectLoading = /** * Select the loading state * * \@example * * this.query.selectLoading().subscribe(isLoading => {}) * @return {?} */ function () { return this.select((/** * @param {?} state * @return {?} */ function (state) { return ((/** @type {?} */ (state))).loading; })); }; /** * Select the error state * * @example * * this.query.selectError().subscribe(error => {}) */ /** * Select the error state * * \@example * * this.query.selectError().subscribe(error => {}) * @template ErrorType * @return {?} */ Query.prototype.selectError = /** * Select the error state * * \@example * * this.query.selectError().subscribe(error => {}) * @template ErrorType * @return {?} */ function () { return this.select((/** * @param {?} state * @return {?} */ function (state) { return ((/** @type {?} */ (state))).error; })); }; /** * Get the store's value * * @example * * this.query.getValue() * */ /** * Get the store's value * * \@example * * this.query.getValue() * * @return {?} */ Query.prototype.getValue = /** * Get the store's value * * \@example * * this.query.getValue() * * @return {?} */ function () { return this.store._value(); }; /** * Select the cache state * * @example * * this.query.selectHasCache().pipe( * switchMap(hasCache => { * return hasCache ? of() : http().pipe(res => store.set(res)) * }) * ) */ /** * Select the cache state * * \@example * * this.query.selectHasCache().pipe( * switchMap(hasCache => { * return hasCache ? of() : http().pipe(res => store.set(res)) * }) * ) * @return {?} */ Query.prototype.selectHasCache = /** * Select the cache state * * \@example * * this.query.selectHasCache().pipe( * switchMap(hasCache => { * return hasCache ? of() : http().pipe(res => store.set(res)) * }) * ) * @return {?} */ function () { return this.store._cache().asObservable(); }; /** * Whether we've cached data * * @example * * this.query.getHasCache() * */ /** * Whether we've cached data * * \@example * * this.query.getHasCache() * * @return {?} */ Query.prototype.getHasCache = /** * Whether we've cached data * * \@example * * this.query.getHasCache() * * @return {?} */ function () { return this.store._cache().value; }; Object.defineProperty(Query.prototype, "config", { // @internal get: // @internal /** * @return {?} */ function () { return this.constructor[queryConfigKey]; }, enumerable: true, configurable: true }); return Query; }()); /** * @template S */ export { Query }; if (false) { /** @type {?} */ Query.prototype.__store__; /** * @type {?} * @protected */ Query.prototype.store; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFHNUM7Ozs7SUFJRSxlQUFzQixLQUFlO1FBQWYsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLEtBQUssRUFBRSxFQUFFO1lBQ1gsWUFBWTtZQUNaLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQzs7Ozs7O0lBbUJELHNCQUFNOzs7OztJQUFOLFVBQVUsT0FBMkU7O1lBQy9FLEtBQUs7UUFDVCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixLQUFLLEdBQUcsT0FBTyxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsS0FBSzs7OztZQUFHLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFkLENBQWMsQ0FBQSxDQUFDO1NBQ2pDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sbUJBQUEsSUFBSSxDQUFDLEtBQUs7aUJBQ2QsT0FBTzs7OztZQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxFQUFMLENBQUssRUFBQztpQkFDdkIsSUFBSSxDQUNILG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUMxQyxHQUFHOzs7O1lBQUMsVUFBQSxLQUFLO2dCQUNQLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxQixPQUFPLENBQUMsbUJBQUEsT0FBTyxFQUF5QixDQUFDLENBQUMsR0FBRzs7OztvQkFBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBWCxDQUFXLEVBQUMsQ0FBQztpQkFDcEU7Z0JBRUQsT0FBTyxDQUFDLG1CQUFBLE9BQU8sRUFBZSxDQUFDLENBQUMsTUFBTTs7Ozs7Z0JBQUMsVUFBQyxHQUFHLEVBQUUsQ0FBQztvQkFDNUMsR0FBRyxDQUFDLG1CQUFBLENBQUMsRUFBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUM7WUFDVCxDQUFDLEVBQUMsQ0FDSCxFQUFPLENBQUM7U0FDWjthQUFNO1lBQ0wsS0FBSzs7OztZQUFHLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxFQUFMLENBQUssQ0FBQSxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HOzs7Ozs7Ozs7SUFDSCw2QkFBYTs7Ozs7Ozs7SUFBYjtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsbUJBQUEsS0FBSyxFQUE0QixDQUFDLENBQUMsT0FBTyxFQUEzQyxDQUEyQyxFQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7T0FNRzs7Ozs7Ozs7OztJQUNILDJCQUFXOzs7Ozs7Ozs7SUFBWDtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU07Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsbUJBQUEsS0FBSyxFQUE0QixDQUFDLENBQUMsS0FBSyxFQUF6QyxDQUF5QyxFQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7Ozs7Ozs7Ozs7SUFDSCx3QkFBUTs7Ozs7Ozs7O0lBQVI7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7Ozs7Ozs7Ozs7Ozs7SUFDSCw4QkFBYzs7Ozs7Ozs7Ozs7O0lBQWQ7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7Ozs7Ozs7Ozs7SUFDSCwyQkFBVzs7Ozs7Ozs7O0lBQVg7UUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFHRCxzQkFBSSx5QkFBTTtRQURWLFlBQVk7Ozs7OztRQUNaO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7OztPQUFBO0lBQ0gsWUFBQztBQUFELENBQUMsQUEzSEQsSUEySEM7Ozs7Ozs7SUF6SEMsMEJBQW9COzs7OztJQUVSLHNCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBxdWVyeUNvbmZpZ0tleSwgUXVlcnlDb25maWdPcHRpb25zIH0gZnJvbSAnLi9xdWVyeUNvbmZpZyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4vaXNTdHJpbmcnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJy4vZW52JztcbmltcG9ydCB7IF9fcXVlcmllc19fIH0gZnJvbSAnLi9zdG9yZXMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvbXBhcmVLZXlzIH0gZnJvbSAnLi9jb21wYXJlS2V5cyc7XG5pbXBvcnQgeyBSZXR1cm5UeXBlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnk8Uz4ge1xuICAvLyBAaW50ZXJuYWxcbiAgX19zdG9yZV9fOiBTdG9yZTxTPjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPFM+KSB7XG4gICAgdGhpcy5fX3N0b3JlX18gPSBzdG9yZTtcbiAgICBpZiAoaXNEZXYoKSkge1xuICAgICAgLy8gQGludGVybmFsXG4gICAgICBfX3F1ZXJpZXNfX1tzdG9yZS5zdG9yZU5hbWVdID0gdGhpcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgc2xpY2UgZnJvbSB0aGUgc3RvcmVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5zZWxlY3QoKVxuICAgKiB0aGlzLnF1ZXJ5LnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5lbnRpdGllcylcbiAgICogdGhpcy5xdWVyeS5zZWxlY3QoJ3Rva2VuJyk7XG4gICAqIHRoaXMucXVlcnkuc2VsZWN0KFsnbmFtZScsICdlbWFpbCddKVxuICAgKiB0aGlzLnF1ZXJ5LnNlbGVjdChbc3RhdGUgPT4gc3RhdGUubmFtZSwgc3RhdGUgPT4gc3RhdGUuYWdlXSlcbiAgICpcbiAgICovXG4gIHNlbGVjdDxLIGV4dGVuZHMga2V5b2YgUz4oa2V5OiBLKTogT2JzZXJ2YWJsZTxTW0tdPjtcbiAgc2VsZWN0PFI+KHByb2plY3Q6IChzdG9yZTogUykgPT4gUik6IE9ic2VydmFibGU8Uj47XG4gIHNlbGVjdDxLIGV4dGVuZHMga2V5b2YgUz4oc3RhdGVLZXlzOiBLW10pOiBPYnNlcnZhYmxlPFBpY2s8UywgSz4+O1xuICBzZWxlY3Q8UiBleHRlbmRzIFsoc3RhdGU6IFMpID0+IGFueV0gfCBBcnJheTwoc3RhdGU6IFMpID0+IGFueT4+KHNlbGVjdG9yRm5zOiBSKTogT2JzZXJ2YWJsZTxSZXR1cm5UeXBlczxSPj47XG4gIHNlbGVjdCgpOiBPYnNlcnZhYmxlPFM+O1xuICBzZWxlY3Q8Uj4ocHJvamVjdD86ICgoc3RvcmU6IFMpID0+IFIpIHwga2V5b2YgUyB8IChrZXlvZiBTKVtdIHwgKChzdGF0ZTogUykgPT4gYW55KVtdKTogT2JzZXJ2YWJsZTxSIHwgUyB8IGFueVtdPiB7XG4gICAgbGV0IG1hcEZuO1xuICAgIGlmIChpc0Z1bmN0aW9uKHByb2plY3QpKSB7XG4gICAgICBtYXBGbiA9IHByb2plY3Q7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhwcm9qZWN0KSkge1xuICAgICAgbWFwRm4gPSBzdGF0ZSA9PiBzdGF0ZVtwcm9qZWN0XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvamVjdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlXG4gICAgICAgIC5fc2VsZWN0KHN0YXRlID0+IHN0YXRlKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJlS2V5cyhwcm9qZWN0KSksXG4gICAgICAgICAgbWFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb2plY3RbMF0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiAocHJvamVjdCBhcyAoKHN0YXRlOiBTKSA9PiBhbnkpW10pLm1hcChmdW5jID0+IGZ1bmMoc3RhdGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChwcm9qZWN0IGFzIChrZXlvZiBTKVtdKS5yZWR1Y2UoKGFjYywgaykgPT4ge1xuICAgICAgICAgICAgICBhY2NbayBhcyBhbnldID0gc3RhdGVba107XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSBhcyBhbnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcEZuID0gc3RhdGUgPT4gc3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuX3NlbGVjdChtYXBGbik7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IHRoZSBsb2FkaW5nIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0TG9hZGluZygpLnN1YnNjcmliZShpc0xvYWRpbmcgPT4ge30pXG4gICAqL1xuICBzZWxlY3RMb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiAoc3RhdGUgYXMgUyAmIHsgbG9hZGluZzogYm9vbGVhbiB9KS5sb2FkaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGVycm9yIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0RXJyb3IoKS5zdWJzY3JpYmUoZXJyb3IgPT4ge30pXG4gICAqL1xuICBzZWxlY3RFcnJvcjxFcnJvclR5cGUgPSBhbnk+KCk6IE9ic2VydmFibGU8RXJyb3JUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IChzdGF0ZSBhcyBTICYgeyBlcnJvcjogRXJyb3JUeXBlIH0pLmVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JlJ3MgdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5nZXRWYWx1ZSgpXG4gICAqXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBTIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5fdmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGNhY2hlIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0SGFzQ2FjaGUoKS5waXBlKFxuICAgKiAgIHN3aXRjaE1hcChoYXNDYWNoZSA9PiB7XG4gICAqICAgICByZXR1cm4gaGFzQ2FjaGUgPyBvZigpIDogaHR0cCgpLnBpcGUocmVzID0+IHN0b3JlLnNldChyZXMpKVxuICAgKiAgIH0pXG4gICAqIClcbiAgICovXG4gIHNlbGVjdEhhc0NhY2hlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLl9jYWNoZSgpLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UndmUgY2FjaGVkIGRhdGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5nZXRIYXNDYWNoZSgpXG4gICAqXG4gICAqL1xuICBnZXRIYXNDYWNoZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5fY2FjaGUoKS52YWx1ZTtcbiAgfVxuXG4gIC8vIEBpbnRlcm5hbFxuICBnZXQgY29uZmlnKCk6IFF1ZXJ5Q29uZmlnT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3JbcXVlcnlDb25maWdLZXldO1xuICB9XG59XG4iXX0=