@datorama/akita
Version:
State Management Tailored-Made for JS Applications
171 lines • 11.8 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
*/
export class Query {
/**
* @param {?} store
*/
constructor(store) {
this.store = store;
this.__store__ = store;
if (isDev()) {
// @internal
__queries__[store.storeName] = this;
}
}
/**
* @template R
* @param {?=} project
* @return {?}
*/
select(project) {
/** @type {?} */
let mapFn;
if (isFunction(project)) {
mapFn = project;
}
else if (isString(project)) {
mapFn = (/**
* @param {?} state
* @return {?}
*/
state => state[project]);
}
else if (Array.isArray(project)) {
return (/** @type {?} */ (this.store
._select((/**
* @param {?} state
* @return {?}
*/
state => state))
.pipe(distinctUntilChanged(compareKeys(project)), map((/**
* @param {?} state
* @return {?}
*/
state => {
if (isFunction(project[0])) {
return ((/** @type {?} */ (project))).map((/**
* @param {?} func
* @return {?}
*/
func => func(state)));
}
return ((/** @type {?} */ (project))).reduce((/**
* @param {?} acc
* @param {?} k
* @return {?}
*/
(acc, k) => {
acc[(/** @type {?} */ (k))] = state[k];
return acc;
}), {});
})))));
}
else {
mapFn = (/**
* @param {?} state
* @return {?}
*/
state => state);
}
return this.store._select(mapFn);
}
/**
* Select the loading state
*
* \@example
*
* this.query.selectLoading().subscribe(isLoading => {})
* @return {?}
*/
selectLoading() {
return this.select((/**
* @param {?} state
* @return {?}
*/
state => ((/** @type {?} */ (state))).loading));
}
/**
* Select the error state
*
* \@example
*
* this.query.selectError().subscribe(error => {})
* @template ErrorType
* @return {?}
*/
selectError() {
return this.select((/**
* @param {?} state
* @return {?}
*/
state => ((/** @type {?} */ (state))).error));
}
/**
* Get the store's value
*
* \@example
*
* this.query.getValue()
*
* @return {?}
*/
getValue() {
return this.store._value();
}
/**
* Select the cache state
*
* \@example
*
* this.query.selectHasCache().pipe(
* switchMap(hasCache => {
* return hasCache ? of() : http().pipe(res => store.set(res))
* })
* )
* @return {?}
*/
selectHasCache() {
return this.store._cache().asObservable();
}
/**
* Whether we've cached data
*
* \@example
*
* this.query.getHasCache()
*
* @return {?}
*/
getHasCache() {
return this.store._cache().value;
}
// @internal
/**
* @return {?}
*/
get config() {
return this.constructor[queryConfigKey];
}
}
if (false) {
/** @type {?} */
Query.prototype.__store__;
/**
* @type {?}
* @protected
*/
Query.prototype.store;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFHNUMsTUFBTSxPQUFPLEtBQUs7Ozs7SUFJaEIsWUFBc0IsS0FBZTtRQUFmLFVBQUssR0FBTCxLQUFLLENBQVU7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNYLFlBQVk7WUFDWixXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNyQztJQUNILENBQUM7Ozs7OztJQW1CRCxNQUFNLENBQUksT0FBMkU7O1lBQy9FLEtBQUs7UUFDVCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixLQUFLLEdBQUcsT0FBTyxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsS0FBSzs7OztZQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUM7U0FDakM7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsT0FBTyxtQkFBQSxJQUFJLENBQUMsS0FBSztpQkFDZCxPQUFPOzs7O1lBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUM7aUJBQ3ZCLElBQUksQ0FDSCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDMUMsR0FBRzs7OztZQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNWLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMxQixPQUFPLENBQUMsbUJBQUEsT0FBTyxFQUF5QixDQUFDLENBQUMsR0FBRzs7OztvQkFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDO2lCQUNwRTtnQkFFRCxPQUFPLENBQUMsbUJBQUEsT0FBTyxFQUFlLENBQUMsQ0FBQyxNQUFNOzs7OztnQkFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEQsR0FBRyxDQUFDLG1CQUFBLENBQUMsRUFBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QixPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDLEdBQUUsRUFBRSxDQUFDLENBQUM7WUFDVCxDQUFDLEVBQUMsQ0FDSCxFQUFPLENBQUM7U0FDWjthQUFNO1lBQ0wsS0FBSzs7OztZQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFBLENBQUM7U0FDeEI7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7Ozs7Ozs7OztJQVNELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG1CQUFBLEtBQUssRUFBNEIsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDO0lBQzNFLENBQUM7Ozs7Ozs7Ozs7SUFTRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxtQkFBQSxLQUFLLEVBQTRCLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQztJQUN6RSxDQUFDOzs7Ozs7Ozs7O0lBVUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7Ozs7Ozs7Ozs7O0lBYUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QyxDQUFDOzs7Ozs7Ozs7O0lBVUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQzs7Ozs7SUFHRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGOzs7SUF6SEMsMEJBQW9COzs7OztJQUVSLHNCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBxdWVyeUNvbmZpZ0tleSwgUXVlcnlDb25maWdPcHRpb25zIH0gZnJvbSAnLi9xdWVyeUNvbmZpZyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4vaXNTdHJpbmcnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBpc0RldiB9IGZyb20gJy4vZW52JztcbmltcG9ydCB7IF9fcXVlcmllc19fIH0gZnJvbSAnLi9zdG9yZXMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvbXBhcmVLZXlzIH0gZnJvbSAnLi9jb21wYXJlS2V5cyc7XG5pbXBvcnQgeyBSZXR1cm5UeXBlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUXVlcnk8Uz4ge1xuICAvLyBAaW50ZXJuYWxcbiAgX19zdG9yZV9fOiBTdG9yZTxTPjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPFM+KSB7XG4gICAgdGhpcy5fX3N0b3JlX18gPSBzdG9yZTtcbiAgICBpZiAoaXNEZXYoKSkge1xuICAgICAgLy8gQGludGVybmFsXG4gICAgICBfX3F1ZXJpZXNfX1tzdG9yZS5zdG9yZU5hbWVdID0gdGhpcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgc2xpY2UgZnJvbSB0aGUgc3RvcmVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5zZWxlY3QoKVxuICAgKiB0aGlzLnF1ZXJ5LnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5lbnRpdGllcylcbiAgICogdGhpcy5xdWVyeS5zZWxlY3QoJ3Rva2VuJyk7XG4gICAqIHRoaXMucXVlcnkuc2VsZWN0KFsnbmFtZScsICdlbWFpbCddKVxuICAgKiB0aGlzLnF1ZXJ5LnNlbGVjdChbc3RhdGUgPT4gc3RhdGUubmFtZSwgc3RhdGUgPT4gc3RhdGUuYWdlXSlcbiAgICpcbiAgICovXG4gIHNlbGVjdDxLIGV4dGVuZHMga2V5b2YgUz4oa2V5OiBLKTogT2JzZXJ2YWJsZTxTW0tdPjtcbiAgc2VsZWN0PFI+KHByb2plY3Q6IChzdG9yZTogUykgPT4gUik6IE9ic2VydmFibGU8Uj47XG4gIHNlbGVjdDxLIGV4dGVuZHMga2V5b2YgUz4oc3RhdGVLZXlzOiBLW10pOiBPYnNlcnZhYmxlPFBpY2s8UywgSz4+O1xuICBzZWxlY3Q8UiBleHRlbmRzIFsoc3RhdGU6IFMpID0+IGFueV0gfCBBcnJheTwoc3RhdGU6IFMpID0+IGFueT4+KHNlbGVjdG9yRm5zOiBSKTogT2JzZXJ2YWJsZTxSZXR1cm5UeXBlczxSPj47XG4gIHNlbGVjdCgpOiBPYnNlcnZhYmxlPFM+O1xuICBzZWxlY3Q8Uj4ocHJvamVjdD86ICgoc3RvcmU6IFMpID0+IFIpIHwga2V5b2YgUyB8IChrZXlvZiBTKVtdIHwgKChzdGF0ZTogUykgPT4gYW55KVtdKTogT2JzZXJ2YWJsZTxSIHwgUyB8IGFueVtdPiB7XG4gICAgbGV0IG1hcEZuO1xuICAgIGlmIChpc0Z1bmN0aW9uKHByb2plY3QpKSB7XG4gICAgICBtYXBGbiA9IHByb2plY3Q7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhwcm9qZWN0KSkge1xuICAgICAgbWFwRm4gPSBzdGF0ZSA9PiBzdGF0ZVtwcm9qZWN0XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvamVjdCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlXG4gICAgICAgIC5fc2VsZWN0KHN0YXRlID0+IHN0YXRlKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJlS2V5cyhwcm9qZWN0KSksXG4gICAgICAgICAgbWFwKHN0YXRlID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb2plY3RbMF0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiAocHJvamVjdCBhcyAoKHN0YXRlOiBTKSA9PiBhbnkpW10pLm1hcChmdW5jID0+IGZ1bmMoc3RhdGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChwcm9qZWN0IGFzIChrZXlvZiBTKVtdKS5yZWR1Y2UoKGFjYywgaykgPT4ge1xuICAgICAgICAgICAgICBhY2NbayBhcyBhbnldID0gc3RhdGVba107XG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKSBhcyBhbnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcEZuID0gc3RhdGUgPT4gc3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuX3NlbGVjdChtYXBGbik7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IHRoZSBsb2FkaW5nIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0TG9hZGluZygpLnN1YnNjcmliZShpc0xvYWRpbmcgPT4ge30pXG4gICAqL1xuICBzZWxlY3RMb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChzdGF0ZSA9PiAoc3RhdGUgYXMgUyAmIHsgbG9hZGluZzogYm9vbGVhbiB9KS5sb2FkaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGVycm9yIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0RXJyb3IoKS5zdWJzY3JpYmUoZXJyb3IgPT4ge30pXG4gICAqL1xuICBzZWxlY3RFcnJvcjxFcnJvclR5cGUgPSBhbnk+KCk6IE9ic2VydmFibGU8RXJyb3JUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IChzdGF0ZSBhcyBTICYgeyBlcnJvcjogRXJyb3JUeXBlIH0pLmVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JlJ3MgdmFsdWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5nZXRWYWx1ZSgpXG4gICAqXG4gICAqL1xuICBnZXRWYWx1ZSgpOiBTIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5fdmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGNhY2hlIHN0YXRlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIHRoaXMucXVlcnkuc2VsZWN0SGFzQ2FjaGUoKS5waXBlKFxuICAgKiAgIHN3aXRjaE1hcChoYXNDYWNoZSA9PiB7XG4gICAqICAgICByZXR1cm4gaGFzQ2FjaGUgPyBvZigpIDogaHR0cCgpLnBpcGUocmVzID0+IHN0b3JlLnNldChyZXMpKVxuICAgKiAgIH0pXG4gICAqIClcbiAgICovXG4gIHNlbGVjdEhhc0NhY2hlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLl9jYWNoZSgpLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2UndmUgY2FjaGVkIGRhdGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogdGhpcy5xdWVyeS5nZXRIYXNDYWNoZSgpXG4gICAqXG4gICAqL1xuICBnZXRIYXNDYWNoZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5fY2FjaGUoKS52YWx1ZTtcbiAgfVxuXG4gIC8vIEBpbnRlcm5hbFxuICBnZXQgY29uZmlnKCk6IFF1ZXJ5Q29uZmlnT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3JbcXVlcnlDb25maWdLZXldO1xuICB9XG59XG4iXX0=