@nlabs/arkhamjs 3.31.7 → 3.31.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
- import type { FluxAction, FluxMiddlewareType, FluxOptions, FluxStore } from './Flux.types';
2
+ import type { FluxAction, FluxMiddlewareType, FluxOptions, FluxStore } from './Flux.types.js';
3
3
  export declare class FluxFramework extends EventEmitter {
4
4
  static initFlux: boolean;
5
5
  isInit: boolean;
@@ -28,7 +28,7 @@ export declare class FluxFramework extends EventEmitter {
28
28
  addStores(stores: FluxStore[]): Promise<FluxStore[]>;
29
29
  removeMiddleware(names: string[]): void;
30
30
  reset(clearStorage?: boolean): Promise<void>;
31
- setState(path: string | string[] | undefined, value: unknown): Promise<boolean>;
31
+ setState(path: string | string[], value: unknown): Promise<boolean>;
32
32
  private processMiddleware;
33
33
  private updateStorage;
34
34
  private updateStoresState;
@@ -40,3 +40,4 @@ export declare class FluxFramework extends EventEmitter {
40
40
  private useStorage;
41
41
  }
42
42
  export declare const Flux: FluxFramework;
43
+ //# sourceMappingURL=Flux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flux.d.ts","sourceRoot":"","sources":["../../src/Flux/Flux.ts"],"names":[],"mappings":"AAUA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAC;AAIpC,OAAO,KAAK,EAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAkB,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAK5G,qBAAa,aAAc,SAAQ,YAAY;IAC7C,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAS;IACjC,MAAM,EAAE,OAAO,CAAS;IAExB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAA4C;IAEnF,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAO7B;IACF,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,YAAY,CAAkB;;IA0BtC,aAAa,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,IAAI;IA8BrD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBhC,eAAe,IAAI,OAAO;IAO1B,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAIlC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IA6DhF,UAAU,IAAI,WAAW;IAIzB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,GAAE,MAAM,GAAG,MAAM,EAAO,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;IAsBxE,QAAQ,CAAC,IAAI,GAAE,MAAW,GAAG,SAAS,GAAG,SAAS;IAI5C,IAAI,CAAC,OAAO,GAAE,WAAgB,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IAiDrF,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQhD,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIxC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIhE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIlE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAe1D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAQjC,KAAK,CAAC,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAgB1D,iBAAiB;IAoB/B,OAAO,CAAC,aAAa,CAAwD;IAE7E,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,QAAQ;IA6ChB,OAAO,CAAC,YAAY;YAKN,UAAU;CAmBzB;AAED,eAAO,MAAM,IAAI,EAAE,aAAmC,CAAC"}
package/lib/Flux/Flux.js CHANGED
@@ -1,5 +1,410 @@
1
- /* ArkhamJS - Optimized Build */
2
- var y=Object.defineProperty;var S=(c,h,t)=>h in c?y(c,h,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[h]=t;var n=(c,h,t)=>S(c,typeof h!="symbol"?h+"":h,t);import{cloneDeep as l,debounceCompact as x,get as v,merge as F,parseStack as k,set as A}from"@nlabs/utils";import{EventEmitter as T}from"events";import{ArkhamConstants as g}from"../constants/ArkhamConstants";const u=new Map,b=100;class f extends T{constructor(){super();n(this,"isInit",!1);n(this,"pluginTypes",["preDispatch","postDispatch"]);n(this,"state",{});n(this,"storeActions",{});n(this,"defaultOptions",{name:"arkhamjs",routerType:"browser",scrollToTop:!0,storageWait:300,stores:[],title:"ArkhamJS"});n(this,"middleware",{});n(this,"options",this.defaultOptions);n(this,"stateCache",new Map);n(this,"stateChanged",!1);n(this,"updateStorage",()=>Promise.resolve(!1));this.addMiddleware=this.addMiddleware.bind(this),this.addStores=this.addStores.bind(this),this.clearAppData=this.clearAppData.bind(this),this.clearMiddleware=this.clearMiddleware.bind(this),this.deregister=this.deregister.bind(this),this.dispatch=this.dispatch.bind(this),this.getOptions=this.getOptions.bind(this),this.getState=this.getState.bind(this),this.getStore=this.getStore.bind(this),this.init=this.init.bind(this),this.off=this.off.bind(this),this.register=this.register.bind(this),this.removeMiddleware=this.removeMiddleware.bind(this),this.removeStores=this.removeStores.bind(this),this.reset=this.reset.bind(this),this.setState=this.setState.bind(this),this.pluginTypes.forEach(t=>this.middleware[`${t}List`]=[])}addMiddleware(t){t.forEach(e=>{if(!e||typeof e!="function"&&typeof e!="object")throw Error("Unknown middleware is not configured properly. Cannot add to Flux.");const s=e.name||"";if(!s)throw Error("Unknown middleware is not configured properly. Requires name property. Cannot add to Flux.");this.middleware.preDispatchList?.find(r=>r.name===s)||this.middleware.postDispatchList?.find(r=>r.name===s)||this.pluginTypes.forEach(r=>{const a=e[r];if(a&&typeof a=="function"){const o={method:a,name:s};this.middleware[`${r}List`]=this.addPlugin(r,o)}})})}clearAppData(){Object.keys(this.storeActions).forEach(s=>{const i=this.storeActions[s];i&&(this.state[i.name]=i.initialState)}),this.stateCache.clear(),this.stateChanged=!0;const{name:t,storage:e}=this.options;return e?.setStorageData?e.setStorageData(t??"arkhamjs",this.state):Promise.resolve(!0)}clearMiddleware(){return Object.keys(this.middleware).forEach(t=>{this.middleware[t]=[]}),!0}removeStores(t){t.forEach(e=>this.deregister(e))}async dispatch(t,e=!1){if(!t)throw new Error("ArkhamJS Error: Flux.dispatch requires an action.");const s=Date.now();let i=l(t),r=[];this.options.debug&&(r=this.getCachedStack());const a={duration:0,options:this.options,stack:r},{postDispatchList:o=[],preDispatchList:p=[]}=this.middleware;p.length&&(i=await this.processMiddleware(p,i,a));const{type:d,...m}=i;if(!d||d==="")return Promise.resolve(i);if(this.updateStoresState(d,m),this.stateChanged&&this.options.storage&&this.updateStorage)try{await this.updateStorage(),this.stateChanged=!1}catch{}const w=Date.now()-s;return a.duration=w,o.length&&(i=await this.processMiddleware(o,i,a)),e||(this.emit(d,i),this.emit("arkhamjs",this.state)),Promise.resolve(i)}getOptions(){return this.options}getState(t="",e){const s=Array.isArray(t)?t.join("."):t;if(this.stateCache.has(s))return this.stateCache.get(s);let i;t?i=v(this.state,t):i=this.state||{};const r=i&&l(i),a=r===void 0?e:r;return this.stateCache.set(s,a),a}getStore(t=""){return this.storeActions[t]}async init(t={},e=!1){e&&(this.isInit=!1,await this.reset(!1));const s={...t};this.isInit&&this.options.name&&(s.name=this.options.name),this.options={...this.defaultOptions,...s};const{debug:i,middleware:r,name:a,stores:o}=this.options;try{await this.useStorage(a??"arkhamjs")}catch(d){throw d}if(o?.length)try{await this.addStores(o)}catch(d){throw d}r?.length&&this.addMiddleware(r);const p="arkhamjs";return i?window[p]=this:delete window[p],this.isInit=!0,this.emit(g.INIT),this}onInit(t){this.on(g.INIT,t),this.isInit&&t()}offInit(t){this.off(g.INIT,t)}off(t,e){return this.removeListener(t,e)}on(t,e){return this.addListener(t,e)}async addStores(t){const e=t.map(r=>this.register(r)),{name:s,storage:i}=this.options;if(i?.setStorageData)try{await i.setStorageData(s??"arkhamjs",this.state)}catch(r){throw r}return e}removeMiddleware(t){t.forEach(e=>{this.pluginTypes.forEach(s=>{this.middleware[`${s}List`]=this.removePlugin(s,e)})})}async reset(t=!0){const{name:e,storage:s}=this.options;if(s&&t)try{await s.setStorageData?.(e??"arkhamjs",{})}catch(i){throw i}this.middleware={},this.options={...this.defaultOptions},this.state={},this.storeActions={},this.stateCache.clear(),this.stateChanged=!1,this.isInit=!1,this.pluginTypes.forEach(i=>this.middleware[`${i}List`]=[])}setState(t="",e){if(t){this.state=A(this.state,t,l(e)),this.stateChanged=!0;const s=Array.isArray(t)?t.join("."):t;this.stateCache.delete(s)}return this.options.storage&&this.updateStorage?this.updateStorage():Promise.resolve(!1)}async processMiddleware(t,e,s){return Promise.all(t.map(i=>i.method(l(e),l(this.state),s))).then(i=>i.reduce((r,a)=>F(r,a),e)).catch(i=>{throw i})}updateStoresState(t,e){Object.keys(this.storeActions).forEach(s=>{const i=this.storeActions[s];if(i){const r=this.state[s]||i.initialState||{},a=i.action(t,e,r);a!==r&&(this.state[s]=l(a)||r,this.stateChanged=!0)}})}getCachedStack(){const t=new Error().stack?.split(`
3
- `)[2]||"";if(u.has(t))return u.get(t);let e=[];try{const s="stackTraceLimit",i=Error.stackTraceLimit;if(Error[s]=1/0,e=k(new Error),Error[s]=i,u.size>=b){const r=u.keys().next().value;r&&u.delete(r)}u.set(t,e)}catch{}return e}addPlugin(t,e){const s=this.middleware[`${t}List`]||[],{method:i,name:r}=e;if(i&&typeof i=="function")s.some(o=>o.name===r)||s.push({method:i,name:r});else if(i!==void 0)throw Error(`${e.name} middleware is not configured properly. Method is not a function.`);return s}deregister(t=""){delete this.storeActions[t],delete this.state[t],this.stateCache.clear()}register(t){if(!t)throw Error("Store is undefined. Cannot register with Flux.");let e,s,i;if(typeof t=="function")e=t.name||"anonymous",s=t,i=t();else if(typeof t?.action=="function")e=t.name||"anonymous",s=t.action,i=t.initialState||t.action();else throw Error(`${t} is not a valid store. Must be a function or object with action method.`);if(!e||e==="anonymous")return;const r={action:s,initialState:i,name:e};return this.storeActions[e]||(this.storeActions[e]=r,this.state[e]||(this.state[e]=l(i||{}))),this.storeActions[e]}removePlugin(t,e){return(this.middleware[`${t}List`]||[]).filter(i=>i.name!==e)}async useStorage(t){const{storage:e,state:s,storageWait:i}=this.options;if(e)try{this.state=s||await e?.getStorageData?.(t)||{},this.updateStorage=x(()=>e?.setStorageData?.(t,this.state),i??300)}catch(r){throw r}else this.state=s||{}}}n(f,"initFlux",!1);const I=new f;export{I as Flux,f as FluxFramework};
4
- /* End ArkhamJS */
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0ZsdXgvRmx1eC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwLCBkZWJvdW5jZUNvbXBhY3QsIGdldCwgbWVyZ2UsIHBhcnNlU3RhY2ssIHNldH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdldmVudHMnO1xuXG5pbXBvcnQge0Fya2hhbUNvbnN0YW50c30gZnJvbSAnLi4vY29uc3RhbnRzL0Fya2hhbUNvbnN0YW50cyc7XG5cbmltcG9ydCB0eXBlIHtGbHV4QWN0aW9uLCBGbHV4TWlkZGxld2FyZVR5cGUsIEZsdXhPcHRpb25zLCBGbHV4UGx1Z2luVHlwZSwgRmx1eFN0b3JlfSBmcm9tICcuL0ZsdXgudHlwZXMnO1xuXG5jb25zdCBTVEFDS19DQUNIRSA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbmNvbnN0IFNUQUNLX0NBQ0hFX1NJWkUgPSAxMDA7XG5cbmV4cG9ydCBjbGFzcyBGbHV4RnJhbWV3b3JrIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgc3RhdGljIGluaXRGbHV4OiBib29sZWFuID0gZmFsc2U7XG4gIGlzSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IHBsdWdpblR5cGVzOiByZWFkb25seSBzdHJpbmdbXSA9IFsncHJlRGlzcGF0Y2gnLCAncG9zdERpc3BhdGNoJ10gYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSBzdGF0ZTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBwcml2YXRlIHN0b3JlQWN0aW9uczogUmVjb3JkPHN0cmluZywgRmx1eFN0b3JlPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRPcHRpb25zOiBGbHV4T3B0aW9ucyA9IHtcbiAgICBuYW1lOiAnYXJraGFtanMnLFxuICAgIHJvdXRlclR5cGU6ICdicm93c2VyJyxcbiAgICBzY3JvbGxUb1RvcDogdHJ1ZSxcbiAgICBzdG9yYWdlV2FpdDogMzAwLFxuICAgIHN0b3JlczogW10sXG4gICAgdGl0bGU6ICdBcmtoYW1KUydcbiAgfTtcbiAgcHJpdmF0ZSBtaWRkbGV3YXJlOiBSZWNvcmQ8c3RyaW5nLCBGbHV4UGx1Z2luVHlwZVtdPiA9IHt9O1xuICBwcml2YXRlIG9wdGlvbnM6IEZsdXhPcHRpb25zID0gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0ZUNhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHN0YXRlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBCaW5kIG1ldGhvZHMgb25jZSBpbiBjb25zdHJ1Y3RvciBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgdGhpcy5hZGRNaWRkbGV3YXJlID0gdGhpcy5hZGRNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hZGRTdG9yZXMgPSB0aGlzLmFkZFN0b3Jlcy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2xlYXJBcHBEYXRhID0gdGhpcy5jbGVhckFwcERhdGEuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyTWlkZGxld2FyZSA9IHRoaXMuY2xlYXJNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kZXJlZ2lzdGVyID0gdGhpcy5kZXJlZ2lzdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kaXNwYXRjaCA9IHRoaXMuZGlzcGF0Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldFN0YXRlID0gdGhpcy5nZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0U3RvcmUgPSB0aGlzLmdldFN0b3JlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5pbml0ID0gdGhpcy5pbml0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5vZmYgPSB0aGlzLm9mZi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXIgPSB0aGlzLnJlZ2lzdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVNaWRkbGV3YXJlID0gdGhpcy5yZW1vdmVNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVTdG9yZXMgPSB0aGlzLnJlbW92ZVN0b3Jlcy5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVzZXQgPSB0aGlzLnJlc2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXRTdGF0ZSA9IHRoaXMuc2V0U3RhdGUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gPSBbXSk7XG4gIH1cblxuICBhZGRNaWRkbGV3YXJlKG1pZGRsZXdhcmU6IEZsdXhNaWRkbGV3YXJlVHlwZVtdKTogdm9pZCB7XG4gICAgbWlkZGxld2FyZS5mb3JFYWNoKChtaWRkbGVPYmo6IEZsdXhNaWRkbGV3YXJlVHlwZSkgPT4ge1xuICAgICAgaWYoIW1pZGRsZU9iaiB8fCAodHlwZW9mIG1pZGRsZU9iaiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWlkZGxlT2JqICE9PSAnb2JqZWN0JykpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gbWlkZGxld2FyZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gQ2Fubm90IGFkZCB0byBGbHV4LicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaWRkbGVOYW1lOiBzdHJpbmcgPSBtaWRkbGVPYmoubmFtZSB8fCAnJztcbiAgICAgIGlmKCFtaWRkbGVOYW1lKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdVbmtub3duIG1pZGRsZXdhcmUgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuIFJlcXVpcmVzIG5hbWUgcHJvcGVydHkuIENhbm5vdCBhZGQgdG8gRmx1eC4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhpc3RpbmdNaWRkbGV3YXJlID0gdGhpcy5taWRkbGV3YXJlLnByZURpc3BhdGNoTGlzdD8uZmluZCgobSkgPT4gbS5uYW1lID09PSBtaWRkbGVOYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pZGRsZXdhcmUucG9zdERpc3BhdGNoTGlzdD8uZmluZCgobSkgPT4gbS5uYW1lID09PSBtaWRkbGVOYW1lKTtcblxuICAgICAgaWYoZXhpc3RpbmdNaWRkbGV3YXJlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgTWlkZGxld2FyZSBcIiR7bWlkZGxlTmFtZX1cIiBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgZHVwbGljYXRlLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1pZGRsZU9ialt0eXBlIGFzIGtleW9mIEZsdXhNaWRkbGV3YXJlVHlwZV07XG4gICAgICAgIGlmKG1ldGhvZCAmJiB0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcGx1Z2luOiBGbHV4UGx1Z2luVHlwZSA9IHttZXRob2QsIG5hbWU6IG1pZGRsZU5hbWV9O1xuICAgICAgICAgIHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSA9IHRoaXMuYWRkUGx1Z2luKHR5cGUsIHBsdWdpbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJBcHBEYXRhKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RvcmVBY3Rpb25zKS5mb3JFYWNoKChzdG9yZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVGbiA9IHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV07XG4gICAgICBpZihzdG9yZUZuKSB7XG4gICAgICAgIHRoaXMuc3RhdGVbc3RvcmVGbi5uYW1lXSA9IHN0b3JlRm4uaW5pdGlhbFN0YXRlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuICAgIGlmKHN0b3JhZ2U/LnNldFN0b3JhZ2VEYXRhKSB7XG4gICAgICByZXR1cm4gc3RvcmFnZS5zZXRTdG9yYWdlRGF0YShuYW1lID8/ICdhcmtoYW1qcycsIHRoaXMuc3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gIH1cblxuICBjbGVhck1pZGRsZXdhcmUoKTogYm9vbGVhbiB7XG4gICAgT2JqZWN0LmtleXModGhpcy5taWRkbGV3YXJlKS5mb3JFYWNoKChwbHVnaW5UeXBlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMubWlkZGxld2FyZVtwbHVnaW5UeXBlXSA9IFtdO1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVtb3ZlU3RvcmVzKHN0b3JlTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgc3RvcmVOYW1lcy5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHRoaXMuZGVyZWdpc3RlcihuYW1lKSk7XG4gIH1cblxuICBhc3luYyBkaXNwYXRjaChhY3Rpb246IEZsdXhBY3Rpb24sIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiB7XG4gICAgaWYoIWFjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmtoYW1KUyBFcnJvcjogRmx1eC5kaXNwYXRjaCByZXF1aXJlcyBhbiBhY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRUaW1lOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuXG4gICAgbGV0IGNsb25lZEFjdGlvbjogRmx1eEFjdGlvbiA9IGNsb25lRGVlcChhY3Rpb24pO1xuXG4gICAgbGV0IHN0YWNrOiBhbnlbXSA9IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgc3RhY2sgPSB0aGlzLmdldENhY2hlZFN0YWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwSW5mbyA9IHtcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgc3RhY2tcbiAgICB9O1xuXG4gICAgY29uc3Qge3Bvc3REaXNwYXRjaExpc3QgPSBbXSwgcHJlRGlzcGF0Y2hMaXN0ID0gW119ID0gdGhpcy5taWRkbGV3YXJlO1xuXG4gICAgaWYocHJlRGlzcGF0Y2hMaXN0Lmxlbmd0aCkge1xuICAgICAgY2xvbmVkQWN0aW9uID0gYXdhaXQgdGhpcy5wcm9jZXNzTWlkZGxld2FyZShwcmVEaXNwYXRjaExpc3QsIGNsb25lZEFjdGlvbiwgYXBwSW5mbyk7XG4gICAgfVxuXG4gICAgY29uc3Qge3R5cGUsIC4uLmRhdGF9ID0gY2xvbmVkQWN0aW9uO1xuXG4gICAgaWYoIXR5cGUgfHwgdHlwZSA9PT0gJycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oJ0Fya2hhbUpTIFdhcm5pbmc6IEZsdXguZGlzcGF0Y2ggaXMgbWlzc2luZyBhbiBhY3Rpb24gdHlwZSBmb3IgdGhlIHBheWxvYWQ6JywgZGF0YSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lZEFjdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdG9yZXNTdGF0ZSh0eXBlLCBkYXRhKTtcblxuICAgIGlmKHRoaXMuc3RhdGVDaGFuZ2VkICYmIHRoaXMub3B0aW9ucy5zdG9yYWdlICYmIHRoaXMudXBkYXRlU3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdG9yYWdlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1N0b3JhZ2UgdXBkYXRlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb246IG51bWJlciA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgYXBwSW5mby5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXG4gICAgaWYocG9zdERpc3BhdGNoTGlzdC5sZW5ndGgpIHtcbiAgICAgIGNsb25lZEFjdGlvbiA9IGF3YWl0IHRoaXMucHJvY2Vzc01pZGRsZXdhcmUocG9zdERpc3BhdGNoTGlzdCwgY2xvbmVkQWN0aW9uLCBhcHBJbmZvKTtcbiAgICB9XG5cbiAgICBpZighc2lsZW50KSB7XG4gICAgICB0aGlzLmVtaXQodHlwZSwgY2xvbmVkQWN0aW9uKTtcbiAgICAgIHRoaXMuZW1pdCgnYXJraGFtanMnLCB0aGlzLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lZEFjdGlvbik7XG4gIH1cblxuICBnZXRPcHRpb25zKCk6IEZsdXhPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICB9XG5cbiAgZ2V0U3RhdGU8VCA9IHVua25vd24+KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdID0gJycsIGRlZmF1bHRWYWx1ZT86IFQpOiBUIHtcbiAgICBjb25zdCBwYXRoS2V5ID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguam9pbignLicpIDogcGF0aDtcblxuICAgIGlmKHRoaXMuc3RhdGVDYWNoZS5oYXMocGF0aEtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlQ2FjaGUuZ2V0KHBhdGhLZXkpIGFzIFQ7XG4gICAgfVxuXG4gICAgbGV0IHN0b3JlVmFsdWU6IHVua25vd247XG4gICAgaWYoIXBhdGgpIHtcbiAgICAgIHN0b3JlVmFsdWUgPSB0aGlzLnN0YXRlIHx8IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yZVZhbHVlID0gZ2V0KHRoaXMuc3RhdGUsIHBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc3RvcmVWYWx1ZSA/IGNsb25lRGVlcChzdG9yZVZhbHVlKSA6IHN0b3JlVmFsdWU7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuXG4gICAgdGhpcy5zdGF0ZUNhY2hlLnNldChwYXRoS2V5LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgZ2V0U3RvcmUobmFtZTogc3RyaW5nID0gJycpOiBGbHV4U3RvcmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0b3JlQWN0aW9uc1tuYW1lXTtcbiAgfVxuXG4gIGFzeW5jIGluaXQob3B0aW9uczogRmx1eE9wdGlvbnMgPSB7fSwgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Rmx1eEZyYW1ld29yaz4ge1xuICAgIGlmKHJlc2V0KSB7XG4gICAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuICAgICAgYXdhaXQgdGhpcy5yZXNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7Li4ub3B0aW9uc307XG4gICAgaWYodGhpcy5pc0luaXQgJiYgdGhpcy5vcHRpb25zLm5hbWUpIHtcbiAgICAgIHVwZGF0ZWRPcHRpb25zLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4udGhpcy5kZWZhdWx0T3B0aW9ucywgLi4udXBkYXRlZE9wdGlvbnN9O1xuICAgIGNvbnN0IHtkZWJ1ZywgbWlkZGxld2FyZSwgbmFtZSwgc3RvcmVzfSA9IHRoaXMub3B0aW9ucztcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVzZVN0b3JhZ2UobmFtZSA/PyAnYXJraGFtanMnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcignQXJraGFtIEVycm9yOiBUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgdXNpbmcgc3RvcmFnZS4nLCBuYW1lKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGlmKHN0b3Jlcz8ubGVuZ3RoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkZFN0b3JlcyhzdG9yZXMpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdBcmtoYW0gRXJyb3I6IFRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhZGRpbmcgc3RvcmVzLicsIHN0b3Jlcyk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKG1pZGRsZXdhcmU/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGRNaWRkbGV3YXJlKG1pZGRsZXdhcmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1Byb3BlcnR5OiBzdHJpbmcgPSAnYXJraGFtanMnO1xuICAgIGlmKGRlYnVnKSB7XG4gICAgICAod2luZG93IGFzIGFueSlbd2luZG93UHJvcGVydHldID0gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlICh3aW5kb3cgYXMgYW55KVt3aW5kb3dQcm9wZXJ0eV07XG4gICAgfVxuXG4gICAgdGhpcy5pc0luaXQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdChBcmtoYW1Db25zdGFudHMuSU5JVCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uSW5pdChsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbihBcmtoYW1Db25zdGFudHMuSU5JVCwgbGlzdGVuZXIpO1xuXG4gICAgaWYodGhpcy5pc0luaXQpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgb2ZmSW5pdChsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vZmYoQXJraGFtQ29uc3RhbnRzLklOSVQsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9mZihldmVudFR5cGU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb24oZXZlbnRUeXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFN0b3JlcyhzdG9yZXM6IEZsdXhTdG9yZVtdKTogUHJvbWlzZTxGbHV4U3RvcmVbXT4ge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRTdG9yZXM6IEZsdXhTdG9yZVtdID0gc3RvcmVzLm1hcCgoc3RvcmU6IEZsdXhTdG9yZSkgPT4gdGhpcy5yZWdpc3RlcihzdG9yZSkpO1xuICAgIGNvbnN0IHtuYW1lLCBzdG9yYWdlfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmKHN0b3JhZ2U/LnNldFN0b3JhZ2VEYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdG9yYWdlLnNldFN0b3JhZ2VEYXRhKG5hbWUgPz8gJ2Fya2hhbWpzJywgdGhpcy5zdGF0ZSk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWdpc3RlcmVkU3RvcmVzO1xuICB9XG5cbiAgcmVtb3ZlTWlkZGxld2FyZShuYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBuYW1lcy5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSA9IHRoaXMucmVtb3ZlUGx1Z2luKHR5cGUsIG5hbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNldChjbGVhclN0b3JhZ2U6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYoc3RvcmFnZSAmJiBjbGVhclN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGE/LihuYW1lID8/ICdhcmtoYW1qcycsIHt9KTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5taWRkbGV3YXJlID0ge307XG4gICAgdGhpcy5vcHRpb25zID0gey4uLnRoaXMuZGVmYXVsdE9wdGlvbnN9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLnN0b3JlQWN0aW9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGVDYWNoZS5jbGVhcigpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5pc0luaXQgPSBmYWxzZTtcblxuICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gPSBbXSk7XG4gIH1cblxuICBzZXRTdGF0ZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnLCB2YWx1ZTogdW5rbm93bik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmKHBhdGgpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBzZXQodGhpcy5zdGF0ZSwgcGF0aCwgY2xvbmVEZWVwKHZhbHVlKSk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHBhdGhLZXkgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5qb2luKCcuJykgOiBwYXRoO1xuICAgICAgdGhpcy5zdGF0ZUNhY2hlLmRlbGV0ZShwYXRoS2V5KTtcbiAgICB9XG5cbiAgICBpZih0aGlzLm9wdGlvbnMuc3RvcmFnZSAmJiB0aGlzLnVwZGF0ZVN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVN0b3JhZ2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc01pZGRsZXdhcmUoXG4gICAgbWlkZGxld2FyZUxpc3Q6IEZsdXhQbHVnaW5UeXBlW10sXG4gICAgYWN0aW9uOiBGbHV4QWN0aW9uLFxuICAgIGFwcEluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8Rmx1eEFjdGlvbj4ge1xuICAgIHJldHVybiBQcm9taXNlXG4gICAgICAuYWxsKFxuICAgICAgICBtaWRkbGV3YXJlTGlzdC5tYXAoKHBsdWdpbjogRmx1eFBsdWdpblR5cGUpID0+XG4gICAgICAgICAgcGx1Z2luLm1ldGhvZChjbG9uZURlZXAoYWN0aW9uKSwgY2xvbmVEZWVwKHRoaXMuc3RhdGUpLCBhcHBJbmZvKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAudGhlbihcbiAgICAgICAgKGFjdGlvbnMpID0+IGFjdGlvbnMucmVkdWNlKCh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pID0+XG4gICAgICAgICAgbWVyZ2UodXBkYXRlZEFjdGlvbiwgYWN0aW9uKSwgYWN0aW9uKSBhcyBGbHV4QWN0aW9uXG4gICAgICApXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0b3JhZ2U6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4gPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXG4gIHByaXZhdGUgdXBkYXRlU3RvcmVzU3RhdGUodHlwZTogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RvcmVBY3Rpb25zKS5mb3JFYWNoKChzdG9yZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVGbiA9IHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV07XG4gICAgICBpZihzdG9yZUZuKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuc3RhdGVbc3RvcmVOYW1lXSB8fCBzdG9yZUZuLmluaXRpYWxTdGF0ZSB8fCB7fTtcblxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0b3JlRm4uYWN0aW9uKHR5cGUsIGRhdGEsIGN1cnJlbnRTdGF0ZSk7XG4gICAgICAgIGlmKG5ld1N0YXRlICE9PSBjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW3N0b3JlTmFtZV0gPSBjbG9uZURlZXAobmV3U3RhdGUpIHx8IGN1cnJlbnRTdGF0ZTtcbiAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FjaGVkU3RhY2soKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IG5ldyBFcnJvcigpLnN0YWNrPy5zcGxpdCgnXFxuJylbMl0gfHwgJyc7XG5cbiAgICBpZihTVEFDS19DQUNIRS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gU1RBQ0tfQ0FDSEUuZ2V0KGNhY2hlS2V5KSE7XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrOiB1bmtub3duW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhY2tQcm9wZXJ0eSA9ICdzdGFja1RyYWNlTGltaXQnO1xuICAgICAgY29uc3Qgb3JpZ2luYWxMaW1pdCA9IChFcnJvciBhcyBhbnkpLnN0YWNrVHJhY2VMaW1pdDtcbiAgICAgIChFcnJvciBhcyBhbnkpW3N0YWNrUHJvcGVydHldID0gSW5maW5pdHk7XG4gICAgICBzdGFjayA9IHBhcnNlU3RhY2sobmV3IEVycm9yKCkpO1xuICAgICAgKEVycm9yIGFzIGFueSlbc3RhY2tQcm9wZXJ0eV0gPSBvcmlnaW5hbExpbWl0O1xuXG4gICAgICBpZihTVEFDS19DQUNIRS5zaXplID49IFNUQUNLX0NBQ0hFX1NJWkUpIHtcbiAgICAgICAgY29uc3QgZmlyc3RLZXkgPSBTVEFDS19DQUNIRS5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICBpZihmaXJzdEtleSkge1xuICAgICAgICAgIFNUQUNLX0NBQ0hFLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFNUQUNLX0NBQ0hFLnNldChjYWNoZUtleSwgc3RhY2spO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpbih0eXBlOiBzdHJpbmcsIHBsdWdpbjogRmx1eFBsdWdpblR5cGUpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuICAgIGNvbnN0IHttZXRob2QsIG5hbWV9ID0gcGx1Z2luO1xuXG4gICAgaWYobWV0aG9kICYmIHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4aXN0czogYm9vbGVhbiA9IGxpc3Quc29tZSgob2JqOiBGbHV4UGx1Z2luVHlwZSkgPT4gb2JqLm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYoIWV4aXN0cykge1xuICAgICAgICBsaXN0LnB1c2goe21ldGhvZCwgbmFtZX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7cGx1Z2luLm5hbWV9IG1pZGRsZXdhcmUgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuIE1ldGhvZCBpcyBub3QgYSBmdW5jdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgZGVyZWdpc3RlcihuYW1lOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLnN0b3JlQWN0aW9uc1tuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5zdGF0ZVtuYW1lXTtcbiAgICB0aGlzLnN0YXRlQ2FjaGUuY2xlYXIoKTsgLy8gQ2xlYXIgY2FjaGUgd2hlbiBzdG9yZXMgY2hhbmdlXG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyKHN0b3JlOiBhbnkpOiBGbHV4U3RvcmUge1xuICAgIGlmKCFzdG9yZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1N0b3JlIGlzIHVuZGVmaW5lZC4gQ2Fubm90IHJlZ2lzdGVyIHdpdGggRmx1eC4nKTtcbiAgICB9XG5cbiAgICBsZXQgc3RvcmVOYW1lOiBzdHJpbmc7XG4gICAgbGV0IHN0b3JlQWN0aW9uOiAodHlwZTogc3RyaW5nLCBkYXRhOiB1bmtub3duLCBzdGF0ZTogdW5rbm93bikgPT4gdW5rbm93bjtcbiAgICBsZXQgaW5pdGlhbFN0YXRlOiB1bmtub3duO1xuXG4gICAgaWYodHlwZW9mIHN0b3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBGdW5jdGlvbiBzdG9yZSAtIGV4dHJhY3QgbmFtZSBmcm9tIGZ1bmN0aW9uLm5hbWVcbiAgICAgIHN0b3JlTmFtZSA9IHN0b3JlLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICBzdG9yZUFjdGlvbiA9IHN0b3JlO1xuICAgICAgaW5pdGlhbFN0YXRlID0gc3RvcmUoKTtcbiAgICB9IGVsc2UgaWYodHlwZW9mIHN0b3JlPy5hY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIE9iamVjdCBzdG9yZSB3aXRoIGFjdGlvbiBtZXRob2RcbiAgICAgIHN0b3JlTmFtZSA9IHN0b3JlLm5hbWUgfHwgJ2Fub255bW91cyc7XG4gICAgICBzdG9yZUFjdGlvbiA9IHN0b3JlLmFjdGlvbjtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IHN0b3JlLmluaXRpYWxTdGF0ZSB8fCBzdG9yZS5hY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7c3RvcmV9IGlzIG5vdCBhIHZhbGlkIHN0b3JlLiBNdXN0IGJlIGEgZnVuY3Rpb24gb3Igb2JqZWN0IHdpdGggYWN0aW9uIG1ldGhvZC5gKTtcbiAgICB9XG5cbiAgICBpZighc3RvcmVOYW1lIHx8IHN0b3JlTmFtZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBhbm9ueW1vdXMgc3RvcmVzIC0gcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgfVxuXG4gICAgY29uc3QgZmx1eFN0b3JlOiBGbHV4U3RvcmUgPSB7XG4gICAgICBhY3Rpb246IHN0b3JlQWN0aW9uLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgbmFtZTogc3RvcmVOYW1lXG4gICAgfTtcblxuICAgIGlmKCF0aGlzLnN0b3JlQWN0aW9uc1tzdG9yZU5hbWVdKSB7XG4gICAgICB0aGlzLnN0b3JlQWN0aW9uc1tzdG9yZU5hbWVdID0gZmx1eFN0b3JlO1xuXG4gICAgICBpZighdGhpcy5zdGF0ZVtzdG9yZU5hbWVdKSB7XG4gICAgICAgIHRoaXMuc3RhdGVbc3RvcmVOYW1lXSA9IGNsb25lRGVlcChpbml0aWFsU3RhdGUgfHwge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0b3JlQWN0aW9uc1tzdG9yZU5hbWVdITtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGx1Z2luKHR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogRmx1eFBsdWdpblR5cGVbXSB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSB8fCBbXTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKG9iajogRmx1eFBsdWdpblR5cGUpID0+IG9iai5uYW1lICE9PSBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXNlU3RvcmFnZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7c3RvcmFnZSwgc3RhdGUsIHN0b3JhZ2VXYWl0fSA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmKHN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSB8fCBhd2FpdCBzdG9yYWdlPy5nZXRTdG9yYWdlRGF0YT8uKG5hbWUpIHx8IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZVN0b3JhZ2UgPSBkZWJvdW5jZUNvbXBhY3QoXG4gICAgICAgICAgKCkgPT4gc3RvcmFnZT8uc2V0U3RvcmFnZURhdGE/LihuYW1lLCB0aGlzLnN0YXRlKSxcbiAgICAgICAgICBzdG9yYWdlV2FpdCA/PyAzMDBcbiAgICAgICAgKSBhcyBhbnk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEFya2hhbUpTIEVycm9yOiBVc2luZyBzdG9yYWdlLCBcIiR7bmFtZX1cIi5gKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSB8fCB7fTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEZsdXg6IEZsdXhGcmFtZXdvcmsgPSBuZXcgRmx1eEZyYW1ld29yaygpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtvS0FJQSxPQUFRLGFBQUFBLEVBQVcsbUJBQUFDLEVBQWlCLE9BQUFDLEVBQUssU0FBQUMsRUFBTyxjQUFBQyxFQUFZLE9BQUFDLE1BQVUsZUFDdEUsT0FBUSxnQkFBQUMsTUFBbUIsU0FFM0IsT0FBUSxtQkFBQUMsTUFBc0IsK0JBSTlCLE1BQU1DLEVBQWMsSUFBSSxJQUNsQkMsRUFBbUIsSUFFbEIsTUFBTUMsVUFBc0JDLENBQWEsQ0FxQjlDLGFBQWMsQ0FDWixNQUFNLEVBcEJSQyxFQUFBLGNBQWtCLElBRWxCQSxFQUFBLEtBQVMsY0FBaUMsQ0FBQyxjQUFlLGNBQWMsR0FFeEVBLEVBQUEsS0FBUSxRQUE2QixDQUFDLEdBQ3RDQSxFQUFBLEtBQVEsZUFBMEMsQ0FBQyxHQUNuREEsRUFBQSxLQUFpQixpQkFBOEIsQ0FDN0MsS0FBTSxXQUNOLFdBQVksVUFDWixZQUFhLEdBQ2IsWUFBYSxJQUNiLE9BQVEsQ0FBQyxFQUNULE1BQU8sVUFDVCxHQUNBQSxFQUFBLEtBQVEsYUFBK0MsQ0FBQyxHQUN4REEsRUFBQSxLQUFRLFVBQXVCLEtBQUssZ0JBQ3BDQSxFQUFBLEtBQVEsYUFBK0IsSUFBSSxLQUMzQ0EsRUFBQSxLQUFRLGVBQXdCLElBdVVoQ0EsRUFBQSxLQUFRLGdCQUF3QyxJQUFNLFFBQVEsUUFBUSxFQUFLLEdBalV6RSxLQUFLLGNBQWdCLEtBQUssY0FBYyxLQUFLLElBQUksRUFDakQsS0FBSyxVQUFZLEtBQUssVUFBVSxLQUFLLElBQUksRUFDekMsS0FBSyxhQUFlLEtBQUssYUFBYSxLQUFLLElBQUksRUFDL0MsS0FB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QUUzQixDQUNGLENBamVFL0QsRUFEV0YsRUFDSixXQUFvQixJQW1ldEIsTUFBTW9FLEVBQXNCLElBQUlwRSIsCiAgIm5hbWVzIjogWyJjbG9uZURlZXAiLCAiZGVib3VuY2VDb21wYWN0IiwgImdldCIsICJtZXJnZSIsICJwYXJzZVN0YWNrIiwgInNldCIsICJFdmVudEVtaXR0ZXIiLCAiQXJraGFtQ29uc3RhbnRzIiwgIlNUQUNLX0NBQ0hFIiwgIlNUQUNLX0NBQ0hFX1NJWkUiLCAiRmx1eEZyYW1ld29yayIsICJFdmVudEVtaXR0ZXIiLCAiX19wdWJsaWNGaWVsZCIsICJ0eXBlIiwgIm1pZGRsZXdhcmUiLCAibWlkZGxlT2JqIiwgIm1pZGRsZU5hbWUiLCAibSIsICJtZXRob2QiLCAicGx1Z2luIiwgInN0b3JlTmFtZSIsICJzdG9yZUZuIiwgIm5hbWUiLCAic3RvcmFnZSIsICJwbHVnaW5UeXBlIiwgInN0b3JlTmFtZXMiLCAiYWN0aW9uIiwgInNpbGVudCIsICJzdGFydFRpbWUiLCAiY2xvbmVkQWN0aW9uIiwgImNsb25lRGVlcCIsICJzdGFjayIsICJhcHBJbmZvIiwgInBvc3REaXNwYXRjaExpc3QiLCAicHJlRGlzcGF0Y2hMaXN0IiwgImRhdGEiLCAiZHVyYXRpb24iLCAicGF0aCIsICJkZWZhdWx0VmFsdWUiLCAicGF0aEtleSIsICJzdG9yZVZhbHVlIiwgImdldCIsICJ2YWx1ZSIsICJyZXN1bHQiLCAib3B0aW9ucyIsICJyZXNldCIsICJ1cGRhdGVkT3B0aW9ucyIsICJkZWJ1ZyIsICJzdG9yZXMiLCAiZXJyb3IiLCAid2luZG93UHJvcGVydHkiLCAiQXJraGFtQ29uc3RhbnRzIiwgImxpc3RlbmVyIiwgImV2ZW50VHlwZSIsICJyZWdpc3RlcmVkU3RvcmVzIiwgInN0b3JlIiwgIm5hbWVzIiwgImNsZWFyU3RvcmFnZSIsICJzZXQiLCAibWlkZGxld2FyZUxpc3QiLCAiYWN0aW9ucyIsICJ1cGRhdGVkQWN0aW9uIiwgIm1lcmdlIiwgImN1cnJlbnRTdGF0ZSIsICJuZXdTdGF0ZSIsICJjYWNoZUtleSIsICJzdGFja1Byb3BlcnR5IiwgIm9yaWdpbmFsTGltaXQiLCAicGFyc2VTdGFjayIsICJmaXJzdEtleSIsICJsaXN0IiwgIm9iaiIsICJzdG9yZUFjdGlvbiIsICJpbml0aWFsU3RhdGUiLCAiZmx1eFN0b3JlIiwgInN0YXRlIiwgInN0b3JhZ2VXYWl0IiwgImRlYm91bmNlQ29tcGFjdCIsICJGbHV4Il0KfQo=
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ /**
15
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
16
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
17
+ */ import { cloneDeep } from '@nlabs/utils/objects/clone';
18
+ import { debounceCompact } from '@nlabs/utils/objects/debounce-compact';
19
+ import { get } from '@nlabs/utils/objects/get';
20
+ import { merge } from '@nlabs/utils/objects/merge';
21
+ import { set } from '@nlabs/utils/objects/set';
22
+ import { parseStack } from '@nlabs/utils/objects/stack-parser';
23
+ import { EventEmitter } from 'events';
24
+ import { ArkhamConstants } from '../constants/ArkhamConstants.js';
25
+ const STACK_CACHE = new Map();
26
+ const STACK_CACHE_SIZE = 100;
27
+ export class FluxFramework extends EventEmitter {
28
+ addMiddleware(middleware) {
29
+ middleware.forEach((middleObj)=>{
30
+ if (!middleObj || typeof middleObj !== 'function' && typeof middleObj !== 'object') {
31
+ throw Error('Unknown middleware is not configured properly. Cannot add to Flux.');
32
+ }
33
+ const middleName = middleObj.name || '';
34
+ if (!middleName) {
35
+ throw Error('Unknown middleware is not configured properly. Requires name property. Cannot add to Flux.');
36
+ }
37
+ const existingMiddleware = this.middleware.preDispatchList?.find((m)=>m.name === middleName) || this.middleware.postDispatchList?.find((m)=>m.name === middleName);
38
+ if (existingMiddleware) {
39
+ // eslint-disable-next-line no-console
40
+ console.warn(`Middleware "${middleName}" already exists. Skipping duplicate.`);
41
+ return;
42
+ }
43
+ this.pluginTypes.forEach((type)=>{
44
+ const method = middleObj[type];
45
+ if (method && typeof method === 'function') {
46
+ const plugin = {
47
+ method,
48
+ name: middleName
49
+ };
50
+ this.middleware[`${type}List`] = this.addPlugin(type, plugin);
51
+ }
52
+ });
53
+ });
54
+ }
55
+ clearAppData() {
56
+ Object.keys(this.storeActions).forEach((storeName)=>{
57
+ const storeFn = this.storeActions[storeName];
58
+ if (storeFn) {
59
+ this.state[storeFn.name] = storeFn.initialState;
60
+ }
61
+ });
62
+ this.stateCache.clear();
63
+ this.stateChanged = true;
64
+ const { name, storage } = this.options;
65
+ if (storage?.setStorageData) {
66
+ return storage.setStorageData(name ?? 'arkhamjs', this.state);
67
+ }
68
+ return Promise.resolve(true);
69
+ }
70
+ clearMiddleware() {
71
+ Object.keys(this.middleware).forEach((pluginType)=>{
72
+ this.middleware[pluginType] = [];
73
+ });
74
+ return true;
75
+ }
76
+ removeStores(storeNames) {
77
+ storeNames.forEach((name)=>this.deregister(name));
78
+ }
79
+ async dispatch(action, silent = false) {
80
+ if (!action) {
81
+ throw new Error('ArkhamJS Error: Flux.dispatch requires an action.');
82
+ }
83
+ const startTime = Date.now();
84
+ let clonedAction = cloneDeep(action);
85
+ let stack = [];
86
+ if (this.options.debug) {
87
+ stack = this.getCachedStack();
88
+ }
89
+ const appInfo = {
90
+ duration: 0,
91
+ options: this.options,
92
+ stack
93
+ };
94
+ const { postDispatchList = [], preDispatchList = [] } = this.middleware;
95
+ if (preDispatchList.length) {
96
+ clonedAction = await this.processMiddleware(preDispatchList, clonedAction, appInfo);
97
+ }
98
+ const { type, ...data } = clonedAction;
99
+ if (!type || type === '') {
100
+ // eslint-disable-next-line no-console
101
+ console.warn('ArkhamJS Warning: Flux.dispatch is missing an action type for the payload:', data);
102
+ return Promise.resolve(clonedAction);
103
+ }
104
+ this.updateStoresState(type, data);
105
+ if (this.stateChanged && this.options.storage && this.updateStorage) {
106
+ try {
107
+ await this.updateStorage();
108
+ this.stateChanged = false;
109
+ } catch (error) {
110
+ // eslint-disable-next-line no-console
111
+ console.error('Storage update failed:', error);
112
+ }
113
+ }
114
+ const duration = Date.now() - startTime;
115
+ appInfo.duration = duration;
116
+ if (postDispatchList.length) {
117
+ clonedAction = await this.processMiddleware(postDispatchList, clonedAction, appInfo);
118
+ }
119
+ if (!silent) {
120
+ this.emit(type, clonedAction);
121
+ this.emit('arkhamjs', this.state);
122
+ }
123
+ return Promise.resolve(clonedAction);
124
+ }
125
+ getOptions() {
126
+ return this.options;
127
+ }
128
+ getState(path = '', defaultValue) {
129
+ const pathKey = Array.isArray(path) ? path.join('.') : path;
130
+ if (this.stateCache.has(pathKey)) {
131
+ return this.stateCache.get(pathKey);
132
+ }
133
+ let storeValue;
134
+ if (!path) {
135
+ storeValue = this.state || {};
136
+ } else {
137
+ storeValue = get(this.state, path);
138
+ }
139
+ const value = storeValue ? cloneDeep(storeValue) : storeValue;
140
+ const result = value === undefined ? defaultValue : value;
141
+ this.stateCache.set(pathKey, result);
142
+ return result;
143
+ }
144
+ getStore(name = '') {
145
+ return this.storeActions[name];
146
+ }
147
+ async init(options = {}, reset = false) {
148
+ if (reset) {
149
+ this.isInit = false;
150
+ await this.reset(false);
151
+ }
152
+ const updatedOptions = {
153
+ ...options
154
+ };
155
+ if (this.isInit && this.options.name) {
156
+ updatedOptions.name = this.options.name;
157
+ }
158
+ this.options = {
159
+ ...this.defaultOptions,
160
+ ...updatedOptions
161
+ };
162
+ const { debug, middleware, name, stores } = this.options;
163
+ try {
164
+ await this.useStorage(name ?? 'arkhamjs');
165
+ } catch (error) {
166
+ // eslint-disable-next-line no-console
167
+ console.error('Arkham Error: There was an error while using storage.', name);
168
+ throw error;
169
+ }
170
+ if (stores?.length) {
171
+ try {
172
+ await this.addStores(stores);
173
+ } catch (error) {
174
+ // eslint-disable-next-line no-console
175
+ console.error('Arkham Error: There was an error while adding stores.', stores);
176
+ throw error;
177
+ }
178
+ }
179
+ if (middleware?.length) {
180
+ this.addMiddleware(middleware);
181
+ }
182
+ const windowProperty = 'arkhamjs';
183
+ if (debug) {
184
+ window[windowProperty] = this;
185
+ } else {
186
+ delete window[windowProperty];
187
+ }
188
+ this.isInit = true;
189
+ this.emit(ArkhamConstants.INIT);
190
+ return this;
191
+ }
192
+ onInit(listener) {
193
+ this.on(ArkhamConstants.INIT, listener);
194
+ if (this.isInit) {
195
+ listener();
196
+ }
197
+ }
198
+ offInit(listener) {
199
+ this.off(ArkhamConstants.INIT, listener);
200
+ }
201
+ off(eventType, listener) {
202
+ return this.removeListener(eventType, listener);
203
+ }
204
+ on(eventType, listener) {
205
+ return this.addListener(eventType, listener);
206
+ }
207
+ async addStores(stores) {
208
+ const registeredStores = stores.map((store)=>this.register(store));
209
+ const { name, storage } = this.options;
210
+ if (storage?.setStorageData) {
211
+ try {
212
+ await storage.setStorageData(name ?? 'arkhamjs', this.state);
213
+ } catch (error) {
214
+ throw error;
215
+ }
216
+ }
217
+ return registeredStores;
218
+ }
219
+ removeMiddleware(names) {
220
+ names.forEach((name)=>{
221
+ this.pluginTypes.forEach((type)=>{
222
+ this.middleware[`${type}List`] = this.removePlugin(type, name);
223
+ });
224
+ });
225
+ }
226
+ async reset(clearStorage = true) {
227
+ const { name, storage } = this.options;
228
+ if (storage && clearStorage) {
229
+ try {
230
+ await storage.setStorageData?.(name ?? 'arkhamjs', {});
231
+ } catch (error) {
232
+ throw error;
233
+ }
234
+ }
235
+ this.middleware = {};
236
+ this.options = {
237
+ ...this.defaultOptions
238
+ };
239
+ this.state = {};
240
+ this.storeActions = {};
241
+ this.stateCache.clear();
242
+ this.stateChanged = false;
243
+ this.isInit = false;
244
+ this.pluginTypes.forEach((type)=>this.middleware[`${type}List`] = []);
245
+ }
246
+ setState(path = '', value) {
247
+ if (path) {
248
+ this.state = set(this.state, path, cloneDeep(value));
249
+ this.stateChanged = true;
250
+ const pathKey = Array.isArray(path) ? path.join('.') : path;
251
+ this.stateCache.delete(pathKey);
252
+ }
253
+ if (this.options.storage && this.updateStorage) {
254
+ return this.updateStorage();
255
+ }
256
+ return Promise.resolve(false);
257
+ }
258
+ async processMiddleware(middlewareList, action, appInfo) {
259
+ return Promise.all(middlewareList.map((plugin)=>plugin.method(cloneDeep(action), cloneDeep(this.state), appInfo))).then((actions)=>actions.reduce((updatedAction, action)=>merge(updatedAction, action), action)).catch((error)=>{
260
+ throw error;
261
+ });
262
+ }
263
+ updateStoresState(type, data) {
264
+ Object.keys(this.storeActions).forEach((storeName)=>{
265
+ const storeFn = this.storeActions[storeName];
266
+ if (storeFn) {
267
+ const currentState = this.state[storeName] || storeFn.initialState || {};
268
+ const newState = storeFn.action(type, data, currentState);
269
+ if (newState !== currentState) {
270
+ this.state[storeName] = cloneDeep(newState) || currentState;
271
+ this.stateChanged = true;
272
+ }
273
+ }
274
+ });
275
+ }
276
+ getCachedStack() {
277
+ const cacheKey = new Error().stack?.split('\n')[2] || '';
278
+ if (STACK_CACHE.has(cacheKey)) {
279
+ return STACK_CACHE.get(cacheKey);
280
+ }
281
+ let stack = [];
282
+ try {
283
+ const stackProperty = 'stackTraceLimit';
284
+ const originalLimit = Error.stackTraceLimit;
285
+ Error[stackProperty] = Infinity;
286
+ stack = parseStack(new Error());
287
+ Error[stackProperty] = originalLimit;
288
+ if (STACK_CACHE.size >= STACK_CACHE_SIZE) {
289
+ const firstKey = STACK_CACHE.keys().next().value;
290
+ if (firstKey) {
291
+ STACK_CACHE.delete(firstKey);
292
+ }
293
+ }
294
+ STACK_CACHE.set(cacheKey, stack);
295
+ } catch (error) {}
296
+ return stack;
297
+ }
298
+ addPlugin(type, plugin) {
299
+ const list = this.middleware[`${type}List`] || [];
300
+ const { method, name } = plugin;
301
+ if (method && typeof method === 'function') {
302
+ const exists = list.some((obj)=>obj.name === name);
303
+ if (!exists) {
304
+ list.push({
305
+ method,
306
+ name
307
+ });
308
+ }
309
+ } else if (method !== undefined) {
310
+ throw Error(`${plugin.name} middleware is not configured properly. Method is not a function.`);
311
+ }
312
+ return list;
313
+ }
314
+ deregister(name = '') {
315
+ delete this.storeActions[name];
316
+ delete this.state[name];
317
+ this.stateCache.clear(); // Clear cache when stores change
318
+ }
319
+ register(store) {
320
+ if (!store) {
321
+ throw Error('Store is undefined. Cannot register with Flux.');
322
+ }
323
+ let storeName;
324
+ let storeAction;
325
+ let initialState;
326
+ if (typeof store === 'function') {
327
+ // Function store - extract name from function.name
328
+ storeName = store.name || 'anonymous';
329
+ storeAction = store;
330
+ initialState = store();
331
+ } else if (typeof store?.action === 'function') {
332
+ // Object store with action method
333
+ storeName = store.name || 'anonymous';
334
+ storeAction = store.action;
335
+ initialState = store.initialState || store.action();
336
+ } else {
337
+ throw Error(`${store} is not a valid store. Must be a function or object with action method.`);
338
+ }
339
+ if (!storeName || storeName === 'anonymous') {
340
+ // Silently ignore anonymous stores - return undefined
341
+ return undefined;
342
+ }
343
+ const fluxStore = {
344
+ action: storeAction,
345
+ initialState,
346
+ name: storeName
347
+ };
348
+ if (!this.storeActions[storeName]) {
349
+ this.storeActions[storeName] = fluxStore;
350
+ if (!this.state[storeName]) {
351
+ this.state[storeName] = cloneDeep(initialState || {});
352
+ }
353
+ }
354
+ return this.storeActions[storeName];
355
+ }
356
+ removePlugin(type, name) {
357
+ const list = this.middleware[`${type}List`] || [];
358
+ return list.filter((obj)=>obj.name !== name);
359
+ }
360
+ async useStorage(name) {
361
+ const { storage, state, storageWait } = this.options;
362
+ if (storage) {
363
+ try {
364
+ this.state = state || await storage?.getStorageData?.(name) || {};
365
+ this.updateStorage = debounceCompact(()=>storage?.setStorageData?.(name, this.state), storageWait ?? 300);
366
+ } catch (error) {
367
+ // eslint-disable-next-line no-console
368
+ console.error(`ArkhamJS Error: Using storage, "${name}".`);
369
+ throw error;
370
+ }
371
+ } else {
372
+ this.state = state || {};
373
+ }
374
+ }
375
+ constructor(){
376
+ super(), _define_property(this, "isInit", false), _define_property(this, "pluginTypes", [
377
+ 'preDispatch',
378
+ 'postDispatch'
379
+ ]), _define_property(this, "state", {}), _define_property(this, "storeActions", {}), _define_property(this, "defaultOptions", {
380
+ name: 'arkhamjs',
381
+ routerType: 'browser',
382
+ scrollToTop: true,
383
+ storageWait: 300,
384
+ stores: [],
385
+ title: 'ArkhamJS'
386
+ }), _define_property(this, "middleware", {}), _define_property(this, "options", this.defaultOptions), _define_property(this, "stateCache", new Map()), _define_property(this, "stateChanged", false), _define_property(this, "updateStorage", ()=>Promise.resolve(false));
387
+ // Bind methods once in constructor for better performance
388
+ this.addMiddleware = this.addMiddleware.bind(this);
389
+ this.addStores = this.addStores.bind(this);
390
+ this.clearAppData = this.clearAppData.bind(this);
391
+ this.clearMiddleware = this.clearMiddleware.bind(this);
392
+ this.deregister = this.deregister.bind(this);
393
+ this.dispatch = this.dispatch.bind(this);
394
+ this.getOptions = this.getOptions.bind(this);
395
+ this.getState = this.getState.bind(this);
396
+ this.getStore = this.getStore.bind(this);
397
+ this.init = this.init.bind(this);
398
+ this.off = this.off.bind(this);
399
+ this.register = this.register.bind(this);
400
+ this.removeMiddleware = this.removeMiddleware.bind(this);
401
+ this.removeStores = this.removeStores.bind(this);
402
+ this.reset = this.reset.bind(this);
403
+ this.setState = this.setState.bind(this);
404
+ this.pluginTypes.forEach((type)=>this.middleware[`${type}List`] = []);
405
+ }
406
+ }
407
+ _define_property(FluxFramework, "initFlux", false);
408
+ export const Flux = new FluxFramework();
409
+
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2Fya2hhbWpzL3BhY2thZ2VzL2Fya2hhbWpzL3NyYy9GbHV4L0ZsdXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2RlYm91bmNlQ29tcGFjdH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvZGVib3VuY2UtY29tcGFjdCc7XG5pbXBvcnQge2dldH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvZ2V0JztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL21lcmdlJztcbmltcG9ydCB7c2V0fSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9zZXQnO1xuaW1wb3J0IHtwYXJzZVN0YWNrfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9zdGFjay1wYXJzZXInO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ2V2ZW50cyc7XG5cbmltcG9ydCB7QXJraGFtQ29uc3RhbnRzfSBmcm9tICcuLi9jb25zdGFudHMvQXJraGFtQ29uc3RhbnRzLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhNaWRkbGV3YXJlVHlwZSwgRmx1eE9wdGlvbnMsIEZsdXhQbHVnaW5UeXBlLCBGbHV4U3RvcmV9IGZyb20gJy4vRmx1eC50eXBlcy5qcyc7XG5cbmNvbnN0IFNUQUNLX0NBQ0hFID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuY29uc3QgU1RBQ0tfQ0FDSEVfU0laRSA9IDEwMDtcblxuZXhwb3J0IGNsYXNzIEZsdXhGcmFtZXdvcmsgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBzdGF0aWMgaW5pdEZsdXg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJbml0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgcGx1Z2luVHlwZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydwcmVEaXNwYXRjaCcsICdwb3N0RGlzcGF0Y2gnXSBhcyBjb25zdDtcblxuICBwcml2YXRlIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHByaXZhdGUgc3RvcmVBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBGbHV4U3RvcmU+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE9wdGlvbnM6IEZsdXhPcHRpb25zID0ge1xuICAgIG5hbWU6ICdhcmtoYW1qcycsXG4gICAgcm91dGVyVHlwZTogJ2Jyb3dzZXInLFxuICAgIHNjcm9sbFRvVG9wOiB0cnVlLFxuICAgIHN0b3JhZ2VXYWl0OiAzMDAsXG4gICAgc3RvcmVzOiBbXSxcbiAgICB0aXRsZTogJ0Fya2hhbUpTJ1xuICB9O1xuICBwcml2YXRlIG1pZGRsZXdhcmU6IFJlY29yZDxzdHJpbmcsIEZsdXhQbHVnaW5UeXBlW10+ID0ge307XG4gIHByaXZhdGUgb3B0aW9uczogRmx1eE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRPcHRpb25zO1xuICBwcml2YXRlIHN0YXRlQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgc3RhdGVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIEJpbmQgbWV0aG9kcyBvbmNlIGluIGNvbnN0cnVjdG9yIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICB0aGlzLmFkZE1pZGRsZXdhcmUgPSB0aGlzLmFkZE1pZGRsZXdhcmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmFkZFN0b3JlcyA9IHRoaXMuYWRkU3RvcmVzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhckFwcERhdGEgPSB0aGlzLmNsZWFyQXBwRGF0YS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2xlYXJNaWRkbGV3YXJlID0gdGhpcy5jbGVhck1pZGRsZXdhcmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRlcmVnaXN0ZXIgPSB0aGlzLmRlcmVnaXN0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLmRpc3BhdGNoID0gdGhpcy5kaXNwYXRjaC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0T3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSB0aGlzLmdldFN0YXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRTdG9yZSA9IHRoaXMuZ2V0U3RvcmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmluaXQgPSB0aGlzLmluaXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLm9mZiA9IHRoaXMub2ZmLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlciA9IHRoaXMucmVnaXN0ZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlbW92ZU1pZGRsZXdhcmUgPSB0aGlzLnJlbW92ZU1pZGRsZXdhcmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlbW92ZVN0b3JlcyA9IHRoaXMucmVtb3ZlU3RvcmVzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZXNldCA9IHRoaXMucmVzZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldFN0YXRlID0gdGhpcy5zZXRTdGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5wbHVnaW5UeXBlcy5mb3JFYWNoKCh0eXBlOiBzdHJpbmcpID0+IHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSA9IFtdKTtcbiAgfVxuXG4gIGFkZE1pZGRsZXdhcmUobWlkZGxld2FyZTogRmx1eE1pZGRsZXdhcmVUeXBlW10pOiB2b2lkIHtcbiAgICBtaWRkbGV3YXJlLmZvckVhY2goKG1pZGRsZU9iajogRmx1eE1pZGRsZXdhcmVUeXBlKSA9PiB7XG4gICAgICBpZighbWlkZGxlT2JqIHx8ICh0eXBlb2YgbWlkZGxlT2JqICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaWRkbGVPYmogIT09ICdvYmplY3QnKSkge1xuICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBtaWRkbGV3YXJlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiBDYW5ub3QgYWRkIHRvIEZsdXguJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pZGRsZU5hbWU6IHN0cmluZyA9IG1pZGRsZU9iai5uYW1lIHx8ICcnO1xuICAgICAgaWYoIW1pZGRsZU5hbWUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gbWlkZGxld2FyZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gUmVxdWlyZXMgbmFtZSBwcm9wZXJ0eS4gQ2Fubm90IGFkZCB0byBGbHV4LicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleGlzdGluZ01pZGRsZXdhcmUgPSB0aGlzLm1pZGRsZXdhcmUucHJlRGlzcGF0Y2hMaXN0Py5maW5kKChtKSA9PiBtLm5hbWUgPT09IG1pZGRsZU5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlkZGxld2FyZS5wb3N0RGlzcGF0Y2hMaXN0Py5maW5kKChtKSA9PiBtLm5hbWUgPT09IG1pZGRsZU5hbWUpO1xuXG4gICAgICBpZihleGlzdGluZ01pZGRsZXdhcmUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBNaWRkbGV3YXJlIFwiJHttaWRkbGVOYW1lfVwiIGFscmVhZHkgZXhpc3RzLiBTa2lwcGluZyBkdXBsaWNhdGUuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wbHVnaW5UeXBlcy5mb3JFYWNoKCh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gbWlkZGxlT2JqW3R5cGUgYXMga2V5b2YgRmx1eE1pZGRsZXdhcmVUeXBlXTtcbiAgICAgICAgaWYobWV0aG9kICYmIHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBwbHVnaW46IEZsdXhQbHVnaW5UeXBlID0ge21ldGhvZCwgbmFtZTogbWlkZGxlTmFtZX07XG4gICAgICAgICAgdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdID0gdGhpcy5hZGRQbHVnaW4odHlwZSwgcGx1Z2luKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckFwcERhdGEoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgT2JqZWN0LmtleXModGhpcy5zdG9yZUFjdGlvbnMpLmZvckVhY2goKHN0b3JlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZUZuID0gdGhpcy5zdG9yZUFjdGlvbnNbc3RvcmVOYW1lXTtcbiAgICAgIGlmKHN0b3JlRm4pIHtcbiAgICAgICAgdGhpcy5zdGF0ZVtzdG9yZUZuLm5hbWVdID0gc3RvcmVGbi5pbml0aWFsU3RhdGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlQ2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlZCA9IHRydWU7XG5cbiAgICBjb25zdCB7bmFtZSwgc3RvcmFnZX0gPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYoc3RvcmFnZT8uc2V0U3RvcmFnZURhdGEpIHtcbiAgICAgIHJldHVybiBzdG9yYWdlLnNldFN0b3JhZ2VEYXRhKG5hbWUgPz8gJ2Fya2hhbWpzJywgdGhpcy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgfVxuXG4gIGNsZWFyTWlkZGxld2FyZSgpOiBib29sZWFuIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLm1pZGRsZXdhcmUpLmZvckVhY2goKHBsdWdpblR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5taWRkbGV3YXJlW3BsdWdpblR5cGVdID0gW107XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZW1vdmVTdG9yZXMoc3RvcmVOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBzdG9yZU5hbWVzLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4gdGhpcy5kZXJlZ2lzdGVyKG5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoKGFjdGlvbjogRmx1eEFjdGlvbiwgc2lsZW50OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEZsdXhBY3Rpb24+IHtcbiAgICBpZighYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fya2hhbUpTIEVycm9yOiBGbHV4LmRpc3BhdGNoIHJlcXVpcmVzIGFuIGFjdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFRpbWU6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgICBsZXQgY2xvbmVkQWN0aW9uOiBGbHV4QWN0aW9uID0gY2xvbmVEZWVwKGFjdGlvbik7XG5cbiAgICBsZXQgc3RhY2s6IGFueVtdID0gW107XG4gICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICBzdGFjayA9IHRoaXMuZ2V0Q2FjaGVkU3RhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBJbmZvID0ge1xuICAgICAgZHVyYXRpb246IDAsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBzdGFja1xuICAgIH07XG5cbiAgICBjb25zdCB7cG9zdERpc3BhdGNoTGlzdCA9IFtdLCBwcmVEaXNwYXRjaExpc3QgPSBbXX0gPSB0aGlzLm1pZGRsZXdhcmU7XG5cbiAgICBpZihwcmVEaXNwYXRjaExpc3QubGVuZ3RoKSB7XG4gICAgICBjbG9uZWRBY3Rpb24gPSBhd2FpdCB0aGlzLnByb2Nlc3NNaWRkbGV3YXJlKHByZURpc3BhdGNoTGlzdCwgY2xvbmVkQWN0aW9uLCBhcHBJbmZvKTtcbiAgICB9XG5cbiAgICBjb25zdCB7dHlwZSwgLi4uZGF0YX0gPSBjbG9uZWRBY3Rpb247XG5cbiAgICBpZighdHlwZSB8fCB0eXBlID09PSAnJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybignQXJraGFtSlMgV2FybmluZzogRmx1eC5kaXNwYXRjaCBpcyBtaXNzaW5nIGFuIGFjdGlvbiB0eXBlIGZvciB0aGUgcGF5bG9hZDonLCBkYXRhKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmVkQWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0b3Jlc1N0YXRlKHR5cGUsIGRhdGEpO1xuXG4gICAgaWYodGhpcy5zdGF0ZUNoYW5nZWQgJiYgdGhpcy5vcHRpb25zLnN0b3JhZ2UgJiYgdGhpcy51cGRhdGVTdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignU3RvcmFnZSB1cGRhdGUgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbjogbnVtYmVyID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBhcHBJbmZvLmR1cmF0aW9uID0gZHVyYXRpb247XG5cbiAgICBpZihwb3N0RGlzcGF0Y2hMaXN0Lmxlbmd0aCkge1xuICAgICAgY2xvbmVkQWN0aW9uID0gYXdhaXQgdGhpcy5wcm9jZXNzTWlkZGxld2FyZShwb3N0RGlzcGF0Y2hMaXN0LCBjbG9uZWRBY3Rpb24sIGFwcEluZm8pO1xuICAgIH1cblxuICAgIGlmKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuZW1pdCh0eXBlLCBjbG9uZWRBY3Rpb24pO1xuICAgICAgdGhpcy5lbWl0KCdhcmtoYW1qcycsIHRoaXMuc3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmVkQWN0aW9uKTtcbiAgfVxuXG4gIGdldE9wdGlvbnMoKTogRmx1eE9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZTxUID0gdW5rbm93bj4ocGF0aDogc3RyaW5nIHwgc3RyaW5nW10gPSAnJywgZGVmYXVsdFZhbHVlPzogVCk6IFQge1xuICAgIGNvbnN0IHBhdGhLZXkgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5qb2luKCcuJykgOiBwYXRoO1xuXG4gICAgaWYodGhpcy5zdGF0ZUNhY2hlLmhhcyhwYXRoS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVDYWNoZS5nZXQocGF0aEtleSkgYXMgVDtcbiAgICB9XG5cbiAgICBsZXQgc3RvcmVWYWx1ZTogdW5rbm93bjtcbiAgICBpZighcGF0aCkge1xuICAgICAgc3RvcmVWYWx1ZSA9IHRoaXMuc3RhdGUgfHwge307XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0b3JlVmFsdWUgPSBnZXQodGhpcy5zdGF0ZSwgcGF0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBzdG9yZVZhbHVlID8gY2xvbmVEZWVwKHN0b3JlVmFsdWUpIDogc3RvcmVWYWx1ZTtcbiAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG5cbiAgICB0aGlzLnN0YXRlQ2FjaGUuc2V0KHBhdGhLZXksIHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIFQ7XG4gIH1cblxuICBnZXRTdG9yZShuYW1lOiBzdHJpbmcgPSAnJyk6IEZsdXhTdG9yZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgYXN5bmMgaW5pdChvcHRpb25zOiBGbHV4T3B0aW9ucyA9IHt9LCByZXNldDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxGbHV4RnJhbWV3b3JrPiB7XG4gICAgaWYocmVzZXQpIHtcbiAgICAgIHRoaXMuaXNJbml0ID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcbiAgICBpZih0aGlzLmlzSW5pdCAmJiB0aGlzLm9wdGlvbnMubmFtZSkge1xuICAgICAgdXBkYXRlZE9wdGlvbnMubmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHsuLi50aGlzLmRlZmF1bHRPcHRpb25zLCAuLi51cGRhdGVkT3B0aW9uc307XG4gICAgY29uc3Qge2RlYnVnLCBtaWRkbGV3YXJlLCBuYW1lLCBzdG9yZXN9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudXNlU3RvcmFnZShuYW1lID8/ICdhcmtoYW1qcycpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKCdBcmtoYW0gRXJyb3I6IFRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSB1c2luZyBzdG9yYWdlLicsIG5hbWUpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgaWYoc3RvcmVzPy5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkU3RvcmVzKHN0b3Jlcyk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Fya2hhbSBFcnJvcjogVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGFkZGluZyBzdG9yZXMuJywgc3RvcmVzKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYobWlkZGxld2FyZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZE1pZGRsZXdhcmUobWlkZGxld2FyZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2luZG93UHJvcGVydHk6IHN0cmluZyA9ICdhcmtoYW1qcyc7XG4gICAgaWYoZGVidWcpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KVt3aW5kb3dQcm9wZXJ0eV0gPSB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgKHdpbmRvdyBhcyBhbnkpW3dpbmRvd1Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KEFya2hhbUNvbnN0YW50cy5JTklUKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25Jbml0KGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uKEFya2hhbUNvbnN0YW50cy5JTklULCBsaXN0ZW5lcik7XG5cbiAgICBpZih0aGlzLmlzSW5pdCkge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBvZmZJbml0KGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9mZihBcmtoYW1Db25zdGFudHMuSU5JVCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb2ZmKGV2ZW50VHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICBvdmVycmlkZSBvbihldmVudFR5cGU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgYXN5bmMgYWRkU3RvcmVzKHN0b3JlczogRmx1eFN0b3JlW10pOiBQcm9taXNlPEZsdXhTdG9yZVtdPiB7XG4gICAgY29uc3QgcmVnaXN0ZXJlZFN0b3JlczogRmx1eFN0b3JlW10gPSBzdG9yZXMubWFwKChzdG9yZTogRmx1eFN0b3JlKSA9PiB0aGlzLnJlZ2lzdGVyKHN0b3JlKSk7XG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYoc3RvcmFnZT8uc2V0U3RvcmFnZURhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGEobmFtZSA/PyAnYXJraGFtanMnLCB0aGlzLnN0YXRlKTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRTdG9yZXM7XG4gIH1cblxuICByZW1vdmVNaWRkbGV3YXJlKG5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIG5hbWVzLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wbHVnaW5UeXBlcy5mb3JFYWNoKCh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdID0gdGhpcy5yZW1vdmVQbHVnaW4odHlwZSwgbmFtZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0KGNsZWFyU3RvcmFnZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7bmFtZSwgc3RvcmFnZX0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBpZihzdG9yYWdlICYmIGNsZWFyU3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3RvcmFnZS5zZXRTdG9yYWdlRGF0YT8uKG5hbWUgPz8gJ2Fya2hhbWpzJywge30pO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1pZGRsZXdhcmUgPSB7fTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4udGhpcy5kZWZhdWx0T3B0aW9uc307XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHRoaXMuc3RvcmVBY3Rpb25zID0ge307XG4gICAgdGhpcy5zdGF0ZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuXG4gICAgdGhpcy5wbHVnaW5UeXBlcy5mb3JFYWNoKCh0eXBlOiBzdHJpbmcpID0+IHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSA9IFtdKTtcbiAgfVxuXG4gIHNldFN0YXRlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdID0gJycsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYocGF0aCkge1xuICAgICAgdGhpcy5zdGF0ZSA9IHNldCh0aGlzLnN0YXRlLCBwYXRoLCBjbG9uZURlZXAodmFsdWUpKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgcGF0aEtleSA9IEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoLmpvaW4oJy4nKSA6IHBhdGg7XG4gICAgICB0aGlzLnN0YXRlQ2FjaGUuZGVsZXRlKHBhdGhLZXkpO1xuICAgIH1cblxuICAgIGlmKHRoaXMub3B0aW9ucy5zdG9yYWdlICYmIHRoaXMudXBkYXRlU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU3RvcmFnZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzTWlkZGxld2FyZShcbiAgICBtaWRkbGV3YXJlTGlzdDogRmx1eFBsdWdpblR5cGVbXSxcbiAgICBhY3Rpb246IEZsdXhBY3Rpb24sXG4gICAgYXBwSW5mbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxGbHV4QWN0aW9uPiB7XG4gICAgcmV0dXJuIFByb21pc2VcbiAgICAgIC5hbGwoXG4gICAgICAgIG1pZGRsZXdhcmVMaXN0Lm1hcCgocGx1Z2luOiBGbHV4UGx1Z2luVHlwZSkgPT5cbiAgICAgICAgICBwbHVnaW4ubWV0aG9kKGNsb25lRGVlcChhY3Rpb24pLCBjbG9uZURlZXAodGhpcy5zdGF0ZSksIGFwcEluZm8pXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC50aGVuKFxuICAgICAgICAoYWN0aW9ucykgPT4gYWN0aW9ucy5yZWR1Y2UoKHVwZGF0ZWRBY3Rpb24sIGFjdGlvbikgPT5cbiAgICAgICAgICBtZXJnZSh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pLCBhY3Rpb24pIGFzIEZsdXhBY3Rpb25cbiAgICAgIClcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RvcmFnZTogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdG9yZXNTdGF0ZSh0eXBlOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXModGhpcy5zdG9yZUFjdGlvbnMpLmZvckVhY2goKHN0b3JlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZUZuID0gdGhpcy5zdG9yZUFjdGlvbnNbc3RvcmVOYW1lXTtcbiAgICAgIGlmKHN0b3JlRm4pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5zdGF0ZVtzdG9yZU5hbWVdIHx8IHN0b3JlRm4uaW5pdGlhbFN0YXRlIHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gc3RvcmVGbi5hY3Rpb24odHlwZSwgZGF0YSwgY3VycmVudFN0YXRlKTtcbiAgICAgICAgaWYobmV3U3RhdGUgIT09IGN1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3RhdGVbc3RvcmVOYW1lXSA9IGNsb25lRGVlcChuZXdTdGF0ZSkgfHwgY3VycmVudFN0YXRlO1xuICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWNoZWRTdGFjaygpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gbmV3IEVycm9yKCkuc3RhY2s/LnNwbGl0KCdcXG4nKVsyXSB8fCAnJztcblxuICAgIGlmKFNUQUNLX0NBQ0hFLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiBTVEFDS19DQUNIRS5nZXQoY2FjaGVLZXkpITtcbiAgICB9XG5cbiAgICBsZXQgc3RhY2s6IHVua25vd25bXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFja1Byb3BlcnR5ID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gICAgICBjb25zdCBvcmlnaW5hbExpbWl0ID0gKEVycm9yIGFzIGFueSkuc3RhY2tUcmFjZUxpbWl0O1xuICAgICAgKEVycm9yIGFzIGFueSlbc3RhY2tQcm9wZXJ0eV0gPSBJbmZpbml0eTtcbiAgICAgIHN0YWNrID0gcGFyc2VTdGFjayhuZXcgRXJyb3IoKSk7XG4gICAgICAoRXJyb3IgYXMgYW55KVtzdGFja1Byb3BlcnR5XSA9IG9yaWdpbmFsTGltaXQ7XG5cbiAgICAgIGlmKFNUQUNLX0NBQ0hFLnNpemUgPj0gU1RBQ0tfQ0FDSEVfU0laRSkge1xuICAgICAgICBjb25zdCBmaXJzdEtleSA9IFNUQUNLX0NBQ0hFLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgIGlmKGZpcnN0S2V5KSB7XG4gICAgICAgICAgU1RBQ0tfQ0FDSEUuZGVsZXRlKGZpcnN0S2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgU1RBQ0tfQ0FDSEUuc2V0KGNhY2hlS2V5LCBzdGFjayk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGx1Z2luKHR5cGU6IHN0cmluZywgcGx1Z2luOiBGbHV4UGx1Z2luVHlwZSk6IEZsdXhQbHVnaW5UeXBlW10ge1xuICAgIGNvbnN0IGxpc3QgPSB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gfHwgW107XG4gICAgY29uc3Qge21ldGhvZCwgbmFtZX0gPSBwbHVnaW47XG5cbiAgICBpZihtZXRob2QgJiYgdHlwZW9mIG1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXhpc3RzOiBib29sZWFuID0gbGlzdC5zb21lKChvYmo6IEZsdXhQbHVnaW5UeXBlKSA9PiBvYmoubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZighZXhpc3RzKSB7XG4gICAgICAgIGxpc3QucHVzaCh7bWV0aG9kLCBuYW1lfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKG1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcihgJHtwbHVnaW4ubmFtZX0gbWlkZGxld2FyZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gTWV0aG9kIGlzIG5vdCBhIGZ1bmN0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXJlZ2lzdGVyKG5hbWU6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLnN0YXRlW25hbWVdO1xuICAgIHRoaXMuc3RhdGVDYWNoZS5jbGVhcigpOyAvLyBDbGVhciBjYWNoZSB3aGVuIHN0b3JlcyBjaGFuZ2VcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXIoc3RvcmU6IGFueSk6IEZsdXhTdG9yZSB7XG4gICAgaWYoIXN0b3JlKSB7XG4gICAgICB0aHJvdyBFcnJvcignU3RvcmUgaXMgdW5kZWZpbmVkLiBDYW5ub3QgcmVnaXN0ZXIgd2l0aCBGbHV4LicpO1xuICAgIH1cblxuICAgIGxldCBzdG9yZU5hbWU6IHN0cmluZztcbiAgICBsZXQgc3RvcmVBY3Rpb246ICh0eXBlOiBzdHJpbmcsIGRhdGE6IHVua25vd24sIHN0YXRlOiB1bmtub3duKSA9PiB1bmtub3duO1xuICAgIGxldCBpbml0aWFsU3RhdGU6IHVua25vd247XG5cbiAgICBpZih0eXBlb2Ygc3RvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEZ1bmN0aW9uIHN0b3JlIC0gZXh0cmFjdCBuYW1lIGZyb20gZnVuY3Rpb24ubmFtZVxuICAgICAgc3RvcmVOYW1lID0gc3RvcmUubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICAgIHN0b3JlQWN0aW9uID0gc3RvcmU7XG4gICAgICBpbml0aWFsU3RhdGUgPSBzdG9yZSgpO1xuICAgIH0gZWxzZSBpZih0eXBlb2Ygc3RvcmU/LmFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gT2JqZWN0IHN0b3JlIHdpdGggYWN0aW9uIG1ldGhvZFxuICAgICAgc3RvcmVOYW1lID0gc3RvcmUubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICAgIHN0b3JlQWN0aW9uID0gc3RvcmUuYWN0aW9uO1xuICAgICAgaW5pdGlhbFN0YXRlID0gc3RvcmUuaW5pdGlhbFN0YXRlIHx8IHN0b3JlLmFjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihgJHtzdG9yZX0gaXMgbm90IGEgdmFsaWQgc3RvcmUuIE11c3QgYmUgYSBmdW5jdGlvbiBvciBvYmplY3Qgd2l0aCBhY3Rpb24gbWV0aG9kLmApO1xuICAgIH1cblxuICAgIGlmKCFzdG9yZU5hbWUgfHwgc3RvcmVOYW1lID09PSAnYW5vbnltb3VzJykge1xuICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGFub255bW91cyBzdG9yZXMgLSByZXR1cm4gdW5kZWZpbmVkXG4gICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIGFueTtcbiAgICB9XG5cbiAgICBjb25zdCBmbHV4U3RvcmU6IEZsdXhTdG9yZSA9IHtcbiAgICAgIGFjdGlvbjogc3RvcmVBY3Rpb24sXG4gICAgICBpbml0aWFsU3RhdGUsXG4gICAgICBuYW1lOiBzdG9yZU5hbWVcbiAgICB9O1xuXG4gICAgaWYoIXRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV0pIHtcbiAgICAgIHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV0gPSBmbHV4U3RvcmU7XG5cbiAgICAgIGlmKCF0aGlzLnN0YXRlW3N0b3JlTmFtZV0pIHtcbiAgICAgICAgdGhpcy5zdGF0ZVtzdG9yZU5hbWVdID0gY2xvbmVEZWVwKGluaXRpYWxTdGF0ZSB8fCB7fSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV0hO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW4odHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcigob2JqOiBGbHV4UGx1Z2luVHlwZSkgPT4gb2JqLm5hbWUgIT09IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1c2VTdG9yYWdlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtzdG9yYWdlLCBzdGF0ZSwgc3RvcmFnZVdhaXR9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYoc3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IGF3YWl0IHN0b3JhZ2U/LmdldFN0b3JhZ2VEYXRhPy4obmFtZSkgfHwge307XG4gICAgICAgIHRoaXMudXBkYXRlU3RvcmFnZSA9IGRlYm91bmNlQ29tcGFjdChcbiAgICAgICAgICAoKSA9PiBzdG9yYWdlPy5zZXRTdG9yYWdlRGF0YT8uKG5hbWUsIHRoaXMuc3RhdGUpLFxuICAgICAgICAgIHN0b3JhZ2VXYWl0ID8/IDMwMFxuICAgICAgICApIGFzIGFueTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihgQXJraGFtSlMgRXJyb3I6IFVzaW5nIHN0b3JhZ2UsIFwiJHtuYW1lfVwiLmApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IHt9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRmx1eDogRmx1eEZyYW1ld29yayA9IG5ldyBGbHV4RnJhbWV3b3JrKCk7XG4iXSwibmFtZXMiOlsiY2xvbmVEZWVwIiwiZGVib3VuY2VDb21wYWN0IiwiZ2V0IiwibWVyZ2UiLCJzZXQiLCJwYXJzZVN0YWNrIiwiRXZlbnRFbWl0dGVyIiwiQXJraGFtQ29uc3RhbnRzIiwiU1RBQ0tfQ0FDSEUiLCJNYXAiLCJTVEFDS19DQUNIRV9TSVpFIiwiRmx1eEZyYW1ld29yayIsImFkZE1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlIiwiZm9yRWFjaCIsIm1pZGRsZU9iaiIsIkVycm9yIiwibWlkZGxlTmFtZSIsIm5hbWUiLCJleGlzdGluZ01pZGRsZXdhcmUiLCJwcmVEaXNwYXRjaExpc3QiLCJmaW5kIiwibSIsInBvc3REaXNwYXRjaExpc3QiLCJjb25zb2xlIiwid2FybiIsInBsdWdpblR5cGVzIiwidHlwZSIsIm1ldGhvZCIsInBsdWdpbiIsImFkZFBsdWdpbiIsImNsZWFyQXBwRGF0YSIsIk9iamVjdCIsImtleXMiLCJzdG9yZUFjdGlvbnMiLCJzdG9yZU5hbWUiLCJzdG9yZUZuIiwic3RhdGUiLCJpbml0aWFsU3RhdGUiLCJzdGF0ZUNhY2hlIiwiY2xlYXIiLCJzdGF0ZUNoYW5nZWQiLCJzdG9yYWdlIiwib3B0aW9ucyIsInNldFN0b3JhZ2VEYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjbGVhck1pZGRsZXdhcmUiLCJwbHVnaW5UeXBlIiwicmVtb3ZlU3RvcmVzIiwic3RvcmVOYW1lcyIsImRlcmVnaXN0ZXIiLCJkaXNwYXRjaCIsImFjdGlvbiIsInNpbGVudCIsInN0YXJ0VGltZSIsIkRhdGUiLCJub3ciLCJjbG9uZWRBY3Rpb24iLCJzdGFjayIsImRlYnVnIiwiZ2V0Q2FjaGVkU3RhY2siLCJhcHBJbmZvIiwiZHVyYXRpb24iLCJsZW5ndGgiLCJwcm9jZXNzTWlkZGxld2FyZSIsImRhdGEiLCJ1cGRhdGVTdG9yZXNTdGF0ZSIsInVwZGF0ZVN0b3JhZ2UiLCJlcnJvciIsImVtaXQiLCJnZXRPcHRpb25zIiwiZ2V0U3RhdGUiLCJwYXRoIiwiZGVmYXVsdFZhbHVlIiwicGF0aEtleSIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJoYXMiLCJzdG9yZVZhbHVlIiwidmFsdWUiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJnZXRTdG9yZSIsImluaXQiLCJyZXNldCIsImlzSW5pdCIsInVwZGF0ZWRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJzdG9yZXMiLCJ1c2VTdG9yYWdlIiwiYWRkU3RvcmVzIiwid2luZG93UHJvcGVydHkiLCJ3aW5kb3ciLCJJTklUIiwib25Jbml0IiwibGlzdGVuZXIiLCJvbiIsIm9mZkluaXQiLCJvZmYiLCJldmVudFR5cGUiLCJyZW1vdmVMaXN0ZW5lciIsImFkZExpc3RlbmVyIiwicmVnaXN0ZXJlZFN0b3JlcyIsIm1hcCIsInN0b3JlIiwicmVnaXN0ZXIiLCJyZW1vdmVNaWRkbGV3YXJlIiwibmFtZXMiLCJyZW1vdmVQbHVnaW4iLCJjbGVhclN0b3JhZ2UiLCJzZXRTdGF0ZSIsImRlbGV0ZSIsIm1pZGRsZXdhcmVMaXN0IiwiYWxsIiwidGhlbiIsImFjdGlvbnMiLCJyZWR1Y2UiLCJ1cGRhdGVkQWN0aW9uIiwiY2F0Y2giLCJjdXJyZW50U3RhdGUiLCJuZXdTdGF0ZSIsImNhY2hlS2V5Iiwic3BsaXQiLCJzdGFja1Byb3BlcnR5Iiwib3JpZ2luYWxMaW1pdCIsInN0YWNrVHJhY2VMaW1pdCIsIkluZmluaXR5Iiwic2l6ZSIsImZpcnN0S2V5IiwibmV4dCIsImxpc3QiLCJleGlzdHMiLCJzb21lIiwib2JqIiwicHVzaCIsInN0b3JlQWN0aW9uIiwiZmx1eFN0b3JlIiwiZmlsdGVyIiwic3RvcmFnZVdhaXQiLCJnZXRTdG9yYWdlRGF0YSIsInJvdXRlclR5cGUiLCJzY3JvbGxUb1RvcCIsInRpdGxlIiwiYmluZCIsImluaXRGbHV4IiwiRmx1eCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyw2QkFBNkI7QUFDckQsU0FBUUMsZUFBZSxRQUFPLHdDQUF3QztBQUN0RSxTQUFRQyxHQUFHLFFBQU8sMkJBQTJCO0FBQzdDLFNBQVFDLEtBQUssUUFBTyw2QkFBNkI7QUFDakQsU0FBUUMsR0FBRyxRQUFPLDJCQUEyQjtBQUM3QyxTQUFRQyxVQUFVLFFBQU8sb0NBQW9DO0FBQzdELFNBQVFDLFlBQVksUUFBTyxTQUFTO0FBRXBDLFNBQVFDLGVBQWUsUUFBTyxrQ0FBa0M7QUFJaEUsTUFBTUMsY0FBYyxJQUFJQztBQUN4QixNQUFNQyxtQkFBbUI7QUFFekIsT0FBTyxNQUFNQyxzQkFBc0JMO0lBNkNqQ00sY0FBY0MsVUFBZ0MsRUFBUTtRQUNwREEsV0FBV0MsT0FBTyxDQUFDLENBQUNDO1lBQ2xCLElBQUcsQ0FBQ0EsYUFBYyxPQUFPQSxjQUFjLGNBQWMsT0FBT0EsY0FBYyxVQUFXO2dCQUNuRixNQUFNQyxNQUFNO1lBQ2Q7WUFFQSxNQUFNQyxhQUFxQkYsVUFBVUcsSUFBSSxJQUFJO1lBQzdDLElBQUcsQ0FBQ0QsWUFBWTtnQkFDZCxNQUFNRCxNQUFN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
@@ -49,3 +49,4 @@ export interface FluxPluginType {
49
49
  export interface ErrorConstructor {
50
50
  captureStackTrace(thisArg: any, func: any): void;
51
51
  }
52
+ //# sourceMappingURL=Flux.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Flux.types.d.ts","sourceRoot":"","sources":["../../src/Flux/Flux.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;IACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;CAC5B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAEhH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;CAClD"}
@@ -1,3 +1,6 @@
1
- /* ArkhamJS - Optimized Build */
2
- /* End ArkhamJS */
3
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ export { };
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2Fya2hhbWpzL3BhY2thZ2VzL2Fya2hhbWpzL3NyYy9GbHV4L0ZsdXgudHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmx1eE9wdGlvbnMge1xuICByZWFkb25seSBiYXNlbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGV4dD86IG9iamVjdDtcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBnZXRVc2VyQ29uZmlybWF0aW9uPzogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgaGFzaFR5cGU/OiAnc2xhc2gnIHwgJ25vc2xhc2gnIHwgJ2hhc2hiYW5nJztcbiAgcmVhZG9ubHkgaGlzdG9yeT86IG9iamVjdDtcbiAgcmVhZG9ubHkgaW5pdGlhbEVudHJpZXM/OiBhbnlbXTtcbiAgcmVhZG9ubHkgaW5pdGlhbEluZGV4PzogbnVtYmVyO1xuICByZWFkb25seSBrZXlMZW5ndGg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nIHwgb2JqZWN0O1xuICByZWFkb25seSBtaWRkbGV3YXJlPzogRmx1eE1pZGRsZXdhcmVUeXBlW107XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvdXRlclR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjcm9sbFRvVG9wPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGU/OiBhbnk7XG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBGbHV4U3RvcmFnZVR5cGU7XG4gIHJlYWRvbmx5IHN0b3JhZ2VXYWl0PzogbnVtYmVyO1xuICByZWFkb25seSBzdG9yZXM/OiBhbnlbXTtcbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmx1eEFjdGlvbiB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueTtcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXhTdG9yYWdlVHlwZSB7XG4gIHJlYWRvbmx5IGdldFN0b3JhZ2VEYXRhPzogKGtleTogc3RyaW5nKSA9PiBQcm9taXNlPGFueT47XG4gIHJlYWRvbmx5IHNldFN0b3JhZ2VEYXRhPzogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXhTdG9yZSB7XG4gIHJlYWRvbmx5IGFjdGlvbjogKHR5cGU6IHN0cmluZywgZGF0YTogYW55LCBzdGF0ZTogYW55KSA9PiBhbnk7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIEZsdXhQbHVnaW5NZXRob2RUeXBlID0gKGFjdGlvbjogRmx1eEFjdGlvbiwgc3RvcmU6IG9iamVjdCwgYXBwRGF0YT86IG9iamVjdCkgPT4gUHJvbWlzZTxGbHV4QWN0aW9uPjtcblxuZXhwb3J0IGludGVyZmFjZSBGbHV4TWlkZGxld2FyZVR5cGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZURpc3BhdGNoPzogRmx1eFBsdWdpbk1ldGhvZFR5cGU7XG4gIHJlYWRvbmx5IHBvc3REaXNwYXRjaD86IEZsdXhQbHVnaW5NZXRob2RUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXhQbHVnaW5UeXBlIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBtZXRob2Q6IEZsdXhQbHVnaW5NZXRob2RUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ29uc3RydWN0b3Ige1xuICBjYXB0dXJlU3RhY2tUcmFjZSh0aGlzQXJnOiBhbnksIGZ1bmM6IGFueSk6IHZvaWQ7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBb0RELFdBRUMifQ==
@@ -10,3 +10,4 @@ export declare class ArkhamConstants {
10
10
  static readonly UPDATE_TITLE: string;
11
11
  static readonly UPDATE_VIEW: string;
12
12
  }
13
+ //# sourceMappingURL=ArkhamConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkhamConstants.d.ts","sourceRoot":"","sources":["../../src/constants/ArkhamConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,eAAe;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAoB;IACnD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAuB;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;IAC7C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAyB;IAC7D,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAwB;CAC5D"}
@@ -1,4 +1,26 @@
1
- /* ArkhamJS - Optimized Build */
2
- var t=Object.defineProperty;var r=(i,A,T)=>A in i?t(i,A,{enumerable:!0,configurable:!0,writable:!0,value:T}):i[A]=T;var _=(i,A,T)=>r(i,typeof A!="symbol"?A+"":A,T);class E{}_(E,"GO_BACK","ARKHAM_GO_BACK"),_(E,"GO_REPLACE","ARKHAM_GO_REPLACE"),_(E,"GOTO","ARKHAM_GOTO"),_(E,"INIT","ARKHAM_INIT"),_(E,"UPDATE_TITLE","ARKHAM_UPDATE_TITLE"),_(E,"UPDATE_VIEW","ARKHAM_UPDATE_VIEW");export{E as ArkhamConstants};
3
- /* End ArkhamJS */
4
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnN0YW50cy9BcmtoYW1Db25zdGFudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmV4cG9ydCBjbGFzcyBBcmtoYW1Db25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgR09fQkFDSzogc3RyaW5nID0gJ0FSS0hBTV9HT19CQUNLJztcbiAgc3RhdGljIHJlYWRvbmx5IEdPX1JFUExBQ0U6IHN0cmluZyA9ICdBUktIQU1fR09fUkVQTEFDRSc7XG4gIHN0YXRpYyByZWFkb25seSBHT1RPOiBzdHJpbmcgPSAnQVJLSEFNX0dPVE8nO1xuICBzdGF0aWMgcmVhZG9ubHkgSU5JVDogc3RyaW5nID0gJ0FSS0hBTV9JTklUJztcbiAgc3RhdGljIHJlYWRvbmx5IFVQREFURV9USVRMRTogc3RyaW5nID0gJ0FSS0hBTV9VUERBVEVfVElUTEUnO1xuICBzdGF0aWMgcmVhZG9ubHkgVVBEQVRFX1ZJRVc6IHN0cmluZyA9ICdBUktIQU1fVVBEQVRFX1ZJRVcnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtvS0FLTyxNQUFNQSxDQUFnQixDQU83QixDQU5FQyxFQURXRCxFQUNLLFVBQWtCLGtCQUNsQ0MsRUFGV0QsRUFFSyxhQUFxQixxQkFDckNDLEVBSFdELEVBR0ssT0FBZSxlQUMvQkMsRUFKV0QsRUFJSyxPQUFlLGVBQy9CQyxFQUxXRCxFQUtLLGVBQXVCLHVCQUN2Q0MsRUFOV0QsRUFNSyxjQUFzQiIsCiAgIm5hbWVzIjogWyJBcmtoYW1Db25zdGFudHMiLCAiX19wdWJsaWNGaWVsZCJdCn0K
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ /**
15
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
16
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
17
+ */ export class ArkhamConstants {
18
+ }
19
+ _define_property(ArkhamConstants, "GO_BACK", 'ARKHAM_GO_BACK');
20
+ _define_property(ArkhamConstants, "GO_REPLACE", 'ARKHAM_GO_REPLACE');
21
+ _define_property(ArkhamConstants, "GOTO", 'ARKHAM_GOTO');
22
+ _define_property(ArkhamConstants, "INIT", 'ARKHAM_INIT');
23
+ _define_property(ArkhamConstants, "UPDATE_TITLE", 'ARKHAM_UPDATE_TITLE');
24
+ _define_property(ArkhamConstants, "UPDATE_VIEW", 'ARKHAM_UPDATE_VIEW');
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2Fya2hhbWpzL3BhY2thZ2VzL2Fya2hhbWpzL3NyYy9jb25zdGFudHMvQXJraGFtQ29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmV4cG9ydCBjbGFzcyBBcmtoYW1Db25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgR09fQkFDSzogc3RyaW5nID0gJ0FSS0hBTV9HT19CQUNLJztcbiAgc3RhdGljIHJlYWRvbmx5IEdPX1JFUExBQ0U6IHN0cmluZyA9ICdBUktIQU1fR09fUkVQTEFDRSc7XG4gIHN0YXRpYyByZWFkb25seSBHT1RPOiBzdHJpbmcgPSAnQVJLSEFNX0dPVE8nO1xuICBzdGF0aWMgcmVhZG9ubHkgSU5JVDogc3RyaW5nID0gJ0FSS0hBTV9JTklUJztcbiAgc3RhdGljIHJlYWRvbmx5IFVQREFURV9USVRMRTogc3RyaW5nID0gJ0FSS0hBTV9VUERBVEVfVElUTEUnO1xuICBzdGF0aWMgcmVhZG9ubHkgVVBEQVRFX1ZJRVc6IHN0cmluZyA9ICdBUktIQU1fVVBEQVRFX1ZJRVcnO1xufVxuIl0sIm5hbWVzIjpbIkFya2hhbUNvbnN0YW50cyIsIkdPX0JBQ0siLCJHT19SRVBMQUNFIiwiR09UTyIsIklOSVQiLCJVUERBVEVfVElUTEUiLCJVUERBVEVfVklFVyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUVELE9BQU8sTUFBTUE7QUFPYjtBQU5FLGlCQURXQSxpQkFDS0MsV0FBa0I7QUFDbEMsaUJBRldELGlCQUVLRSxjQUFxQjtBQUNyQyxpQkFIV0YsaUJBR0tHLFFBQWU7QUFDL0IsaUJBSldILGlCQUlLSSxRQUFlO0FBQy9CLGlCQUxXSixpQkFLS0ssZ0JBQXVCO0FBQ3ZDLGlCQU5XTCxpQkFNS00sZUFBc0IifQ==
package/lib/index.d.ts CHANGED
@@ -2,7 +2,8 @@
2
2
  * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
4
  */
5
- import { ArkhamConstants } from './constants/ArkhamConstants';
6
- import { Flux, FluxFramework } from './Flux/Flux';
7
- export * from './Flux/Flux.types';
5
+ import { ArkhamConstants } from './constants/ArkhamConstants.js';
6
+ import { Flux, FluxFramework } from './Flux/Flux.js';
7
+ export * from './Flux/Flux.types.js';
8
8
  export { ArkhamConstants, Flux, FluxFramework };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,IAAI,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAEnD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAC,eAAe,EAAE,IAAI,EAAE,aAAa,EAAC,CAAC"}
package/lib/index.js CHANGED
@@ -1,4 +1,9 @@
1
- /* ArkhamJS - Optimized Build */
2
- import{ArkhamConstants as o}from"./constants/ArkhamConstants";import{Flux as t,FluxFramework as p}from"./Flux/Flux";export*from"./Flux/Flux.types";export{o as ArkhamConstants,t as Flux,p as FluxFramework};
3
- /* End ArkhamJS */
4
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtBcmtoYW1Db25zdGFudHN9IGZyb20gJy4vY29uc3RhbnRzL0Fya2hhbUNvbnN0YW50cyc7XG5pbXBvcnQge0ZsdXgsIEZsdXhGcmFtZXdvcmt9IGZyb20gJy4vRmx1eC9GbHV4JztcblxuZXhwb3J0ICogZnJvbSAnLi9GbHV4L0ZsdXgudHlwZXMnO1xuZXhwb3J0IHtBcmtoYW1Db25zdGFudHMsIEZsdXgsIEZsdXhGcmFtZXdvcmt9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUlBLE9BQVEsbUJBQUFBLE1BQXNCLDhCQUM5QixPQUFRLFFBQUFDLEVBQU0saUJBQUFDLE1BQW9CLGNBRWxDLFdBQWMiLAogICJuYW1lcyI6IFsiQXJraGFtQ29uc3RhbnRzIiwgIkZsdXgiLCAiRmx1eEZyYW1ld29yayJdCn0K
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { ArkhamConstants } from './constants/ArkhamConstants.js';
5
+ import { Flux, FluxFramework } from './Flux/Flux.js';
6
+ export * from './Flux/Flux.types.js';
7
+ export { ArkhamConstants, Flux, FluxFramework };
8
+
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2Fya2hhbWpzL3BhY2thZ2VzL2Fya2hhbWpzL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtBcmtoYW1Db25zdGFudHN9IGZyb20gJy4vY29uc3RhbnRzL0Fya2hhbUNvbnN0YW50cy5qcyc7XG5pbXBvcnQge0ZsdXgsIEZsdXhGcmFtZXdvcmt9IGZyb20gJy4vRmx1eC9GbHV4LmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9GbHV4L0ZsdXgudHlwZXMuanMnO1xuZXhwb3J0IHtBcmtoYW1Db25zdGFudHMsIEZsdXgsIEZsdXhGcmFtZXdvcmt9O1xuXG4iXSwibmFtZXMiOlsiQXJraGFtQ29uc3RhbnRzIiwiRmx1eCIsIkZsdXhGcmFtZXdvcmsiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGVBQWUsUUFBTyxpQ0FBaUM7QUFDL0QsU0FBUUMsSUFBSSxFQUFFQyxhQUFhLFFBQU8saUJBQWlCO0FBRW5ELGNBQWMsdUJBQXVCO0FBQ3JDLFNBQVFGLGVBQWUsRUFBRUMsSUFBSSxFQUFFQyxhQUFhLEdBQUUifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/arkhamjs",
3
- "version": "3.31.7",
3
+ "version": "3.31.9",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -69,7 +69,7 @@
69
69
  "update": "lex update --interactive"
70
70
  },
71
71
  "dependencies": {
72
- "@nlabs/utils": "2.8.3",
72
+ "@nlabs/utils": "2.8.6",
73
73
  "events": "^3.3.0"
74
74
  },
75
75
  "files": [