@datorama/akita
Version:
State Management Tailored-Made for JS Applications
57 lines • 5.75 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __stores__ } from './stores';
import { isString } from './isString';
import { setSkipStorageUpdate } from './persistState';
export class SnapshotManager {
/**
* Get a snapshot of the whole state or a specific stores
* Use it ONLY for things like saving the state in the server
* @param {?=} stores
* @return {?}
*/
getStoresSnapshot(stores = []) {
/** @type {?} */
let acc = {};
/** @type {?} */
const hasInclude = stores.length > 0;
/** @type {?} */
const keys = hasInclude ? stores : Object.keys(__stores__);
for (let i = 0; i < keys.length; i++) {
/** @type {?} */
let storeName = keys[i];
acc[storeName] = __stores__[storeName]._value();
}
return acc;
}
/**
* Set snapshot we get from the server
* @param {?} stores
* @param {?=} options
* @return {?}
*/
setStoresSnapshot(stores, options = { skipStorageUpdate: false }) {
options.skipStorageUpdate && setSkipStorageUpdate(true);
/** @type {?} */
let normalizedStores = stores;
if (isString(stores)) {
normalizedStores = JSON.parse((/** @type {?} */ (normalizedStores)));
}
for (let i = 0, keys = Object.keys(normalizedStores); i < keys.length; i++) {
/** @type {?} */
const storeName = keys[i];
if (__stores__[storeName]) {
__stores__[storeName]._setState((/**
* @return {?}
*/
() => normalizedStores[storeName]));
}
}
options.skipStorageUpdate && setSkipStorageUpdate(false);
}
}
/** @type {?} */
export const snapshotManager = new SnapshotManager();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcHNob3RNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2FraXRhLyIsInNvdXJjZXMiOlsic3JjL3NuYXBzaG90TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sT0FBTyxlQUFlOzs7Ozs7O0lBSzFCLGlCQUFpQixDQUFDLFNBQW1CLEVBQUU7O1lBQ2pDLEdBQUcsR0FBRyxFQUFFOztjQUNOLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7O2NBQzlCLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUQsS0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2dCQUMvQixTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2QixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzs7Ozs7O0lBS0QsaUJBQWlCLENBQUMsTUFBNkMsRUFBRSxVQUEwQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRTtRQUNySSxPQUFPLENBQUMsaUJBQWlCLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRXBELGdCQUFnQixHQUFHLE1BQU07UUFDN0IsSUFBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBQSxnQkFBZ0IsRUFBVSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztrQkFDbkUsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3hCLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTOzs7Z0JBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQzthQUNwRTtTQUNGO1FBRUQsT0FBTyxDQUFDLGlCQUFpQixJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjs7QUFFRCxNQUFNLE9BQU8sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19zdG9yZXNfXyB9IGZyb20gJy4vc3RvcmVzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9pc1N0cmluZyc7XG5pbXBvcnQgeyBzZXRTa2lwU3RvcmFnZVVwZGF0ZSB9IGZyb20gJy4vcGVyc2lzdFN0YXRlJztcblxuZXhwb3J0IGNsYXNzIFNuYXBzaG90TWFuYWdlciB7XG4gIC8qKlxuICAgKiBHZXQgYSBzbmFwc2hvdCBvZiB0aGUgd2hvbGUgc3RhdGUgb3IgYSBzcGVjaWZpYyBzdG9yZXNcbiAgICogVXNlIGl0IE9OTFkgZm9yIHRoaW5ncyBsaWtlIHNhdmluZyB0aGUgc3RhdGUgaW4gdGhlIHNlcnZlclxuICAgKi9cbiAgZ2V0U3RvcmVzU25hcHNob3Qoc3RvcmVzOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgbGV0IGFjYyA9IHt9O1xuICAgIGNvbnN0IGhhc0luY2x1ZGUgPSBzdG9yZXMubGVuZ3RoID4gMDtcbiAgICBjb25zdCBrZXlzID0gaGFzSW5jbHVkZSA/IHN0b3JlcyA6IE9iamVjdC5rZXlzKF9fc3RvcmVzX18pO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3RvcmVOYW1lID0ga2V5c1tpXTtcbiAgICAgIGFjY1tzdG9yZU5hbWVdID0gX19zdG9yZXNfX1tzdG9yZU5hbWVdLl92YWx1ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHNuYXBzaG90IHdlIGdldCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICovXG4gIHNldFN0b3Jlc1NuYXBzaG90KHN0b3JlczogeyBbc3RvcmVOYW1lOiBzdHJpbmddOiBhbnkgfSB8IHN0cmluZywgb3B0aW9uczogeyBza2lwU3RvcmFnZVVwZGF0ZTogYm9vbGVhbiB9ID0geyBza2lwU3RvcmFnZVVwZGF0ZTogZmFsc2UgfSApIHtcbiAgICBvcHRpb25zLnNraXBTdG9yYWdlVXBkYXRlICYmIHNldFNraXBTdG9yYWdlVXBkYXRlKHRydWUpO1xuXG4gICAgbGV0IG5vcm1hbGl6ZWRTdG9yZXMgPSBzdG9yZXM7XG4gICAgaWYoaXNTdHJpbmcoc3RvcmVzKSkge1xuICAgICAgbm9ybWFsaXplZFN0b3JlcyA9IEpTT04ucGFyc2Uobm9ybWFsaXplZFN0b3JlcyBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIGZvcihsZXQgaSA9IDAsIGtleXMgPSBPYmplY3Qua2V5cyhub3JtYWxpemVkU3RvcmVzKTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IGtleXNbaV07XG4gICAgICBpZihfX3N0b3Jlc19fW3N0b3JlTmFtZV0pIHtcbiAgICAgICAgX19zdG9yZXNfX1tzdG9yZU5hbWVdLl9zZXRTdGF0ZSgoKSA9PiBub3JtYWxpemVkU3RvcmVzW3N0b3JlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMuc2tpcFN0b3JhZ2VVcGRhdGUgJiYgc2V0U2tpcFN0b3JhZ2VVcGRhdGUoZmFsc2UpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBzbmFwc2hvdE1hbmFnZXIgPSBuZXcgU25hcHNob3RNYW5hZ2VyKCk7XG4iXX0=