@datorama/akita
Version:
State Management Tailored-Made for JS Applications
146 lines • 14.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { currentAction, setSkipAction } from './actions';
import { isDefined } from './isDefined';
import { $$addStore, $$deleteStore, $$updateStore } from './dispatchers';
import { __stores__ } from './stores';
import { capitalize } from './captialize';
import { isNotBrowser } from './root';
/** @type {?} */
var subs = [];
/**
* @param {?=} ngZoneOrOptions
* @param {?=} options
* @return {?}
*/
export function akitaDevtools(ngZoneOrOptions, options) {
if (options === void 0) { options = {}; }
if (isNotBrowser)
return;
if (!((/** @type {?} */ (window))).__REDUX_DEVTOOLS_EXTENSION__) {
return;
}
subs.length &&
subs.forEach((/**
* @param {?} s
* @return {?}
*/
function (s) {
if (s.unsubscribe) {
s.unsubscribe();
}
else {
s && s();
}
}));
/** @type {?} */
var isAngular = ngZoneOrOptions && ngZoneOrOptions['run'];
if (!isAngular) {
ngZoneOrOptions = ngZoneOrOptions || {};
((/** @type {?} */ (ngZoneOrOptions))).run = (/**
* @param {?} cb
* @return {?}
*/
function (cb) { return cb(); });
options = (/** @type {?} */ (ngZoneOrOptions));
}
/** @type {?} */
var defaultOptions = { name: 'Akita', shallow: true };
/** @type {?} */
var merged = Object.assign({}, defaultOptions, options);
/** @type {?} */
var devTools = ((/** @type {?} */ (window))).__REDUX_DEVTOOLS_EXTENSION__.connect(merged);
/** @type {?} */
var appState = {};
subs.push($$addStore.subscribe((/**
* @param {?} storeName
* @return {?}
*/
function (storeName) {
var _a;
appState = tslib_1.__assign({}, appState, (_a = {}, _a[storeName] = __stores__[storeName]._value(), _a));
devTools.send({ type: "[" + capitalize(storeName) + "] - @@INIT" }, appState);
})));
subs.push($$deleteStore.subscribe((/**
* @param {?} storeName
* @return {?}
*/
function (storeName) {
delete appState[storeName];
devTools.send({ type: "[" + storeName + "] - Delete Store" }, appState);
})));
subs.push($$updateStore.subscribe((/**
* @param {?} storeName
* @return {?}
*/
function (storeName) {
var _a;
var type = currentAction.type, entityIds = currentAction.entityIds, skip = currentAction.skip;
if (skip) {
setSkipAction(false);
return;
}
/** @type {?} */
var store = __stores__[storeName];
if (!store) {
return;
}
if (options.shallow === false && appState[storeName]) {
/** @type {?} */
var isEqual = JSON.stringify(store._value()) === JSON.stringify(appState[storeName]);
if (isEqual)
return;
}
appState = tslib_1.__assign({}, appState, (_a = {}, _a[storeName] = store._value(), _a));
/** @type {?} */
var normalize = capitalize(storeName);
/** @type {?} */
var msg = isDefined(entityIds) ? "[" + normalize + "] - " + type + " (ids: " + entityIds + ")" : "[" + normalize + "] - " + type;
if (options.logTrace) {
console.group(msg);
console.trace();
console.groupEnd();
}
devTools.send({ type: msg }, appState);
})));
subs.push(devTools.subscribe((/**
* @param {?} message
* @return {?}
*/
function (message) {
if (message.type === 'DISPATCH') {
/** @type {?} */
var payloadType = message.payload.type;
if (payloadType === 'COMMIT') {
devTools.init(appState);
return;
}
if (message.state) {
/** @type {?} */
var rootState_1 = JSON.parse(message.state);
var _loop_1 = function (i, keys) {
/** @type {?} */
var storeName = keys[i];
if (__stores__[storeName]) {
((/** @type {?} */ (ngZoneOrOptions))).run((/**
* @return {?}
*/
function () {
__stores__[storeName]._setState((/**
* @return {?}
*/
function () { return rootState_1[storeName]; }), false);
}));
}
};
for (var i = 0, keys = Object.keys(rootState_1); i < keys.length; i++) {
_loop_1(i, keys);
}
}
}
})));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2dG9vbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvYWtpdGEvIiwic291cmNlcyI6WyJzcmMvZGV2dG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7SUFlbEMsSUFBSSxHQUFHLEVBQUU7Ozs7OztBQU1iLE1BQU0sVUFBVSxhQUFhLENBQUMsZUFBdUQsRUFBRSxPQUFzQztJQUF0Qyx3QkFBQSxFQUFBLFlBQXNDO0lBQzNILElBQUksWUFBWTtRQUFFLE9BQU87SUFFekIsSUFBSSxDQUFDLENBQUMsbUJBQUEsTUFBTSxFQUFPLENBQUMsQ0FBQyw0QkFBNEIsRUFBRTtRQUNqRCxPQUFPO0tBQ1I7SUFFRCxJQUFJLENBQUMsTUFBTTtRQUNULElBQUksQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxDQUFDO1lBQ1osSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUNqQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ1Y7UUFDSCxDQUFDLEVBQUMsQ0FBQzs7UUFFQyxTQUFTLEdBQUcsZUFBZSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFFM0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLGVBQWUsR0FBRyxlQUFlLElBQUksRUFBRSxDQUFDO1FBQ3hDLENB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LE9BQU87UUFDeEIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTs7Z0JBQ3pCLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUk7WUFFeEMsSUFBSSxXQUFXLEtBQUssUUFBUSxFQUFFO2dCQUM1QixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN4QixPQUFPO2FBQ1I7WUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7O29CQUNYLFdBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0NBQ2xDLENBQUMsRUFBTSxJQUFJOzt3QkFDWixTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ3pCLENBQUMsbUJBQUEsZUFBZSxFQUFjLENBQUMsQ0FBQyxHQUFHOzs7d0JBQUM7NEJBQ2xDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTOzs7NEJBQUMsY0FBTSxPQUFBLFdBQVMsQ0FBQyxTQUFTLENBQUMsRUFBcEIsQ0FBb0IsR0FBRSxLQUFLLENBQUMsQ0FBQzt3QkFDckUsQ0FBQyxFQUFDLENBQUM7cUJBQ0o7O2dCQU5ILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTs0QkFBMUQsQ0FBQyxFQUFNLElBQUk7aUJBT25CO2FBQ0Y7U0FDRjtJQUNILENBQUMsRUFBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3VycmVudEFjdGlvbiwgc2V0U2tpcEFjdGlvbiB9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL2lzRGVmaW5lZCc7XG5pbXBvcnQgeyAkJGFkZFN0b3JlLCAkJGRlbGV0ZVN0b3JlLCAkJHVwZGF0ZVN0b3JlIH0gZnJvbSAnLi9kaXNwYXRjaGVycyc7XG5pbXBvcnQgeyBfX3N0b3Jlc19fIH0gZnJvbSAnLi9zdG9yZXMnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJy4vY2FwdGlhbGl6ZSc7XG5pbXBvcnQgeyBpc05vdEJyb3dzZXIgfSBmcm9tICcuL3Jvb3QnO1xuXG5leHBvcnQgdHlwZSBEZXZ0b29sc09wdGlvbnMgPSB7XG4gIC8qKiBpbnN0YW5jZSBuYW1lIHZpc2libGUgaW4gZGV2dG9vbHMgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogIG1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlICovXG4gIG1heEFnZTogbnVtYmVyO1xuICBsYXRlbmN5OiBudW1iZXI7XG4gIGFjdGlvbnNCbGFja2xpc3Q6IHN0cmluZ1tdO1xuICBhY3Rpb25zV2hpdGVsaXN0OiBzdHJpbmdbXTtcbiAgc2hvdWxkQ2F0Y2hFcnJvcnM6IGJvb2xlYW47XG4gIGxvZ1RyYWNlOiBib29sZWFuO1xuICBwcmVkaWNhdGU6IChzdGF0ZTogYW55LCBhY3Rpb246IGFueSkgPT4gYm9vbGVhbjtcbiAgc2hhbGxvdzogYm9vbGVhbjtcbn07XG5sZXQgc3VicyA9IFtdO1xuXG5leHBvcnQgdHlwZSBOZ1pvbmVMaWtlID0geyBydW46IGFueSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gYWtpdGFEZXZ0b29scyhuZ1pvbmU6IE5nWm9uZUxpa2UsIG9wdGlvbnM/OiBQYXJ0aWFsPERldnRvb2xzT3B0aW9ucz4pO1xuZXhwb3J0IGZ1bmN0aW9uIGFraXRhRGV2dG9vbHMob3B0aW9ucz86IFBhcnRpYWw8RGV2dG9vbHNPcHRpb25zPik7XG5leHBvcnQgZnVuY3Rpb24gYWtpdGFEZXZ0b29scyhuZ1pvbmVPck9wdGlvbnM/OiBOZ1pvbmVMaWtlIHwgUGFydGlhbDxEZXZ0b29sc09wdGlvbnM+LCBvcHRpb25zOiBQYXJ0aWFsPERldnRvb2xzT3B0aW9ucz4gPSB7fSkge1xuICBpZiAoaXNOb3RCcm93c2VyKSByZXR1cm47XG5cbiAgaWYgKCEod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnMubGVuZ3RoICYmXG4gICAgc3Vicy5mb3JFYWNoKHMgPT4ge1xuICAgICAgaWYgKHMudW5zdWJzY3JpYmUpIHtcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyAmJiBzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgY29uc3QgaXNBbmd1bGFyID0gbmdab25lT3JPcHRpb25zICYmIG5nWm9uZU9yT3B0aW9uc1sncnVuJ107XG5cbiAgaWYgKCFpc0FuZ3VsYXIpIHtcbiAgICBuZ1pvbmVPck9wdGlvbnMgPSBuZ1pvbmVPck9wdGlvbnMgfHwge307XG4gICAgKG5nWm9uZU9yT3B0aW9ucyBhcyBhbnkpLnJ1biA9IGNiID0+IGNiKCk7XG4gICAgb3B0aW9ucyA9IG5nWm9uZU9yT3B0aW9ucyBhcyBQYXJ0aWFsPERldnRvb2xzT3B0aW9ucz47XG4gIH1cblxuICBjb25zdCBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxEZXZ0b29sc09wdGlvbnM+ICYgeyBuYW1lOiBzdHJpbmcgfSA9IHsgbmFtZTogJ0FraXRhJywgc2hhbGxvdzogdHJ1ZSB9O1xuICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgY29uc3QgZGV2VG9vbHMgPSAod2luZG93IGFzIGFueSkuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXy5jb25uZWN0KG1lcmdlZCk7XG4gIGxldCBhcHBTdGF0ZSA9IHt9O1xuXG4gIHN1YnMucHVzaChcbiAgICAkJGFkZFN0b3JlLnN1YnNjcmliZShzdG9yZU5hbWUgPT4ge1xuICAgICAgYXBwU3RhdGUgPSB7XG4gICAgICAgIC4uLmFwcFN0YXRlLFxuICAgICAgICBbc3RvcmVOYW1lXTogX19zdG9yZXNfX1tzdG9yZU5hbWVdLl92YWx1ZSgpXG4gICAgICB9O1xuICAgICAgZGV2VG9vbHMuc2VuZCh7IHR5cGU6IGBbJHtjYXBpdGFsaXplKHN0b3JlTmFtZSl9XSAtIEBASU5JVGAgfSwgYXBwU3RhdGUpO1xuICAgIH0pXG4gICk7XG5cbiAgc3Vicy5wdXNoKFxuICAgICQkZGVsZXRlU3RvcmUuc3Vic2NyaWJlKHN0b3JlTmFtZSA9PiB7XG4gICAgICBkZWxldGUgYXBwU3RhdGVbc3RvcmVOYW1lXTtcbiAgICAgIGRldlRvb2xzLnNlbmQoeyB0eXBlOiBgWyR7c3RvcmVOYW1lfV0gLSBEZWxldGUgU3RvcmVgIH0sIGFwcFN0YXRlKTtcbiAgICB9KVxuICApO1xuXG4gIHN1YnMucHVzaChcbiAgICAkJHVwZGF0ZVN0b3JlLnN1YnNjcmliZShzdG9yZU5hbWUgPT4ge1xuICAgICAgY29uc3QgeyB0eXBlLCBlbnRpdHlJZHMsIHNraXAgfSA9IGN1cnJlbnRBY3Rpb247XG5cbiAgICAgIGlmIChza2lwKSB7XG4gICAgICAgIHNldFNraXBBY3Rpb24oZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JlID0gX19zdG9yZXNfX1tzdG9yZU5hbWVdO1xuICAgICAgaWYgKCFzdG9yZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWxsb3cgPT09IGZhbHNlICYmIGFwcFN0YXRlW3N0b3JlTmFtZV0pIHtcbiAgICAgICAgY29uc3QgaXNFcXVhbCA9IEpTT04uc3RyaW5naWZ5KHN0b3JlLl92YWx1ZSgpKSA9PT0gSlNPTi5zdHJpbmdpZnkoYXBwU3RhdGVbc3RvcmVOYW1lXSk7XG4gICAgICAgIGlmIChpc0VxdWFsKSByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwcFN0YXRlID0ge1xuICAgICAgICAuLi5hcHBTdGF0ZSxcbiAgICAgICAgW3N0b3JlTmFtZV06IHN0b3JlLl92YWx1ZSgpXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBub3JtYWxpemUgPSBjYXBpdGFsaXplKHN0b3JlTmFtZSk7XG4gICAgICBsZXQgbXNnID0gaXNEZWZpbmVkKGVudGl0eUlkcykgPyBgWyR7bm9ybWFsaXplfV0gLSAke3R5cGV9IChpZHM6ICR7ZW50aXR5SWRzfSlgIDogYFske25vcm1hbGl6ZX1dIC0gJHt0eXBlfWA7XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ1RyYWNlKSB7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXAobXNnKTtcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGRldlRvb2xzLnNlbmQoeyB0eXBlOiBtc2cgfSwgYXBwU3RhdGUpO1xuICAgIH0pXG4gICk7XG5cbiAgc3Vicy5wdXNoKFxuICAgIGRldlRvb2xzLnN1YnNjcmliZShtZXNzYWdlID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdESVNQQVRDSCcpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZFR5cGUgPSBtZXNzYWdlLnBheWxvYWQudHlwZTtcblxuICAgICAgICBpZiAocGF5bG9hZFR5cGUgPT09ICdDT01NSVQnKSB7XG4gICAgICAgICAgZGV2VG9vbHMuaW5pdChhcHBTdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdGUpIHtcbiAgICAgICAgICBjb25zdCByb290U3RhdGUgPSBKU09OLnBhcnNlKG1lc3NhZ2Uuc3RhdGUpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBrZXlzID0gT2JqZWN0LmtleXMocm9vdFN0YXRlKTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoX19zdG9yZXNfX1tzdG9yZU5hbWVdKSB7XG4gICAgICAgICAgICAgIChuZ1pvbmVPck9wdGlvbnMgYXMgTmdab25lTGlrZSkucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBfX3N0b3Jlc19fW3N0b3JlTmFtZV0uX3NldFN0YXRlKCgpID0+IHJvb3RTdGF0ZVtzdG9yZU5hbWVdLCBmYWxzZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICk7XG59XG4iXX0=