UNPKG

@gernsdorfer/ngrx-lite

Version:

[![Test, Lint, Build](https://github.com/gernsdorfer/ngrx-lite/actions/workflows/ci.yml/badge.svg)]() [![Publish to NPM](https://github.com/gernsdorfer/ngrx-lite/actions/workflows/npm-publish.yml/badge.svg)](https://github.com/gernsdorfer/ngrx-lite/action

1 lines 124 kB
{"version":3,"file":"gernsdorfer-ngrx-lite.mjs","sources":["../tmp-esm2022/enums/effect-states.enum.js","../tmp-esm2022/injection-tokens/plugin.tokens.js","../tmp-esm2022/plugins/get-window.js","../tmp-esm2022/plugins/client-storage.plugin.js","../tmp-esm2022/services/action-creator.js","../tmp-esm2022/injection-tokens/state.token.js","../tmp-esm2022/services/create-store-fn.js","../tmp-esm2022/services/dev-tool-helper.service.js","../tmp-esm2022/services/store.service.js","../tmp-esm2022/services/stores/component-store.service.js","../tmp-esm2022/services/stores/component-loading-store.service.js","../tmp-esm2022/services/store-factory.service.js","../tmp-esm2022/router-store/router-service.js","../tmp-esm2022/router-store/router-store.module.js","../tmp-esm2022/gernsdorfer-ngrx-lite.js"],"sourcesContent":["export var EffectStates;\n(function (EffectStates) {\n EffectStates[\"ERROR\"] = \"ERROR\";\n EffectStates[\"LOAD\"] = \"LOAD\";\n EffectStates[\"SUCCESS\"] = \"SUCCESS\";\n})(EffectStates || (EffectStates = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LXN0YXRlcy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zdG9yZS9zcmMvZW51bXMvZWZmZWN0LXN0YXRlcy5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFlBSVg7QUFKRCxXQUFZLFlBQVk7SUFDdEIsK0JBQWUsQ0FBQTtJQUNmLDZCQUFhLENBQUE7SUFDYixtQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsWUFBWSxLQUFaLFlBQVksUUFJdkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBFZmZlY3RTdGF0ZXMge1xuICBFUlJPUiA9ICdFUlJPUicsXG4gIExPQUQgPSAnTE9BRCcsXG4gIFNVQ0NFU1MgPSAnU1VDQ0VTUycsXG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const SessionStoragePlugin = new InjectionToken('SessionStoragePlugin');\nexport const LocalStoragePlugin = new InjectionToken('LocalStoragePlugin');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc3RvcmUvc3JjL2luamVjdGlvbi10b2tlbnMvcGx1Z2luLnRva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUNwRCxzQkFBc0IsQ0FDdkIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUNsRCxvQkFBb0IsQ0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDbGllbnRTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IFNlc3Npb25TdG9yYWdlUGx1Z2luID0gbmV3IEluamVjdGlvblRva2VuPENsaWVudFN0b3JhZ2VQbHVnaW4+KFxuICAnU2Vzc2lvblN0b3JhZ2VQbHVnaW4nXG4pO1xuZXhwb3J0IGNvbnN0IExvY2FsU3RvcmFnZVBsdWdpbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDbGllbnRTdG9yYWdlUGx1Z2luPihcbiAgJ0xvY2FsU3RvcmFnZVBsdWdpbidcbik7XG4iXX0=","export const getWindow = () => typeof window === 'object' ? window : undefined;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXdpbmRvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc3RvcmUvc3JjL3BsdWdpbnMvZ2V0LXdpbmRvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBdUIsRUFBRSxDQUNoRCxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGdldFdpbmRvdyA9ICgpOiBXaW5kb3cgfCB1bmRlZmluZWQgPT5cbiAgdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4iXX0=","import { getWindow } from './get-window';\nclass ClientStorage {\n constructor(store) {\n this.store = store;\n }\n getDefaultState(storeName) {\n const stateFromStorage = this.store?.getItem(storeName);\n if (!stateFromStorage)\n return;\n return JSON.parse(stateFromStorage);\n }\n setStateToStorage(storeName, state) {\n this.store?.setItem(storeName, JSON.stringify(state));\n }\n}\nexport const sessionStoragePlugin = new ClientStorage(getWindow()?.sessionStorage);\nexport const localStoragePlugin = new ClientStorage(getWindow()?.localStorage);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXN0b3JhZ2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zdG9yZS9zcmMvcGx1Z2lucy9jbGllbnQtc3RvcmFnZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxNQUFNLGFBQWE7SUFDakIsWUFBb0IsS0FBZTtRQUFmLFVBQUssR0FBTCxLQUFLLENBQVU7SUFBRyxDQUFDO0lBRXZDLGVBQWUsQ0FBUSxTQUFpQjtRQUN0QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxpQkFBaUIsQ0FBUSxTQUFpQixFQUFFLEtBQVk7UUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGFBQWEsQ0FDbkQsU0FBUyxFQUFFLEVBQUUsY0FBYyxDQUM1QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGllbnRTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJy4vZ2V0LXdpbmRvdyc7XG5cbmNsYXNzIENsaWVudFN0b3JhZ2UgaW1wbGVtZW50cyBDbGllbnRTdG9yYWdlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZT86IFN0b3JhZ2UpIHt9XG5cbiAgZ2V0RGVmYXVsdFN0YXRlPFNUQVRFPihzdG9yZU5hbWU6IHN0cmluZyk6IFNUQVRFIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0ZUZyb21TdG9yYWdlID0gdGhpcy5zdG9yZT8uZ2V0SXRlbShzdG9yZU5hbWUpO1xuICAgIGlmICghc3RhdGVGcm9tU3RvcmFnZSkgcmV0dXJuO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0YXRlRnJvbVN0b3JhZ2UpO1xuICB9XG5cbiAgc2V0U3RhdGVUb1N0b3JhZ2U8U1RBVEU+KHN0b3JlTmFtZTogc3RyaW5nLCBzdGF0ZTogU1RBVEUpIHtcbiAgICB0aGlzLnN0b3JlPy5zZXRJdGVtKHN0b3JlTmFtZSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0b3JhZ2VQbHVnaW4gPSBuZXcgQ2xpZW50U3RvcmFnZShcbiAgZ2V0V2luZG93KCk/LnNlc3Npb25TdG9yYWdlLFxuKTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsU3RvcmFnZVBsdWdpbiA9IG5ldyBDbGllbnRTdG9yYWdlKGdldFdpbmRvdygpPy5sb2NhbFN0b3JhZ2UpO1xuIl19","import { createAction, props } from '@ngrx/store';\nexport const getEffectActionName = (effectName, type) => `${effectName}:${type}`;\nexport const getFullStoreName = (storeName, dynamicStoreName) => [storeName, dynamicStoreName].filter((name) => name !== null).join('');\nexport const getEffectAction = ({ storeName, effectName, dynamicStoreName, type, }) => getCustomActionWithDynamicStore({\n storeName,\n dynamicStoreName,\n actionName: `${getEffectActionName(effectName, type)}`,\n});\nexport const getCustomActionWithDynamicStore = ({ storeName, dynamicStoreName, actionName, }) => createAction(`[COMPONENT_STORE][${getFullStoreName(storeName, dynamicStoreName)}] ${actionName}`, props());\nexport const getCustomAction = ({ storeName, dynamicStoreName, actionName, }) => createAction(`[COMPONENT_STORE][${getFullStoreName(storeName, dynamicStoreName)}] ${actionName}`, props());\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3N0b3JlL3NyYy9zZXJ2aWNlcy9hY3Rpb24tY3JlYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQWtCLEVBQUUsSUFBa0IsRUFBRSxFQUFFLENBQzVFLEdBQUcsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzlCLFNBQWlCLEVBQ2pCLGdCQUFnQyxFQUNoQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFNUUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBTTdCLEVBQ0EsU0FBUyxFQUNULFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsSUFBSSxHQU1MLEVBQUUsRUFBRSxDQUNILCtCQUErQixDQUFVO0lBQ3ZDLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsVUFBVSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFO0NBQ3ZELENBQUMsQ0FBQztBQUVMLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLENBRzdDLEVBQ0EsU0FBUyxFQUNULGdCQUFnQixFQUNoQixVQUFVLEdBS1gsRUFBRSxFQUFFLENBQ0gsWUFBWSxDQUNWLHFCQUFxQixnQkFBZ0IsQ0FDbkMsU0FBUyxFQUNULGdCQUFnQixDQUNqQixLQUFLLFVBQVUsRUFBRSxFQUNsQixLQUFLLEVBQUUsQ0FDUixDQUFDO0FBRUosTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQW1CLEVBQ2hELFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsVUFBVSxHQUtYLEVBQUUsRUFBRSxDQUNILFlBQVksQ0FDVixxQkFBcUIsZ0JBQWdCLENBQ25DLFNBQVMsRUFDVCxnQkFBZ0IsQ0FDakIsS0FBSyxVQUFVLEVBQUUsRUFDbEIsS0FBSyxFQUFFLENBQ1IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgcHJvcHMgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBFZmZlY3RTdGF0ZXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBMb2FkaW5nU3RvcmVTdGF0ZSB9IGZyb20gJy4uL21vZGVscyc7XG5leHBvcnQgY29uc3QgZ2V0RWZmZWN0QWN0aW9uTmFtZSA9IChlZmZlY3ROYW1lOiBzdHJpbmcsIHR5cGU6IEVmZmVjdFN0YXRlcykgPT5cbiAgYCR7ZWZmZWN0TmFtZX06JHt0eXBlfWA7XG5cbmV4cG9ydCBjb25zdCBnZXRGdWxsU3RvcmVOYW1lID0gKFxuICBzdG9yZU5hbWU6IHN0cmluZyxcbiAgZHluYW1pY1N0b3JlTmFtZT86IHN0cmluZyB8IG51bGwsXG4pID0+IFtzdG9yZU5hbWUsIGR5bmFtaWNTdG9yZU5hbWVdLmZpbHRlcigobmFtZSkgPT4gbmFtZSAhPT0gbnVsbCkuam9pbignJyk7XG5cbmV4cG9ydCBjb25zdCBnZXRFZmZlY3RBY3Rpb24gPSA8XG4gIEFSR1MgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcixcbiAgUCBleHRlbmRzIExvYWRpbmdTdG9yZVN0YXRlPHVua25vd24sIHVua25vd24+ID0gTG9hZGluZ1N0b3JlU3RhdGU8XG4gICAgdW5rbm93bixcbiAgICB1bmtub3duXG4gID4sXG4+KHtcbiAgc3RvcmVOYW1lLFxuICBlZmZlY3ROYW1lLFxuICBkeW5hbWljU3RvcmVOYW1lLFxuICB0eXBlLFxufToge1xuICBzdG9yZU5hbWU6IHN0cmluZztcbiAgZHluYW1pY1N0b3JlTmFtZT86IEFSR1M7XG4gIGVmZmVjdE5hbWU6IHN0cmluZztcbiAgdHlwZTogRWZmZWN0U3RhdGVzO1xufSkgPT5cbiAgZ2V0Q3VzdG9tQWN0aW9uV2l0aER5bmFtaWNTdG9yZTxBUkdTLCBQPih7XG4gICAgc3RvcmVOYW1lLFxuICAgIGR5bmFtaWNTdG9yZU5hbWUsXG4gICAgYWN0aW9uTmFtZTogYCR7Z2V0RWZmZWN0QWN0aW9uTmFtZShlZmZlY3ROYW1lLCB0eXBlKX1gLFxuICB9KTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbUFjdGlvbldpdGhEeW5hbWljU3RvcmUgPSA8XG4gIEFSR1MgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcixcbiAgUCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcbj4oe1xuICBzdG9yZU5hbWUsXG4gIGR5bmFtaWNTdG9yZU5hbWUsXG4gIGFjdGlvbk5hbWUsXG59OiB7XG4gIHN0b3JlTmFtZTogc3RyaW5nO1xuICBkeW5hbWljU3RvcmVOYW1lPzogQVJHUztcbiAgYWN0aW9uTmFtZT86IHN0cmluZztcbn0pID0+XG4gIGNyZWF0ZUFjdGlvbjxzdHJpbmcsIHsgcGF5bG9hZDogUCB9PihcbiAgICBgW0NPTVBPTkVOVF9TVE9SRV1bJHtnZXRGdWxsU3RvcmVOYW1lKFxuICAgICAgc3RvcmVOYW1lLFxuICAgICAgZHluYW1pY1N0b3JlTmFtZSxcbiAgICApfV0gJHthY3Rpb25OYW1lfWAsXG4gICAgcHJvcHMoKSxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbUFjdGlvbiA9IDxQIGV4dGVuZHMgb2JqZWN0Pih7XG4gIHN0b3JlTmFtZSxcbiAgZHluYW1pY1N0b3JlTmFtZSxcbiAgYWN0aW9uTmFtZSxcbn06IHtcbiAgc3RvcmVOYW1lOiBzdHJpbmc7XG4gIGR5bmFtaWNTdG9yZU5hbWU/OiBzdHJpbmc7XG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG59KSA9PlxuICBjcmVhdGVBY3Rpb248c3RyaW5nLCB7IHBheWxvYWQ6IFAgfT4oXG4gICAgYFtDT01QT05FTlRfU1RPUkVdWyR7Z2V0RnVsbFN0b3JlTmFtZShcbiAgICAgIHN0b3JlTmFtZSxcbiAgICAgIGR5bmFtaWNTdG9yZU5hbWUsXG4gICAgKX1dICR7YWN0aW9uTmFtZX1gLFxuICAgIHByb3BzKCksXG4gICk7XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const StateToken = new InjectionToken('StateToken');\nexport const StoreNameToken = new InjectionToken('StoreNameToken');\nexport const DynamicStoreName = new InjectionToken('DynamicStoreName');\nexport const SkipLogForStore = new InjectionToken('SkipLogForStore');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3N0b3JlL3NyYy9pbmplY3Rpb24tdG9rZW5zL3N0YXRlLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBUyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFVLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgU3RhdGVUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbignU3RhdGVUb2tlbicpO1xuZXhwb3J0IGNvbnN0IFN0b3JlTmFtZVRva2VuID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1N0b3JlTmFtZVRva2VuJyk7XG5leHBvcnQgY29uc3QgRHluYW1pY1N0b3JlTmFtZSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdEeW5hbWljU3RvcmVOYW1lJyk7XG5leHBvcnQgY29uc3QgU2tpcExvZ0ZvclN0b3JlID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdTa2lwTG9nRm9yU3RvcmUnKTtcbiJdfQ==","import { DestroyRef, inject, Injector, } from '@angular/core';\nimport { DynamicStoreName } from '../injection-tokens/state.token';\nexport class DynamicStore {\n}\nexport class CreateStoreAsFn {\n constructor(store, injectionOptions) {\n this.store = store;\n this.injectionOptions = injectionOptions;\n }\n inject(dynamicStoreName) {\n return (this.loadFromRoot() ||\n this.storeNotFoundHandling(this.injectionOptions?.providedIn === 'root') ||\n this.createNewStoreInstance(dynamicStoreName));\n }\n loadFromRoot() {\n return inject(this.store, { optional: true });\n }\n createNewStoreInstance(dynamicStoreName) {\n const storeInstance = Injector.create({\n parent: inject(Injector),\n providers: [\n this.store,\n { provide: DynamicStoreName, useValue: dynamicStoreName },\n ],\n }).get(this.store);\n const destroy = inject(DestroyRef);\n destroy.onDestroy(() => storeInstance.ngOnDestroy());\n return storeInstance;\n }\n storeNotFoundHandling(shouldTriggerError) {\n if (shouldTriggerError)\n throw new Error(`Store not found: ${this.store.name}`);\n }\n}\nexport const createStoreAsFn = (store, injectionOptions) => new CreateStoreAsFn(store, injectionOptions);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN0b3JlLWZuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9zdG9yZS9zcmMvc2VydmljZXMvY3JlYXRlLXN0b3JlLWZuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUVOLFFBQVEsR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVuRSxNQUFNLE9BQU8sWUFBWTtDQUV4QjtBQU1ELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsS0FBa0IsRUFDbEIsZ0JBQTRCO1FBRDVCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFZO0lBQ25DLENBQUM7SUFFSixNQUFNLENBQ0osZ0JBSTZCO1FBRTdCLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxxQkFBcUIsQ0FDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsS0FBSyxNQUFNLENBQzdDO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLGdCQUF5QjtRQUN0RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3hCLFNBQVMsRUFBRTtnQkFDVCxJQUFJLENBQUMsS0FBSztnQkFDVixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUU7YUFDMUQ7U0FDRixDQUFDLENBQUMsR0FBRyxDQUFrQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FBTyxhQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxrQkFBMkI7UUFDdkQsSUFBSSxrQkFBa0I7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQU03QixLQUFrQixFQUNsQixnQkFBNEIsRUFDNUIsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFtQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljU3RvcmVOYW1lIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucy9zdGF0ZS50b2tlbic7XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljU3RvcmU8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICBkeW5hbWljU3RvcnlOYW1lPzogVDtcbn1cbnR5cGUgR0xPQkFMX1NUT1JFID0gSW5qZWN0YWJsZSAmIHsgcHJvdmlkZWRJbjogJ3Jvb3QnIHwgJ3BsYXRmb3JtJyB9O1xudHlwZSBTdG9yZVR5cGU8U1RPUkUgZXh0ZW5kcyBJbmplY3RhYmxlPiA9IFNUT1JFIGV4dGVuZHMgR0xPQkFMX1NUT1JFXG4gID8gRHluYW1pY1N0b3JlPG5ldmVyPlxuICA6IE9uRGVzdHJveSAmIER5bmFtaWNTdG9yZTtcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVN0b3JlQXNGbjxcbiAgSU5KRUNUSU9OIGV4dGVuZHMgSW5qZWN0YWJsZSxcbiAgU1RPUkUgZXh0ZW5kcyBTdG9yZVR5cGU8SU5KRUNUSU9OPixcbj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBUeXBlPFNUT1JFPixcbiAgICBwcml2YXRlIGluamVjdGlvbk9wdGlvbnM/OiBJTkpFQ1RJT04sXG4gICkge31cblxuICBpbmplY3QoXG4gICAgZHluYW1pY1N0b3JlTmFtZT86IElOSkVDVElPTiBleHRlbmRzIHtcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyB8ICdwbGF0Zm9ybScgfCAnYW55JztcbiAgICB9XG4gICAgICA/IG5ldmVyXG4gICAgICA6IFNUT1JFWydkeW5hbWljU3RvcnlOYW1lJ10sXG4gICk6IFNUT1JFIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5sb2FkRnJvbVJvb3QoKSB8fFxuICAgICAgdGhpcy5zdG9yZU5vdEZvdW5kSGFuZGxpbmcoXG4gICAgICAgIHRoaXMuaW5qZWN0aW9uT3B0aW9ucz8ucHJvdmlkZWRJbiA9PT0gJ3Jvb3QnLFxuICAgICAgKSB8fFxuICAgICAgdGhpcy5jcmVhdGVOZXdTdG9yZUluc3RhbmNlKGR5bmFtaWNTdG9yZU5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEZyb21Sb290KCkge1xuICAgIHJldHVybiBpbmplY3QodGhpcy5zdG9yZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV3U3RvcmVJbnN0YW5jZShkeW5hbWljU3RvcmVOYW1lPzogc3RyaW5nKTogU1RPUkUge1xuICAgIGNvbnN0IHN0b3JlSW5zdGFuY2UgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiBpbmplY3QoSW5qZWN0b3IpLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHRoaXMuc3RvcmUsXG4gICAgICAgIHsgcHJvdmlkZTogRHluYW1pY1N0b3JlTmFtZSwgdXNlVmFsdWU6IGR5bmFtaWNTdG9yZU5hbWUgfSxcbiAgICAgIF0sXG4gICAgfSkuZ2V0PFN0b3JlVHlwZTx7IHByb3ZpZGVkSW46IG51bGwgfT4+KHRoaXMuc3RvcmUpO1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgZGVzdHJveS5vbkRlc3Ryb3koKCkgPT4gc3RvcmVJbnN0YW5jZS5uZ09uRGVzdHJveSgpKTtcbiAgICByZXR1cm4gc3RvcmVJbnN0YW5jZSBhcyBTVE9SRTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVOb3RGb3VuZEhhbmRsaW5nKHNob3VsZFRyaWdnZXJFcnJvcjogYm9vbGVhbikge1xuICAgIGlmIChzaG91bGRUcmlnZ2VyRXJyb3IpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0b3JlIG5vdCBmb3VuZDogJHt0aGlzLnN0b3JlLm5hbWV9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVN0b3JlQXNGbiA9IDxcbiAgSU5KRUNUSU9OIGV4dGVuZHMgSW5qZWN0YWJsZSxcbiAgU1RPUkUgZXh0ZW5kcyBJTkpFQ1RJT04gZXh0ZW5kcyBHTE9CQUxfU1RPUkVcbiAgICA/IG9iamVjdFxuICAgIDogT25EZXN0cm95ICYgRHluYW1pY1N0b3JlLFxuPihcbiAgc3RvcmU6IFR5cGU8U1RPUkU+LFxuICBpbmplY3Rpb25PcHRpb25zPzogSU5KRUNUSU9OLFxuKSA9PiBuZXcgQ3JlYXRlU3RvcmVBc0ZuPElOSkVDVElPTiwgU1RPUkU+KHN0b3JlLCBpbmplY3Rpb25PcHRpb25zKTtcbiJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class DevToolHelper {\n constructor() {\n this._isTimeTravelActive = false;\n }\n setTimeTravelActive(isTimeTravelActive) {\n this._isTimeTravelActive = isTimeTravelActive;\n }\n isTimeTravelActive() {\n return this._isTimeTravelActive;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DevToolHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DevToolHelper, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: DevToolHelper, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXRvb2wtaGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3N0b3JlL3NyYy9zZXJ2aWNlcy9kZXYtdG9vbC1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUVVLHdCQUFtQixHQUFHLEtBQUssQ0FBQztLQVNyQztJQVBDLG1CQUFtQixDQUFDLGtCQUEyQjtRQUM3QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDOzhHQVRVLGFBQWE7a0hBQWIsYUFBYSxjQURBLE1BQU07OzJGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEZXZUb29sSGVscGVyIHtcbiAgcHJpdmF0ZSBfaXNUaW1lVHJhdmVsQWN0aXZlID0gZmFsc2U7XG5cbiAgc2V0VGltZVRyYXZlbEFjdGl2ZShpc1RpbWVUcmF2ZWxBY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1RpbWVUcmF2ZWxBY3RpdmUgPSBpc1RpbWVUcmF2ZWxBY3RpdmU7XG4gIH1cblxuICBpc1RpbWVUcmF2ZWxBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGltZVRyYXZlbEFjdGl2ZTtcbiAgfVxufVxuIl19","import { inject, Injectable, Injector, isDevMode } from '@angular/core';\nimport { Actions } from '@ngrx/effects';\nimport { Store as NgrxStore, ReducerManager, } from '@ngrx/store';\nimport { INITIAL_OPTIONS, StoreDevtools, } from '@ngrx/store-devtools';\nimport { filter, map, of, switchMap, take, takeUntil, tap } from 'rxjs';\nimport { LocalStoragePlugin, SessionStoragePlugin } from '../injection-tokens';\nimport { DynamicStoreName, SkipLogForStore, StateToken, StoreNameToken, } from '../injection-tokens/state.token';\nimport { getFullStoreName } from './action-creator';\nimport { DevToolHelper } from './dev-tool-helper.service';\nimport * as i0 from \"@angular/core\";\nexport const getStoreState = (store) => {\n try {\n return store.state();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (_error) {\n return undefined;\n }\n};\nexport class Store {\n constructor() {\n this.currentRunningStores = [];\n this.reducerManager = inject(ReducerManager);\n this.ngrxStore = inject(NgrxStore);\n this.actions = inject(Actions);\n this.sessionStoragePlugin = inject(SessionStoragePlugin, {\n optional: true,\n });\n this.localStoragePlugin = inject(LocalStoragePlugin, { optional: true });\n this.storeDevtools = inject(StoreDevtools, { optional: true });\n this.devToolHelper = inject(DevToolHelper);\n this.storeDevtoolsConfig = inject(INITIAL_OPTIONS, { optional: true });\n this.checkNgrxStoreIsInstalled();\n this.showHintForLowDevTool();\n }\n showHintForLowDevTool() {\n const minDevToolLimit = 5;\n if (this.storeDevtoolsConfig?.maxAge &&\n this.storeDevtoolsConfig.maxAge < minDevToolLimit) {\n console.warn(`DevTool maxAge is set to a low value, please increase it to ${minDevToolLimit} or higher. This could lead to problems with the store.`);\n }\n }\n checkForTimeTravel() {\n this.storeDevtools?.liftedState.subscribe({\n next: ({ currentStateIndex, stagedActionIds }) => {\n const isTimeTravelActive = currentStateIndex !== stagedActionIds.length - 1;\n this.devToolHelper.setTimeTravelActive(isTimeTravelActive);\n },\n });\n }\n addReducersForImportState() {\n this.storeDevtools?.liftedState.subscribe({\n next: ({ monitorState }) => {\n if (monitorState?.type === 'IMPORT_STATE') {\n const nextLiftedState = monitorState.nextLiftedState;\n const newStores = [\n ...new Set(nextLiftedState.stagedActionIds\n .map((id) => nextLiftedState.actionsById[id].action)\n .map(({ type }) => {\n const [, currentStoreName] = type.match(/^\\[COMPONENT_STORE\\]\\[(.*?)\\]/) || [];\n return currentStoreName;\n })\n .filter((currentStoreName) => !!currentStoreName)\n .filter((currentStoreName) => !this.reducerManager.currentReducers[currentStoreName])),\n ];\n this.reducerManager.addReducers(newStores.reduce((start, current) => ({\n ...start,\n [current]: this.getActionReducer(current, {}),\n }), {}));\n this.storeDevtools?.sweep();\n }\n },\n });\n }\n createStoreByStoreType({ additionalProviders = [], CreatedStore, defaultState, plugins = {}, skipLogForStore, storeName, }) {\n const { storage } = plugins;\n const dynamicStoreName = inject(DynamicStoreName, {\n optional: true,\n self: true,\n });\n const fullStoreName = getFullStoreName(storeName, dynamicStoreName);\n const initialState = this.getInitialState(storeName, defaultState, storage);\n const store = Injector.create({\n providers: [\n { provide: CreatedStore },\n { provide: DevToolHelper, useValue: this.devToolHelper },\n { provide: Actions, useValue: this.actions },\n { provide: NgrxStore, useValue: this.ngrxStore },\n { provide: StoreNameToken, useValue: fullStoreName },\n { provide: StateToken, useValue: initialState },\n { provide: SkipLogForStore, useValue: skipLogForStore },\n ...additionalProviders,\n ],\n }).get(CreatedStore);\n this.addStoreNameToInternalCache(fullStoreName);\n this.addStoreReducerToNgrx(fullStoreName, initialState);\n this.syncStoreChangesToClientStorage(fullStoreName, store, storage);\n this.syncNgrxDevtoolStateToStore(fullStoreName, store, skipLogForStore);\n this.removeReducerAfterDestroy(fullStoreName, store);\n return store;\n }\n addStoreNameToInternalCache(storeName) {\n if (isDevMode() && this.isStoreRunning(storeName)) {\n console.info(`A Store with name '${storeName}' is currently running, check if you missed to implement ngOnDestroy for this store`);\n }\n this.currentRunningStores.push(storeName);\n }\n getInitialState(storeName, defaultState, storage) {\n return (this.getStoragePluginByKey(storage)?.getDefaultState(storeName) ||\n defaultState);\n }\n getStoragePluginByKey(storage) {\n if (this.sessionStoragePlugin && storage === 'sessionStoragePlugin')\n return this.sessionStoragePlugin;\n if (this.localStoragePlugin && storage === 'localStoragePlugin')\n return this.localStoragePlugin;\n return;\n }\n addStoreReducerToNgrx(storeName, initialState) {\n if (this.reducerManager.currentReducers?.[storeName]) {\n return;\n }\n this.reducerManager.addReducer(storeName, this.getActionReducer(storeName, initialState));\n }\n getActionReducer(storeName, initialState) {\n return (state = initialState, action) => this.isActionTypeForCurrentStore(action.type, storeName)\n ? action.payload\n : state;\n }\n syncStoreChangesToClientStorage(storeName, store, storage) {\n store.state$.pipe(takeUntil(store.destroy$)).subscribe({\n next: (state) => this.getStoragePluginByKey(storage)?.setStateToStorage(storeName, state),\n });\n }\n syncNgrxDevtoolStateToStore(storeName, store, skipLogForStore) {\n if (skipLogForStore)\n return;\n this.storeDevtools?.liftedState.pipe(takeUntil(store.destroy$)).subscribe({\n next: ({ computedStates, currentStateIndex }) => {\n const currentStoreState = getStoreState(store);\n if (currentStoreState &&\n JSON.stringify(computedStates[currentStateIndex].state[storeName]) !==\n JSON.stringify(currentStoreState)) {\n store.setState(computedStates[currentStateIndex].state[storeName], '', {\n skipLog: true,\n forced: true,\n });\n }\n },\n });\n }\n removeReducerAfterDestroy(storeName, store) {\n store.destroy$\n .pipe(tap(() => (this.currentRunningStores = this.currentRunningStores.filter((name) => storeName !== name))), filter(() => !this.devToolHelper.isTimeTravelActive()), switchMap(() => this.storeDevtools?.liftedState || of({ actionsById: [] })), filter(() => !this.devToolHelper.isTimeTravelActive()), map(({ actionsById }) => actionsById), filter((actionsById) => !this.hasLiftedStateCurrentStoreActions(actionsById, storeName) &&\n !this.isStoreRunning(storeName)), take(1))\n .subscribe(() => {\n this.reducerManager.removeReducer(storeName);\n this.storeDevtools?.sweep();\n });\n }\n isStoreRunning(storeName) {\n return this.currentRunningStores.includes(storeName);\n }\n hasLiftedStateCurrentStoreActions(liftedActions, storeName) {\n return Object.keys(liftedActions)\n .map((actionId) => this.isActionTypeForCurrentStore(liftedActions[parseInt(actionId)].action.type, storeName))\n .includes(true);\n }\n isActionTypeForCurrentStore(actionType, storeName) {\n return actionType.startsWith(`[COMPONENT_STORE][${storeName}]`);\n }\n checkNgrxStoreIsInstalled() {\n if (!this.reducerManager || !this.ngrxStore) {\n throw '@ngrx/store is not imported. Please install `@ngrx/store` and import `StoreModule.forRoot({})` in your root module';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: Store, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: Store, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: Store, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc3RvcmUvc3JjL3NlcnZpY2VzL3N0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFHTCxLQUFLLElBQUksU0FBUyxFQUNsQixjQUFjLEdBQ2YsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9FLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBZTFELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUMzQixLQUE0QixFQUNULEVBQUU7SUFDckIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckIsNkRBQTZEO0lBQy9ELENBQUM7SUFBQyxPQUFPLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDLENBQUM7QUFH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QUM3QyxTQUFTLENBQ1YsQ0FDRjthQUNBLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRU8sMkJBQTJCLENBQ2pDLFVBQWtCLEVBQ2xCLFNBQWlCO1FBRWpCLE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sb0hBQW9ILENBQUM7UUFDN0gsQ0FBQztJQUNILENBQUM7OEdBblNVLEtBQUs7a0hBQUwsS0FBSyxjQURRLE1BQU07OzJGQUNuQixLQUFLO2tCQURqQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEFjdGlvblJlZHVjZXIsXG4gIFN0b3JlIGFzIE5ncnhTdG9yZSxcbiAgUmVkdWNlck1hbmFnZXIsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIElOSVRJQUxfT1BUSU9OUyxcbiAgTGlmdGVkU3RhdGUsXG4gIFN0b3JlRGV2dG9vbHMsXG59IGZyb20gJ0BuZ3J4L3N0b3JlLWRldnRvb2xzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlUGx1Z2luLCBTZXNzaW9uU3RvcmFnZVBsdWdpbiB9IGZyb20gJy4uL2luamVjdGlvbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgRHluYW1pY1N0b3JlTmFtZSxcbiAgU2tpcExvZ0ZvclN0b3JlLFxuICBTdGF0ZVRva2VuLFxuICBTdG9yZU5hbWVUb2tlbixcbn0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucy9zdGF0ZS50b2tlbic7XG5pbXBvcnQgeyBDbGllbnRTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGdldEZ1bGxTdG9yZU5hbWUgfSBmcm9tICcuL2FjdGlvbi1jcmVhdG9yJztcbmltcG9ydCB7IERldlRvb2xIZWxwZXIgfSBmcm9tICcuL2Rldi10b29sLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudExvYWRpbmdTdG9yZSB9IGZyb20gJy4vc3RvcmVzL2NvbXBvbmVudC1sb2FkaW5nLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9jb21wb25lbnQtc3RvcmUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlmdGVkQWN0aW9uIHtcbiAgdHlwZTogc3RyaW5nO1xuICBhY3Rpb246IEFjdGlvbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGlmdGVkQWN0aW9ucyB7XG4gIFtpZDogbnVtYmVyXTogTGlmdGVkQWN0aW9uO1xufVxuXG50eXBlIFN0b3JhZ2VQbHVnaW5UeXBlcyA9ICdzZXNzaW9uU3RvcmFnZVBsdWdpbicgfCAnbG9jYWxTdG9yYWdlUGx1Z2luJztcbnR5cGUgU3RvcmVzID0gdHlwZW9mIENvbXBvbmVudFN0b3JlIHwgdHlwZW9mIENvbXBvbmVudExvYWRpbmdTdG9yZTtcblxuZXhwb3J0IGNvbnN0IGdldFN0b3JlU3RhdGUgPSA8U1RBVEUgZXh0ZW5kcyBvYmplY3Q+KFxuICBzdG9yZTogQ29tcG9uZW50U3RvcmU8U1RBVEU+LFxuKTogU1RBVEUgfCB1bmRlZmluZWQgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBzdG9yZS5zdGF0ZSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoX2Vycm9yKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZSB7XG4gIHByaXZhdGUgY3VycmVudFJ1bm5pbmdTdG9yZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVkdWNlck1hbmFnZXIgPSBpbmplY3QoUmVkdWNlck1hbmFnZXIpO1xuICBwcml2YXRlIG5ncnhTdG9yZSA9IGluamVjdChOZ3J4U3RvcmUpO1xuICBwcml2YXRlIGFjdGlvbnMgPSBpbmplY3QoQWN0aW9ucyk7XG5cbiAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVBsdWdpbiA9IGluamVjdChTZXNzaW9uU3RvcmFnZVBsdWdpbiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VQbHVnaW4gPSBpbmplY3QoTG9jYWxTdG9yYWdlUGx1Z2luLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgc3RvcmVEZXZ0b29scyA9IGluamVjdChTdG9yZURldnRvb2xzLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGRldlRvb2xIZWxwZXIgPSBpbmplY3QoRGV2VG9vbEhlbHBlcik7XG4gIHByaXZhdGUgc3RvcmVEZXZ0b29sc0NvbmZpZyA9IGluamVjdChJTklUSUFMX09QVElPTlMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGVja05ncnhTdG9yZUlzSW5zdGFsbGVkKCk7XG4gICAgdGhpcy5zaG93SGludEZvckxvd0RldlRvb2woKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0hpbnRGb3JMb3dEZXZUb29sKCkge1xuICAgIGNvbnN0IG1pbkRldlRvb2xMaW1pdCA9IDU7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdG9yZURldnRvb2xzQ29uZmlnPy5tYXhBZ2UgJiZcbiAgICAgIHRoaXMuc3RvcmVEZXZ0b29sc0NvbmZpZy5tYXhBZ2UgPCBtaW5EZXZUb29sTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYERldlRvb2wgbWF4QWdlIGlzIHNldCB0byBhIGxvdyB2YWx1ZSwgcGxlYXNlIGluY3JlYXNlIGl0IHRvICR7bWluRGV2VG9vbExpbWl0fSBvciBoaWdoZXIuIFRoaXMgY291bGQgbGVhZCB0byBwcm9ibGVtcyB3aXRoIHRoZSBzdG9yZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hlY2tGb3JUaW1lVHJhdmVsKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmVEZXZ0b29scz8ubGlmdGVkU3RhdGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh7IGN1cnJlbnRTdGF0ZUluZGV4LCBzdGFnZWRBY3Rpb25JZHMgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc1RpbWVUcmF2ZWxBY3RpdmUgPVxuICAgICAgICAgIGN1cnJlbnRTdGF0ZUluZGV4ICE9PSBzdGFnZWRBY3Rpb25JZHMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5kZXZUb29sSGVscGVyLnNldFRpbWVUcmF2ZWxBY3RpdmUoaXNUaW1lVHJhdmVsQWN0aXZlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkUmVkdWNlcnNGb3JJbXBvcnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlRGV2dG9vbHM/LmxpZnRlZFN0YXRlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoeyBtb25pdG9yU3RhdGUgfSkgPT4ge1xuICAgICAgICBpZiAobW9uaXRvclN0YXRlPy50eXBlID09PSAnSU1QT1JUX1NUQVRFJykge1xuICAgICAgICAgIGNvbnN0IG5leHRMaWZ0ZWRTdGF0ZTogTGlmdGVkU3RhdGUgPSBtb25pdG9yU3RhdGUubmV4dExpZnRlZFN0YXRlO1xuICAgICAgICAgIGNvbnN0IG5ld1N0b3JlcyA9IFtcbiAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgIG5leHRMaWZ0ZWRTdGF0ZS5zdGFnZWRBY3Rpb25JZHNcbiAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gbmV4dExpZnRlZFN0YXRlLmFjdGlvbnNCeUlkW2lkXS5hY3Rpb24pXG4gICAgICAgICAgICAgICAgLm1hcCgoeyB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IFssIGN1cnJlbnRTdG9yZU5hbWVdID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZS5tYXRjaCgvXlxcW0NPTVBPTkVOVF9TVE9SRVxcXVxcWyguKj8pXFxdLykgfHwgW107XG4gICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0b3JlTmFtZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGN1cnJlbnRTdG9yZU5hbWUpID0+ICEhY3VycmVudFN0b3JlTmFtZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTdG9yZU5hbWUpID0+XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLnJlZHVjZXJNYW5hZ2VyLmN1cnJlbnRSZWR1Y2Vyc1tjdXJyZW50U3RvcmVOYW1lXSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcnMoXG4gICAgICAgICAgICBuZXdTdG9yZXMucmVkdWNlKFxuICAgICAgICAgICAgICAoc3RhcnQsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uc3RhcnQsXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRdOiB0aGlzLmdldEFjdGlvblJlZHVjZXIoY3VycmVudCwge30pLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zdG9yZURldnRvb2xzPy5zd2VlcCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN0b3JlQnlTdG9yZVR5cGU8XG4gICAgQ1JFQVRFRF9TVE9SRSBleHRlbmRzIENvbXBvbmVudFN0b3JlPFNUQVRFPixcbiAgICBTVEFURSBleHRlbmRzIG9iamVjdCxcbiAgPih7XG4gICAgYWRkaXRpb25hbFByb3ZpZGVycyA9IFtdLFxuICAgIENyZWF0ZWRTdG9yZSxcbiAgICBkZWZhdWx0U3RhdGUsXG4gICAgcGx1Z2lucyA9IHt9LFxuICAgIHNraXBMb2dGb3JTdG9yZSxcbiAgICBzdG9yZU5hbWUsXG4gIH06IHtcbiAgICBhZGRpdGlvbmFsUHJvdmlkZXJzPzogbmV2ZXJbXTtcbiAgICBDcmVhdGVkU3RvcmU6IFN0b3JlcztcbiAgICBkZWZhdWx0U3RhdGU6IFNUQVRFO1xuICAgIHBsdWdpbnM/OiB7IHN0b3JhZ2U/OiBTdG9yYWdlUGx1Z2luVHlwZXMgfTtcbiAgICBza2lwTG9nRm9yU3RvcmU/OiBib29sZWFuO1xuICAgIHN0b3JlTmFtZTogc3RyaW5nO1xuICB9KTogQ1JFQVRFRF9TVE9SRSB7XG4gICAgY29uc3QgeyBzdG9yYWdlIH0gPSBwbHVnaW5zO1xuICAgIGNvbnN0IGR5bmFtaWNTdG9yZU5hbWUgPSBpbmplY3QoRHluYW1pY1N0b3JlTmFtZSwge1xuICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICBzZWxmOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IGZ1bGxTdG9yZU5hbWUgPSBnZXRGdWxsU3RvcmVOYW1lKHN0b3JlTmFtZSwgZHluYW1pY1N0b3JlTmFtZSk7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGU8U1RBVEU+KFxuICAgICAgc3RvcmVOYW1lLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICAgc3RvcmFnZSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RvcmU6IENvbXBvbmVudFN0b3JlPFNUQVRFPiA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBDcmVhdGVkU3RvcmUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBEZXZUb29sSGVscGVyLCB1c2VWYWx1ZTogdGhpcy5kZXZUb29sSGVscGVyIH0sXG4gICAgICAgIHsgcHJvdmlkZTogQWN0aW9ucywgdXNlVmFsdWU6IHRoaXMuYWN0aW9ucyB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5ncnhTdG9yZSwgdXNlVmFsdWU6IHRoaXMubmdyeFN0b3JlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogU3RvcmVOYW1lVG9rZW4sIHVzZVZhbHVlOiBmdWxsU3RvcmVOYW1lIH0sXG4gICAgICAgIHsgcHJvdmlkZTogU3RhdGVUb2tlbiwgdXNlVmFsdWU6IGluaXRpYWxTdGF0ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IFNraXBMb2dGb3JTdG9yZSwgdXNlVmFsdWU6IHNraXBMb2dGb3JTdG9yZSB9LFxuICAgICAgICAuLi5hZGRpdGlvbmFsUHJvdmlkZXJzLFxuICAgICAgXSxcbiAgICB9KS5nZXQoQ3JlYXRlZFN0b3JlKSBhcyB1bmtub3duIGFzIENSRUFURURfU1RPUkU7XG5cbiAgICB0aGlzLmFkZFN0b3JlTmFtZVRvSW50ZXJuYWxDYWNoZShmdWxsU3RvcmVOYW1lKTtcbiAgICB0aGlzLmFkZFN0b3JlUmVkdWNlclRvTmdyeDxTVEFURT4oZnVsbFN0b3JlTmFtZSwgaW5pdGlhbFN0YXRlKTtcbiAgICB0aGlzLnN5bmNTdG9yZUNoYW5nZXNUb0NsaWVudFN0b3JhZ2UoZnVsbFN0b3JlTmFtZSwgc3RvcmUsIHN0b3JhZ2UpO1xuICAgIHRoaXMuc3luY05ncnhEZXZ0b29sU3RhdGVUb1N0b3JlPFNUQVRFPihcbiAgICAgIGZ1bGxTdG9yZU5hbWUsXG4gICAgICBzdG9yZSxcbiAgICAgIHNraXBMb2dGb3JTdG9yZSxcbiAgICApO1xuICAgIHRoaXMucmVtb3ZlUmVkdWNlckFmdGVyRGVzdHJveTxTVEFURT4oZnVsbFN0b3JlTmFtZSwgc3RvcmUpO1xuXG4gICAgcmV0dXJuIHN0b3JlIGFzIENSRUFURURfU1RPUkU7XG4gIH1cblxuICBhZGRTdG9yZU5hbWVUb0ludGVybmFsQ2FjaGUoc3RvcmVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdGhpcy5pc1N0b3JlUnVubmluZyhzdG9yZU5hbWUpKSB7XG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGBBIFN0b3JlIHdpdGggbmFtZSAnJHtzdG9yZU5hbWV9JyBpcyBjdXJyZW50bHkgcnVubmluZywgY2hlY2sgaWYgeW91IG1pc3NlZCB0byBpbXBsZW1lbnQgbmdPbkRlc3Ryb3kgZm9yIHRoaXMgc3RvcmVgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UnVubmluZ1N0b3Jlcy5wdXNoKHN0b3JlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxTdGF0ZTxTVEFURT4oXG4gICAgc3RvcmVOYW1lOiBzdHJpbmcsXG4gICAgZGVmYXVsdFN0YXRlOiBTVEFURSxcbiAgICBzdG9yYWdlPzogU3RvcmFnZVBsdWdpblR5cGVzLFxuICApOiBTVEFURSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ2V0U3RvcmFnZVBsdWdpbkJ5S2V5KHN0b3JhZ2UpPy5nZXREZWZhdWx0U3RhdGUoc3RvcmVOYW1lKSB8fFxuICAgICAgZGVmYXVsdFN0YXRlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmFnZVBsdWdpbkJ5S2V5KFxuICAgIHN0b3JhZ2U/OiBTdG9yYWdlUGx1Z2luVHlwZXMsXG4gICk6IENsaWVudFN0b3JhZ2VQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlUGx1Z2luICYmIHN0b3JhZ2UgPT09ICdzZXNzaW9uU3RvcmFnZVBsdWdpbicpXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uU3RvcmFnZVBsdWdpbjtcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VQbHVnaW4gJiYgc3RvcmFnZSA9PT0gJ2xvY2FsU3RvcmFnZVBsdWdpbicpXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2VQbHVnaW47XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTdG9yZVJlZHVjZXJUb05ncng8U1RBVEU+KFxuICAgIHN0b3JlTmFtZTogc3RyaW5nLFxuICAgIGluaXRpYWxTdGF0ZTogU1RBVEUsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZHVjZXJNYW5hZ2VyLmN1cnJlbnRSZWR1Y2Vycz8uW3N0b3JlTmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZWR1Y2VyTWFuYWdlci5hZGRSZWR1Y2VyKFxuICAgICAgc3RvcmVOYW1lLFxuICAgICAgdGhpcy5nZXRBY3Rpb25SZWR1Y2VyKHN0b3JlTmFtZSwgaW5pdGlhbFN0YXRlKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3Rpb25SZWR1Y2VyPFNUQVRFPihcbiAgICBzdG9yZU5hbWU6IHN0cmluZyxcbiAgICBpbml0aWFsU3RhdGU6IFNUQVRFLFxuICApOiBBY3Rpb25SZWR1Y2VyPFNUQVRFLCB7IHBheWxvYWQ6IFNUQVRFOyB0eXBlOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdGF0ZTogU1RBVEUgPSBpbml0aWFsU3RhdGUsXG4gICAgICBhY3Rpb246IHsgcGF5bG9hZDogU1RBVEU7IHR5cGU6IHN0cmluZyB9LFxuICAgICk6IFNUQVRFID0+XG4gICAgI