@kaspernj/api-maker 1.0.2122 → 1.0.2123
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 +41 -0
- package/build/channels-consumer.d.ts +1 -0
- package/build/channels-consumer.d.ts.map +1 -1
- package/build/channels-consumer.js +9 -2
- package/build/command-execution.d.ts +71 -0
- package/build/command-execution.d.ts.map +1 -0
- package/build/command-execution.js +138 -0
- package/build/commands-pool.d.ts +8 -4
- package/build/commands-pool.d.ts.map +1 -1
- package/build/commands-pool.js +58 -40
- package/build/config.d.ts +14 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +17 -2
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +18 -4
- package/build/model-recipes-model-loader.d.ts.map +1 -1
- package/build/model-recipes-model-loader.js +5 -3
- package/build/session-status-updater.d.ts +5 -0
- package/build/session-status-updater.d.ts.map +1 -1
- package/build/session-status-updater.js +14 -3
- package/build/websocket-request-client.d.ts +55 -0
- package/build/websocket-request-client.d.ts.map +1 -0
- package/build/websocket-request-client.js +192 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -102,6 +102,47 @@ The relationship name is stored in `snake_case`, so `preloadRelationship("Accoun
|
|
|
102
102
|
|
|
103
103
|
`config` is a shared singleton. Some helpers (forms, routing, navigation, and money inputs) require config values like `history`, `linkTo`, `navigation`, and `currenciesCollection` to be set. If a required value is missing, the getter throws an error to avoid silent failures.
|
|
104
104
|
|
|
105
|
+
### Websocket requests
|
|
106
|
+
|
|
107
|
+
ApiMaker can send commands and services over ActionCable instead of the HTTP commands endpoint:
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
import config from "@kaspernj/api-maker/build/config.js"
|
|
111
|
+
|
|
112
|
+
config.setWebsocketRequests(true)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
This keeps request/response traffic on the shared websocket connection and lets the client reuse websocket-side request deduping and response caching.
|
|
116
|
+
|
|
117
|
+
When a command runs over websocket, the returned value is an awaitable command handle. It behaves like a promise, so existing code still works:
|
|
118
|
+
|
|
119
|
+
```js
|
|
120
|
+
const result = await User.customCommand({message: "Hello world"})
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The same handle also exposes progress and log hooks for long-running commands:
|
|
124
|
+
|
|
125
|
+
```js
|
|
126
|
+
const command = User.customCommand({message: "Hello world"})
|
|
127
|
+
|
|
128
|
+
command.onReceived(() => console.log("received"))
|
|
129
|
+
command.onProgress(({progress, count, total}) => console.log(progress, count, total))
|
|
130
|
+
command.onLog((message) => console.log(message))
|
|
131
|
+
|
|
132
|
+
const result = await command
|
|
133
|
+
const latestProgress = await command.progress()
|
|
134
|
+
const logs = command.logs()
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
On the Ruby side, websocket-backed commands and services can report progress through `current_command`:
|
|
138
|
+
|
|
139
|
+
```ruby
|
|
140
|
+
current_command.total = 10
|
|
141
|
+
current_command.log("Starting")
|
|
142
|
+
current_command.increment!
|
|
143
|
+
current_command.progress = 0.5
|
|
144
|
+
```
|
|
145
|
+
|
|
105
146
|
## Realtime model events
|
|
106
147
|
|
|
107
148
|
For model-specific websocket events in React/ShapeComponent UI code, prefer `useModelEvent` over manual `ModelEvents.connect(...)` subscriptions. The hook handles subscription lifecycle automatically and avoids leaked listeners.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"AAKe,6BADD,GAAG,
|
|
1
|
+
{"version":3,"file":"channels-consumer.d.ts","sourceRoot":"/src/","sources":["channels-consumer.js"],"names":[],"mappings":"AAKe,6BADD,GAAG,CAOhB;;AAGM,yCADO,IAAI,CAQjB"}
|
|
@@ -4,9 +4,16 @@ import { createConsumer } from "@rails/actioncable"; // eslint-disable-line impo
|
|
|
4
4
|
/** @returns {any} */
|
|
5
5
|
export default () => {
|
|
6
6
|
if (!globalThis.apiMakerChannelsConsumer) {
|
|
7
|
-
// @ts-expect-error
|
|
8
7
|
globalThis.apiMakerChannelsConsumer = createConsumer(Config.getCableUrl());
|
|
9
8
|
}
|
|
10
9
|
return globalThis.apiMakerChannelsConsumer;
|
|
11
10
|
};
|
|
12
|
-
|
|
11
|
+
/** @returns {void} */
|
|
12
|
+
export const resetChannelsConsumer = () => {
|
|
13
|
+
if (!globalThis.apiMakerChannelsConsumer) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
globalThis.apiMakerChannelsConsumer.disconnect();
|
|
17
|
+
delete globalThis.apiMakerChannelsConsumer;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbHMtY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNoYW5uZWxzLWNvbnN1bWVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxtQkFBbUI7QUFDbkIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFBLENBQUMsMkNBQTJDO0FBRTdGLHFCQUFxQjtBQUNyQixlQUFlLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsVUFBVSxDQUFDLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUMsd0JBQXdCLENBQUE7QUFDNUMsQ0FBQyxDQUFBO0FBRUQsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsRUFBRTtJQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsT0FBTTtJQUNSLENBQUM7SUFFRCxVQUFVLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDaEQsT0FBTyxVQUFVLENBQUMsd0JBQXdCLENBQUE7QUFDNUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbmZpZyBmcm9tIFwiLi9jb25maWcuanNcIlxuLy8gQHRzLWV4cGVjdC1lcnJvclxuaW1wb3J0IHtjcmVhdGVDb25zdW1lcn0gZnJvbSBcIkByYWlscy9hY3Rpb25jYWJsZVwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcblxuLyoqIEByZXR1cm5zIHthbnl9ICovXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGlmICghZ2xvYmFsVGhpcy5hcGlNYWtlckNoYW5uZWxzQ29uc3VtZXIpIHtcbiAgICBnbG9iYWxUaGlzLmFwaU1ha2VyQ2hhbm5lbHNDb25zdW1lciA9IGNyZWF0ZUNvbnN1bWVyKENvbmZpZy5nZXRDYWJsZVVybCgpKVxuICB9XG5cbiAgcmV0dXJuIGdsb2JhbFRoaXMuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyXG59XG5cbi8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbmV4cG9ydCBjb25zdCByZXNldENoYW5uZWxzQ29uc3VtZXIgPSAoKSA9PiB7XG4gIGlmICghZ2xvYmFsVGhpcy5hcGlNYWtlckNoYW5uZWxzQ29uc3VtZXIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGdsb2JhbFRoaXMuYXBpTWFrZXJDaGFubmVsc0NvbnN1bWVyLmRpc2Nvbm5lY3QoKVxuICBkZWxldGUgZ2xvYmFsVGhpcy5hcGlNYWtlckNoYW5uZWxzQ29uc3VtZXJcbn1cbiJdfQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** Shared thenable command handle with progress and log subscriptions. */
|
|
2
|
+
export default class ApiMakerCommandExecution {
|
|
3
|
+
logListeners: any[];
|
|
4
|
+
logsData: any[];
|
|
5
|
+
progressListeners: any[];
|
|
6
|
+
receivedListeners: any[];
|
|
7
|
+
progressPromise: Promise<any>;
|
|
8
|
+
resolveProgressPromise: (value: any) => void;
|
|
9
|
+
receivedPromise: Promise<any>;
|
|
10
|
+
resolveReceivedPromise: (value: any) => void;
|
|
11
|
+
resultPromise: Promise<any>;
|
|
12
|
+
resolveResultPromise: (value: any) => void;
|
|
13
|
+
rejectResultPromise: (reason?: any) => void;
|
|
14
|
+
/**
|
|
15
|
+
* @param {(value: Record<string, any>) => void} callback
|
|
16
|
+
* @returns {() => void}
|
|
17
|
+
*/
|
|
18
|
+
onReceived(callback: (value: Record<string, any>) => void): () => void;
|
|
19
|
+
/**
|
|
20
|
+
* @param {(value: Record<string, any> | undefined) => void} callback
|
|
21
|
+
* @returns {() => void}
|
|
22
|
+
*/
|
|
23
|
+
onProgress(callback: (value: Record<string, any> | undefined) => void): () => void;
|
|
24
|
+
/**
|
|
25
|
+
* @param {(value: string) => void} callback
|
|
26
|
+
* @returns {() => void}
|
|
27
|
+
*/
|
|
28
|
+
onLog(callback: (value: string) => void): () => void;
|
|
29
|
+
/** @returns {Promise<Record<string, any> | undefined>} */
|
|
30
|
+
progress(): Promise<Record<string, any> | undefined>;
|
|
31
|
+
/** @returns {Promise<Record<string, any> | undefined>} */
|
|
32
|
+
received(): Promise<Record<string, any> | undefined>;
|
|
33
|
+
/** @returns {string[]} */
|
|
34
|
+
logs(): string[];
|
|
35
|
+
/** @returns {Promise<any>} */
|
|
36
|
+
result(): Promise<any>;
|
|
37
|
+
/** @returns {Promise<any>} */
|
|
38
|
+
then(...args: any[]): Promise<any>;
|
|
39
|
+
/** @returns {Promise<any>} */
|
|
40
|
+
catch(...args: any[]): Promise<any>;
|
|
41
|
+
/** @returns {Promise<any>} */
|
|
42
|
+
finally(...args: any[]): Promise<any>;
|
|
43
|
+
/**
|
|
44
|
+
* @param {Record<string, any>} data
|
|
45
|
+
* @returns {void}
|
|
46
|
+
*/
|
|
47
|
+
setReceived(data: Record<string, any>): void;
|
|
48
|
+
receivedData: Record<string, any>;
|
|
49
|
+
/**
|
|
50
|
+
* @param {Record<string, any>} data
|
|
51
|
+
* @returns {void}
|
|
52
|
+
*/
|
|
53
|
+
setProgress(data: Record<string, any>): void;
|
|
54
|
+
progressData: Record<string, any>;
|
|
55
|
+
/**
|
|
56
|
+
* @param {string} message
|
|
57
|
+
* @returns {void}
|
|
58
|
+
*/
|
|
59
|
+
addLog(message: string): void;
|
|
60
|
+
/**
|
|
61
|
+
* @param {any} value
|
|
62
|
+
* @returns {void}
|
|
63
|
+
*/
|
|
64
|
+
resolve(value: any): void;
|
|
65
|
+
/**
|
|
66
|
+
* @param {any} error
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
reject(error: any): void;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=command-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-execution.d.ts","sourceRoot":"/src/","sources":["command-execution.js"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E;IAGI,oBAAsB;IACtB,gBAAkB;IAClB,yBAA2B;IAC3B,yBAA2B;IAE3B,8BAEE;IADA,6CAAqC;IAEvC,8BAEE;IADA,6CAAqC;IAEvC,4BAGE;IAFA,2CAAmC;IACnC,4CAAiC;IAIrC;;;OAGG;IACH,qBAHW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,GAClC,MAAM,IAAI,CAYtB;IAED;;;OAGG;IACH,qBAHW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,KAAK,IAAI,GAC9C,MAAM,IAAI,CAYtB;IAED;;;OAGG;IACH,gBAHW,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACrB,MAAM,IAAI,CAYtB;IAED,0DAA0D;IAC1D,YADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAGrD;IAED,0DAA0D;IAC1D,YADc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,CAGrD;IAED,0BAA0B;IAC1B,QADc,MAAM,EAAE,CAGrB;IAED,8BAA8B;IAC9B,UADc,OAAO,CAAC,GAAG,CAAC,CAGzB;IAED,8BAA8B;IAC9B,sBADc,OAAO,CAAC,GAAG,CAAC,CAGzB;IAED,8BAA8B;IAC9B,uBADc,OAAO,CAAC,GAAG,CAAC,CAGzB;IAED,8BAA8B;IAC9B,yBADc,OAAO,CAAC,GAAG,CAAC,CAGzB;IAED;;;OAGG;IACH,kBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAShB;IANC,kCAAwB;IAQ1B;;;OAGG;IACH,kBAHW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjB,IAAI,CAShB;IANC,kCAAwB;IAQ1B;;;OAGG;IACH,gBAHW,MAAM,GACJ,IAAI,CAQhB;IAED;;;OAGG;IACH,eAHW,GAAG,GACD,IAAI,CAMhB;IAED;;;OAGG;IACH,cAHW,GAAG,GACD,IAAI,CAMhB;CACF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/** Shared thenable command handle with progress and log subscriptions. */
|
|
2
|
+
export default class ApiMakerCommandExecution {
|
|
3
|
+
/** Constructor. */
|
|
4
|
+
constructor() {
|
|
5
|
+
this.logListeners = [];
|
|
6
|
+
this.logsData = [];
|
|
7
|
+
this.progressListeners = [];
|
|
8
|
+
this.receivedListeners = [];
|
|
9
|
+
this.progressPromise = new Promise((resolve) => {
|
|
10
|
+
this.resolveProgressPromise = resolve;
|
|
11
|
+
});
|
|
12
|
+
this.receivedPromise = new Promise((resolve) => {
|
|
13
|
+
this.resolveReceivedPromise = resolve;
|
|
14
|
+
});
|
|
15
|
+
this.resultPromise = new Promise((resolve, reject) => {
|
|
16
|
+
this.resolveResultPromise = resolve;
|
|
17
|
+
this.rejectResultPromise = reject;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @param {(value: Record<string, any>) => void} callback
|
|
22
|
+
* @returns {() => void}
|
|
23
|
+
*/
|
|
24
|
+
onReceived(callback) {
|
|
25
|
+
this.receivedListeners.push(callback);
|
|
26
|
+
if (this.receivedData) {
|
|
27
|
+
callback(this.receivedData);
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
this.receivedListeners = this.receivedListeners.filter((listener) => listener !== callback);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @param {(value: Record<string, any> | undefined) => void} callback
|
|
35
|
+
* @returns {() => void}
|
|
36
|
+
*/
|
|
37
|
+
onProgress(callback) {
|
|
38
|
+
this.progressListeners.push(callback);
|
|
39
|
+
if (this.progressData) {
|
|
40
|
+
callback(this.progressData);
|
|
41
|
+
}
|
|
42
|
+
return () => {
|
|
43
|
+
this.progressListeners = this.progressListeners.filter((listener) => listener !== callback);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @param {(value: string) => void} callback
|
|
48
|
+
* @returns {() => void}
|
|
49
|
+
*/
|
|
50
|
+
onLog(callback) {
|
|
51
|
+
this.logListeners.push(callback);
|
|
52
|
+
for (const message of this.logsData) {
|
|
53
|
+
callback(message);
|
|
54
|
+
}
|
|
55
|
+
return () => {
|
|
56
|
+
this.logListeners = this.logListeners.filter((listener) => listener !== callback);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** @returns {Promise<Record<string, any> | undefined>} */
|
|
60
|
+
progress() {
|
|
61
|
+
return this.progressData ? Promise.resolve(this.progressData) : this.progressPromise;
|
|
62
|
+
}
|
|
63
|
+
/** @returns {Promise<Record<string, any> | undefined>} */
|
|
64
|
+
received() {
|
|
65
|
+
return this.receivedData ? Promise.resolve(this.receivedData) : this.receivedPromise;
|
|
66
|
+
}
|
|
67
|
+
/** @returns {string[]} */
|
|
68
|
+
logs() {
|
|
69
|
+
return [...this.logsData];
|
|
70
|
+
}
|
|
71
|
+
/** @returns {Promise<any>} */
|
|
72
|
+
result() {
|
|
73
|
+
return this.resultPromise;
|
|
74
|
+
}
|
|
75
|
+
/** @returns {Promise<any>} */
|
|
76
|
+
then(...args) {
|
|
77
|
+
return this.resultPromise.then(...args);
|
|
78
|
+
}
|
|
79
|
+
/** @returns {Promise<any>} */
|
|
80
|
+
catch(...args) {
|
|
81
|
+
return this.resultPromise.catch(...args);
|
|
82
|
+
}
|
|
83
|
+
/** @returns {Promise<any>} */
|
|
84
|
+
finally(...args) {
|
|
85
|
+
return this.resultPromise.finally(...args);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @param {Record<string, any>} data
|
|
89
|
+
* @returns {void}
|
|
90
|
+
*/
|
|
91
|
+
setReceived(data) {
|
|
92
|
+
this.receivedData = data;
|
|
93
|
+
this.resolveReceivedPromise?.(data);
|
|
94
|
+
for (const listener of this.receivedListeners) {
|
|
95
|
+
listener(data);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @param {Record<string, any>} data
|
|
100
|
+
* @returns {void}
|
|
101
|
+
*/
|
|
102
|
+
setProgress(data) {
|
|
103
|
+
this.progressData = data;
|
|
104
|
+
this.resolveProgressPromise?.(data);
|
|
105
|
+
for (const listener of this.progressListeners) {
|
|
106
|
+
listener(data);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* @param {string} message
|
|
111
|
+
* @returns {void}
|
|
112
|
+
*/
|
|
113
|
+
addLog(message) {
|
|
114
|
+
this.logsData.push(message);
|
|
115
|
+
for (const listener of this.logListeners) {
|
|
116
|
+
listener(message);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @param {any} value
|
|
121
|
+
* @returns {void}
|
|
122
|
+
*/
|
|
123
|
+
resolve(value) {
|
|
124
|
+
this.resolveProgressPromise?.(this.progressData);
|
|
125
|
+
this.resolveReceivedPromise?.(this.receivedData);
|
|
126
|
+
this.resolveResultPromise(value);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* @param {any} error
|
|
130
|
+
* @returns {void}
|
|
131
|
+
*/
|
|
132
|
+
reject(error) {
|
|
133
|
+
this.resolveProgressPromise?.(this.progressData);
|
|
134
|
+
this.resolveReceivedPromise?.(this.receivedData);
|
|
135
|
+
this.rejectResultPromise(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1leGVjdXRpb24uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbW1hbmQtZXhlY3V0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsT0FBTyxPQUFPLHdCQUF3QjtJQUMzQyxtQkFBbUI7SUFDbkI7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUE7UUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUE7UUFDdkMsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQTtRQUN2QyxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQTtZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBRSxRQUFRO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFckMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZ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Q2hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFFLElBQUk7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVuQyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBRSxPQUFPO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFM0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFFLEtBQUs7UUFDWixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFFLEtBQUs7UUFDWCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2hhcmVkIHRoZW5hYmxlIGNvbW1hbmQgaGFuZGxlIHdpdGggcHJvZ3Jlc3MgYW5kIGxvZyBzdWJzY3JpcHRpb25zLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJDb21tYW5kRXhlY3V0aW9uIHtcbiAgLyoqIENvbnN0cnVjdG9yLiAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5sb2dMaXN0ZW5lcnMgPSBbXVxuICAgIHRoaXMubG9nc0RhdGEgPSBbXVxuICAgIHRoaXMucHJvZ3Jlc3NMaXN0ZW5lcnMgPSBbXVxuICAgIHRoaXMucmVjZWl2ZWRMaXN0ZW5lcnMgPSBbXVxuXG4gICAgdGhpcy5wcm9ncmVzc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlUHJvZ3Jlc3NQcm9taXNlID0gcmVzb2x2ZVxuICAgIH0pXG4gICAgdGhpcy5yZWNlaXZlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlUmVjZWl2ZWRQcm9taXNlID0gcmVzb2x2ZVxuICAgIH0pXG4gICAgdGhpcy5yZXN1bHRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlUmVzdWx0UHJvbWlzZSA9IHJlc29sdmVcbiAgICAgIHRoaXMucmVqZWN0UmVzdWx0UHJvbWlzZSA9IHJlamVjdFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWR9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICAgKi9cbiAgb25SZWNlaXZlZCAoY2FsbGJhY2spIHtcbiAgICB0aGlzLnJlY2VpdmVkTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spXG5cbiAgICBpZiAodGhpcy5yZWNlaXZlZERhdGEpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMucmVjZWl2ZWREYXRhKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnJlY2VpdmVkTGlzdGVuZXJzID0gdGhpcy5yZWNlaXZlZExpc3RlbmVycy5maWx0ZXIoKGxpc3RlbmVyKSA9PiBsaXN0ZW5lciAhPT0gY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7KCkgPT4gdm9pZH1cbiAgICovXG4gIG9uUHJvZ3Jlc3MgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGNhbGxiYWNrKVxuXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NEYXRhKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLnByb2dyZXNzRGF0YSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5wcm9ncmVzc0xpc3RlbmVycyA9IHRoaXMucHJvZ3Jlc3NMaXN0ZW5lcnMuZmlsdGVyKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIgIT09IGNhbGxiYWNrKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7KCkgPT4gdm9pZH1cbiAgICovXG4gIG9uTG9nIChjYWxsYmFjaykge1xuICAgIHRoaXMubG9nTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spXG5cbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgdGhpcy5sb2dzRGF0YSkge1xuICAgICAgY2FsbGJhY2sobWVzc2FnZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5sb2dMaXN0ZW5lcnMgPSB0aGlzLmxvZ0xpc3RlbmVycy5maWx0ZXIoKGxpc3RlbmVyKSA9PiBsaXN0ZW5lciAhPT0gY2FsbGJhY2spXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ+fSAqL1xuICBwcm9ncmVzcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NEYXRhID8gUHJvbWlzZS5yZXNvbHZlKHRoaXMucHJvZ3Jlc3NEYXRhKSA6IHRoaXMucHJvZ3Jlc3NQcm9taXNlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZD59ICovXG4gIHJlY2VpdmVkICgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNlaXZlZERhdGEgPyBQcm9taXNlLnJlc29sdmUodGhpcy5yZWNlaXZlZERhdGEpIDogdGhpcy5yZWNlaXZlZFByb21pc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW119ICovXG4gIGxvZ3MgKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5sb2dzRGF0YV1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAqL1xuICByZXN1bHQgKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdFByb21pc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAqL1xuICB0aGVuICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8YW55Pn0gKi9cbiAgY2F0Y2ggKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRQcm9taXNlLmNhdGNoKC4uLmFyZ3MpXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8YW55Pn0gKi9cbiAgZmluYWxseSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdFByb21pc2UuZmluYWxseSguLi5hcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gZGF0YVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNldFJlY2VpdmVkIChkYXRhKSB7XG4gICAgdGhpcy5yZWNlaXZlZERhdGEgPSBkYXRhXG4gICAgdGhpcy5yZXNvbHZlUmVjZWl2ZWRQcm9taXNlPy4oZGF0YSlcblxuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5yZWNlaXZlZExpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIoZGF0YSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBkYXRhXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc2V0UHJvZ3Jlc3MgKGRhdGEpIHtcbiAgICB0aGlzLnByb2dyZXNzRGF0YSA9IGRhdGFcbiAgICB0aGlzLnJlc29sdmVQcm9ncmVzc1Byb21pc2U/LihkYXRhKVxuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLnByb2dyZXNzTGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihkYXRhKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFkZExvZyAobWVzc2FnZSkge1xuICAgIHRoaXMubG9nc0RhdGEucHVzaChtZXNzYWdlKVxuXG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxvZ0xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIobWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVzb2x2ZSAodmFsdWUpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9ncmVzc1Byb21pc2U/Lih0aGlzLnByb2dyZXNzRGF0YSlcbiAgICB0aGlzLnJlc29sdmVSZWNlaXZlZFByb21pc2U/Lih0aGlzLnJlY2VpdmVkRGF0YSlcbiAgICB0aGlzLnJlc29sdmVSZXN1bHRQcm9taXNlKHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBlcnJvclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlamVjdCAoZXJyb3IpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9ncmVzc1Byb21pc2U/Lih0aGlzLnByb2dyZXNzRGF0YSlcbiAgICB0aGlzLnJlc29sdmVSZWNlaXZlZFByb21pc2U/Lih0aGlzLnJlY2VpdmVkRGF0YSlcbiAgICB0aGlzLnJlamVjdFJlc3VsdFByb21pc2UoZXJyb3IpXG4gIH1cbn1cbiJdfQ==
|
package/build/commands-pool.d.ts
CHANGED
|
@@ -14,19 +14,23 @@ export default class ApiMakerCommandsPool {
|
|
|
14
14
|
currentId: number;
|
|
15
15
|
/** @type {Record<string, any>} */
|
|
16
16
|
globalRequestData: Record<string, any>;
|
|
17
|
+
/** @type {Record<string, any>} */
|
|
18
|
+
requestOptions: Record<string, any>;
|
|
17
19
|
/** addCommand. */
|
|
18
|
-
addCommand(data: any):
|
|
20
|
+
addCommand(data: any): ApiMakerCommandExecution;
|
|
19
21
|
/** @returns {number} */
|
|
20
22
|
commandsCount(): number;
|
|
21
23
|
/**
|
|
22
24
|
* @param {object} args
|
|
23
25
|
* @param {string} args.url
|
|
24
26
|
* @param {CommandSubmitData} args.commandSubmitData
|
|
27
|
+
* @param {ApiMakerCommandExecution} [args.commandExecution]
|
|
25
28
|
* @returns {Promise<Record<string, any>>}
|
|
26
29
|
*/
|
|
27
|
-
sendRequest({ commandSubmitData, url }: {
|
|
30
|
+
sendRequest({ commandExecution, commandSubmitData, url }: {
|
|
28
31
|
url: string;
|
|
29
32
|
commandSubmitData: CommandSubmitData;
|
|
33
|
+
commandExecution?: ApiMakerCommandExecution;
|
|
30
34
|
}): Promise<Record<string, any>>;
|
|
31
35
|
/** flush. */
|
|
32
36
|
flush: () => Promise<void>;
|
|
@@ -48,8 +52,7 @@ export default class ApiMakerCommandsPool {
|
|
|
48
52
|
flushRunLast: RunLast;
|
|
49
53
|
}
|
|
50
54
|
export type CommandDataType = {
|
|
51
|
-
|
|
52
|
-
reject: Function;
|
|
55
|
+
commandExecution: ApiMakerCommandExecution;
|
|
53
56
|
stack: string;
|
|
54
57
|
};
|
|
55
58
|
export type PoolDataType = {
|
|
@@ -65,6 +68,7 @@ export type PoolDataType = {
|
|
|
65
68
|
};
|
|
66
69
|
};
|
|
67
70
|
};
|
|
71
|
+
import ApiMakerCommandExecution from "./command-execution.js";
|
|
68
72
|
import CommandSubmitData from "./command-submit-data.js";
|
|
69
73
|
import RunLast from "./run-last.js";
|
|
70
74
|
//# sourceMappingURL=commands-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands-pool.d.ts","sourceRoot":"/src/","sources":["commands-pool.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands-pool.d.ts","sourceRoot":"/src/","sources":["commands-pool.js"],"names":[],"mappings":"AA6BA,4BAA4B;AAC5B;IACE,kBAAkB;IAClB,6CAqBC;IAED,eAAe;IACf,sBAIC;IAED,aAAa;IACb,qBAEC;IAIC,mBAAmB;IAEnB,8CAA8C;IAC9C,MADW,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAC5B;IAEd,2BAA2B;IAC3B,UADW,YAAY,CACL;IAElB,kBAAkB;IAElB,kCAAkC;IAClC,mBADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACH;IAE3B,kCAAkC;IAClC,gBADW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACN;IAG1B,kBAAkB;IAClB,gDAkCC;IAED,wBAAwB;IACxB,iBADc,MAAM,CAGnB;IAED;;;;;;OAMG;IACH,0DALG;QAAqB,GAAG,EAAhB,MAAM;QACkB,iBAAiB,EAAzC,iBAAiB;QACe,gBAAgB,GAAhD,wBAAwB;KAChC,GAAU,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAiCxC;IAED,aAAa;IACb,2BAyDC;IAED;;;;;;;OAOG;IACH,kCAPW,eAAe,uBAEvB;QAAoC,UAAU,EAAtC,MAAM;QACwB,MAAM,EAApC,MAAM,EAAE;QACsB,iBAAiB,EAA/C,MAAM,EAAE;KAChB,GAAU,IAAI,CA0BhB;IAED,gBAAgB;IAChB,oBAUC;IAED,sBAAsC;CACvC;;sBA/Pa,wBAAwB;WACxB,MAAM;;2BAGN;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG;gBAAC,CAAC,GAAG,EAAE,MAAM,GAAG;oBAAC,IAAI,EAAE,MAAM,CAAC;oBAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;oBAAC,EAAE,EAAE,MAAM,CAAA;iBAAC,CAAA;aAAC,CAAA;SAAC,CAAA;KAAC,CAAA;CAAC;qCAtBrG,wBAAwB;8BAC/B,0BAA0B;oBAQpC,eAAe"}
|
package/build/commands-pool.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import Api from "./api.js";
|
|
3
|
+
import ApiMakerCommandExecution from "./command-execution.js";
|
|
3
4
|
import CommandSubmitData from "./command-submit-data.js";
|
|
5
|
+
import Config from "./config.js";
|
|
4
6
|
import CustomError from "./custom-error.js";
|
|
5
7
|
import DestroyError from "./destroy-error.js";
|
|
6
8
|
import Deserializer from "./deserializer.js"; // eslint-disable-line sort-imports
|
|
@@ -12,10 +14,10 @@ import Serializer from "./serializer.js";
|
|
|
12
14
|
import SessionStatusUpdater from "./session-status-updater.js";
|
|
13
15
|
import ValidationError from "./validation-error.js";
|
|
14
16
|
import { ValidationErrors } from "./validation-errors.js";
|
|
17
|
+
import WebsocketRequestClient from "./websocket-request-client.js";
|
|
15
18
|
/**
|
|
16
19
|
* @typedef {object} CommandDataType
|
|
17
|
-
* @property {
|
|
18
|
-
* @property {Function} reject
|
|
20
|
+
* @property {ApiMakerCommandExecution} commandExecution
|
|
19
21
|
* @property {string} stack
|
|
20
22
|
*/
|
|
21
23
|
/** @typedef {{[key: string]: {[key: string]: {[key: string]: {[key: number]: {args: object, primary_key: number | string, id: number}}}}}} PoolDataType */
|
|
@@ -25,15 +27,17 @@ export default class ApiMakerCommandsPool {
|
|
|
25
27
|
/** addCommand. */
|
|
26
28
|
static addCommand(data, args = {}) {
|
|
27
29
|
let pool;
|
|
28
|
-
|
|
30
|
+
const useWebsocketRequests = Config.getWebsocketRequests();
|
|
31
|
+
if (args.instant || useWebsocketRequests) {
|
|
29
32
|
pool = new ApiMakerCommandsPool();
|
|
30
33
|
pool.globalRequestData = { ...ApiMakerCommandsPool.current().globalRequestData };
|
|
34
|
+
pool.requestOptions = { ...args };
|
|
31
35
|
}
|
|
32
36
|
else {
|
|
33
37
|
pool = ApiMakerCommandsPool.current();
|
|
34
38
|
}
|
|
35
39
|
const promiseResult = pool.addCommand(data);
|
|
36
|
-
if (args.instant) {
|
|
40
|
+
if (args.instant || useWebsocketRequests) {
|
|
37
41
|
pool.flushRunLast.run();
|
|
38
42
|
}
|
|
39
43
|
else {
|
|
@@ -61,40 +65,42 @@ export default class ApiMakerCommandsPool {
|
|
|
61
65
|
this.currentId = 1;
|
|
62
66
|
/** @type {Record<string, any>} */
|
|
63
67
|
this.globalRequestData = {};
|
|
68
|
+
/** @type {Record<string, any>} */
|
|
69
|
+
this.requestOptions = {};
|
|
64
70
|
}
|
|
65
71
|
/** addCommand. */
|
|
66
72
|
addCommand(data) {
|
|
67
73
|
const stack = Error().stack;
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
74
|
+
const id = this.currentId;
|
|
75
|
+
const commandExecution = new ApiMakerCommandExecution();
|
|
76
|
+
const commandType = data.type;
|
|
77
|
+
const commandName = data.command;
|
|
78
|
+
const collectionName = data.collectionName;
|
|
79
|
+
this.currentId += 1;
|
|
80
|
+
this.pool[id] = { commandExecution, stack };
|
|
81
|
+
if (!this.poolData[commandType])
|
|
82
|
+
this.poolData[commandType] = {};
|
|
83
|
+
if (!this.poolData[commandType][collectionName])
|
|
84
|
+
this.poolData[commandType][collectionName] = {};
|
|
85
|
+
if (!this.poolData[commandType][collectionName][commandName])
|
|
86
|
+
this.poolData[commandType][collectionName][commandName] = {};
|
|
87
|
+
let args;
|
|
88
|
+
if (data.args?.nodeName == "FORM") {
|
|
89
|
+
const formData = new FormData(data.args);
|
|
90
|
+
args = FormDataObjectizer.toObject(formData);
|
|
91
|
+
}
|
|
92
|
+
else if (data.args instanceof FormData) {
|
|
93
|
+
args = FormDataObjectizer.toObject(data.args);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
args = Serializer.serialize(data.args);
|
|
97
|
+
}
|
|
98
|
+
this.poolData[commandType][collectionName][commandName][id] = {
|
|
99
|
+
args,
|
|
100
|
+
primary_key: data.primaryKey,
|
|
101
|
+
id
|
|
102
|
+
};
|
|
103
|
+
return commandExecution;
|
|
98
104
|
}
|
|
99
105
|
/** @returns {number} */
|
|
100
106
|
commandsCount() {
|
|
@@ -104,9 +110,20 @@ export default class ApiMakerCommandsPool {
|
|
|
104
110
|
* @param {object} args
|
|
105
111
|
* @param {string} args.url
|
|
106
112
|
* @param {CommandSubmitData} args.commandSubmitData
|
|
113
|
+
* @param {ApiMakerCommandExecution} [args.commandExecution]
|
|
107
114
|
* @returns {Promise<Record<string, any>>}
|
|
108
115
|
*/
|
|
109
|
-
async sendRequest({ commandSubmitData, url }) {
|
|
116
|
+
async sendRequest({ commandExecution, commandSubmitData, url }) {
|
|
117
|
+
if (Config.getWebsocketRequests() && commandSubmitData.getFilesCount() == 0) {
|
|
118
|
+
return await WebsocketRequestClient.current().perform({
|
|
119
|
+
cacheResponse: this.requestOptions.cacheResponse,
|
|
120
|
+
global: this.globalRequestData,
|
|
121
|
+
onLog: (message) => commandExecution?.addLog(message),
|
|
122
|
+
onProgress: (progressData) => commandExecution?.setProgress(progressData),
|
|
123
|
+
onReceived: (receivedData) => commandExecution?.setReceived(receivedData),
|
|
124
|
+
request: commandSubmitData.getJsonData()
|
|
125
|
+
});
|
|
126
|
+
}
|
|
110
127
|
let response;
|
|
111
128
|
for (let i = 0; i < 3; i++) {
|
|
112
129
|
if (commandSubmitData.getFilesCount() > 0) {
|
|
@@ -140,7 +157,8 @@ export default class ApiMakerCommandsPool {
|
|
|
140
157
|
submitData.global = this.globalRequestData;
|
|
141
158
|
const commandSubmitData = new CommandSubmitData(submitData);
|
|
142
159
|
const url = "/api_maker/commands";
|
|
143
|
-
const
|
|
160
|
+
const commandExecution = Object.values(currentPool)[0]?.commandExecution;
|
|
161
|
+
const response = await this.sendRequest({ commandExecution, commandSubmitData, url });
|
|
144
162
|
for (const commandId in response.responses) {
|
|
145
163
|
const commandResponse = response.responses[commandId];
|
|
146
164
|
const commandResponseData = Deserializer.parse(commandResponse.data);
|
|
@@ -153,7 +171,7 @@ export default class ApiMakerCommandsPool {
|
|
|
153
171
|
}
|
|
154
172
|
}
|
|
155
173
|
if (responseType == "success") {
|
|
156
|
-
commandData.resolve(commandResponseData);
|
|
174
|
+
commandData.commandExecution.resolve(commandResponseData);
|
|
157
175
|
}
|
|
158
176
|
else if (responseType == "error") {
|
|
159
177
|
const error = new CustomError("Command error", { response: commandResponseData });
|
|
@@ -161,7 +179,7 @@ export default class ApiMakerCommandsPool {
|
|
|
161
179
|
error.stack += commandData.stack.split("\n")
|
|
162
180
|
.slice(1)
|
|
163
181
|
.join("\n");
|
|
164
|
-
commandData.reject(error);
|
|
182
|
+
commandData.commandExecution.reject(error);
|
|
165
183
|
}
|
|
166
184
|
else if (responseType == "failed") {
|
|
167
185
|
this.handleFailedResponse(commandData, commandResponseData);
|
|
@@ -203,7 +221,7 @@ export default class ApiMakerCommandsPool {
|
|
|
203
221
|
}
|
|
204
222
|
error = new CustomError(errorMessage, { response: commandResponseData });
|
|
205
223
|
}
|
|
206
|
-
commandData.reject(error);
|
|
224
|
+
commandData.commandExecution.reject(error);
|
|
207
225
|
}
|
|
208
226
|
/** isActive. */
|
|
209
227
|
isActive() {
|
|
@@ -217,4 +235,4 @@ export default class ApiMakerCommandsPool {
|
|
|
217
235
|
}
|
|
218
236
|
flushRunLast = new RunLast(this.flush);
|
|
219
237
|
}
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMtcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29tbWFuZHMtcG9vbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8saUJBQWlCLE1BQU0sMEJBQTBCLENBQUE7QUFDeEQsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDaEYsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUEsQ0FBQyxtQ0FBbUM7QUFDdkUsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUEsQ0FBQyxtQ0FBbUM7QUFDekYsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ25DLE9BQU8sVUFBVSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hDLE9BQU8sb0JBQW9CLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFFdkQ7Ozs7O0dBS0c7QUFFSCwySkFBMko7QUFFM0osTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBRWpCLDRCQUE0QjtBQUM1QixNQUFNLENBQUMsT0FBTyxPQUFPLG9CQUFvQjtJQUN2QyxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDL0IsSUFBSSxJQUFJLENBQUE7UUFFUixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFBO1lBQ2pDLElBQUksQ0FBQyxpQkFB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QUN6QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7YUFDakUsQ0FBQyxDQUFBO1lBQ0YsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFDLENBQUMsQ0FBQTtZQUU5RSxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFlBQVksQ0FBQTtZQUVoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQTtZQUNqQyxDQUFDO1lBRUQsS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBQyxDQUFDLENBQUE7UUFDeEUsQ0FBQztRQUVELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELFlBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEFwaSBmcm9tIFwiLi9hcGkuanNcIlxuaW1wb3J0IENvbW1hbmRTdWJtaXREYXRhIGZyb20gXCIuL2NvbW1hbmQtc3VibWl0LWRhdGEuanNcIlxuaW1wb3J0IEN1c3RvbUVycm9yIGZyb20gXCIuL2N1c3RvbS1lcnJvci5qc1wiXG5pbXBvcnQgRGVzdHJveUVycm9yIGZyb20gXCIuL2Rlc3Ryb3ktZXJyb3IuanNcIlxuaW1wb3J0IERlc2VyaWFsaXplciBmcm9tIFwiLi9kZXNlcmlhbGl6ZXIuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IGV2ZW50cyBmcm9tIFwiLi9ldmVudHMuanNcIlxuaW1wb3J0IEZvcm1EYXRhT2JqZWN0aXplciBmcm9tIFwiZm9ybS1kYXRhLW9iamVjdGl6ZXJcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IFJ1bkxhc3QgZnJvbSBcIi4vcnVuLWxhc3QuanNcIlxuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcIi4vc2VyaWFsaXplci5qc1wiXG5pbXBvcnQgU2Vzc2lvblN0YXR1c1VwZGF0ZXIgZnJvbSBcIi4vc2Vzc2lvbi1zdGF0dXMtdXBkYXRlci5qc1wiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gXCIuL3ZhbGlkYXRpb24tZXJyb3IuanNcIlxuaW1wb3J0IHtWYWxpZGF0aW9uRXJyb3JzfSBmcm9tIFwiLi92YWxpZGF0aW9uLWVycm9ycy5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29tbWFuZERhdGFUeXBlXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZXNvbHZlXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZWplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGFja1xuICovXG5cbi8qKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXToge1trZXk6IG51bWJlcl06IHthcmdzOiBvYmplY3QsIHByaW1hcnlfa2V5OiBudW1iZXIgfCBzdHJpbmcsIGlkOiBudW1iZXJ9fX19fX0gUG9vbERhdGFUeXBlICovXG5cbmNvbnN0IHNoYXJlZCA9IHt9XG5cbi8qKiBBcGlNYWtlckNvbW1hbmRzUG9vbC4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyQ29tbWFuZHNQb29sIHtcbiAgLyoqIGFkZENvbW1hbmQuICovXG4gIHN0YXRpYyBhZGRDb21tYW5kKGRhdGEsIGFyZ3MgPSB7fSkge1xuICAgIGxldCBwb29sXG5cbiAgICBpZiAoYXJncy5pbnN0YW50KSB7XG4gICAgICBwb29sID0gbmV3IEFwaU1ha2VyQ29tbWFuZHNQb29sKClcbiAgICAgIHBvb2wuZ2xvYmFsUmVxdWVzdERhdGEgPSB7Li4uQXBpTWFrZXJDb21tYW5kc1Bvb2wuY3VycmVudCgpLmdsb2JhbFJlcXVlc3REYXRhfVxuICAgIH0gZWxzZSB7XG4gICAgICBwb29sID0gQXBpTWFrZXJDb21tYW5kc1Bvb2wuY3VycmVudCgpXG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZVJlc3VsdCA9IHBvb2wuYWRkQ29tbWFuZChkYXRhKVxuXG4gICAgaWYgKGFyZ3MuaW5zdGFudCkge1xuICAgICAgcG9vbC5mbHVzaFJ1bkxhc3QucnVuKClcbiAgICB9IGVsc2Uge1xuICAgICAgcG9vbC5mbHVzaFJ1bkxhc3QucXVldWUoKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlUmVzdWx0XG4gIH1cblxuICAvKiogY3VycmVudC4gKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sKSBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sID0gbmV3IEFwaU1ha2VyQ29tbWFuZHNQb29sKClcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyQ29tbWFuZHNQb29sXG4gIH1cblxuICAvKiogZmx1c2guICovXG4gIHN0YXRpYyBmbHVzaCgpIHtcbiAgICBBcGlNYWtlckNvbW1hbmRzUG9vbC5jdXJyZW50KCkuZmx1c2goKVxuICB9XG5cbiAgLyoqIENvbnN0cnVjdG9yLiAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZsdXNoQ291bnQgPSAwXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIsIENvbW1hbmREYXRhVHlwZT59ICovXG4gICAgdGhpcy5wb29sID0ge31cblxuICAgIC8qKiBAdHlwZSB7UG9vbERhdGFUeXBlfSAqL1xuICAgIHRoaXMucG9vbERhdGEgPSB7fVxuXG4gICAgdGhpcy5jdXJyZW50SWQgPSAxXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgdGhpcy5nbG9iYWxSZXF1ZXN0RGF0YSA9IHt9XG4gIH1cblxuICAvKiogYWRkQ29tbWFuZC4gKi9cbiAgYWRkQ29tbWFuZChkYXRhKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBFcnJvcigpLnN0YWNrXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmN1cnJlbnRJZFxuICAgICAgdGhpcy5jdXJyZW50SWQgKz0gMVxuXG4gICAgICBjb25zdCBjb21tYW5kVHlwZSA9IGRhdGEudHlwZVxuICAgICAgY29uc3QgY29tbWFuZE5hbWUgPSBkYXRhLmNvbW1hbmRcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gZGF0YS5jb2xsZWN0aW9uTmFtZVxuXG4gICAgICB0aGlzLnBvb2xbaWRdID0ge3Jlc29sdmUsIHJlamVjdCwgc3RhY2t9XG5cbiAgICAgIGlmICghdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV0pIHRoaXMucG9vbERhdGFbY29tbWFuZFR5cGVdID0ge31cbiAgICAgIGlmICghdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdKSB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV0gPSB7fVxuICAgICAgaWYgKCF0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV1bY29tbWFuZE5hbWVdKSB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV1bY29tbWFuZE5hbWVdID0ge31cblxuICAgICAgbGV0IGFyZ3NcblxuICAgICAgaWYgKGRhdGEuYXJncz8ubm9kZU5hbWUgPT0gXCJGT1JNXCIpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZGF0YS5hcmdzKVxuXG4gICAgICAgIGFyZ3MgPSBGb3JtRGF0YU9iamVjdGl6ZXIudG9PYmplY3QoZm9ybURhdGEpXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuYXJncyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgIGFyZ3MgPSBGb3JtRGF0YU9iamVjdGl6ZXIudG9PYmplY3QoZGF0YS5hcmdzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJncyA9IFNlcmlhbGl6ZXIuc2VyaWFsaXplKGRhdGEuYXJncylcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdW2NvbW1hbmROYW1lXVtpZF0gPSB7XG4gICAgICAgIGFyZ3MsXG4gICAgICAgIHByaW1hcnlfa2V5OiBkYXRhLnByaW1hcnlLZXksXG4gICAgICAgIGlkXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7bnVtYmVyfSAqL1xuICBjb21tYW5kc0NvdW50KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBvb2wpLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnVybFxuICAgKiBAcGFyYW0ge0NvbW1hbmRTdWJtaXREYXRhfSBhcmdzLmNvbW1hbmRTdWJtaXREYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fVxuICAgKi9cbiAgYXN5bmMgc2VuZFJlcXVlc3Qoe2NvbW1hbmRTdWJtaXREYXRhLCB1cmx9KSB7XG4gICAgbGV0IHJlc3BvbnNlXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgaWYgKGNvbW1hbmRTdWJtaXREYXRhLmdldEZpbGVzQ291bnQoKSA+IDApIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBBcGkucmVxdWVzdExvY2FsKHtwYXRoOiB1cmwsIG1ldGhvZDogXCJQT1NUXCIsIHJhd0RhdGE6IGNvbW1hbmRTdWJtaXREYXRhLmdldEZvcm1EYXRhKCl9KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgQXBpLnJlcXVlc3RMb2NhbCh7cGF0aDogdXJsLCBtZXRob2Q6IFwiUE9TVFwiLCBkYXRhOiBjb21tYW5kU3VibWl0RGF0YS5nZXRKc29uRGF0YSgpfSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzID09PSBmYWxzZSAmJiByZXNwb25zZS50eXBlID09IFwiaW52YWxpZF9hdXRoZW50aWNpdHlfdG9rZW5cIikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkludmFsaWQgYXV0aGVudGljaXR5IHRva2VuIC0gdHJ5IGFnYWluXCIpXG4gICAgICAgIGF3YWl0IFNlc3Npb25TdGF0dXNVcGRhdGVyLmN1cnJlbnQoKS51cGRhdGVTZXNzaW9uU3RhdHVzKCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGNvbnRpbnVlIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRudCBzdWNjZXNzZnVsbHkgZXhlY3V0ZSByZXF1ZXN0XCIpXG4gIH1cblxuICAvKiogZmx1c2guICovXG4gIGZsdXNoID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLmNvbW1hbmRzQ291bnQoKSA9PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UG9vbCA9IHRoaXMucG9vbFxuICAgIGNvbnN0IGN1cnJlbnRQb29sRGF0YSA9IHRoaXMucG9vbERhdGFcblxuICAgIHRoaXMucG9vbCA9IHt9XG4gICAgdGhpcy5wb29sRGF0YSA9IHt9XG4gICAgdGhpcy5mbHVzaENvdW50KytcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWJtaXREYXRhID0ge3Bvb2w6IGN1cnJlbnRQb29sRGF0YX1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsUmVxdWVzdERhdGEpLmxlbmd0aCA+IDApXG4gICAgICAgIHN1Ym1pdERhdGEuZ2xvYmFsID0gdGhpcy5nbG9iYWxSZXF1ZXN0RGF0YVxuXG4gICAgICBjb25zdCBjb21tYW5kU3VibWl0RGF0YSA9IG5ldyBDb21tYW5kU3VibWl0RGF0YShzdWJtaXREYXRhKVxuICAgICAgY29uc3QgdXJsID0gXCIvYXBpX21ha2VyL2NvbW1hbmRzXCJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7Y29tbWFuZFN1Ym1pdERhdGEsIHVybH0pXG5cbiAgICAgIGZvciAoY29uc3QgY29tbWFuZElkIGluIHJlc3BvbnNlLnJlc3BvbnNlcykge1xuICAgICAgICBjb25zdCBjb21tYW5kUmVzcG9uc2UgPSByZXNwb25zZS5yZXNwb25zZXNbY29tbWFuZElkXVxuICAgICAgICBjb25zdCBjb21tYW5kUmVzcG9uc2VEYXRhID0gRGVzZXJpYWxpemVyLnBhcnNlKGNvbW1hbmRSZXNwb25zZS5kYXRhKVxuICAgICAgICBjb25zdCBjb21tYW5kRGF0YSA9IGN1cnJlbnRQb29sW3BhcnNlSW50KGNvbW1hbmRJZCwgMTApXVxuICAgICAgICBjb25zdCByZXNwb25zZVR5cGUgPSBjb21tYW5kUmVzcG9uc2UudHlwZVxuXG4gICAgICAgIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhICYmIHR5cGVvZiBjb21tYW5kUmVzcG9uc2VEYXRhID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBjb25zdCBidWdSZXBvcnRVcmwgPSBkaWcoY29tbWFuZFJlc3BvbnNlRGF0YSwgXCJidWdfcmVwb3J0X3VybFwiKVxuXG4gICAgICAgICAgaWYgKGJ1Z1JlcG9ydFVybCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEJ1ZyByZXBvcnQgVVJMOiAke2J1Z1JlcG9ydFVybH1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZVR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICBjb21tYW5kRGF0YS5yZXNvbHZlKGNvbW1hbmRSZXNwb25zZURhdGEpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEN1c3RvbUVycm9yKFwiQ29tbWFuZCBlcnJvclwiLCB7cmVzcG9uc2U6IGNvbW1hbmRSZXNwb25zZURhdGF9KVxuXG4gICAgICAgICAgZXJyb3Iuc3RhY2sgKz0gXCJcXG5cIlxuICAgICAgICAgIGVycm9yLnN0YWNrICs9IGNvbW1hbmREYXRhLnN0YWNrLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICAgICAgICBjb21tYW5kRGF0YS5yZWplY3QoZXJyb3IpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09IFwiZmFpbGVkXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZFJlc3BvbnNlKGNvbW1hbmREYXRhLCBjb21tYW5kUmVzcG9uc2VEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHJlc3BvbnNlIHR5cGU6ICR7cmVzcG9uc2VUeXBlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5mbHVzaENvdW50LS1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb21tYW5kRGF0YVR5cGV9IGNvbW1hbmREYXRhXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21tYW5kUmVzcG9uc2VEYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY29tbWFuZFJlc3BvbnNlRGF0YS5lcnJvcnNcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY29tbWFuZFJlc3BvbnNlRGF0YS52YWxpZGF0aW9uX2Vycm9yc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGhhbmRsZUZhaWxlZFJlc3BvbnNlKGNvbW1hbmREYXRhLCBjb21tYW5kUmVzcG9uc2VEYXRhKSB7XG4gICAgbGV0IGVycm9yXG5cbiAgICBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YS5lcnJvcl90eXBlID09IFwiZGVzdHJveV9lcnJvclwiKSB7XG4gICAgICBlcnJvciA9IG5ldyBEZXN0cm95RXJyb3IoXCJEZXN0cm95IGZhaWxlZFwiLCB7cmVzcG9uc2U6IGNvbW1hbmRSZXNwb25zZURhdGF9KVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YS5lcnJvcl90eXBlID09IFwidmFsaWRhdGlvbl9lcnJvclwiKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gbmV3IFZhbGlkYXRpb25FcnJvcnMoe1xuICAgICAgICBtb2RlbDogZGlnZyhjb21tYW5kUmVzcG9uc2VEYXRhLCBcIm1vZGVsXCIpLFxuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzOiBkaWdnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwidmFsaWRhdGlvbl9lcnJvcnNcIilcbiAgICAgIH0pXG4gICAgICBlcnJvciA9IG5ldyBWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvbkVycm9ycywge3Jlc3BvbnNlOiBjb21tYW5kUmVzcG9uc2VEYXRhfSlcblxuICAgICAgZXZlbnRzLmVtaXQoXCJvblZhbGlkYXRpb25FcnJvcnNcIiwgdmFsaWRhdGlvbkVycm9ycylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGVycm9yTWVzc2FnZVxuXG4gICAgICBpZiAoIWNvbW1hbmRSZXNwb25zZURhdGEuZXJyb3JzKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiQ29tbWFuZCBmYWlsZWRcIlxuICAgICAgfVxuXG4gICAgICBlcnJvciA9IG5ldyBDdXN0b21FcnJvcihlcnJvck1lc3NhZ2UsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pXG4gICAgfVxuXG4gICAgY29tbWFuZERhdGEucmVqZWN0KGVycm9yKVxuICB9XG5cbiAgLyoqIGlzQWN0aXZlLiAqL1xuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy5jb21tYW5kc0NvdW50KCkgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmZsdXNoQ291bnQgPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZmx1c2hSdW5MYXN0ID0gbmV3IFJ1bkxhc3QodGhpcy5mbHVzaClcbn1cbiJdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMtcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiY29tbWFuZHMtcG9vbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sd0JBQXdCLE1BQU0sd0JBQXdCLENBQUE7QUFDN0QsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxZQUFZLE1BQU0sbUJBQW1CLENBQUEsQ0FBQyxtQ0FBbUM7QUFDaEYsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUEsQ0FBQyxtQ0FBbUM7QUFDdkUsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFBO0FBQ2hDLE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUEsQ0FBQyxtQ0FBbUM7QUFDekYsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ25DLE9BQU8sVUFBVSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hDLE9BQU8sb0JBQW9CLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxlQUFlLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDdkQsT0FBTyxzQkFBc0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUVsRTs7OztHQUlHO0FBRUgsMkpBQTJKO0FBRTNKLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtBQUVqQiw0QkFBNEI7QUFDNUIsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQkFBb0I7SUFDdkMsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQy9CLElBQUksSUFB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QyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQzthQUNqRSxDQUFDLENBQUE7WUFDRixLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQyxDQUFBO1lBRTlFLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksWUFBWSxDQUFBO1lBRWhCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsWUFBWSxHQUFHLGdCQUFnQixDQUFBO1lBQ2pDLENBQUM7WUFFRCxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFDLENBQUMsQ0FBQTtRQUN4RSxDQUFDO1FBRUQsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQXBpIGZyb20gXCIuL2FwaS5qc1wiXG5pbXBvcnQgQXBpTWFrZXJDb21tYW5kRXhlY3V0aW9uIGZyb20gXCIuL2NvbW1hbmQtZXhlY3V0aW9uLmpzXCJcbmltcG9ydCBDb21tYW5kU3VibWl0RGF0YSBmcm9tIFwiLi9jb21tYW5kLXN1Ym1pdC1kYXRhLmpzXCJcbmltcG9ydCBDb25maWcgZnJvbSBcIi4vY29uZmlnLmpzXCJcbmltcG9ydCBDdXN0b21FcnJvciBmcm9tIFwiLi9jdXN0b20tZXJyb3IuanNcIlxuaW1wb3J0IERlc3Ryb3lFcnJvciBmcm9tIFwiLi9kZXN0cm95LWVycm9yLmpzXCJcbmltcG9ydCBEZXNlcmlhbGl6ZXIgZnJvbSBcIi4vZGVzZXJpYWxpemVyLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCB7ZGlnLCBkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcbmltcG9ydCBGb3JtRGF0YU9iamVjdGl6ZXIgZnJvbSBcImZvcm0tZGF0YS1vYmplY3RpemVyXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBSdW5MYXN0IGZyb20gXCIuL3J1bi1sYXN0LmpzXCJcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCIuL3NlcmlhbGl6ZXIuanNcIlxuaW1wb3J0IFNlc3Npb25TdGF0dXNVcGRhdGVyIGZyb20gXCIuL3Nlc3Npb24tc3RhdHVzLXVwZGF0ZXIuanNcIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tIFwiLi92YWxpZGF0aW9uLWVycm9yLmpzXCJcbmltcG9ydCB7VmFsaWRhdGlvbkVycm9yc30gZnJvbSBcIi4vdmFsaWRhdGlvbi1lcnJvcnMuanNcIlxuaW1wb3J0IFdlYnNvY2tldFJlcXVlc3RDbGllbnQgZnJvbSBcIi4vd2Vic29ja2V0LXJlcXVlc3QtY2xpZW50LmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDb21tYW5kRGF0YVR5cGVcbiAqIEBwcm9wZXJ0eSB7QXBpTWFrZXJDb21tYW5kRXhlY3V0aW9ufSBjb21tYW5kRXhlY3V0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RhY2tcbiAqL1xuXG4vKiogQHR5cGVkZWYge3tba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXToge1trZXk6IHN0cmluZ106IHtba2V5OiBudW1iZXJdOiB7YXJnczogb2JqZWN0LCBwcmltYXJ5X2tleTogbnVtYmVyIHwgc3RyaW5nLCBpZDogbnVtYmVyfX19fX19IFBvb2xEYXRhVHlwZSAqL1xuXG5jb25zdCBzaGFyZWQgPSB7fVxuXG4vKiogQXBpTWFrZXJDb21tYW5kc1Bvb2wuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckNvbW1hbmRzUG9vbCB7XG4gIC8qKiBhZGRDb21tYW5kLiAqL1xuICBzdGF0aWMgYWRkQ29tbWFuZChkYXRhLCBhcmdzID0ge30pIHtcbiAgICBsZXQgcG9vbFxuICAgIGNvbnN0IHVzZVdlYnNvY2tldFJlcXVlc3RzID0gQ29uZmlnLmdldFdlYnNvY2tldFJlcXVlc3RzKClcblxuICAgIGlmIChhcmdzLmluc3RhbnQgfHwgdXNlV2Vic29ja2V0UmVxdWVzdHMpIHtcbiAgICAgIHBvb2wgPSBuZXcgQXBpTWFrZXJDb21tYW5kc1Bvb2woKVxuICAgICAgcG9vbC5nbG9iYWxSZXF1ZXN0RGF0YSA9IHsuLi5BcGlNYWtlckNvbW1hbmRzUG9vbC5jdXJyZW50KCkuZ2xvYmFsUmVxdWVzdERhdGF9XG4gICAgICBwb29sLnJlcXVlc3RPcHRpb25zID0gey4uLmFyZ3N9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvb2wgPSBBcGlNYWtlckNvbW1hbmRzUG9vbC5jdXJyZW50KClcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlUmVzdWx0ID0gcG9vbC5hZGRDb21tYW5kKGRhdGEpXG5cbiAgICBpZiAoYXJncy5pbnN0YW50IHx8IHVzZVdlYnNvY2tldFJlcXVlc3RzKSB7XG4gICAgICBwb29sLmZsdXNoUnVuTGFzdC5ydW4oKVxuICAgIH0gZWxzZSB7XG4gICAgICBwb29sLmZsdXNoUnVuTGFzdC5xdWV1ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VSZXN1bHRcbiAgfVxuXG4gIC8qKiBjdXJyZW50LiAqL1xuICBzdGF0aWMgY3VycmVudCgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2wpIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2wgPSBuZXcgQXBpTWFrZXJDb21tYW5kc1Bvb2woKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJDb21tYW5kc1Bvb2xcbiAgfVxuXG4gIC8qKiBmbHVzaC4gKi9cbiAgc3RhdGljIGZsdXNoKCkge1xuICAgIEFwaU1ha2VyQ29tbWFuZHNQb29sLmN1cnJlbnQoKS5mbHVzaCgpXG4gIH1cblxuICAvKiogQ29uc3RydWN0b3IuICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZmx1c2hDb3VudCA9IDBcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgQ29tbWFuZERhdGFUeXBlPn0gKi9cbiAgICB0aGlzLnBvb2wgPSB7fVxuXG4gICAgLyoqIEB0eXBlIHtQb29sRGF0YVR5cGV9ICovXG4gICAgdGhpcy5wb29sRGF0YSA9IHt9XG5cbiAgICB0aGlzLmN1cnJlbnRJZCA9IDFcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICB0aGlzLmdsb2JhbFJlcXVlc3REYXRhID0ge31cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0ge31cbiAgfVxuXG4gIC8qKiBhZGRDb21tYW5kLiAqL1xuICBhZGRDb21tYW5kKGRhdGEpIHtcbiAgICBjb25zdCBzdGFjayA9IEVycm9yKCkuc3RhY2tcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudElkXG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dGlvbiA9IG5ldyBBcGlNYWtlckNvbW1hbmRFeGVjdXRpb24oKVxuICAgIGNvbnN0IGNvbW1hbmRUeXBlID0gZGF0YS50eXBlXG4gICAgY29uc3QgY29tbWFuZE5hbWUgPSBkYXRhLmNvbW1hbmRcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IGRhdGEuY29sbGVjdGlvbk5hbWVcblxuICAgIHRoaXMuY3VycmVudElkICs9IDFcbiAgICB0aGlzLnBvb2xbaWRdID0ge2NvbW1hbmRFeGVjdXRpb24sIHN0YWNrfVxuXG4gICAgaWYgKCF0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXSkgdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV0gPSB7fVxuICAgIGlmICghdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdKSB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV0gPSB7fVxuICAgIGlmICghdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdW2NvbW1hbmROYW1lXSkgdGhpcy5wb29sRGF0YVtjb21tYW5kVHlwZV1bY29sbGVjdGlvbk5hbWVdW2NvbW1hbmROYW1lXSA9IHt9XG5cbiAgICBsZXQgYXJnc1xuXG4gICAgaWYgKGRhdGEuYXJncz8ubm9kZU5hbWUgPT0gXCJGT1JNXCIpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEuYXJncylcblxuICAgICAgYXJncyA9IEZvcm1EYXRhT2JqZWN0aXplci50b09iamVjdChmb3JtRGF0YSlcbiAgICB9IGVsc2UgaWYgKGRhdGEuYXJncyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICBhcmdzID0gRm9ybURhdGFPYmplY3RpemVyLnRvT2JqZWN0KGRhdGEuYXJncylcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IFNlcmlhbGl6ZXIuc2VyaWFsaXplKGRhdGEuYXJncylcbiAgICB9XG5cbiAgICB0aGlzLnBvb2xEYXRhW2NvbW1hbmRUeXBlXVtjb2xsZWN0aW9uTmFtZV1bY29tbWFuZE5hbWVdW2lkXSA9IHtcbiAgICAgIGFyZ3MsXG4gICAgICBwcmltYXJ5X2tleTogZGF0YS5wcmltYXJ5S2V5LFxuICAgICAgaWRcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZEV4ZWN1dGlvblxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtudW1iZXJ9ICovXG4gIGNvbW1hbmRzQ291bnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucG9vbCkubGVuZ3RoXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudXJsXG4gICAqIEBwYXJhbSB7Q29tbWFuZFN1Ym1pdERhdGF9IGFyZ3MuY29tbWFuZFN1Ym1pdERhdGFcbiAgICogQHBhcmFtIHtBcGlNYWtlckNvbW1hbmRFeGVjdXRpb259IFthcmdzLmNvbW1hbmRFeGVjdXRpb25dXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fVxuICAgKi9cbiAgYXN5bmMgc2VuZFJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KSB7XG4gICAgaWYgKENvbmZpZy5nZXRXZWJzb2NrZXRSZXF1ZXN0cygpICYmIGNvbW1hbmRTdWJtaXREYXRhLmdldEZpbGVzQ291bnQoKSA9PSAwKSB7XG4gICAgICByZXR1cm4gYXdhaXQgV2Vic29ja2V0UmVxdWVzdENsaWVudC5jdXJyZW50KCkucGVyZm9ybSh7XG4gICAgICAgIGNhY2hlUmVzcG9uc2U6IHRoaXMucmVxdWVzdE9wdGlvbnMuY2FjaGVSZXNwb25zZSxcbiAgICAgICAgZ2xvYmFsOiB0aGlzLmdsb2JhbFJlcXVlc3REYXRhLFxuICAgICAgICBvbkxvZzogKG1lc3NhZ2UpID0+IGNvbW1hbmRFeGVjdXRpb24/LmFkZExvZyhtZXNzYWdlKSxcbiAgICAgICAgb25Qcm9ncmVzczogKHByb2dyZXNzRGF0YSkgPT4gY29tbWFuZEV4ZWN1dGlvbj8uc2V0UHJvZ3Jlc3MocHJvZ3Jlc3NEYXRhKSxcbiAgICAgICAgb25SZWNlaXZlZDogKHJlY2VpdmVkRGF0YSkgPT4gY29tbWFuZEV4ZWN1dGlvbj8uc2V0UmVjZWl2ZWQocmVjZWl2ZWREYXRhKSxcbiAgICAgICAgcmVxdWVzdDogY29tbWFuZFN1Ym1pdERhdGEuZ2V0SnNvbkRhdGEoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICBpZiAoY29tbWFuZFN1Ym1pdERhdGEuZ2V0RmlsZXNDb3VudCgpID4gMCkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IEFwaS5yZXF1ZXN0TG9jYWwoe3BhdGg6IHVybCwgbWV0aG9kOiBcIlBPU1RcIiwgcmF3RGF0YTogY29tbWFuZFN1Ym1pdERhdGEuZ2V0Rm9ybURhdGEoKX0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBBcGkucmVxdWVzdExvY2FsKHtwYXRoOiB1cmwsIG1ldGhvZDogXCJQT1NUXCIsIGRhdGE6IGNvbW1hbmRTdWJtaXREYXRhLmdldEpzb25EYXRhKCl9KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgPT09IGZhbHNlICYmIHJlc3BvbnNlLnR5cGUgPT0gXCJpbnZhbGlkX2F1dGhlbnRpY2l0eV90b2tlblwiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW52YWxpZCBhdXRoZW50aWNpdHkgdG9rZW4gLSB0cnkgYWdhaW5cIilcbiAgICAgICAgYXdhaXQgU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpLnVwZGF0ZVNlc3Npb25TdGF0dXMoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgY29udGludWUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250aW51ZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG50IHN1Y2Nlc3NmdWxseSBleGVjdXRlIHJlcXVlc3RcIilcbiAgfVxuXG4gIC8qKiBmbHVzaC4gKi9cbiAgZmx1c2ggPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY29tbWFuZHNDb3VudCgpID09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRQb29sID0gdGhpcy5wb29sXG4gICAgY29uc3QgY3VycmVudFBvb2xEYXRhID0gdGhpcy5wb29sRGF0YVxuXG4gICAgdGhpcy5wb29sID0ge31cbiAgICB0aGlzLnBvb2xEYXRhID0ge31cbiAgICB0aGlzLmZsdXNoQ291bnQrK1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Ym1pdERhdGEgPSB7cG9vbDogY3VycmVudFBvb2xEYXRhfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5nbG9iYWxSZXF1ZXN0RGF0YSkubGVuZ3RoID4gMClcbiAgICAgICAgc3VibWl0RGF0YS5nbG9iYWwgPSB0aGlzLmdsb2JhbFJlcXVlc3REYXRhXG5cbiAgICAgIGNvbnN0IGNvbW1hbmRTdWJtaXREYXRhID0gbmV3IENvbW1hbmRTdWJtaXREYXRhKHN1Ym1pdERhdGEpXG4gICAgICBjb25zdCB1cmwgPSBcIi9hcGlfbWFrZXIvY29tbWFuZHNcIlxuICAgICAgY29uc3QgY29tbWFuZEV4ZWN1dGlvbiA9IE9iamVjdC52YWx1ZXMoY3VycmVudFBvb2wpWzBdPy5jb21tYW5kRXhlY3V0aW9uXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe2NvbW1hbmRFeGVjdXRpb24sIGNvbW1hbmRTdWJtaXREYXRhLCB1cmx9KVxuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1hbmRJZCBpbiByZXNwb25zZS5yZXNwb25zZXMpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlID0gcmVzcG9uc2UucmVzcG9uc2VzW2NvbW1hbmRJZF1cbiAgICAgICAgY29uc3QgY29tbWFuZFJlc3BvbnNlRGF0YSA9IERlc2VyaWFsaXplci5wYXJzZShjb21tYW5kUmVzcG9uc2UuZGF0YSlcbiAgICAgICAgY29uc3QgY29tbWFuZERhdGEgPSBjdXJyZW50UG9vbFtwYXJzZUludChjb21tYW5kSWQsIDEwKV1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gY29tbWFuZFJlc3BvbnNlLnR5cGVcblxuICAgICAgICBpZiAoY29tbWFuZFJlc3BvbnNlRGF0YSAmJiB0eXBlb2YgY29tbWFuZFJlc3BvbnNlRGF0YSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgY29uc3QgYnVnUmVwb3J0VXJsID0gZGlnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwiYnVnX3JlcG9ydF91cmxcIilcblxuICAgICAgICAgIGlmIChidWdSZXBvcnRVcmwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBCdWcgcmVwb3J0IFVSTDogJHtidWdSZXBvcnRVcmx9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2VUeXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgY29tbWFuZERhdGEuY29tbWFuZEV4ZWN1dGlvbi5yZXNvbHZlKGNvbW1hbmRSZXNwb25zZURhdGEpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEN1c3RvbUVycm9yKFwiQ29tbWFuZCBlcnJvclwiLCB7cmVzcG9uc2U6IGNvbW1hbmRSZXNwb25zZURhdGF9KVxuXG4gICAgICAgICAgZXJyb3Iuc3RhY2sgKz0gXCJcXG5cIlxuICAgICAgICAgIGVycm9yLnN0YWNrICs9IGNvbW1hbmREYXRhLnN0YWNrLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICAgICAgICBjb21tYW5kRGF0YS5jb21tYW5kRXhlY3V0aW9uLnJlamVjdChlcnJvcilcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT0gXCJmYWlsZWRcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkUmVzcG9uc2UoY29tbWFuZERhdGEsIGNvbW1hbmRSZXNwb25zZURhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgcmVzcG9uc2UgdHlwZTogJHtyZXNwb25zZVR5cGV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmZsdXNoQ291bnQtLVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbW1hbmREYXRhVHlwZX0gY29tbWFuZERhdGFcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbW1hbmRSZXNwb25zZURhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmRSZXNwb25zZURhdGEuZXJyb3JfdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yc1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjb21tYW5kUmVzcG9uc2VEYXRhLnZhbGlkYXRpb25fZXJyb3JzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgaGFuZGxlRmFpbGVkUmVzcG9uc2UoY29tbWFuZERhdGEsIGNvbW1hbmRSZXNwb25zZURhdGEpIHtcbiAgICBsZXQgZXJyb3JcblxuICAgIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGUgPT0gXCJkZXN0cm95X2Vycm9yXCIpIHtcbiAgICAgIGVycm9yID0gbmV3IERlc3Ryb3lFcnJvcihcIkRlc3Ryb3kgZmFpbGVkXCIsIHtyZXNwb25zZTogY29tbWFuZFJlc3BvbnNlRGF0YX0pXG4gICAgfSBlbHNlIGlmIChjb21tYW5kUmVzcG9uc2VEYXRhLmVycm9yX3R5cGUgPT0gXCJ2YWxpZGF0aW9uX2Vycm9yXCIpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvcnMgPSBuZXcgVmFsaWRhdGlvbkVycm9ycyh7XG4gICAgICAgIG1vZGVsOiBkaWdnKGNvbW1hbmRSZXNwb25zZURhdGEsIFwibW9kZWxcIiksXG4gICAgICAgIHZhbGlkYXRpb25FcnJvcnM6IGRpZ2coY29tbWFuZFJlc3BvbnNlRGF0YSwgXCJ2YWxpZGF0aW9uX2Vycm9yc1wiKVxuICAgICAgfSlcbiAgICAgIGVycm9yID0gbmV3IFZhbGlkYXRpb25FcnJvcih2YWxpZGF0aW9uRXJyb3JzLCB7cmVzcG9uc2U6IGNvbW1hbmRSZXNwb25zZURhdGF9KVxuXG4gICAgICBldmVudHMuZW1pdChcIm9uVmFsaWRhdGlvbkVycm9yc1wiLCB2YWxpZGF0aW9uRXJyb3JzKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlXG5cbiAgICAgIGlmICghY29tbWFuZFJlc3BvbnNlRGF0YS5lcnJvcnMpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJDb21tYW5kIGZhaWxlZFwiXG4gICAgICB9XG5cbiAgICAgIGVycm9yID0gbmV3IEN1c3RvbUVycm9yKGVycm9yTWVzc2FnZSwge3Jlc3BvbnNlOiBjb21tYW5kUmVzcG9uc2VEYXRhfSlcbiAgICB9XG5cbiAgICBjb21tYW5kRGF0YS5jb21tYW5kRXhlY3V0aW9uLnJlamVjdChlcnJvcilcbiAgfVxuXG4gIC8qKiBpc0FjdGl2ZS4gKi9cbiAgaXNBY3RpdmUoKSB7XG4gICAgaWYgKHRoaXMuY29tbWFuZHNDb3VudCgpID4gMCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbHVzaENvdW50ID4gMCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZsdXNoUnVuTGFzdCA9IG5ldyBSdW5MYXN0KHRoaXMuZmx1c2gpXG59XG4iXX0=
|