@nlabs/arkhamjs 3.28.8 → 3.29.0
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.
- package/README.md +218 -1
- package/lib/Flux/Flux.d.ts +10 -5
- package/lib/Flux/Flux.js +5 -486
- package/lib/Flux/Flux.types.js +3 -16
- package/lib/constants/ArkhamConstants.js +4 -47
- package/lib/index.js +4 -36
- package/package.json +28 -12
package/README.md
CHANGED
@@ -16,11 +16,20 @@
|
|
16
16
|
|
17
17
|
ArkhamJS is a lightweight framework that can accommodate a project of any size, small or large. From small start-up ideas to large enterprise projects. A simple, flexible framework. Consisting of a singular state tree with a unidirectional data flow.
|
18
18
|
|
19
|
+
### Universal Compatibility
|
20
|
+
|
21
|
+
ArkhamJS works seamlessly across all JavaScript environments:
|
22
|
+
|
23
|
+
- **React Web Applications** - Full React integration with hooks
|
24
|
+
- **React Native Applications** - Mobile state management with AsyncStorage
|
25
|
+
- **Node.js Applications** - Server-side state management
|
26
|
+
- **Vanilla JavaScript** - Works in any JavaScript environment
|
27
|
+
|
19
28
|
### Lightweight
|
20
29
|
|
21
30
|
The framework is small. The bulk of your app should lay within your code, not the framework. While larger frameworks come with lots of "magic", they become very limited when new features arise within your project.
|
22
31
|
|
23
|
-
###
|
32
|
+
### TypeScript
|
24
33
|
|
25
34
|
Compatible with typescript. Definitions are included to support your Typescript project.
|
26
35
|
|
@@ -46,6 +55,214 @@ If you plan to persist data, you will need to add a storage to the framework:
|
|
46
55
|
- React Native [@nlabs/arkhamjs-storage-native](https://github.com/nitrogenlabs/arkhamjs-storage-native)
|
47
56
|
- NodeJS [@nlabs/arkhamjs-storage-node](https://github.com/nitrogenlabs/arkhamjs-storage-node)
|
48
57
|
|
58
|
+
## Why Choose ArkhamJS?
|
59
|
+
|
60
|
+
### 🎯 **The Perfect Middle Ground**
|
61
|
+
|
62
|
+
ArkhamJS bridges the gap between **simplicity** and **power**. Unlike other state management solutions that force you to choose between ease-of-use and functionality, ArkhamJS delivers both.
|
63
|
+
|
64
|
+
### 📊 **Bundle Size Comparison**
|
65
|
+
|
66
|
+
| Library | Gzipped Size | Minified Size | Notes |
|
67
|
+
|---------|-------------|---------------|-------|
|
68
|
+
| **ArkhamJS** | **13.4 KB** | **40 KB** | Full-featured Flux implementation |
|
69
|
+
| Zustand | ~3.2 KB | ~8.5 KB | Minimal, no provider needed |
|
70
|
+
| Jotai | ~4.1 KB | ~11 KB | Atomic model, fine-grained |
|
71
|
+
| Redux Toolkit | ~14 KB | ~41 KB | Includes Redux core |
|
72
|
+
| MobX | ~7.5 KB | ~23 KB | Core only |
|
73
|
+
| Recoil | ~8.5 KB | ~25 KB | Facebook, atomic |
|
74
|
+
|
75
|
+
**ArkhamJS is competitively sized** while providing a complete Flux implementation with middleware support, devtools, and storage integration.
|
76
|
+
|
77
|
+
### 🏗️ **State Management Patterns**
|
78
|
+
|
79
|
+
| Pattern | ArkhamJS | Redux Toolkit | Zustand | Jotai | Valtio |
|
80
|
+
|---------|----------|---------------|---------|-------|--------|
|
81
|
+
| **Immutable Updates** | ✅ Full | ✅ Full | ✅ Partial | ✅ Full | ❌ Mutable |
|
82
|
+
| **Event-Driven** | ✅ Native | ❌ Actions | ❌ Direct | ❌ Atoms | ❌ Proxy |
|
83
|
+
| **Middleware Support** | ✅ Built-in | ✅ Extensive | ⚠️ Limited | ❌ No | ❌ No |
|
84
|
+
| **DevTools** | ✅ Plugin | ✅ Built-in | ✅ Basic | ❌ No | ❌ No |
|
85
|
+
| **Storage Integration** | ✅ Built-in | ❌ External | ✅ Plugin | ❌ No | ❌ No |
|
86
|
+
| **TypeScript** | ✅ First-class | ✅ Excellent | ✅ Good | ✅ Built-in | ✅ Good |
|
87
|
+
| **Multi-Platform** | ✅ Universal | ❌ Web-only | ❌ Web-only | ❌ Web-only | ❌ Web-only |
|
88
|
+
|
89
|
+
### 🚀 **Key Advantages**
|
90
|
+
|
91
|
+
#### **1. Event-Driven Architecture**
|
92
|
+
|
93
|
+
```typescript
|
94
|
+
// ArkhamJS: Natural event-driven updates
|
95
|
+
Flux.dispatch({ type: 'ADD_USER', user });
|
96
|
+
Flux.on('ADD_USER', (action: { type: string; user: User }) => {
|
97
|
+
// Reactive component updates
|
98
|
+
});
|
99
|
+
|
100
|
+
// vs. Redux: Action/reducer pattern
|
101
|
+
dispatch(addUser(user));
|
102
|
+
// Components must manually subscribe to state changes
|
103
|
+
```
|
104
|
+
|
105
|
+
**Why it matters:** Event-driven architecture makes your app more reactive and easier to debug. Components can listen to specific events rather than watching the entire state tree.
|
106
|
+
|
107
|
+
#### **2. Zero Boilerplate**
|
108
|
+
|
109
|
+
```typescript
|
110
|
+
// ArkhamJS: Simple and direct
|
111
|
+
Flux.setState('user.name', 'John');
|
112
|
+
const userName: string = Flux.getState('user.name');
|
113
|
+
|
114
|
+
// vs. Redux Toolkit: More setup required
|
115
|
+
const userSlice = createSlice({
|
116
|
+
name: 'user',
|
117
|
+
initialState: { name: '' },
|
118
|
+
reducers: { setName: (state, action) => { state.name = action.payload; } }
|
119
|
+
});
|
120
|
+
dispatch(setName('John'));
|
121
|
+
const userName = useSelector((state: RootState) => state.user.name);
|
122
|
+
```
|
123
|
+
|
124
|
+
**Why it matters:** Less code means faster development, fewer bugs, and easier maintenance.
|
125
|
+
|
126
|
+
#### **3. Built-in Middleware System**
|
127
|
+
|
128
|
+
```typescript
|
129
|
+
// ArkhamJS: Plug-and-play middleware
|
130
|
+
Flux.addMiddleware([loggerMiddleware, devToolsMiddleware]);
|
131
|
+
|
132
|
+
// vs. Other libraries: Manual integration or external packages
|
133
|
+
```
|
134
|
+
|
135
|
+
**Why it matters:** Middleware provides powerful extensibility for logging, debugging, persistence, and custom functionality without bloating your core bundle.
|
136
|
+
|
137
|
+
#### **4. Familiar Flux Pattern**
|
138
|
+
|
139
|
+
```typescript
|
140
|
+
// ArkhamJS: Familiar Flux architecture with TypeScript
|
141
|
+
interface UserState {
|
142
|
+
users: User[];
|
143
|
+
}
|
144
|
+
|
145
|
+
const UserStore = {
|
146
|
+
name: 'user',
|
147
|
+
action: (type: string, data: any, state: UserState): UserState => {
|
148
|
+
switch (type) {
|
149
|
+
case 'ADD_USER':
|
150
|
+
return { ...state, users: [...state.users, data] };
|
151
|
+
default:
|
152
|
+
return state;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
};
|
156
|
+
```
|
157
|
+
|
158
|
+
**Why it matters:** Teams familiar with Redux/Flux can adopt ArkhamJS immediately without learning new patterns.
|
159
|
+
|
160
|
+
#### **5. Optimized Performance**
|
161
|
+
|
162
|
+
- **Tree-shaking enabled** for minimal bundle size
|
163
|
+
- **Selective re-renders** with state path subscriptions
|
164
|
+
- **Immutable updates** prevent unnecessary re-renders
|
165
|
+
- **Event-driven updates** only trigger relevant components
|
166
|
+
|
167
|
+
**Why it matters:** Better performance means faster apps and better user experience.
|
168
|
+
|
169
|
+
### 🎯 **When to Choose ArkhamJS**
|
170
|
+
|
171
|
+
#### **✅ Perfect for:**
|
172
|
+
|
173
|
+
- **Teams familiar with Flux/Redux** - Same patterns, simpler API
|
174
|
+
- **Applications needing event-driven architecture** - Built-in pub/sub
|
175
|
+
- **Projects requiring middleware** - Logging, devtools, persistence
|
176
|
+
- **Teams wanting TypeScript support** - First-class TypeScript
|
177
|
+
- **Applications with complex state interactions** - Centralized state management
|
178
|
+
- **Projects needing storage integration** - Built-in browser/Node/native support
|
179
|
+
- **Multi-platform applications** - Same code across React, React Native, Node.js
|
180
|
+
|
181
|
+
#### **❌ Consider alternatives for:**
|
182
|
+
|
183
|
+
- **Applications needing atomic state** - Consider Jotai/Recoil
|
184
|
+
- **Teams wanting mutable state** - Consider Valtio
|
185
|
+
- **Applications requiring state machines** - Consider XState
|
186
|
+
- **Projects needing minimal bundle size** - Consider Zustand
|
187
|
+
|
188
|
+
### 🔧 **Migration Benefits**
|
189
|
+
|
190
|
+
#### **From Redux:**
|
191
|
+
|
192
|
+
- **70% less boilerplate** code
|
193
|
+
- **Same familiar patterns** (actions, stores, middleware)
|
194
|
+
- **Better performance** with event-driven updates
|
195
|
+
- **Smaller bundle size** (13.4KB vs 14KB for Redux Toolkit)
|
196
|
+
|
197
|
+
#### **From Zustand:**
|
198
|
+
|
199
|
+
- **Built-in middleware support** (logging, devtools, persistence)
|
200
|
+
- **Event-driven architecture** for better reactivity
|
201
|
+
- **Familiar Flux patterns** for team consistency
|
202
|
+
- **Storage integration** out of the box
|
203
|
+
|
204
|
+
#### **From Context API:**
|
205
|
+
|
206
|
+
- **Better performance** with selective updates
|
207
|
+
- **Middleware support** for debugging and persistence
|
208
|
+
- **Predictable state management** with immutable updates
|
209
|
+
- **Event-driven architecture** for complex interactions
|
210
|
+
|
211
|
+
### 📈 **Performance Comparison**
|
212
|
+
|
213
|
+
| Metric | ArkhamJS | Redux Toolkit | Zustand | Jotai |
|
214
|
+
|--------|----------|---------------|---------|-------|
|
215
|
+
| **Bundle Size** | 13.4 KB | 14 KB | 3.2 KB | 4.1 KB |
|
216
|
+
| **Setup Complexity** | Low | Medium | Very Low | Low |
|
217
|
+
| **Learning Curve** | Low | Medium | Very Low | Medium |
|
218
|
+
| **Middleware Support** | Excellent | Excellent | Limited | None |
|
219
|
+
| **Event-Driven** | Native | Manual | Manual | Manual |
|
220
|
+
| **TypeScript Support** | Excellent | Excellent | Good | Excellent |
|
221
|
+
| **Multi-Platform** | Universal | Web-only | Web-only | Web-only |
|
222
|
+
|
223
|
+
### 🎉 **Getting Started**
|
224
|
+
|
225
|
+
```typescript
|
226
|
+
import { Flux } from '@nlabs/arkhamjs';
|
227
|
+
|
228
|
+
// Type-safe store definition
|
229
|
+
interface UserState {
|
230
|
+
users: User[];
|
231
|
+
}
|
232
|
+
|
233
|
+
const UserStore = {
|
234
|
+
name: 'user',
|
235
|
+
action: (type: string, data: any, state: UserState): UserState => {
|
236
|
+
switch (type) {
|
237
|
+
case 'ADD_USER':
|
238
|
+
return { ...state, users: [...state.users, data] };
|
239
|
+
default:
|
240
|
+
return state;
|
241
|
+
}
|
242
|
+
}
|
243
|
+
};
|
244
|
+
|
245
|
+
// Simple setup
|
246
|
+
Flux.init({
|
247
|
+
name: 'my-app',
|
248
|
+
stores: [UserStore],
|
249
|
+
middleware: [loggerMiddleware]
|
250
|
+
});
|
251
|
+
|
252
|
+
// Dispatch actions
|
253
|
+
Flux.dispatch({ type: 'ADD_USER', user: { name: 'John' } });
|
254
|
+
|
255
|
+
// Listen to events
|
256
|
+
Flux.on('ADD_USER', (action: { type: string; user: User }) => {
|
257
|
+
console.log('User added:', action.user);
|
258
|
+
});
|
259
|
+
|
260
|
+
// Get state
|
261
|
+
const userName: string = Flux.getState('user.name');
|
262
|
+
```
|
263
|
+
|
264
|
+
**Start building with ArkhamJS today and experience the perfect balance of simplicity and power!** 🚀
|
265
|
+
|
49
266
|
## Installation
|
50
267
|
|
51
268
|
Using [npm](https://www.npmjs.com/):
|
package/lib/Flux/Flux.d.ts
CHANGED
@@ -3,12 +3,15 @@ import { FluxAction, FluxMiddlewareType, FluxOptions, FluxStore } from './Flux.t
|
|
3
3
|
export declare class FluxFramework extends EventEmitter {
|
4
4
|
static initFlux: boolean;
|
5
5
|
isInit: boolean;
|
6
|
-
pluginTypes: string[];
|
6
|
+
readonly pluginTypes: readonly string[];
|
7
7
|
private state;
|
8
8
|
private storeActions;
|
9
|
-
private defaultOptions;
|
9
|
+
private readonly defaultOptions;
|
10
10
|
private middleware;
|
11
11
|
private options;
|
12
|
+
private stateCache;
|
13
|
+
private updateStorage;
|
14
|
+
private stateChanged;
|
12
15
|
constructor();
|
13
16
|
addMiddleware(middleware: FluxMiddlewareType[]): void;
|
14
17
|
clearAppData(): Promise<boolean>;
|
@@ -17,21 +20,23 @@ export declare class FluxFramework extends EventEmitter {
|
|
17
20
|
dispatch(action: FluxAction, silent?: boolean): Promise<FluxAction>;
|
18
21
|
getOptions(): FluxOptions;
|
19
22
|
getState(path?: string | string[], defaultValue?: any): any;
|
20
|
-
getStore(name?: string): FluxStore;
|
23
|
+
getStore(name?: string): FluxStore | undefined;
|
21
24
|
init(options?: FluxOptions, reset?: boolean): Promise<FluxFramework>;
|
22
25
|
onInit(listener: (...args: any[]) => void): void;
|
23
26
|
offInit(listener: (...args: any[]) => void): void;
|
24
27
|
off(eventType: string, listener: (...args: any[]) => void): this;
|
25
28
|
on(eventType: string, listener: (...args: any[]) => void): this;
|
26
|
-
addStores(stores:
|
29
|
+
addStores(stores: FluxStore[]): Promise<FluxStore[]>;
|
27
30
|
removeMiddleware(names: string[]): void;
|
28
31
|
reset(clearStorage?: boolean): Promise<void>;
|
29
32
|
setState(path: string | string[], value: any): Promise<boolean>;
|
33
|
+
private processMiddleware;
|
34
|
+
private updateStoresState;
|
35
|
+
private getCachedStack;
|
30
36
|
private addPlugin;
|
31
37
|
private deregister;
|
32
38
|
private register;
|
33
39
|
private removePlugin;
|
34
|
-
private updateStorage;
|
35
40
|
private useStorage;
|
36
41
|
}
|
37
42
|
export declare const Flux: FluxFramework;
|
package/lib/Flux/Flux.js
CHANGED
@@ -1,486 +1,5 @@
|
|
1
|
-
|
2
|
-
var
|
3
|
-
|
4
|
-
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
7
|
-
var __export = (target, all) => {
|
8
|
-
for (var name in all)
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
10
|
-
};
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
13
|
-
for (let key of __getOwnPropNames(from))
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
16
|
-
}
|
17
|
-
return to;
|
18
|
-
};
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
25
|
-
mod
|
26
|
-
));
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
28
|
-
var Flux_exports = {};
|
29
|
-
__export(Flux_exports, {
|
30
|
-
Flux: () => Flux,
|
31
|
-
FluxFramework: () => FluxFramework
|
32
|
-
});
|
33
|
-
module.exports = __toCommonJS(Flux_exports);
|
34
|
-
var import_error_stack_parser = __toESM(require("error-stack-parser"));
|
35
|
-
var import_events = require("events");
|
36
|
-
var import_debounce = __toESM(require("lodash/debounce"));
|
37
|
-
var import_cloneDeep = __toESM(require("lodash/fp/cloneDeep"));
|
38
|
-
var import_get = __toESM(require("lodash/fp/get"));
|
39
|
-
var import_isEmpty = __toESM(require("lodash/fp/isEmpty"));
|
40
|
-
var import_merge = __toESM(require("lodash/fp/merge"));
|
41
|
-
var import_set = __toESM(require("lodash/fp/set"));
|
42
|
-
var import_ArkhamConstants = require("../constants/ArkhamConstants");
|
43
|
-
class FluxFramework extends import_events.EventEmitter {
|
44
|
-
/**
|
45
|
-
* Create a new instance of Flux. Note that the Flux object
|
46
|
-
* is a Singleton pattern, so only one should ever exist.
|
47
|
-
*
|
48
|
-
* @constructor
|
49
|
-
* @this {FluxFramework}
|
50
|
-
*/
|
51
|
-
constructor() {
|
52
|
-
super();
|
53
|
-
this.isInit = false;
|
54
|
-
// Public properties
|
55
|
-
this.pluginTypes = ["preDispatch", "postDispatch"];
|
56
|
-
// Private properties
|
57
|
-
this.state = {};
|
58
|
-
this.storeActions = {};
|
59
|
-
this.defaultOptions = {
|
60
|
-
name: "arkhamjs",
|
61
|
-
routerType: "browser",
|
62
|
-
scrollToTop: true,
|
63
|
-
state: null,
|
64
|
-
storage: null,
|
65
|
-
storageWait: 300,
|
66
|
-
stores: [],
|
67
|
-
title: "ArkhamJS"
|
68
|
-
};
|
69
|
-
this.middleware = {};
|
70
|
-
this.options = this.defaultOptions;
|
71
|
-
this.updateStorage = () => Promise.resolve(false);
|
72
|
-
this.addMiddleware = this.addMiddleware.bind(this);
|
73
|
-
this.addStores = this.addStores.bind(this);
|
74
|
-
this.clearAppData = this.clearAppData.bind(this);
|
75
|
-
this.clearMiddleware = this.clearMiddleware.bind(this);
|
76
|
-
this.deregister = this.deregister.bind(this);
|
77
|
-
this.dispatch = this.dispatch.bind(this);
|
78
|
-
this.getOptions = this.getOptions.bind(this);
|
79
|
-
this.getState = this.getState.bind(this);
|
80
|
-
this.getStore = this.getStore.bind(this);
|
81
|
-
this.init = this.init.bind(this);
|
82
|
-
this.off = this.off.bind(this);
|
83
|
-
this.register = this.register.bind(this);
|
84
|
-
this.removeMiddleware = this.removeMiddleware.bind(this);
|
85
|
-
this.removeStores = this.removeStores.bind(this);
|
86
|
-
this.reset = this.reset.bind(this);
|
87
|
-
this.setState = this.setState.bind(this);
|
88
|
-
this.pluginTypes.forEach((type) => this.middleware[`${type}List`] = []);
|
89
|
-
}
|
90
|
-
static {
|
91
|
-
this.initFlux = false;
|
92
|
-
}
|
93
|
-
/**
|
94
|
-
* Add middleware to framework.
|
95
|
-
*
|
96
|
-
* @param {array} middleware An array of middleware to add to the framework.
|
97
|
-
*/
|
98
|
-
addMiddleware(middleware) {
|
99
|
-
middleware.forEach((middleObj) => {
|
100
|
-
if (!!middleObj && (typeof middleObj === "function" || typeof middleObj === "object")) {
|
101
|
-
const middleName = middleObj.name || "";
|
102
|
-
if (!middleName) {
|
103
|
-
throw Error("Unknown middleware is not configured properly. Requires name property. Cannot add to Flux.");
|
104
|
-
}
|
105
|
-
this.pluginTypes.forEach((type) => {
|
106
|
-
const method = middleObj[type];
|
107
|
-
const plugin = { method, name: middleName };
|
108
|
-
this.middleware[`${type}List`] = this.addPlugin(type, plugin);
|
109
|
-
});
|
110
|
-
} else {
|
111
|
-
throw Error("Unknown middleware is not configured properly. Cannot add to Flux.");
|
112
|
-
}
|
113
|
-
});
|
114
|
-
}
|
115
|
-
/**
|
116
|
-
* Remove all app data from storage.
|
117
|
-
*
|
118
|
-
* @returns {Promise<boolean>} Whether app data was successfully removed.
|
119
|
-
*/
|
120
|
-
clearAppData() {
|
121
|
-
Object.keys(this.storeActions).forEach((storeName) => {
|
122
|
-
const storeFn = this.storeActions[storeName];
|
123
|
-
this.state[storeFn.name] = (0, import_cloneDeep.default)(storeFn.initialState);
|
124
|
-
});
|
125
|
-
const { name, storage } = this.options;
|
126
|
-
if (storage?.setStorageData) {
|
127
|
-
return storage.setStorageData(name, this.state);
|
128
|
-
}
|
129
|
-
return Promise.resolve(true);
|
130
|
-
}
|
131
|
-
/**
|
132
|
-
* Remove all middleware.
|
133
|
-
*
|
134
|
-
* @returns {boolean} Whether middleware was successfully removed.
|
135
|
-
*/
|
136
|
-
clearMiddleware() {
|
137
|
-
Object.keys(this.middleware).forEach((pluginType) => {
|
138
|
-
this.middleware[pluginType] = [];
|
139
|
-
});
|
140
|
-
return true;
|
141
|
-
}
|
142
|
-
/**
|
143
|
-
* De-registers named stores.
|
144
|
-
*
|
145
|
-
* @param {array} storeNames An array of store names to remove from the framework.
|
146
|
-
*/
|
147
|
-
removeStores(storeNames) {
|
148
|
-
storeNames.forEach((name) => this.deregister(name));
|
149
|
-
}
|
150
|
-
/**
|
151
|
-
* Dispatches an action to all stores.
|
152
|
-
*
|
153
|
-
* @param {object} action to dispatch to all the stores.
|
154
|
-
* @param {boolean} silent To silence any events.
|
155
|
-
* @returns {Promise} The promise is resolved when and if the app saves data to storage, returning
|
156
|
-
* the action.
|
157
|
-
*/
|
158
|
-
async dispatch(action, silent = false) {
|
159
|
-
if (!action) {
|
160
|
-
throw new Error("ArkhamJS Error: Flux.dispatch requires an action.");
|
161
|
-
}
|
162
|
-
let clonedAction = (0, import_cloneDeep.default)(action);
|
163
|
-
const startTime = Date.now();
|
164
|
-
let stack = [];
|
165
|
-
try {
|
166
|
-
const stackProperty = "stackTraceLimit";
|
167
|
-
const { stackTraceLimit } = Error;
|
168
|
-
Error[stackProperty] = Infinity;
|
169
|
-
stack = import_error_stack_parser.default.parse(new Error());
|
170
|
-
Error[stackProperty] = stackTraceLimit;
|
171
|
-
} catch (error) {
|
172
|
-
}
|
173
|
-
const options = (0, import_cloneDeep.default)(this.options);
|
174
|
-
const appInfo = { duration: 0, options, stack };
|
175
|
-
const { postDispatchList = [], preDispatchList = [] } = this.middleware;
|
176
|
-
if (preDispatchList.length) {
|
177
|
-
clonedAction = await Promise.all(
|
178
|
-
preDispatchList.map(
|
179
|
-
(plugin) => plugin.method(
|
180
|
-
(0, import_cloneDeep.default)(clonedAction),
|
181
|
-
(0, import_cloneDeep.default)(this.state),
|
182
|
-
appInfo
|
183
|
-
)
|
184
|
-
)
|
185
|
-
).then(
|
186
|
-
(actions) => actions.reduce((updatedAction, action2) => (0, import_merge.default)(updatedAction, action2), clonedAction)
|
187
|
-
).catch((error) => {
|
188
|
-
throw error;
|
189
|
-
});
|
190
|
-
}
|
191
|
-
const { type, ...data } = clonedAction;
|
192
|
-
if (!type || type === "") {
|
193
|
-
console.warn("ArkhamJS Warning: Flux.dispatch is missing an action type for the payload:", data);
|
194
|
-
return Promise.resolve(clonedAction);
|
195
|
-
}
|
196
|
-
Object.keys(this.storeActions).forEach((storeName) => {
|
197
|
-
const storeFn = this.storeActions[storeName];
|
198
|
-
const state = (0, import_cloneDeep.default)(this.state[storeName]) || (0, import_cloneDeep.default)(storeFn.initialState) || {};
|
199
|
-
this.state[storeName] = (0, import_cloneDeep.default)(storeFn.action(type, data, state)) || state;
|
200
|
-
});
|
201
|
-
const { storage } = this.options;
|
202
|
-
if (storage && this.updateStorage) {
|
203
|
-
try {
|
204
|
-
await this.updateStorage();
|
205
|
-
} catch (error) {
|
206
|
-
}
|
207
|
-
}
|
208
|
-
const endTime = +/* @__PURE__ */ new Date();
|
209
|
-
const duration = endTime - startTime;
|
210
|
-
appInfo.duration = duration;
|
211
|
-
if (postDispatchList.length) {
|
212
|
-
clonedAction = await Promise.all(
|
213
|
-
postDispatchList.map(
|
214
|
-
async (plugin) => plugin.method((0, import_cloneDeep.default)(clonedAction), (0, import_cloneDeep.default)(this.state), appInfo)
|
215
|
-
)
|
216
|
-
).then(
|
217
|
-
(actions) => actions.reduce((updatedAction, action2) => (0, import_merge.default)(updatedAction, action2), clonedAction)
|
218
|
-
).catch((error) => {
|
219
|
-
throw error;
|
220
|
-
});
|
221
|
-
}
|
222
|
-
if (!silent) {
|
223
|
-
this.emit(type, clonedAction);
|
224
|
-
this.emit("arkhamjs", this.state);
|
225
|
-
}
|
226
|
-
return Promise.resolve(clonedAction);
|
227
|
-
}
|
228
|
-
/**
|
229
|
-
* Get the current Flux options.
|
230
|
-
*
|
231
|
-
* @returns {FluxOptions} the Flux options object.
|
232
|
-
*/
|
233
|
-
getOptions() {
|
234
|
-
return this.options;
|
235
|
-
}
|
236
|
-
/**
|
237
|
-
* Get the current state object.
|
238
|
-
*
|
239
|
-
* @param {string|array} [name] (optional) The name of the store for an object, otherwise it will return all store
|
240
|
-
* objects. You can also use an array to specify a property path within the object.
|
241
|
-
* @param {any} [defaultValue] (optional) A default value to return if null.
|
242
|
-
* @returns {any} the state object or a property value within.
|
243
|
-
*/
|
244
|
-
getState(path = "", defaultValue) {
|
245
|
-
let storeValue;
|
246
|
-
if (!path) {
|
247
|
-
storeValue = this.state || {};
|
248
|
-
} else {
|
249
|
-
storeValue = (0, import_get.default)(path, this.state);
|
250
|
-
}
|
251
|
-
const value = storeValue ? (0, import_cloneDeep.default)(storeValue) : storeValue;
|
252
|
-
return value === void 0 ? defaultValue : value;
|
253
|
-
}
|
254
|
-
/**
|
255
|
-
* Get a store object registered with Flux.
|
256
|
-
*
|
257
|
-
* @param {string} name The name of the store.
|
258
|
-
* @returns {FluxStore} the store object.
|
259
|
-
*/
|
260
|
-
getStore(name = "") {
|
261
|
-
return this.storeActions[name];
|
262
|
-
}
|
263
|
-
/**
|
264
|
-
* Initialize and set configuration options.
|
265
|
-
*
|
266
|
-
* @param {object} options Configuration options.
|
267
|
-
*/
|
268
|
-
async init(options = {}, reset = false) {
|
269
|
-
if (reset) {
|
270
|
-
this.isInit = false;
|
271
|
-
this.reset(false);
|
272
|
-
}
|
273
|
-
const updatedOptions = { ...options };
|
274
|
-
if (this.isInit) {
|
275
|
-
updatedOptions.name = this.options.name;
|
276
|
-
}
|
277
|
-
this.options = { ...this.defaultOptions, ...updatedOptions };
|
278
|
-
const { debug, middleware, name, stores } = this.options;
|
279
|
-
try {
|
280
|
-
await this.useStorage(name);
|
281
|
-
} catch (error) {
|
282
|
-
console.error("Arkham Error: There was an error while using storage.", name);
|
283
|
-
throw error;
|
284
|
-
}
|
285
|
-
if (!!stores && stores.length) {
|
286
|
-
try {
|
287
|
-
await this.addStores(stores);
|
288
|
-
} catch (error) {
|
289
|
-
console.error("Arkham Error: There was an error while adding stores.", stores);
|
290
|
-
throw error;
|
291
|
-
}
|
292
|
-
}
|
293
|
-
if (!!middleware && middleware.length) {
|
294
|
-
this.addMiddleware(middleware);
|
295
|
-
}
|
296
|
-
const windowProperty = "arkhamjs";
|
297
|
-
if (debug) {
|
298
|
-
window[windowProperty] = this;
|
299
|
-
} else {
|
300
|
-
delete window[windowProperty];
|
301
|
-
}
|
302
|
-
this.isInit = true;
|
303
|
-
this.emit(import_ArkhamConstants.ArkhamConstants.INIT);
|
304
|
-
return this;
|
305
|
-
}
|
306
|
-
/**
|
307
|
-
* Adds an initialization listener.
|
308
|
-
*
|
309
|
-
* @param {function} [listener] The callback associated with the subscribed event.
|
310
|
-
*/
|
311
|
-
onInit(listener) {
|
312
|
-
this.on(import_ArkhamConstants.ArkhamConstants.INIT, listener);
|
313
|
-
if (this.isInit) {
|
314
|
-
listener();
|
315
|
-
}
|
316
|
-
}
|
317
|
-
/**
|
318
|
-
* Removes the initialization listener.
|
319
|
-
*
|
320
|
-
* @param {function} [listener] The callback associated with the subscribed event.
|
321
|
-
*/
|
322
|
-
offInit(listener) {
|
323
|
-
this.off(import_ArkhamConstants.ArkhamConstants.INIT, listener);
|
324
|
-
}
|
325
|
-
/**
|
326
|
-
* Removes an event listener.
|
327
|
-
*
|
328
|
-
* @param {string} [eventType] Event to unsubscribe.
|
329
|
-
* @param {function} [listener] The callback associated with the subscribed event.
|
330
|
-
*/
|
331
|
-
off(eventType, listener) {
|
332
|
-
return this.removeListener(eventType, listener);
|
333
|
-
}
|
334
|
-
/**
|
335
|
-
* Adds an event listener.
|
336
|
-
*
|
337
|
-
* @param {string} [eventType] Event to subscribe.
|
338
|
-
* @param {function} [listener] The callback associated with the subscribed event.
|
339
|
-
*/
|
340
|
-
on(eventType, listener) {
|
341
|
-
return this.addListener(eventType, listener);
|
342
|
-
}
|
343
|
-
/**
|
344
|
-
* Registers new Stores.
|
345
|
-
*
|
346
|
-
* @param {array} stores Store class.
|
347
|
-
* @returns {Promise<object[]>} the class object(s).
|
348
|
-
*/
|
349
|
-
async addStores(stores) {
|
350
|
-
const registeredStores = stores.map((store) => this.register(store));
|
351
|
-
const { name, storage } = this.options;
|
352
|
-
if (storage?.setStorageData) {
|
353
|
-
try {
|
354
|
-
await storage.setStorageData(name, this.state);
|
355
|
-
} catch (error) {
|
356
|
-
throw error;
|
357
|
-
}
|
358
|
-
}
|
359
|
-
return registeredStores;
|
360
|
-
}
|
361
|
-
/**
|
362
|
-
* Remove middleware from framework.
|
363
|
-
*
|
364
|
-
* @param {array} string middleware names to remove.
|
365
|
-
* @returns {Promise<object[]>} the class object(s).
|
366
|
-
*/
|
367
|
-
removeMiddleware(names) {
|
368
|
-
names.forEach((name) => {
|
369
|
-
this.pluginTypes.forEach((type) => {
|
370
|
-
this.middleware[`${type}List`] = this.removePlugin(type, name);
|
371
|
-
});
|
372
|
-
});
|
373
|
-
}
|
374
|
-
/**
|
375
|
-
* Reset framework.
|
376
|
-
*
|
377
|
-
* @param {array} string middleware names to remove.
|
378
|
-
* @returns {Promise<object[]>} the class object(s).
|
379
|
-
*/
|
380
|
-
async reset(clearStorage = true) {
|
381
|
-
const { name, storage } = this.options;
|
382
|
-
if (storage && clearStorage) {
|
383
|
-
try {
|
384
|
-
await storage.setStorageData(name, {});
|
385
|
-
} catch (error) {
|
386
|
-
throw error;
|
387
|
-
}
|
388
|
-
}
|
389
|
-
this.middleware = {};
|
390
|
-
this.options = { ...this.defaultOptions };
|
391
|
-
this.state = {};
|
392
|
-
this.storeActions = {};
|
393
|
-
this.isInit = false;
|
394
|
-
}
|
395
|
-
/**
|
396
|
-
* Sets the current state object.
|
397
|
-
*
|
398
|
-
* @param {string|array} [name] The name of the store to set. You can also use an array to specify a property path
|
399
|
-
* within the object.
|
400
|
-
* @param {any} [value] The value to set.
|
401
|
-
*/
|
402
|
-
setState(path = "", value) {
|
403
|
-
if (!!path) {
|
404
|
-
this.state = (0, import_set.default)(path, (0, import_cloneDeep.default)(value), this.state);
|
405
|
-
}
|
406
|
-
const { storage } = this.options;
|
407
|
-
if (storage && this.updateStorage) {
|
408
|
-
return this.updateStorage();
|
409
|
-
}
|
410
|
-
return Promise.resolve(false);
|
411
|
-
}
|
412
|
-
addPlugin(type, plugin) {
|
413
|
-
const list = this.middleware[`${type}List`] || [];
|
414
|
-
const { method, name } = plugin;
|
415
|
-
if (method && typeof method === "function") {
|
416
|
-
const exists = !!list.filter((obj) => obj.name === name).length;
|
417
|
-
if (!exists) {
|
418
|
-
list.push({ method, name });
|
419
|
-
}
|
420
|
-
} else if (method !== void 0) {
|
421
|
-
throw Error(`${plugin.name} middleware is not configured properly. Method is not a function.`);
|
422
|
-
}
|
423
|
-
return list;
|
424
|
-
}
|
425
|
-
deregister(name = "") {
|
426
|
-
delete this.storeActions[name];
|
427
|
-
delete this.state[name];
|
428
|
-
}
|
429
|
-
register(storeFn) {
|
430
|
-
if (!storeFn) {
|
431
|
-
throw Error("Store is undefined. Cannot register with Flux.");
|
432
|
-
}
|
433
|
-
const isFnc = typeof storeFn === "function";
|
434
|
-
if (!isFnc) {
|
435
|
-
throw Error(`${storeFn} is not a store function. Cannot register with Flux.`);
|
436
|
-
}
|
437
|
-
const { name } = storeFn;
|
438
|
-
const initialState = storeFn();
|
439
|
-
const storeAction = {
|
440
|
-
action: storeFn,
|
441
|
-
initialState: storeFn(),
|
442
|
-
name
|
443
|
-
};
|
444
|
-
if (!(0, import_isEmpty.default)(name) && !this.storeActions[name]) {
|
445
|
-
this.storeActions[name] = storeAction;
|
446
|
-
if (!this.state[name]) {
|
447
|
-
if (initialState) {
|
448
|
-
this.state[name] = (0, import_cloneDeep.default)(initialState);
|
449
|
-
} else {
|
450
|
-
this.state[name] = {};
|
451
|
-
}
|
452
|
-
}
|
453
|
-
}
|
454
|
-
return this.storeActions[name];
|
455
|
-
}
|
456
|
-
removePlugin(type, name) {
|
457
|
-
const list = this.middleware[`${type}List`] || [];
|
458
|
-
return list.filter((obj) => obj.name !== name);
|
459
|
-
}
|
460
|
-
async useStorage(name) {
|
461
|
-
const { storage, state, storageWait } = this.options;
|
462
|
-
if (storage) {
|
463
|
-
try {
|
464
|
-
this.state = state || await storage.getStorageData(name) || {};
|
465
|
-
this.updateStorage = (0, import_debounce.default)(
|
466
|
-
() => storage.setStorageData(name, this.state),
|
467
|
-
storageWait,
|
468
|
-
{ leading: true, trailing: true }
|
469
|
-
);
|
470
|
-
} catch (error) {
|
471
|
-
console.error(`ArkhamJS Error: Using storage, "${name}".`);
|
472
|
-
throw error;
|
473
|
-
}
|
474
|
-
} else {
|
475
|
-
this.state = state || {};
|
476
|
-
}
|
477
|
-
return null;
|
478
|
-
}
|
479
|
-
}
|
480
|
-
const Flux = new FluxFramework();
|
481
|
-
// Annotate the CommonJS export names for ESM import in node:
|
482
|
-
0 && (module.exports = {
|
483
|
-
Flux,
|
484
|
-
FluxFramework
|
485
|
-
});
|
486
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0ZsdXgvRmx1eC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBFcnJvclN0YWNrUGFyc2VyIGZyb20gJ2Vycm9yLXN0YWNrLXBhcnNlcic7XG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvZnAvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2ZwL2dldCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvZnAvaXNFbXB0eSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL2ZwL21lcmdlJztcbmltcG9ydCBzZXQgZnJvbSAnbG9kYXNoL2ZwL3NldCc7XG5cbmltcG9ydCB7QXJraGFtQ29uc3RhbnRzfSBmcm9tICcuLi9jb25zdGFudHMvQXJraGFtQ29uc3RhbnRzJztcbmltcG9ydCB7Rmx1eEFjdGlvbiwgRmx1eE1pZGRsZXdhcmVUeXBlLCBGbHV4T3B0aW9ucywgRmx1eFBsdWdpblR5cGUsIEZsdXhTdG9yZX0gZnJvbSAnLi9GbHV4LnR5cGVzJztcblxuLyoqXG4gKiBGbHV4RnJhbWV3b3JrXG4gKiBAdHlwZSB7RXZlbnRFbWl0dGVyfVxuICovXG5leHBvcnQgY2xhc3MgRmx1eEZyYW1ld29yayBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHN0YXRpYyBpbml0Rmx1eDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gUHVibGljIHByb3BlcnRpZXNcbiAgcGx1Z2luVHlwZXM6IHN0cmluZ1tdID0gWydwcmVEaXNwYXRjaCcsICdwb3N0RGlzcGF0Y2gnXTtcbiAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzXG4gIHByaXZhdGUgc3RhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIHN0b3JlQWN0aW9uczogYW55ID0ge307XG4gIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IEZsdXhPcHRpb25zID0ge1xuICAgIG5hbWU6ICdhcmtoYW1qcycsXG4gICAgcm91dGVyVHlwZTogJ2Jyb3dzZXInLFxuICAgIHNjcm9sbFRvVG9wOiB0cnVlLFxuICAgIHN0YXRlOiBudWxsLFxuICAgIHN0b3JhZ2U6IG51bGwsXG4gICAgc3RvcmFnZVdhaXQ6IDMwMCxcbiAgICBzdG9yZXM6IFtdLFxuICAgIHRpdGxlOiAnQXJraGFtSlMnXG4gIH07XG4gIHByaXZhdGUgbWlkZGxld2FyZTogYW55ID0ge307XG4gIHByaXZhdGUgb3B0aW9uczogRmx1eE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRPcHRpb25zO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEZsdXguICBOb3RlIHRoYXQgdGhlIEZsdXggb2JqZWN0XG4gICAqIGlzIGEgU2luZ2xldG9uIHBhdHRlcm4sIHNvIG9ubHkgb25lIHNob3VsZCBldmVyIGV4aXN0LlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHRoaXMge0ZsdXhGcmFtZXdvcmt9XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLy8gTWV0aG9kc1xuICAgIHRoaXMuYWRkTWlkZGxld2FyZSA9IHRoaXMuYWRkTWlkZGxld2FyZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYWRkU3RvcmVzID0gdGhpcy5hZGRTdG9yZXMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyQXBwRGF0YSA9IHRoaXMuY2xlYXJBcHBEYXRhLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhck1pZGRsZXdhcmUgPSB0aGlzLmNsZWFyTWlkZGxld2FyZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZGVyZWdpc3RlciA9IHRoaXMuZGVyZWdpc3Rlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldFN0b3JlID0gdGhpcy5nZXRTdG9yZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaW5pdCA9IHRoaXMuaW5pdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMub2ZmID0gdGhpcy5vZmYuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyID0gdGhpcy5yZWdpc3Rlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVtb3ZlTWlkZGxld2FyZSA9IHRoaXMucmVtb3ZlTWlkZGxld2FyZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVtb3ZlU3RvcmVzID0gdGhpcy5yZW1vdmVTdG9yZXMuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlc2V0ID0gdGhpcy5yZXNldC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0U3RhdGUgPSB0aGlzLnNldFN0YXRlLmJpbmQodGhpcyk7XG5cbiAgICAvLyBBZGQgbWlkZGxld2FyZSBwbHVnaW4gdHlwZXNcbiAgICB0aGlzLnBsdWdpblR5cGVzLmZvckVhY2goKHR5cGU6IHN0cmluZykgPT4gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdID0gW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtaWRkbGV3YXJlIHRvIGZyYW1ld29yay5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gbWlkZGxld2FyZSBBbiBhcnJheSBvZiBtaWRkbGV3YXJlIHRvIGFkZCB0byB0aGUgZnJhbWV3b3JrLlxuICAgKi9cbiAgYWRkTWlkZGxld2FyZShtaWRkbGV3YXJlOiBGbHV4TWlkZGxld2FyZVR5cGVbXSk6IHZvaWQge1xuICAgIG1pZGRsZXdhcmUuZm9yRWFjaCgobWlkZGxlT2JqOiBGbHV4TWlkZGxld2FyZVR5cGUpID0+IHtcbiAgICAgIC8vIE1ha2Ugc3VyZSBtaWRkbGV3YXJlIGlzIGVpdGhlciBhIGNsYXNzIG9yIG9iamVjdC5cbiAgICAgIGlmKCEhbWlkZGxlT2JqICYmICgodHlwZW9mIG1pZGRsZU9iaiA9PT0gJ2Z1bmN0aW9uJykgfHwgKHR5cGVvZiBtaWRkbGVPYmogPT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgY29uc3QgbWlkZGxlTmFtZTogc3RyaW5nID0gbWlkZGxlT2JqLm5hbWUgfHwgJyc7XG5cbiAgICAgICAgaWYoIW1pZGRsZU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBtaWRkbGV3YXJlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiBSZXF1aXJlcyBuYW1lIHByb3BlcnR5LiBDYW5ub3QgYWRkIHRvIEZsdXguJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0IG1pZGRsZXdhcmUgcGx1Z2lucyBmb3IgZWZmaWNpZW5jeVxuICAgICAgICB0aGlzLnBsdWdpblR5cGVzLmZvckVhY2goKHR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG1pZGRsZU9ialt0eXBlXTtcbiAgICAgICAgICBjb25zdCBwbHVnaW46IEZsdXhQbHVnaW5UeXBlID0ge21ldGhvZCwgbmFtZTogbWlkZGxlTmFtZX07XG4gICAgICAgICAgdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdID0gdGhpcy5hZGRQbHVnaW4odHlwZSwgcGx1Z2luKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBtaWRkbGV3YXJlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiBDYW5ub3QgYWRkIHRvIEZsdXguJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBhcHAgZGF0YSBmcm9tIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIGFwcCBkYXRhIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cbiAgICovXG4gIGNsZWFyQXBwRGF0YSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTZXQgYWxsIHN0b3JlIGRhdGEgdG8gaW5pdGlhbCBzdGF0ZVxuICAgIE9iamVjdFxuICAgICAgLmtleXModGhpcy5zdG9yZUFjdGlvbnMpXG4gICAgICAuZm9yRWFjaCgoc3RvcmVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmVGbiA9IHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV07XG4gICAgICAgIHRoaXMuc3RhdGVbc3RvcmVGbi5uYW1lXSA9IGNsb25lRGVlcChzdG9yZUZuLmluaXRpYWxTdGF0ZSk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHtuYW1lLCBzdG9yYWdlfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmKHN0b3JhZ2U/LnNldFN0b3JhZ2VEYXRhKSB7XG4gICAgICByZXR1cm4gc3RvcmFnZS5zZXRTdG9yYWdlRGF0YShuYW1lLCB0aGlzLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgbWlkZGxld2FyZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgbWlkZGxld2FyZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXG4gICAqL1xuICBjbGVhck1pZGRsZXdhcmUoKTogYm9vbGVhbiB7XG4gICAgLy8gU2V0IGFsbCBzdG9yZSBkYXRhIHRvIGluaXRpYWwgc3RhdGVcbiAgICBPYmplY3RcbiAgICAgIC5rZXlzKHRoaXMubWlkZGxld2FyZSlcbiAgICAgIC5mb3JFYWNoKChwbHVnaW5UeXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5taWRkbGV3YXJlW3BsdWdpblR5cGVdID0gW107XG4gICAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlLXJlZ2lzdGVycyBuYW1lZCBzdG9yZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IHN0b3JlTmFtZXMgQW4gYXJyYXkgb2Ygc3RvcmUgbmFtZXMgdG8gcmVtb3ZlIGZyb20gdGhlIGZyYW1ld29yay5cbiAgICovXG4gIHJlbW92ZVN0b3JlcyhzdG9yZU5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHN0b3JlTmFtZXMuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLmRlcmVnaXN0ZXIobmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uIHRvIGFsbCBzdG9yZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb24gdG8gZGlzcGF0Y2ggdG8gYWxsIHRoZSBzdG9yZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2lsZW50IFRvIHNpbGVuY2UgYW55IGV2ZW50cy5cbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gYW5kIGlmIHRoZSBhcHAgc2F2ZXMgZGF0YSB0byBzdG9yYWdlLCByZXR1cm5pbmdcbiAgICogdGhlIGFjdGlvbi5cbiAgICovXG4gIGFzeW5jIGRpc3BhdGNoKGFjdGlvbjogRmx1eEFjdGlvbiwgc2lsZW50OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEZsdXhBY3Rpb24+IHtcbiAgICBpZighYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fya2hhbUpTIEVycm9yOiBGbHV4LmRpc3BhdGNoIHJlcXVpcmVzIGFuIGFjdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgY2xvbmVkQWN0aW9uOiBGbHV4QWN0aW9uID0gY2xvbmVEZWVwKGFjdGlvbik7XG5cbiAgICAvLyBMb2cgZHVyYXRpb24gb2YgZGlzcGF0Y2hcbiAgICBjb25zdCBzdGFydFRpbWU6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgICAvLyBHZXQgc3RhY2tcbiAgICBsZXQgc3RhY2sgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFja1Byb3BlcnR5OiBzdHJpbmcgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgICAgIGNvbnN0IHtzdGFja1RyYWNlTGltaXR9OiBhbnkgPSBFcnJvcjtcbiAgICAgIEVycm9yW3N0YWNrUHJvcGVydHldID0gSW5maW5pdHk7XG4gICAgICBzdGFjayA9IEVycm9yU3RhY2tQYXJzZXIucGFyc2UobmV3IEVycm9yKCkpO1xuICAgICAgRXJyb3Jbc3RhY2tQcm9wZXJ0eV0gPSBzdGFja1RyYWNlTGltaXQ7XG4gICAgfSBjYXRjaChlcnJvcikge31cblxuICAgIC8vIEdldCBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNsb25lRGVlcCh0aGlzLm9wdGlvbnMpO1xuXG4gICAgLy8gQXBwIGluZm9cbiAgICBjb25zdCBhcHBJbmZvID0ge2R1cmF0aW9uOiAwLCBvcHRpb25zLCBzdGFja307XG5cbiAgICAvLyBBcHBseSBtaWRkbGV3YXJlIGJlZm9yZSB0aGUgYWN0aW9uIGlzIHByb2Nlc3NlZFxuICAgIGNvbnN0IHtwb3N0RGlzcGF0Y2hMaXN0ID0gW10sIHByZURpc3BhdGNoTGlzdCA9IFtdfSA9IHRoaXMubWlkZGxld2FyZTtcblxuICAgIGlmKHByZURpc3BhdGNoTGlzdC5sZW5ndGgpIHtcbiAgICAgIGNsb25lZEFjdGlvbiA9IGF3YWl0IFByb21pc2VcbiAgICAgICAgLmFsbChcbiAgICAgICAgICBwcmVEaXNwYXRjaExpc3QubWFwKChwbHVnaW46IEZsdXhQbHVnaW5UeXBlKSA9PiBwbHVnaW4ubWV0aG9kKFxuICAgICAgICAgICAgY2xvbmVEZWVwKGNsb25lZEFjdGlvbiksIGNsb25lRGVlcCh0aGlzLnN0YXRlKSwgYXBwSW5mbylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKGFjdGlvbnMpID0+IGFjdGlvbnMucmVkdWNlKCh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pID0+XG4gICAgICAgICAgICBtZXJnZSh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pLCBjbG9uZWRBY3Rpb24pIGFzIEZsdXhBY3Rpb25cbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHt0eXBlLCAuLi5kYXRhfSA9IGNsb25lZEFjdGlvbjtcblxuICAgIC8vIFJlcXVpcmUgYSB0eXBlXG4gICAgaWYoIXR5cGUgfHwgdHlwZSA9PT0gJycpIHtcbiAgICAgIGNvbnNvbGUud2FybignQXJraGFtSlMgV2FybmluZzogRmx1eC5kaXNwYXRjaCBpcyBtaXNzaW5nIGFuIGFjdGlvbiB0eXBlIGZvciB0aGUgcGF5bG9hZDonLCBkYXRhKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmVkQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFuIGFjdGlvbiBjb21lcyBpbiwgaXQgbXVzdCBiZSBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgYWxsIHN0b3Jlc1xuICAgIE9iamVjdFxuICAgICAgLmtleXModGhpcy5zdG9yZUFjdGlvbnMpXG4gICAgICAuZm9yRWFjaCgoc3RvcmVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmVGbiA9IHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV07XG4gICAgICAgIGNvbnN0IHN0YXRlID0gY2xvbmVEZWVwKHRoaXMuc3RhdGVbc3RvcmVOYW1lXSkgfHwgY2xvbmVEZWVwKHN0b3JlRm4uaW5pdGlhbFN0YXRlKSB8fCB7fTtcbiAgICAgICAgdGhpcy5zdGF0ZVtzdG9yZU5hbWVdID0gY2xvbmVEZWVwKHN0b3JlRm4uYWN0aW9uKHR5cGUsIGRhdGEsIHN0YXRlKSkgfHwgc3RhdGU7XG4gICAgICB9KTtcblxuICAgIC8vIFNhdmUgY2FjaGUgaW4gc3RvcmFnZVxuICAgIGNvbnN0IHtzdG9yYWdlfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmKHN0b3JhZ2UgJiYgdGhpcy51cGRhdGVTdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHt9XG4gICAgfVxuXG4gICAgY29uc3QgZW5kVGltZTogbnVtYmVyID0gKyhuZXcgRGF0ZSgpKTtcbiAgICBjb25zdCBkdXJhdGlvbjogbnVtYmVyID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgICBhcHBJbmZvLmR1cmF0aW9uID0gZHVyYXRpb247XG5cbiAgICBpZihwb3N0RGlzcGF0Y2hMaXN0Lmxlbmd0aCkge1xuICAgICAgY2xvbmVkQWN0aW9uID0gYXdhaXQgUHJvbWlzZVxuICAgICAgICAuYWxsKFxuICAgICAgICAgIHBvc3REaXNwYXRjaExpc3QubWFwKFxuICAgICAgICAgICAgYXN5bmMgKHBsdWdpbjogRmx1eFBsdWdpblR5cGUpID0+IHBsdWdpbi5tZXRob2QoY2xvbmVEZWVwKGNsb25lZEFjdGlvbiksIGNsb25lRGVlcCh0aGlzLnN0YXRlKSwgYXBwSW5mbylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKGFjdGlvbnMpID0+IGFjdGlvbnMucmVkdWNlKCh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pID0+XG4gICAgICAgICAgICBtZXJnZSh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pLCBjbG9uZWRBY3Rpb24pIGFzIEZsdXhBY3Rpb25cbiAgICAgICAgKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuZW1pdCh0eXBlLCBjbG9uZWRBY3Rpb24pO1xuICAgICAgdGhpcy5lbWl0KCdhcmtoYW1qcycsIHRoaXMuc3RhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmVkQWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgRmx1eCBvcHRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Rmx1eE9wdGlvbnN9IHRoZSBGbHV4IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgZ2V0T3B0aW9ucygpOiBGbHV4T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gW25hbWVdIChvcHRpb25hbCkgVGhlIG5hbWUgb2YgdGhlIHN0b3JlIGZvciBhbiBvYmplY3QsIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBhbGwgc3RvcmVcbiAgICogICBvYmplY3RzLiBZb3UgY2FuIGFsc28gdXNlIGFuIGFycmF5IHRvIHNwZWNpZnkgYSBwcm9wZXJ0eSBwYXRoIHdpdGhpbiB0aGUgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2FueX0gW2RlZmF1bHRWYWx1ZV0gKG9wdGlvbmFsKSBBIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIG51bGwuXG4gICAqIEByZXR1cm5zIHthbnl9IHRoZSBzdGF0ZSBvYmplY3Qgb3IgYSBwcm9wZXJ0eSB2YWx1ZSB3aXRoaW4uXG4gICAqL1xuICBnZXRTdGF0ZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnLCBkZWZhdWx0VmFsdWU/KTogYW55IHtcbiAgICBsZXQgc3RvcmVWYWx1ZTtcblxuICAgIGlmKCFwYXRoKSB7XG4gICAgICBzdG9yZVZhbHVlID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcmVWYWx1ZSA9IGdldChwYXRoLCB0aGlzLnN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHN0b3JlVmFsdWUgPyBjbG9uZURlZXAoc3RvcmVWYWx1ZSkgOiBzdG9yZVZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RvcmUgb2JqZWN0IHJlZ2lzdGVyZWQgd2l0aCBGbHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc3RvcmUuXG4gICAqIEByZXR1cm5zIHtGbHV4U3RvcmV9IHRoZSBzdG9yZSBvYmplY3QuXG4gICAqL1xuICBnZXRTdG9yZShuYW1lOiBzdHJpbmcgPSAnJyk6IEZsdXhTdG9yZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICovXG4gIGFzeW5jIGluaXQob3B0aW9uczogRmx1eE9wdGlvbnMgPSB7fSwgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Rmx1eEZyYW1ld29yaz4ge1xuICAgIC8vIFNob3VsZCByZXNldCBwcmV2aW91cyBwYXJhbXNcbiAgICBpZihyZXNldCkge1xuICAgICAgdGhpcy5pc0luaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCBvcHRpb25zXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB7Li4ub3B0aW9uc307XG5cbiAgICBpZih0aGlzLmlzSW5pdCkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBuYW1lIGZyb20gb3B0aW9ucyBpZiBhbHJlYWR5IGluaXRpYWxpemVkLCBvdGhlcndpc2UgdGhlIHJvb3QgYXBwIHdpbGwgbm90IGJlIGFibGUgdG8gYWNjZXNzXG4gICAgICAvLyB0aGUgc3RhdGUgdHJlZVxuICAgICAgdXBkYXRlZE9wdGlvbnMubmFtZSA9IHRoaXMub3B0aW9ucy5uYW1lO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IHsuLi50aGlzLmRlZmF1bHRPcHRpb25zLCAuLi51cGRhdGVkT3B0aW9uc307XG4gICAgY29uc3Qge2RlYnVnLCBtaWRkbGV3YXJlLCBuYW1lLCBzdG9yZXN9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgLy8gVXBkYXRlIGRlZmF1bHQgc3RvcmVcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51c2VTdG9yYWdlKG5hbWUpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Fya2hhbSBFcnJvcjogVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHVzaW5nIHN0b3JhZ2UuJywgbmFtZSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBpZighIXN0b3JlcyAmJiBzdG9yZXMubGVuZ3RoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkZFN0b3JlcyhzdG9yZXMpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBcmtoYW0gRXJyb3I6IFRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhZGRpbmcgc3RvcmVzLicsIHN0b3Jlcyk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCEhbWlkZGxld2FyZSAmJiBtaWRkbGV3YXJlLmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGRNaWRkbGV3YXJlKG1pZGRsZXdhcmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHdpbmRvd1Byb3BlcnR5OiBzdHJpbmcgPSAnYXJraGFtanMnO1xuXG4gICAgaWYoZGVidWcpIHtcbiAgICAgIHdpbmRvd1t3aW5kb3dQcm9wZXJ0eV0gPSB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgd2luZG93W3dpbmRvd1Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KEFya2hhbUNvbnN0YW50cy5JTklUKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW5pdGlhbGl6YXRpb24gbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtsaXN0ZW5lcl0gVGhlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Vic2NyaWJlZCBldmVudC5cbiAgICovXG4gIG9uSW5pdChsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbihBcmtoYW1Db25zdGFudHMuSU5JVCwgbGlzdGVuZXIpO1xuXG4gICAgaWYodGhpcy5pc0luaXQpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGluaXRpYWxpemF0aW9uIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbbGlzdGVuZXJdIFRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnNjcmliZWQgZXZlbnQuXG4gICAqL1xuICBvZmZJbml0KGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9mZihBcmtoYW1Db25zdGFudHMuSU5JVCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRUeXBlXSBFdmVudCB0byB1bnN1YnNjcmliZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2xpc3RlbmVyXSBUaGUgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJzY3JpYmVkIGV2ZW50LlxuICAgKi9cbiAgb2ZmKGV2ZW50VHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudFR5cGVdIEV2ZW50IHRvIHN1YnNjcmliZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2xpc3RlbmVyXSBUaGUgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJzY3JpYmVkIGV2ZW50LlxuICAgKi9cbiAgb24oZXZlbnRUeXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgbmV3IFN0b3Jlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gc3RvcmVzIFN0b3JlIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3RbXT59IHRoZSBjbGFzcyBvYmplY3QocykuXG4gICAqL1xuICBhc3luYyBhZGRTdG9yZXMoc3RvcmVzOiBhbnlbXSk6IFByb21pc2U8b2JqZWN0W10+IHtcbiAgICBjb25zdCByZWdpc3RlcmVkU3RvcmVzOiBGbHV4U3RvcmVbXSA9IHN0b3Jlcy5tYXAoKHN0b3JlOiBGbHV4U3RvcmUpID0+IHRoaXMucmVnaXN0ZXIoc3RvcmUpKTtcblxuICAgIC8vIFNhdmUgY2FjaGUgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYoc3RvcmFnZT8uc2V0U3RvcmFnZURhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGEobmFtZSwgdGhpcy5zdGF0ZSk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBjbGFzc2VzXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRTdG9yZXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIG1pZGRsZXdhcmUgZnJvbSBmcmFtZXdvcmsuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IHN0cmluZyBtaWRkbGV3YXJlIG5hbWVzIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0W10+fSB0aGUgY2xhc3Mgb2JqZWN0KHMpLlxuICAgKi9cbiAgcmVtb3ZlTWlkZGxld2FyZShuYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBuYW1lcy5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFJlbW92ZSBtaWRkbGV3YXJlIHBsdWdpbnNcbiAgICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWlkZGxld2FyZVtgJHt0eXBlfUxpc3RgXSA9IHRoaXMucmVtb3ZlUGx1Z2luKHR5cGUsIG5hbWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgZnJhbWV3b3JrLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBzdHJpbmcgbWlkZGxld2FyZSBuYW1lcyB0byByZW1vdmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdFtdPn0gdGhlIGNsYXNzIG9iamVjdChzKS5cbiAgICovXG4gIGFzeW5jIHJlc2V0KGNsZWFyU3RvcmFnZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7bmFtZSwgc3RvcmFnZX0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAvLyBDbGVhciBwZXJzaXN0ZW50IGNhY2hlXG4gICAgaWYoc3RvcmFnZSAmJiBjbGVhclN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGEobmFtZSwge30pO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBhbGwgcHJvcGVydGllc1xuICAgIHRoaXMubWlkZGxld2FyZSA9IHt9O1xuICAgIHRoaXMub3B0aW9ucyA9IHsuLi50aGlzLmRlZmF1bHRPcHRpb25zfTtcbiAgICB0aGlzLnN0YXRlID0ge307XG4gICAgdGhpcy5zdG9yZUFjdGlvbnMgPSB7fTtcbiAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gW25hbWVdIFRoZSBuYW1lIG9mIHRoZSBzdG9yZSB0byBzZXQuIFlvdSBjYW4gYWxzbyB1c2UgYW4gYXJyYXkgdG8gc3BlY2lmeSBhIHByb3BlcnR5IHBhdGhcbiAgICogd2l0aGluIHRoZSBvYmplY3QuXG4gICAqIEBwYXJhbSB7YW55fSBbdmFsdWVdIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqL1xuICBzZXRTdGF0ZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnLCB2YWx1ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmKCEhcGF0aCkge1xuICAgICAgdGhpcy5zdGF0ZSA9IHNldChwYXRoLCBjbG9uZURlZXAodmFsdWUpLCB0aGlzLnN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGVyc2lzdGVudCBjYWNoZVxuICAgIGNvbnN0IHtzdG9yYWdlfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGlmKHN0b3JhZ2UgJiYgdGhpcy51cGRhdGVTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTdG9yYWdlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpbih0eXBlOiBzdHJpbmcsIHBsdWdpbjogRmx1eFBsdWdpblR5cGUpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuICAgIGNvbnN0IHttZXRob2QsIG5hbWV9ID0gcGx1Z2luO1xuXG4gICAgaWYobWV0aG9kICYmIHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIENoZWNrIGlmIHBsdWdpbiBhbHJlYWR5IGV4aXN0c1xuICAgICAgY29uc3QgZXhpc3RzOiBib29sZWFuID0gISFsaXN0LmZpbHRlcigob2JqOiBGbHV4UGx1Z2luVHlwZSkgPT4gb2JqLm5hbWUgPT09IG5hbWUpLmxlbmd0aDtcblxuICAgICAgLy8gRG8gbm90IGFkZCBkdXBsaWNhdGUgcGx1Z2luc1xuICAgICAgaWYoIWV4aXN0cykge1xuICAgICAgICBsaXN0LnB1c2goe21ldGhvZCwgbmFtZX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZihtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7cGx1Z2luLm5hbWV9IG1pZGRsZXdhcmUgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuIE1ldGhvZCBpcyBub3QgYSBmdW5jdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgZGVyZWdpc3RlcihuYW1lOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLnN0b3JlQWN0aW9uc1tuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5zdGF0ZVtuYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXIoc3RvcmVGbik6IEZsdXhTdG9yZSB7XG4gICAgaWYoIXN0b3JlRm4pIHtcbiAgICAgIHRocm93IEVycm9yKCdTdG9yZSBpcyB1bmRlZmluZWQuIENhbm5vdCByZWdpc3RlciB3aXRoIEZsdXguJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGbmM6IGJvb2xlYW4gPSB0eXBlb2Ygc3RvcmVGbiA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmKCFpc0ZuYykge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7c3RvcmVGbn0gaXMgbm90IGEgc3RvcmUgZnVuY3Rpb24uIENhbm5vdCByZWdpc3RlciB3aXRoIEZsdXguYCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHN0b3JlIG9iamVjdFxuICAgIGNvbnN0IHtuYW1lfSA9IHN0b3JlRm47XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBhbnkgPSBzdG9yZUZuKCk7XG4gICAgY29uc3Qgc3RvcmVBY3Rpb24gPSB7XG4gICAgICBhY3Rpb246IHN0b3JlRm4sXG4gICAgICBpbml0aWFsU3RhdGU6IHN0b3JlRm4oKSxcbiAgICAgIG5hbWVcbiAgICB9O1xuXG4gICAgaWYoIWlzRW1wdHkobmFtZSkgJiYgIXRoaXMuc3RvcmVBY3Rpb25zW25hbWVdKSB7XG4gICAgICAvLyBTYXZlIHN0b3JlIG9iamVjdFxuICAgICAgdGhpcy5zdG9yZUFjdGlvbnNbbmFtZV0gPSBzdG9yZUFjdGlvbjtcblxuICAgICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzXG4gICAgICBpZighdGhpcy5zdGF0ZVtuYW1lXSkge1xuICAgICAgICBpZihpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW25hbWVdID0gY2xvbmVEZWVwKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZVtuYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHN0b3JlIGNsYXNzXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW4odHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuXG4gICAgLy8gcmVtb3ZlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgcGx1Z2luXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChvYmo6IEZsdXhQbHVnaW5UeXBlKSA9PiBvYmoubmFtZSAhPT0gbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0b3JhZ2UgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXG4gIHByaXZhdGUgYXN5bmMgdXNlU3RvcmFnZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7c3RvcmFnZSwgc3RhdGUsIHN0b3JhZ2VXYWl0fSA9IHRoaXMub3B0aW9ucztcblxuICAgIC8vIENhY2hlXG4gICAgaWYoc3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IGF3YWl0IHN0b3JhZ2UuZ2V0U3RvcmFnZURhdGEobmFtZSkgfHwge307XG4gICAgICAgIHRoaXMudXBkYXRlU3RvcmFnZSA9IGRlYm91bmNlKFxuICAgICAgICAgICgpID0+IHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGEobmFtZSwgdGhpcy5zdGF0ZSksXG4gICAgICAgICAgc3RvcmFnZVdhaXQsXG4gICAgICAgICAge2xlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlfVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBBcmtoYW1KUyBFcnJvcjogVXNpbmcgc3RvcmFnZSwgXCIke25hbWV9XCIuYCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlID0gc3RhdGUgfHwge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNv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SyxhQUFhLElBQUk7QUFBQSxFQUMvQjtBQUFBLEVBRVEsYUFBYSxNQUFjLE1BQWdDO0FBQ2pFLFVBQU0sT0FBTyxLQUFLLFdBQVcsR0FBRyxJQUFJLE1BQU0sS0FBSyxDQUFDO0FBR2hELFdBQU8sS0FBSyxPQUFPLENBQUMsUUFBd0IsSUFBSSxTQUFTLElBQUk7QUFBQSxFQUMvRDtBQUFBLEVBSUEsTUFBYyxXQUFXLE1BQTZCO0FBQ3BELFVBQU0sRUFBQyxTQUFTLE9BQU8sWUFBVyxJQUFJLEtBQUs7QUFHM0MsUUFBRyxTQUFTO0FBQ1YsVUFBSTtBQUNGLGFBQUssUUFBUSxTQUFTLE1BQU0sUUFBUSxlQUFlLElBQUksS0FBSyxDQUFDO0FBQzdELGFBQUssb0JBQWdCLGdCQUFBTztBQUFBLFVBQ25CLE1BQU0sUUFBUSxlQUFlLE1BQU0sS0FBSyxLQUFLO0FBQUEsVUFDN0M7QUFBQSxVQUNBLEVBQUMsU0FBUyxNQUFNLFVBQVUsS0FBSTtBQUFBLFFBQ2hDO0FBQUEsTUFDRixTQUFRLE9BQU87QUFDYixnQkFBUSxNQUFNLG1DQUFtQyxJQUFJLElBQUk7QUFDekQsY0FBTTtBQUFBLE1BQ1I7QUFBQSxJQUNGLE9BQU87QUFDTCxXQUFLLFFBQVEsU0FBUyxDQUFDO0FBQUEsSUFDekI7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBRU8sTUFBTSxPQUFzQixJQUFJLGNBQWM7IiwKICAibmFtZXMiOiBbImNsb25lRGVlcCIsICJFcnJvclN0YWNrUGFyc2VyIiwgImFjdGlvbiIsICJtZXJnZSIsICJnZXQiLCAic2V0IiwgImlzRW1wdHkiLCAiZGVib3VuY2UiXQp9Cg==
|
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 o=(c,h,t)=>S(c,typeof h!="symbol"?h+"":h,t);import{isEmpty as x}from"@nlabs/utils/checks/isEmpty";import{cloneDeep as l}from"@nlabs/utils/objects/clone";import{debounceCompact as v}from"@nlabs/utils/objects/debounce-compact";import{get as F}from"@nlabs/utils/objects/get";import{merge as A}from"@nlabs/utils/objects/merge";import{set as b}from"@nlabs/utils/objects/set";import{parseStack as E}from"@nlabs/utils/objects/stack-parser";import{EventEmitter as P}from"events";import{ArkhamConstants as g}from"../constants/ArkhamConstants";const u=new Map,T=100;class m extends P{constructor(){super();o(this,"isInit",!1);o(this,"pluginTypes",["preDispatch","postDispatch"]);o(this,"state",{});o(this,"storeActions",{});o(this,"defaultOptions",{name:"arkhamjs",routerType:"browser",scrollToTop:!0,state:null,storage:null,storageWait:300,stores:[],title:"ArkhamJS"});o(this,"middleware",{});o(this,"options",this.defaultOptions);o(this,"stateCache",new Map);o(this,"updateStorage",()=>Promise.resolve(!1));o(this,"stateChanged",!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){const n={method:a,name:s};this.middleware[`${r}List`]=this.addPlugin(r,n)}})})}clearAppData(){Object.keys(this.storeActions).forEach(s=>{const i=this.storeActions[s];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,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:n=[],preDispatchList:p=[]}=this.middleware;p.length&&(i=await this.processMiddleware(p,i,a));const{type:d,...f}=i;if(!d||d==="")return Promise.resolve(i);if(this.updateStoresState(d,f),this.stateChanged&&this.options.storage&&this.updateStorage)try{await this.updateStorage(),this.stateChanged=!1}catch{}const w=Date.now()-s;return a.duration=w,n.length&&(i=await this.processMiddleware(n,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=F(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&&(s.name=this.options.name),this.options={...this.defaultOptions,...s};const{debug:i,middleware:r,name:a,stores:n}=this.options;try{await this.useStorage(a)}catch(d){throw d}if(n?.length)try{await this.addStores(n)}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,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,{})}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=b(t,l(e),this.state),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)=>A(r,a),e)).catch(i=>{throw i})}updateStoresState(t,e){Object.keys(this.storeActions).forEach(s=>{const i=this.storeActions[s],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",{stackTraceLimit:i}=Error;if(Error[s]=1/0,e=E(new Error),Error[s]=i,u.size>=T){const r=u.keys().next().value;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(n=>n.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.");if(typeof t!="function")throw Error(`${t} is not a store function. Cannot register with Flux.`);const{name:e}=t,s=t(),i={action:t,initialState:s,name:e};return!x(e)&&!this.storeActions[e]&&(this.storeActions[e]=i,this.state[e]||(this.state[e]=s?l(s):{})),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=v(()=>e.setStorageData(t,this.state),i)}catch(r){throw r}else this.state=s||{}}}o(m,"initFlux",!1);const R=new m;export{R as Flux,m as FluxFramework};
|
4
|
+
/* End ArkhamJS */
|
5
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0ZsdXgvRmx1eC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7aXNFbXB0eX0gZnJvbSAnQG5sYWJzL3V0aWxzL2NoZWNrcy9pc0VtcHR5JztcbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2RlYm91bmNlQ29tcGFjdH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvZGVib3VuY2UtY29tcGFjdCc7XG5pbXBvcnQge2dldH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvZ2V0JztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL21lcmdlJztcbmltcG9ydCB7c2V0fSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9zZXQnO1xuaW1wb3J0IHtwYXJzZVN0YWNrfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9zdGFjay1wYXJzZXInO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ2V2ZW50cyc7XG5cbmltcG9ydCB7QXJraGFtQ29uc3RhbnRzfSBmcm9tICcuLi9jb25zdGFudHMvQXJraGFtQ29uc3RhbnRzJztcbmltcG9ydCB7Rmx1eEFjdGlvbiwgRmx1eE1pZGRsZXdhcmVUeXBlLCBGbHV4T3B0aW9ucywgRmx1eFBsdWdpblR5cGUsIEZsdXhTdG9yZX0gZnJvbSAnLi9GbHV4LnR5cGVzJztcblxuY29uc3QgU1RBQ0tfQ0FDSEUgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG5jb25zdCBTVEFDS19DQUNIRV9TSVpFID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgRmx1eEZyYW1ld29yayBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHN0YXRpYyBpbml0Rmx1eDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0luaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICByZWFkb25seSBwbHVnaW5UeXBlczogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3ByZURpc3BhdGNoJywgJ3Bvc3REaXNwYXRjaCddIGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgc3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBzdG9yZUFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZsdXhTdG9yZT4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0T3B0aW9uczogRmx1eE9wdGlvbnMgPSB7XG4gICAgbmFtZTogJ2Fya2hhbWpzJyxcbiAgICByb3V0ZXJUeXBlOiAnYnJvd3NlcicsXG4gICAgc2Nyb2xsVG9Ub3A6IHRydWUsXG4gICAgc3RhdGU6IG51bGwsXG4gICAgc3RvcmFnZTogbnVsbCxcbiAgICBzdG9yYWdlV2FpdDogMzAwLFxuICAgIHN0b3JlczogW10sXG4gICAgdGl0bGU6ICdBcmtoYW1KUydcbiAgfTtcbiAgcHJpdmF0ZSBtaWRkbGV3YXJlOiBSZWNvcmQ8c3RyaW5nLCBGbHV4UGx1Z2luVHlwZVtdPiA9IHt9O1xuICBwcml2YXRlIG9wdGlvbnM6IEZsdXhPcHRpb25zID0gdGhpcy5kZWZhdWx0T3B0aW9ucztcblxuICBwcml2YXRlIHN0YXRlQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdG9yYWdlOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblxuICBwcml2YXRlIHN0YXRlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBCaW5kIG1ldGhvZHMgb25jZSBpbiBjb25zdHJ1Y3RvciBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgdGhpcy5hZGRNaWRkbGV3YXJlID0gdGhpcy5hZGRNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hZGRTdG9yZXMgPSB0aGlzLmFkZFN0b3Jlcy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2xlYXJBcHBEYXRhID0gdGhpcy5jbGVhckFwcERhdGEuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyTWlkZGxld2FyZSA9IHRoaXMuY2xlYXJNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kZXJlZ2lzdGVyID0gdGhpcy5kZXJlZ2lzdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kaXNwYXRjaCA9IHRoaXMuZGlzcGF0Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldFN0YXRlID0gdGhpcy5nZXRTdGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0U3RvcmUgPSB0aGlzLmdldFN0b3JlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5pbml0ID0gdGhpcy5pbml0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5vZmYgPSB0aGlzLm9mZi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXIgPSB0aGlzLnJlZ2lzdGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVNaWRkbGV3YXJlID0gdGhpcy5yZW1vdmVNaWRkbGV3YXJlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5yZW1vdmVTdG9yZXMgPSB0aGlzLnJlbW92ZVN0b3Jlcy5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVzZXQgPSB0aGlzLnJlc2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXRTdGF0ZSA9IHRoaXMuc2V0U3RhdGUuYmluZCh0aGlzKTtcblxuICAgIC8vIEluaXRpYWxpemUgbWlkZGxld2FyZSBsaXN0c1xuICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gPSBbXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG1pZGRsZXdhcmUgdG8gZnJhbWV3b3JrIHdpdGggZHVwbGljYXRlIHByZXZlbnRpb25cbiAgICovXG4gIGFkZE1pZGRsZXdhcmUobWlkZGxld2FyZTogRmx1eE1pZGRsZXdhcmVUeXBlW10pOiB2b2lkIHtcbiAgICBtaWRkbGV3YXJlLmZvckVhY2goKG1pZGRsZU9iajogRmx1eE1pZGRsZXdhcmVUeXBlKSA9PiB7XG4gICAgICBpZiAoIW1pZGRsZU9iaiB8fCAodHlwZW9mIG1pZGRsZU9iaiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWlkZGxlT2JqICE9PSAnb2JqZWN0JykpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1Vua25vd24gbWlkZGxld2FyZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4gQ2Fubm90IGFkZCB0byBGbHV4LicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaWRkbGVOYW1lOiBzdHJpbmcgPSBtaWRkbGVPYmoubmFtZSB8fCAnJztcbiAgICAgIGlmICghbWlkZGxlTmFtZSkge1xuICAgICAgICB0aHJvdyBFcnJvcignVW5rbm93biBtaWRkbGV3YXJlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiBSZXF1aXJlcyBuYW1lIHByb3BlcnR5LiBDYW5ub3QgYWRkIHRvIEZsdXguJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBtaWRkbGV3YXJlIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgICAgY29uc3QgZXhpc3RpbmdNaWRkbGV3YXJlID0gdGhpcy5taWRkbGV3YXJlLnByZURpc3BhdGNoTGlzdD8uZmluZChtID0+IG0ubmFtZSA9PT0gbWlkZGxlTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taWRkbGV3YXJlLnBvc3REaXNwYXRjaExpc3Q/LmZpbmQobSA9PiBtLm5hbWUgPT09IG1pZGRsZU5hbWUpO1xuXG4gICAgICBpZiAoZXhpc3RpbmdNaWRkbGV3YXJlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTWlkZGxld2FyZSBcIiR7bWlkZGxlTmFtZX1cIiBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcgZHVwbGljYXRlLmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGx1Z2luVHlwZXMuZm9yRWFjaCgodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1pZGRsZU9ialt0eXBlXTtcbiAgICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICAgIGNvbnN0IHBsdWdpbjogRmx1eFBsdWdpblR5cGUgPSB7bWV0aG9kLCBuYW1lOiBtaWRkbGVOYW1lfTtcbiAgICAgICAgICB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gPSB0aGlzLmFkZFBsdWdpbih0eXBlLCBwbHVnaW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGFwcCBkYXRhIGZyb20gc3RvcmFnZSB3aXRoIG9wdGltaXplZCBzdGF0ZSByZXNldFxuICAgKi9cbiAgY2xlYXJBcHBEYXRhKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFJlc2V0IHN0YXRlIHRvIGluaXRpYWwgdmFsdWVzIHdpdGhvdXQgY2xvbmluZ1xuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RvcmVBY3Rpb25zKS5mb3JFYWNoKChzdG9yZU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RvcmVGbiA9IHRoaXMuc3RvcmVBY3Rpb25zW3N0b3JlTmFtZV07XG4gICAgICB0aGlzLnN0YXRlW3N0b3JlRm4ubmFtZV0gPSBzdG9yZUZuLmluaXRpYWxTdGF0ZTtcbiAgICB9KTtcblxuICAgIC8vIENsZWFyIHN0YXRlIGNhY2hlXG4gICAgdGhpcy5zdGF0ZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuICAgIGlmIChzdG9yYWdlPy5zZXRTdG9yYWdlRGF0YSkge1xuICAgICAgcmV0dXJuIHN0b3JhZ2Uuc2V0U3RvcmFnZURhdGEobmFtZSwgdGhpcy5zdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIG1pZGRsZXdhcmUgd2l0aCBwcm9wZXIgY2xlYW51cFxuICAgKi9cbiAgY2xlYXJNaWRkbGV3YXJlKCk6IGJvb2xlYW4ge1xuICAgIE9iamVjdC5rZXlzKHRoaXMubWlkZGxld2FyZSkuZm9yRWFjaCgocGx1Z2luVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLm1pZGRsZXdhcmVbcGx1Z2luVHlwZV0gPSBbXTtcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlcnMgbmFtZWQgc3RvcmVzIHdpdGggY2xlYW51cFxuICAgKi9cbiAgcmVtb3ZlU3RvcmVzKHN0b3JlTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgc3RvcmVOYW1lcy5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHRoaXMuZGVyZWdpc3RlcihuYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW1pemVkIGRpc3BhdGNoIG1ldGhvZCB3aXRoIHJlZHVjZWQgY2xvbmluZyBhbmQgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAqL1xuICBhc3luYyBkaXNwYXRjaChhY3Rpb246IEZsdXhBY3Rpb24sIHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiB7XG4gICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJraGFtSlMgRXJyb3I6IEZsdXguZGlzcGF0Y2ggcmVxdWlyZXMgYW4gYWN0aW9uLicpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogT25seSBjbG9uZSBhY3Rpb24gb25jZVxuICAgIGxldCBjbG9uZWRBY3Rpb246IEZsdXhBY3Rpb24gPSBjbG9uZURlZXAoYWN0aW9uKTtcblxuICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogT25seSBnZXQgc3RhY2sgdHJhY2UgaW4gZGVidWcgbW9kZVxuICAgIGxldCBzdGFjazogYW55W10gPSBbXTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICBzdGFjayA9IHRoaXMuZ2V0Q2FjaGVkU3RhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBJbmZvID0ge1xuICAgICAgZHVyYXRpb246IDAsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICBzdGFja1xuICAgIH07XG5cbiAgICAvLyBBcHBseSBwcmUtZGlzcGF0Y2ggbWlkZGxld2FyZSB3aXRoIG9wdGltaXplZCBjbG9uaW5nXG4gICAgY29uc3Qge3Bvc3REaXNwYXRjaExpc3QgPSBbXSwgcHJlRGlzcGF0Y2hMaXN0ID0gW119ID0gdGhpcy5taWRkbGV3YXJlO1xuXG4gICAgaWYgKHByZURpc3BhdGNoTGlzdC5sZW5ndGgpIHtcbiAgICAgIGNsb25lZEFjdGlvbiA9IGF3YWl0IHRoaXMucHJvY2Vzc01pZGRsZXdhcmUocHJlRGlzcGF0Y2hMaXN0LCBjbG9uZWRBY3Rpb24sIGFwcEluZm8pO1xuICAgIH1cblxuICAgIGNvbnN0IHt0eXBlLCAuLi5kYXRhfSA9IGNsb25lZEFjdGlvbjtcblxuICAgIGlmICghdHlwZSB8fCB0eXBlID09PSAnJykge1xuICAgICAgY29uc29sZS53YXJuKCdBcmtoYW1KUyBXYXJuaW5nOiBGbHV4LmRpc3BhdGNoIGlzIG1pc3NpbmcgYW4gYWN0aW9uIHR5cGUgZm9yIHRoZSBwYXlsb2FkOicsIGRhdGEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjbG9uZWRBY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIE9wdGltaXplZCBzdGF0ZSB1cGRhdGVzIC0gb25seSBjbG9uZSB3aGVuIG5lY2Vzc2FyeVxuICAgIHRoaXMudXBkYXRlU3RvcmVzU3RhdGUodHlwZSwgZGF0YSk7XG5cbiAgICAvLyBTYXZlIGNhY2hlIGluIHN0b3JhZ2Ugb25seSBpZiBzdGF0ZSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VkICYmIHRoaXMub3B0aW9ucy5zdG9yYWdlICYmIHRoaXMudXBkYXRlU3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTdG9yYWdlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTdG9yYWdlIHVwZGF0ZSBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uOiBudW1iZXIgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgIGFwcEluZm8uZHVyYXRpb24gPSBkdXJhdGlvbjtcblxuICAgIC8vIEFwcGx5IHBvc3QtZGlzcGF0Y2ggbWlkZGxld2FyZVxuICAgIGlmIChwb3N0RGlzcGF0Y2hMaXN0Lmxlbmd0aCkge1xuICAgICAgY2xvbmVkQWN0aW9uID0gYXdhaXQgdGhpcy5wcm9jZXNzTWlkZGxld2FyZShwb3N0RGlzcGF0Y2hMaXN0LCBjbG9uZWRBY3Rpb24sIGFwcEluZm8pO1xuICAgIH1cblxuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLmVtaXQodHlwZSwgY2xvbmVkQWN0aW9uKTtcbiAgICAgIHRoaXMuZW1pdCgnYXJraGFtanMnLCB0aGlzLnN0YXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lZEFjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IEZsdXggb3B0aW9uc1xuICAgKi9cbiAgZ2V0T3B0aW9ucygpOiBGbHV4T3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpbWl6ZWQgZ2V0U3RhdGUgd2l0aCBjYWNoaW5nXG4gICAqL1xuICBnZXRTdGF0ZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHBhdGhLZXkgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aC5qb2luKCcuJykgOiBwYXRoO1xuXG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBpZiAodGhpcy5zdGF0ZUNhY2hlLmhhcyhwYXRoS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVDYWNoZS5nZXQocGF0aEtleSk7XG4gICAgfVxuXG4gICAgbGV0IHN0b3JlVmFsdWU6IGFueTtcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIHN0b3JlVmFsdWUgPSB0aGlzLnN0YXRlIHx8IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yZVZhbHVlID0gZ2V0KHRoaXMuc3RhdGUsIHBhdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc3RvcmVWYWx1ZSA/IGNsb25lRGVlcChzdG9yZVZhbHVlKSA6IHN0b3JlVmFsdWU7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuXG4gICAgLy8gQ2FjaGUgdGhlIHJlc3VsdFxuICAgIHRoaXMuc3RhdGVDYWNoZS5zZXQocGF0aEtleSwgcmVzdWx0KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RvcmUgb2JqZWN0IHJlZ2lzdGVyZWQgd2l0aCBGbHV4XG4gICAqL1xuICBnZXRTdG9yZShuYW1lOiBzdHJpbmcgPSAnJyk6IEZsdXhTdG9yZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIHNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aCB2YWxpZGF0aW9uXG4gICAqL1xuICBhc3luYyBpbml0KG9wdGlvbnM6IEZsdXhPcHRpb25zID0ge30sIHJlc2V0OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEZsdXhGcmFtZXdvcms+IHtcbiAgICBpZiAocmVzZXQpIHtcbiAgICAgIHRoaXMuaXNJbml0ID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcbiAgICBpZiAodGhpcy5pc0luaXQpIHtcbiAgICAgIHVwZGF0ZWRPcHRpb25zLm5hbWUgPSB0aGlzLm9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4udGhpcy5kZWZhdWx0T3B0aW9ucywgLi4udXBkYXRlZE9wdGlvbnN9O1xuICAgIGNvbnN0IHtkZWJ1ZywgbWlkZGxld2FyZSwgbmFtZSwgc3RvcmVzfSA9IHRoaXMub3B0aW9ucztcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnVzZVN0b3JhZ2UobmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Fya2hhbSBFcnJvcjogVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHVzaW5nIHN0b3JhZ2UuJywgbmFtZSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoc3RvcmVzPy5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkU3RvcmVzKHN0b3Jlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBcmtoYW0gRXJyb3I6IFRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBhZGRpbmcgc3RvcmVzLicsIHN0b3Jlcyk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaWRkbGV3YXJlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWRkTWlkZGxld2FyZShtaWRkbGV3YXJlKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aW5kb3dQcm9wZXJ0eTogc3RyaW5nID0gJ2Fya2hhbWpzJztcbiAgICBpZiAoZGVidWcpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KVt3aW5kb3dQcm9wZXJ0eV0gPSB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgKHdpbmRvdyBhcyBhbnkpW3dpbmRvd1Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KEFya2hhbUNvbnN0YW50cy5JTklUKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW5pdGlhbGl6YXRpb24gbGlzdGVuZXIgd2l0aCBpbW1lZGlhdGUgZXhlY3V0aW9uIGlmIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiAgICovXG4gIG9uSW5pdChsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbihBcmtoYW1Db25zdGFudHMuSU5JVCwgbGlzdGVuZXIpO1xuXG4gICAgaWYgKHRoaXMuaXNJbml0KSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBpbml0aWFsaXphdGlvbiBsaXN0ZW5lclxuICAgKi9cbiAgb2ZmSW5pdChsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vZmYoQXJraGFtQ29uc3RhbnRzLklOSVQsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBvZmYoZXZlbnRUeXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAqL1xuICBvbihldmVudFR5cGU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBuZXcgU3RvcmVzIHdpdGggdmFsaWRhdGlvblxuICAgKi9cbiAgYXN5bmMgYWRkU3RvcmVzKHN0b3JlczogRmx1eFN0b3JlW10pOiBQcm9taXNlPEZsdXhTdG9yZVtdPiB7XG4gICAgY29uc3QgcmVnaXN0ZXJlZFN0b3JlczogRmx1eFN0b3JlW10gPSBzdG9yZXMubWFwKChzdG9yZTogRmx1eFN0b3JlKSA9PiB0aGlzLnJlZ2lzdGVyKHN0b3JlKSk7XG5cbiAgICBjb25zdCB7bmFtZSwgc3RvcmFnZX0gPSB0aGlzLm9wdGlvbnM7XG4gICAgaWYgKHN0b3JhZ2U/LnNldFN0b3JhZ2VEYXRhKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdG9yYWdlLnNldFN0b3JhZ2VEYXRhKG5hbWUsIHRoaXMuc3RhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lzdGVyZWRTdG9yZXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIG1pZGRsZXdhcmUgZnJvbSBmcmFtZXdvcmtcbiAgICovXG4gIHJlbW92ZU1pZGRsZXdhcmUobmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgbmFtZXMuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnBsdWdpblR5cGVzLmZvckVhY2goKHR5cGU6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmVbYCR7dHlwZX1MaXN0YF0gPSB0aGlzLnJlbW92ZVBsdWdpbih0eXBlLCBuYW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGZyYW1ld29yayB3aXRoIHByb3BlciBjbGVhbnVwXG4gICAqL1xuICBhc3luYyByZXNldChjbGVhclN0b3JhZ2U6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge25hbWUsIHN0b3JhZ2V9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYgKHN0b3JhZ2UgJiYgY2xlYXJTdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdG9yYWdlLnNldFN0b3JhZ2VEYXRhKG5hbWUsIHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIGFsbCBwcm9wZXJ0aWVzIGFuZCBjYWNoZXNcbiAgICB0aGlzLm1pZGRsZXdhcmUgPSB7fTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7Li4udGhpcy5kZWZhdWx0T3B0aW9uc307XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHRoaXMuc3RvcmVBY3Rpb25zID0ge307XG4gICAgdGhpcy5zdGF0ZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzSW5pdCA9IGZhbHNlO1xuXG4gICAgLy8gUmVpbml0aWFsaXplIG1pZGRsZXdhcmUgbGlzdHNcbiAgICB0aGlzLnBsdWdpblR5cGVzLmZvckVhY2goKHR5cGU6IHN0cmluZykgPT4gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdID0gW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGltaXplZCBzZXRTdGF0ZSB3aXRoIGNoYW5nZSB0cmFja2luZ1xuICAgKi9cbiAgc2V0U3RhdGUocGF0aDogc3RyaW5nIHwgc3RyaW5nW10gPSAnJywgdmFsdWU6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChwYXRoKSB7XG4gICAgICB0aGlzLnN0YXRlID0gc2V0KHBhdGgsIGNsb25lRGVlcCh2YWx1ZSksIHRoaXMuc3RhdGUpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAvLyBDbGVhciByZWxldmFudCBjYWNoZSBlbnRyaWVzXG4gICAgICBjb25zdCBwYXRoS2V5ID0gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGguam9pbignLicpIDogcGF0aDtcbiAgICAgIHRoaXMuc3RhdGVDYWNoZS5kZWxldGUocGF0aEtleSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdG9yYWdlICYmIHRoaXMudXBkYXRlU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU3RvcmFnZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBQcm9jZXNzIG1pZGRsZXdhcmUgd2l0aCBvcHRpbWl6ZWQgY2xvbmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzTWlkZGxld2FyZShcbiAgICBtaWRkbGV3YXJlTGlzdDogRmx1eFBsdWdpblR5cGVbXSxcbiAgICBhY3Rpb246IEZsdXhBY3Rpb24sXG4gICAgYXBwSW5mbzogYW55XG4gICk6IFByb21pc2U8Rmx1eEFjdGlvbj4ge1xuICAgIHJldHVybiBQcm9taXNlXG4gICAgICAuYWxsKFxuICAgICAgICBtaWRkbGV3YXJlTGlzdC5tYXAoKHBsdWdpbjogRmx1eFBsdWdpblR5cGUpID0+XG4gICAgICAgICAgcGx1Z2luLm1ldGhvZChjbG9uZURlZXAoYWN0aW9uKSwgY2xvbmVEZWVwKHRoaXMuc3RhdGUpLCBhcHBJbmZvKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAudGhlbihcbiAgICAgICAgKGFjdGlvbnMpID0+IGFjdGlvbnMucmVkdWNlKCh1cGRhdGVkQWN0aW9uLCBhY3Rpb24pID0+XG4gICAgICAgICAgbWVyZ2UodXBkYXRlZEFjdGlvbiwgYWN0aW9uKSwgYWN0aW9uKSBhcyBGbHV4QWN0aW9uXG4gICAgICApXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHN0b3JlcyBzdGF0ZSB3aXRoIG9wdGltaXplZCBjbG9uaW5nXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVN0b3Jlc1N0YXRlKHR5cGU6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXModGhpcy5zdG9yZUFjdGlvbnMpLmZvckVhY2goKHN0b3JlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZUZuID0gdGhpcy5zdG9yZUFjdGlvbnNbc3RvcmVOYW1lXTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuc3RhdGVbc3RvcmVOYW1lXSB8fCBzdG9yZUZuLmluaXRpYWxTdGF0ZSB8fCB7fTtcblxuICAgICAgLy8gT25seSBjbG9uZSBpZiB0aGUgc3RhdGUgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdG9yZUZuLmFjdGlvbih0eXBlLCBkYXRhLCBjdXJyZW50U3RhdGUpO1xuICAgICAgaWYgKG5ld1N0YXRlICE9PSBjdXJyZW50U3RhdGUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZVtzdG9yZU5hbWVdID0gY2xvbmVEZWVwKG5ld1N0YXRlKSB8fCBjdXJyZW50U3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FjaGVkIHN0YWNrIHRyYWNlIGZvciBwZXJmb3JtYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDYWNoZWRTdGFjaygpOiBhbnlbXSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBuZXcgRXJyb3IoKS5zdGFjaz8uc3BsaXQoJ1xcbicpWzJdIHx8ICcnO1xuXG4gICAgaWYgKFNUQUNLX0NBQ0hFLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiBTVEFDS19DQUNIRS5nZXQoY2FjaGVLZXkpITtcbiAgICB9XG5cbiAgICBsZXQgc3RhY2s6IGFueVtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YWNrUHJvcGVydHk6IHN0cmluZyA9ICdzdGFja1RyYWNlTGltaXQnO1xuICAgICAgY29uc3Qge3N0YWNrVHJhY2VMaW1pdH06IGFueSA9IEVycm9yO1xuICAgICAgRXJyb3Jbc3RhY2tQcm9wZXJ0eV0gPSBJbmZpbml0eTtcbiAgICAgIHN0YWNrID0gcGFyc2VTdGFjayhuZXcgRXJyb3IoKSk7XG4gICAgICBFcnJvcltzdGFja1Byb3BlcnR5XSA9IHN0YWNrVHJhY2VMaW1pdDtcblxuICAgICAgLy8gQ2FjaGUgdGhlIHJlc3VsdFxuICAgICAgaWYgKFNUQUNLX0NBQ0hFLnNpemUgPj0gU1RBQ0tfQ0FDSEVfU0laRSkge1xuICAgICAgICBjb25zdCBmaXJzdEtleSA9IFNUQUNLX0NBQ0hFLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgIFNUQUNLX0NBQ0hFLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgICBTVEFDS19DQUNIRS5zZXQoY2FjaGVLZXksIHN0YWNrKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gZW1wdHkgc3RhY2tcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpbih0eXBlOiBzdHJpbmcsIHBsdWdpbjogRmx1eFBsdWdpblR5cGUpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuICAgIGNvbnN0IHttZXRob2QsIG5hbWV9ID0gcGx1Z2luO1xuXG4gICAgaWYgKG1ldGhvZCAmJiB0eXBlb2YgbWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdHM6IGJvb2xlYW4gPSBsaXN0LnNvbWUoKG9iajogRmx1eFBsdWdpblR5cGUpID0+IG9iai5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGxpc3QucHVzaCh7bWV0aG9kLCBuYW1lfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7cGx1Z2luLm5hbWV9IG1pZGRsZXdhcmUgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuIE1ldGhvZCBpcyBub3QgYSBmdW5jdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgZGVyZWdpc3RlcihuYW1lOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLnN0b3JlQWN0aW9uc1tuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5zdGF0ZVtuYW1lXTtcbiAgICB0aGlzLnN0YXRlQ2FjaGUuY2xlYXIoKTsgLy8gQ2xlYXIgY2FjaGUgd2hlbiBzdG9yZXMgY2hhbmdlXG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyKHN0b3JlRm46IGFueSk6IEZsdXhTdG9yZSB7XG4gICAgaWYgKCFzdG9yZUZuKSB7XG4gICAgICB0aHJvdyBFcnJvcignU3RvcmUgaXMgdW5kZWZpbmVkLiBDYW5ub3QgcmVnaXN0ZXIgd2l0aCBGbHV4LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc3RvcmVGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgRXJyb3IoYCR7c3RvcmVGbn0gaXMgbm90IGEgc3RvcmUgZnVuY3Rpb24uIENhbm5vdCByZWdpc3RlciB3aXRoIEZsdXguYCk7XG4gICAgfVxuXG4gICAgY29uc3Qge25hbWV9ID0gc3RvcmVGbjtcbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IGFueSA9IHN0b3JlRm4oKTtcbiAgICBjb25zdCBzdG9yZUFjdGlvbjogRmx1eFN0b3JlID0ge1xuICAgICAgYWN0aW9uOiBzdG9yZUZuLFxuICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgbmFtZVxuICAgIH07XG5cbiAgICBpZiAoIWlzRW1wdHkobmFtZSkgJiYgIXRoaXMuc3RvcmVBY3Rpb25zW25hbWVdKSB7XG4gICAgICB0aGlzLnN0b3JlQWN0aW9uc1tuYW1lXSA9IHN0b3JlQWN0aW9uO1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGVbbmFtZV0pIHtcbiAgICAgICAgdGhpcy5zdGF0ZVtuYW1lXSA9IGluaXRpYWxTdGF0ZSA/IGNsb25lRGVlcChpbml0aWFsU3RhdGUpIDoge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVBY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW4odHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBGbHV4UGx1Z2luVHlwZVtdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5taWRkbGV3YXJlW2Ake3R5cGV9TGlzdGBdIHx8IFtdO1xuICAgIHJldHVybiBsaXN0LmZpbHRlcigob2JqOiBGbHV4UGx1Z2luVHlwZSkgPT4gb2JqLm5hbWUgIT09IG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1c2VTdG9yYWdlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtzdG9yYWdlLCBzdGF0ZSwgc3RvcmFnZVdhaXR9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYgKHN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSB8fCBhd2FpdCBzdG9yYWdlLmdldFN0b3JhZ2VEYXRhKG5hbWUpIHx8IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZVN0b3JhZ2UgPSBkZWJvdW5jZUNvbXBhY3QoXG4gICAgICAgICAgKCkgPT4gc3RvcmFnZS5zZXRTdG9yYWdlRGF0YShuYW1lLCB0aGlzLnN0YXRlKSxcbiAgICAgICAgICBzdG9yYWdlV2FpdFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQXJraGFtSlMgRXJyb3I6IFVzaW5nIHN0b3JhZ2UsIFwiJHtuYW1lfVwiLmApO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IHt9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRmx1eDogRmx1eEZyYW1ld29yayA9IG5ldyBGbHV4RnJhbWV3b3JrKCk7XG4iXSwKICAibWFwcGluZ3MiOiAiO29LQUlBLE9BQVEsV0FBQUEsTUFBYyw4QkFDdEIsT0FBUSxhQUFBQyxNQUFnQiw2QkFDeEIsT0FBUSxtQkFBQUMsTUFBc0Isd0NBQzlCLE9BQVEsT0FBQUMsTUFBVSwyQkFDbEIsT0FBUSxTQUFBQyxNQUFZLDZCQUNwQixPQUFRLE9BQUFDLE1BQVUsMkJBQ2xCLE9BQVEsY0FBQUMsTUFBaUIsb0NBQ3pCLE9BQVEsZ0JBQUFDLE1BQW1CLFNBRTNCLE9BQVEsbUJBQUFDLE1BQXNCLCtCQUc5QixNQUFNQyxFQUFjLElBQUksSUFDbEJDLEVBQW1CLElBRWxCLE1BQU1DLFVBQXNCQyxDQUFhLENBMkI5QyxhQUFjLENBQ1osTUFBTSxFQTFCUkMsRUFBQSxjQUFrQixJQUVsQkEsRUFBQSxLQUFTLGNBQWlDLENBQUMsY0FBZSxjQUFjLEdBRXhFQSxFQUFBLEtBQVEsUUFBNkIsQ0FBQyxHQUN0Q0EsRUFBQSxLQUFRLGVBQTBDLENBQUMsR0FDbkRBLEVBQUEsS0FBaUIsaUJBQThCLENBQzdDLEtBQU0sV0FDTixXQUFZLFVB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TXRELEVBQVEsZUFBZUQsRUFBTSxLQUFLLEtBQUssRUFDN0NzRCxDQUNGLENBQ0YsT0FBUzNCLEVBQU8sQ0FFZCxNQUFNQSxDQUNSLE1BRUEsS0FBSyxNQUFRMEIsR0FBUyxDQUFDLENBRTNCLENBQ0YsQ0F4aEJFL0QsRUFEV0YsRUFDSixXQUFvQixJQTBoQnRCLE1BQU1vRSxFQUFzQixJQUFJcEUiLAogICJuYW1lcyI6IFsiaXNFbXB0eSIsICJjbG9uZURlZXAiLCAiZGVib3VuY2VDb21wYWN0IiwgImdldCIsICJtZXJnZSIsICJzZXQiLCAicGFyc2VTdGFjayIsICJFdmVudEVtaXR0ZXIiLCAiQXJraGFtQ29uc3RhbnRzIiwgIlNUQUNLX0NBQ0hFIiwgIlNUQUNLX0NBQ0hFX1NJWkUiLCAiRmx1eEZyYW1ld29yayIsICJFdmVudEVtaXR0ZXIiLCAiX19wdWJsaWNGaWVsZCIsICJ0eXBlIiwgIm1pZGRsZXdhcmUiLCAibWlkZGxlT2JqIiwgIm1pZGRsZU5hbWUiLCAibSIsICJtZXRob2QiLCAicGx1Z2luIiwgInN0b3JlTmFtZSIsICJzdG9yZUZuIiwgIm5hbWUiLCAic3RvcmFnZSIsICJwbHVnaW5UeXBlIiwgInN0b3JlTmFtZXMiLCAiYWN0aW9uIiwgInNpbGVudCIsICJzdGFydFRpbWUiLCAiY2xvbmVkQWN0aW9uIiwgImNsb25lRGVlcCIsICJzdGFjayIsICJhcHBJbmZvIiwgInBvc3REaXNwYXRjaExpc3QiLCAicHJlRGlzcGF0Y2hMaXN0IiwgImRhdGEiLCAiZHVyYXRpb24iLCAicGF0aCIsICJkZWZhdWx0VmFsdWUiLCAicGF0aEtleSIsICJzdG9yZVZhbHVlIiwgImdldCIsICJ2YWx1ZSIsICJyZXN1bHQiLCAib3B0aW9ucyIsICJyZXNldCIsICJ1cGRhdGVkT3B0aW9ucyIsICJkZWJ1ZyIsICJzdG9yZXMiLCAiZXJyb3IiLCAid2luZG93UHJvcGVydHkiLCAiQXJraGFtQ29uc3RhbnRzIiwgImxpc3RlbmVyIiwgImV2ZW50VHlwZSIsICJyZWdpc3RlcmVkU3RvcmVzIiwgInN0b3JlIiwgIm5hbWVzIiwgImNsZWFyU3RvcmFnZSIsICJzZXQiLCAibWlkZGxld2FyZUxpc3QiLCAiYWN0aW9ucyIsICJ1cGRhdGVkQWN0aW9uIiwgIm1lcmdlIiwgImN1cnJlbnRTdGF0ZSIsICJuZXdTdGF0ZSIsICJjYWNoZUtleSIsICJzdGFja1Byb3BlcnR5IiwgInN0YWNrVHJhY2VMaW1pdCIsICJwYXJzZVN0YWNrIiwgImZpcnN0S2V5IiwgImxpc3QiLCAib2JqIiwgImluaXRpYWxTdGF0ZSIsICJzdG9yZUFjdGlvbiIsICJpc0VtcHR5IiwgInN0YXRlIiwgInN0b3JhZ2VXYWl0IiwgImRlYm91bmNlQ29tcGFjdCIsICJGbHV4Il0KfQo=
|
package/lib/Flux/Flux.types.js
CHANGED
@@ -1,16 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
5
|
-
var __copyProps = (to, from, except, desc) => {
|
6
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
7
|
-
for (let key of __getOwnPropNames(from))
|
8
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
9
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
10
|
-
}
|
11
|
-
return to;
|
12
|
-
};
|
13
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
14
|
-
var Flux_types_exports = {};
|
15
|
-
module.exports = __toCommonJS(Flux_types_exports);
|
16
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL0ZsdXgvRmx1eC50eXBlcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmx1eE9wdGlvbnMge1xuICByZWFkb25seSBiYXNlbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY29udGV4dD86IG9iamVjdDtcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBnZXRVc2VyQ29uZmlybWF0aW9uPzogKCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgaGFzaFR5cGU/OiAnc2xhc2gnIHwgJ25vc2xhc2gnIHwgJ2hhc2hiYW5nJztcbiAgcmVhZG9ubHkgaGlzdG9yeT86IG9iamVjdDtcbiAgcmVhZG9ubHkgaW5pdGlhbEVudHJpZXM/OiBhbnlbXTtcbiAgcmVhZG9ubHkgaW5pdGlhbEluZGV4PzogbnVtYmVyO1xuICByZWFkb25seSBrZXlMZW5ndGg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGxvY2F0aW9uPzogc3RyaW5nIHwgb2JqZWN0O1xuICByZWFkb25seSBtaWRkbGV3YXJlPzogRmx1eE1pZGRsZXdhcmVUeXBlW107XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJvdXRlclR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjcm9sbFRvVG9wPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGU/OiBhbnk7XG4gIHJlYWRvbmx5IHN0b3JhZ2U/OiBGbHV4U3RvcmFnZVR5cGU7XG4gIHJlYWRvbmx5IHN0b3JhZ2VXYWl0PzogbnVtYmVyO1xuICByZWFkb25seSBzdG9yZXM/OiBhbnlbXTtcbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmx1eEFjdGlvbiB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueTtcbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZsdXhTdG9yYWdlVHlwZSB7XG4gIHJlYWRvbmx5IGdldFN0b3JhZ2VEYXRhOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PjtcbiAgcmVhZG9ubHkgc2V0U3RvcmFnZURhdGE6IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gUHJvbWlzZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbHV4U3RvcmUge1xuICByZWFkb25seSBhY3Rpb246ICh0eXBlOiBzdHJpbmcsIGRhdGE6IGFueSwgc3RhdGU6IGFueSkgPT4gYW55O1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluaXRpYWxTdGF0ZTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBGbHV4UGx1Z2luTWV0aG9kVHlwZSA9IChhY3Rpb246IEZsdXhBY3Rpb24sIHN0b3JlOiBvYmplY3QsIGFwcERhdGE/OiBvYmplY3QpID0+IFByb21pc2U8Rmx1eEFjdGlvbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmx1eE1pZGRsZXdhcmVUeXBlIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwcmVEaXNwYXRjaD86IEZsdXhQbHVnaW5NZXRob2RUeXBlO1xuICByZWFkb25seSBwb3N0RGlzcGF0Y2g/OiBGbHV4UGx1Z2luTWV0aG9kVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbHV4UGx1Z2luVHlwZSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kOiBGbHV4UGx1Z2luTWV0aG9kVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNvbnN0cnVjdG9yIHtcbiAgY2FwdHVyZVN0YWNrVHJhY2UodGhpc0FyZzogYW55LCBmdW5jOiBhbnkpOiB2b2lkXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTsiLAogICJuYW1lcyI6IFtdCn0K
|
1
|
+
/* ArkhamJS - Optimized Build */
|
2
|
+
/* End ArkhamJS */
|
3
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
@@ -1,47 +1,4 @@
|
|
1
|
-
|
2
|
-
var
|
3
|
-
|
4
|
-
|
5
|
-
var __export = (target, all) => {
|
6
|
-
for (var name in all)
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
8
|
-
};
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
11
|
-
for (let key of __getOwnPropNames(from))
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
14
|
-
}
|
15
|
-
return to;
|
16
|
-
};
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
18
|
-
var ArkhamConstants_exports = {};
|
19
|
-
__export(ArkhamConstants_exports, {
|
20
|
-
ArkhamConstants: () => ArkhamConstants
|
21
|
-
});
|
22
|
-
module.exports = __toCommonJS(ArkhamConstants_exports);
|
23
|
-
class ArkhamConstants {
|
24
|
-
static {
|
25
|
-
this.GO_BACK = "ARKHAM_GO_BACK";
|
26
|
-
}
|
27
|
-
static {
|
28
|
-
this.GO_REPLACE = "ARKHAM_GO_REPLACE";
|
29
|
-
}
|
30
|
-
static {
|
31
|
-
this.GOTO = "ARKHAM_GOTO";
|
32
|
-
}
|
33
|
-
static {
|
34
|
-
this.INIT = "ARKHAM_INIT";
|
35
|
-
}
|
36
|
-
static {
|
37
|
-
this.UPDATE_TITLE = "ARKHAM_UPDATE_TITLE";
|
38
|
-
}
|
39
|
-
static {
|
40
|
-
this.UPDATE_VIEW = "ARKHAM_UPDATE_VIEW";
|
41
|
-
}
|
42
|
-
}
|
43
|
-
// Annotate the CommonJS export names for ESM import in node:
|
44
|
-
0 && (module.exports = {
|
45
|
-
ArkhamConstants
|
46
|
-
});
|
47
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnN0YW50cy9BcmtoYW1Db25zdGFudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5cbmV4cG9ydCBjbGFzcyBBcmtoYW1Db25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgR09fQkFDSzogc3RyaW5nID0gJ0FSS0hBTV9HT19CQUNLJztcbiAgc3RhdGljIHJlYWRvbmx5IEdPX1JFUExBQ0U6IHN0cmluZyA9ICdBUktIQU1fR09fUkVQTEFDRSc7XG4gIHN0YXRpYyByZWFkb25seSBHT1RPOiBzdHJpbmcgPSAnQVJLSEFNX0dPVE8nO1xuICBzdGF0aWMgcmVhZG9ubHkgSU5JVDogc3RyaW5nID0gJ0FSS0hBTV9JTklUJztcbiAgc3RhdGljIHJlYWRvbmx5IFVQREFURV9USVRMRTogc3RyaW5nID0gJ0FSS0hBTV9VUERBVEVfVElUTEUnO1xuICBzdGF0aWMgcmVhZG9ubHkgVVBEQVRFX1ZJRVc6IHN0cmluZyA9ICdBUktIQU1fVVBEQVRFX1ZJRVcnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBS08sTUFBTSxnQkFBZ0I7QUFBQSxFQUMzQjtBQUFBLFNBQWdCLFVBQWtCO0FBQUE7QUFBQSxFQUNsQztBQUFBLFNBQWdCLGFBQXFCO0FBQUE7QUFBQSxFQUNyQztBQUFBLFNBQWdCLE9BQWU7QUFBQTtBQUFBLEVBQy9CO0FBQUEsU0FBZ0IsT0FBZTtBQUFBO0FBQUEsRUFDL0I7QUFBQSxTQUFnQixlQUF1QjtBQUFBO0FBQUEsRUFDdkM7QUFBQSxTQUFnQixjQUFzQjtBQUFBO0FBQ3hDOyIsCiAgIm5hbWVzIjogW10KfQo=
|
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
|
package/lib/index.js
CHANGED
@@ -1,36 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
var __export = (target, all) => {
|
6
|
-
for (var name in all)
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
8
|
-
};
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
11
|
-
for (let key of __getOwnPropNames(from))
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
14
|
-
}
|
15
|
-
return to;
|
16
|
-
};
|
17
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
-
var index_exports = {};
|
20
|
-
__export(index_exports, {
|
21
|
-
ArkhamConstants: () => import_ArkhamConstants.ArkhamConstants,
|
22
|
-
Flux: () => import_Flux.Flux,
|
23
|
-
FluxFramework: () => import_Flux.FluxFramework
|
24
|
-
});
|
25
|
-
module.exports = __toCommonJS(index_exports);
|
26
|
-
var import_ArkhamConstants = require("./constants/ArkhamConstants");
|
27
|
-
var import_Flux = require("./Flux/Flux");
|
28
|
-
__reExport(index_exports, require("./Flux/Flux.types"), module.exports);
|
29
|
-
// Annotate the CommonJS export names for ESM import in node:
|
30
|
-
0 && (module.exports = {
|
31
|
-
ArkhamConstants,
|
32
|
-
Flux,
|
33
|
-
FluxFramework,
|
34
|
-
...require("./Flux/Flux.types")
|
35
|
-
});
|
36
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtBcmtoYW1Db25zdGFudHN9IGZyb20gJy4vY29uc3RhbnRzL0Fya2hhbUNvbnN0YW50cyc7XG5pbXBvcnQge0ZsdXgsIEZsdXhGcmFtZXdvcmt9IGZyb20gJy4vRmx1eC9GbHV4JztcblxuZXhwb3J0ICogZnJvbSAnLi9GbHV4L0ZsdXgudHlwZXMnO1xuZXhwb3J0IHtBcmtoYW1Db25zdGFudHMsIEZsdXgsIEZsdXhGcmFtZXdvcmt9O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSw2QkFBOEI7QUFDOUIsa0JBQWtDO0FBRWxDLDBCQUFjLDhCQVBkOyIsCiAgIm5hbWVzIjogW10KfQo=
|
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
|
package/package.json
CHANGED
@@ -1,15 +1,34 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nlabs/arkhamjs",
|
3
|
-
"version": "3.
|
3
|
+
"version": "3.29.0",
|
4
4
|
"publishConfig": {
|
5
5
|
"access": "public"
|
6
6
|
},
|
7
7
|
"description": "Javascript Flux Library",
|
8
|
+
"type": "module",
|
9
|
+
"sideEffects": false,
|
8
10
|
"license": "MIT",
|
9
11
|
"main": "./index.js",
|
10
12
|
"module": "./index.js",
|
11
13
|
"browser": "./index.js",
|
12
14
|
"types": "./lib/index.d.js",
|
15
|
+
"exports": {
|
16
|
+
".": {
|
17
|
+
"import": "./index.js",
|
18
|
+
"require": "./index.js",
|
19
|
+
"types": "./lib/index.d.js"
|
20
|
+
},
|
21
|
+
"./Flux": {
|
22
|
+
"import": "./lib/Flux/Flux.js",
|
23
|
+
"require": "./lib/Flux/Flux.js",
|
24
|
+
"types": "./lib/Flux/Flux.d.ts"
|
25
|
+
},
|
26
|
+
"./constants": {
|
27
|
+
"import": "./lib/constants/ArkhamConstants.js",
|
28
|
+
"require": "./lib/constants/ArkhamConstants.js",
|
29
|
+
"types": "./lib/constants/ArkhamConstants.d.ts"
|
30
|
+
}
|
31
|
+
},
|
13
32
|
"keywords": [
|
14
33
|
"arkhamjs",
|
15
34
|
"flux",
|
@@ -35,28 +54,25 @@
|
|
35
54
|
"scripts": {
|
36
55
|
"build": "lex compile --remove",
|
37
56
|
"clean": "lex clean",
|
38
|
-
"lint": "
|
57
|
+
"lint": "lex lint --fix",
|
39
58
|
"prepublishOnly": "npm run build",
|
40
59
|
"publish:major": "npm version major && npm publish",
|
41
60
|
"publish:minor": "npm version minor && npm publish",
|
42
61
|
"publish:patch": "npm version patch && npm publish",
|
43
62
|
"pretest": "npm run lint",
|
44
63
|
"test": "lex test",
|
45
|
-
"update": "
|
64
|
+
"update": "lex update --interactive"
|
46
65
|
},
|
47
66
|
"dependencies": {
|
48
|
-
"
|
49
|
-
"events": "^3.3.0"
|
50
|
-
"lodash": "^4.17.21"
|
67
|
+
"@nlabs/utils": "2.0.0",
|
68
|
+
"events": "^3.3.0"
|
51
69
|
},
|
52
70
|
"devDependencies": {
|
53
71
|
"@types/events": "^3.0.3",
|
54
|
-
"@types/jest": "^
|
55
|
-
"@types/
|
56
|
-
"
|
57
|
-
"
|
58
|
-
"eslint-config-styleguidejs": "^3.2.1",
|
59
|
-
"typescript": "^5.7.3"
|
72
|
+
"@types/jest": "^30.0.0",
|
73
|
+
"@types/node": "^24.0.10",
|
74
|
+
"esbuild": "^0.25.5",
|
75
|
+
"typescript": "^5.8.3"
|
60
76
|
},
|
61
77
|
"files": [
|
62
78
|
"lib",
|