@datorama/akita
Version:
State Management Tailored-Made for JS Applications
275 lines • 14.4 kB
JavaScript
/**
* @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=