@datagrok-libraries/utils 3.3.2 → 4.0.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/package.json +1 -1
- package/css/file-input.css +0 -32
- package/css/history-input.css +0 -27
- package/css/history-panel.css +0 -57
- package/css/pipeline-view.css +0 -13
- package/css/rich-function-view.css +0 -4
- package/src/computation-view.d.ts +0 -78
- package/src/computation-view.d.ts.map +0 -1
- package/src/computation-view.js +0 -157
- package/src/function-view.d.ts +0 -226
- package/src/function-view.d.ts.map +0 -1
- package/src/function-view.js +0 -384
- package/src/history-utils.d.ts +0 -65
- package/src/history-utils.d.ts.map +0 -1
- package/src/history-utils.js +0 -212
- package/src/pipeline-view.d.ts +0 -40
- package/src/pipeline-view.d.ts.map +0 -1
- package/src/pipeline-view.js +0 -178
- package/src/rich-function-view.d.ts +0 -55
- package/src/rich-function-view.d.ts.map +0 -1
- package/src/rich-function-view.js +0 -571
- package/src/shared-components/file-input.d.ts +0 -23
- package/src/shared-components/file-input.d.ts.map +0 -1
- package/src/shared-components/file-input.js +0 -133
- package/src/shared-components/history-input.d.ts +0 -26
- package/src/shared-components/history-input.d.ts.map +0 -1
- package/src/shared-components/history-input.js +0 -192
- package/src/shared-components/history-panel.d.ts +0 -65
- package/src/shared-components/history-panel.d.ts.map +0 -1
- package/src/shared-components/history-panel.js +0 -502
- package/src/shared-components/ui-utils.d.ts +0 -10
- package/src/shared-components/ui-utils.d.ts.map +0 -1
- package/src/shared-components/ui-utils.js +0 -19
- package/src/validation.d.ts +0 -56
- package/src/validation.d.ts.map +0 -1
- package/src/validation.js +0 -152
package/src/function-view.js
DELETED
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
/* eslint-disable valid-jsdoc */
|
|
11
|
-
/* eslint-disable max-len */
|
|
12
|
-
import * as grok from 'datagrok-api/grok';
|
|
13
|
-
import * as ui from 'datagrok-api/ui';
|
|
14
|
-
import * as DG from 'datagrok-api/dg';
|
|
15
|
-
import { Subject, BehaviorSubject } from 'rxjs';
|
|
16
|
-
import { historyUtils } from './history-utils';
|
|
17
|
-
import { UiUtils } from './shared-components/ui-utils';
|
|
18
|
-
// Getting inital URL user entered with
|
|
19
|
-
const startUrl = new URL(grok.shell.startUri);
|
|
20
|
-
export class FunctionView extends DG.ViewBase {
|
|
21
|
-
/**
|
|
22
|
-
* Constructs a new view using function with the given {@link funcName}. An fully-specified name is expected.
|
|
23
|
-
* Search of the function is async, so async {@link init} function is used.
|
|
24
|
-
* All other functions are called only when initialization is over and {@link this.onFuncCallReady} is emitted.
|
|
25
|
-
* @param funcName Name of DG.Func (either script or package function) to use as view foundation
|
|
26
|
-
* @param options Configuration object for the view.
|
|
27
|
-
*/
|
|
28
|
-
constructor(funcName, options = { historyEnabled: true, isTabbed: false }) {
|
|
29
|
-
super();
|
|
30
|
-
this.funcName = funcName;
|
|
31
|
-
this.options = options;
|
|
32
|
-
this._type = 'function';
|
|
33
|
-
// emitted when after a new FuncCall is linked
|
|
34
|
-
this.funcCallReplaced = new Subject();
|
|
35
|
-
// emitted when after an initial FuncCall is linked
|
|
36
|
-
this.onFuncCallReady = new BehaviorSubject(false);
|
|
37
|
-
/** Export options. Could be overriden partially, using default implementation of each option.
|
|
38
|
-
* @stability Stable
|
|
39
|
-
*/
|
|
40
|
-
this.exportConfig = null;
|
|
41
|
-
this.historyRoot = ui.divV([], { style: { 'justify-content': 'center' } });
|
|
42
|
-
/**
|
|
43
|
-
* Default export filename generation method.
|
|
44
|
-
* It automatically replaces all symbols unsupported by Windows filesystem.
|
|
45
|
-
* @param format A format listed in {@link defaultSupportedExportFormats}.
|
|
46
|
-
* @stability Stable
|
|
47
|
-
*/
|
|
48
|
-
this.defaultExportFilename = (format) => {
|
|
49
|
-
return `${this.name} - ${new Date().toLocaleString('en-US').replaceAll(/:|\//g, '-')}.${this.exportConfig.supportedExtensions[format]}`;
|
|
50
|
-
};
|
|
51
|
-
this.defaultSupportedExportExtensions = () => {
|
|
52
|
-
return {
|
|
53
|
-
'Excel': 'xlsx'
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
this.defaultSupportedExportFormats = () => {
|
|
57
|
-
return ['Excel'];
|
|
58
|
-
};
|
|
59
|
-
this.box = true;
|
|
60
|
-
// Changing view and building IO are reasonable only after FuncCall is linked
|
|
61
|
-
this.subs.push(this.onFuncCallReady.subscribe({
|
|
62
|
-
complete: () => __awaiter(this, void 0, void 0, function* () {
|
|
63
|
-
this.changeViewName(this.funcCall.func.friendlyName);
|
|
64
|
-
this.build();
|
|
65
|
-
if (this.getStartId()) {
|
|
66
|
-
yield this.onBeforeLoadRun();
|
|
67
|
-
this.lastCall = this.funcCall;
|
|
68
|
-
yield this.onAfterLoadRun(this.funcCall);
|
|
69
|
-
this.setAsLoaded();
|
|
70
|
-
}
|
|
71
|
-
})
|
|
72
|
-
}));
|
|
73
|
-
this.init();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Changes the name of the view. This method also deals with rare bug when view name is not updated after change.
|
|
77
|
-
* @param newName New name for the view
|
|
78
|
-
*/
|
|
79
|
-
changeViewName(newName) {
|
|
80
|
-
var _a;
|
|
81
|
-
// TODO: Find a reproducible sample of the bug
|
|
82
|
-
this.name = newName;
|
|
83
|
-
(_a = document.querySelector('div.d4-ribbon-name')) === null || _a === void 0 ? void 0 : _a.replaceChildren(ui.span([newName]));
|
|
84
|
-
}
|
|
85
|
-
getStartId() {
|
|
86
|
-
// To prevent loading same ID on opening different package,
|
|
87
|
-
// we should check if we have already loaded run by this ID
|
|
88
|
-
//@ts-ignore
|
|
89
|
-
return (!grok.shell.getVar('isLoaded')) ? startUrl.searchParams.get('id') : undefined;
|
|
90
|
-
}
|
|
91
|
-
setAsLoaded() {
|
|
92
|
-
// @ts-ignore
|
|
93
|
-
return grok.shell.setVar('isLoaded', true);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get current function call of the view
|
|
97
|
-
* @returns The actual funccall associated with the view
|
|
98
|
-
* @stability Stable
|
|
99
|
-
*/
|
|
100
|
-
get funcCall() {
|
|
101
|
-
return this._funcCall;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get Func of the view
|
|
105
|
-
* @returns The actual func associated with the view
|
|
106
|
-
* @stability Stable
|
|
107
|
-
*/
|
|
108
|
-
get func() {
|
|
109
|
-
var _a;
|
|
110
|
-
return (_a = this.funcCall) === null || _a === void 0 ? void 0 : _a.func;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Get data of last call of associated function
|
|
114
|
-
* @returns The actual func associated with the view
|
|
115
|
-
* @stability Stable
|
|
116
|
-
*/
|
|
117
|
-
get lastCall() {
|
|
118
|
-
return this._lastCall;
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Set data of last call of associated function
|
|
122
|
-
* @stability Stable
|
|
123
|
-
*/
|
|
124
|
-
set lastCall(lastCall) {
|
|
125
|
-
this._lastCall = lastCall;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* View type
|
|
129
|
-
* @stability Stable
|
|
130
|
-
*/
|
|
131
|
-
get type() {
|
|
132
|
-
return this._type;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Links FuncCall to the view. In addition, sets "path" and "name" properties to corresponding ones.
|
|
136
|
-
* After linking, emits {@link this.funcCallReplaced} event.
|
|
137
|
-
* @param funcCall The actual funccall to be associated with the view
|
|
138
|
-
* @stability Stable
|
|
139
|
-
*/
|
|
140
|
-
linkFunccall(funcCall) {
|
|
141
|
-
var _a, _b, _c;
|
|
142
|
-
const isPreviousHistorical = (_a = this._funcCall) === null || _a === void 0 ? void 0 : _a.options['isHistorical'];
|
|
143
|
-
this._funcCall = funcCall;
|
|
144
|
-
if (!this.options.isTabbed) {
|
|
145
|
-
if (funcCall.options['isHistorical']) {
|
|
146
|
-
if (!isPreviousHistorical)
|
|
147
|
-
this.changeViewName(`${this.name} — ${(_b = funcCall.options['title']) !== null && _b !== void 0 ? _b : new Date(funcCall.started.toString()).toLocaleString('en-us', { month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' })}`);
|
|
148
|
-
else
|
|
149
|
-
this.changeViewName(`${this.name.substring(0, (this.name.indexOf(' — ') > 0) ? this.name.indexOf(' — ') : undefined)} — ${(_c = funcCall.options['title']) !== null && _c !== void 0 ? _c : new Date(funcCall.started.toString()).toLocaleString('en-us', { month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' })}`);
|
|
150
|
-
this.path = `?id=${this._funcCall.id}`;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
this.path = ``;
|
|
154
|
-
this.changeViewName(`${this.name.substring(0, (this.name.indexOf(' — ') > 0) ? this.name.indexOf(' — ') : undefined)}`);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
this.funcCallReplaced.next(true);
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Method loads corresponding FuncCall from DB if "id" param is provided in URL.
|
|
161
|
-
* @stability Stable
|
|
162
|
-
*/
|
|
163
|
-
loadFuncCallById() {
|
|
164
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
165
|
-
ui.setUpdateIndicator(this.root, true);
|
|
166
|
-
const runId = this.getStartId();
|
|
167
|
-
if (runId && !this.options.isTabbed) {
|
|
168
|
-
this.linkFunccall(yield historyUtils.loadRun(runId));
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
const func = yield grok.functions.eval(this.funcName);
|
|
172
|
-
this.linkFunccall(func.prepare({}));
|
|
173
|
-
}
|
|
174
|
-
ui.setUpdateIndicator(this.root, false);
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Method for any async logic that could not be placed in the constructor directly.
|
|
179
|
-
* It is only called in the constructor, but not awaited.
|
|
180
|
-
* A soon as {@link this.funcCall} is set, {@link this.onFuncCallReady} is emitted.
|
|
181
|
-
* @stability Stable
|
|
182
|
-
*/
|
|
183
|
-
init() {
|
|
184
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
185
|
-
yield this.loadFuncCallById();
|
|
186
|
-
this.onFuncCallReady.complete();
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Override to create a fully custom UI including ribbon menus and panels
|
|
191
|
-
* @stability Stable
|
|
192
|
-
*/
|
|
193
|
-
build() {
|
|
194
|
-
ui.empty(this.root);
|
|
195
|
-
this.root.appendChild(this.buildIO());
|
|
196
|
-
if (this.options.historyEnabled)
|
|
197
|
-
this.buildHistoryBlock();
|
|
198
|
-
this.buildRibbonMenu();
|
|
199
|
-
this.buildRibbonPanels();
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Override to create a custom historical runs control.
|
|
203
|
-
* @returns The HTMLElement with history block UI
|
|
204
|
-
* @stability Stable
|
|
205
|
-
*/
|
|
206
|
-
buildHistoryBlock() {
|
|
207
|
-
const newHistoryBlock = UiUtils.historyPanel(this.func);
|
|
208
|
-
this.subs.push(newHistoryBlock.onRunChosen.subscribe((id) => __awaiter(this, void 0, void 0, function* () { return this.linkFunccall(yield this.loadRun(id)); })));
|
|
209
|
-
ui.empty(this.historyRoot);
|
|
210
|
-
this.historyRoot.style.removeProperty('justify-content');
|
|
211
|
-
this.historyRoot.style.width = '100%';
|
|
212
|
-
this.historyRoot.append(newHistoryBlock.root);
|
|
213
|
-
return newHistoryBlock.root;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Looks for {@link supportedExportFormats} members and creates ribbon panel
|
|
217
|
-
* @returns The HTMLElements of ribbonPanels
|
|
218
|
-
* @stability Stable
|
|
219
|
-
*/
|
|
220
|
-
buildRibbonPanels() {
|
|
221
|
-
var _a;
|
|
222
|
-
const newRibbonPanels = [
|
|
223
|
-
[...(this.exportConfig && this.exportConfig.supportedFormats.length > 0) ? [ui.divH([
|
|
224
|
-
ui.comboPopup(ui.iconFA('arrow-to-bottom'), this.exportConfig.supportedFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download(this.exportConfig.filename(format), yield this.exportConfig.export(format)); })),
|
|
225
|
-
])] : []
|
|
226
|
-
]
|
|
227
|
-
];
|
|
228
|
-
if ((_a = this.func) === null || _a === void 0 ? void 0 : _a.id) {
|
|
229
|
-
const historyButton = ui.iconFA('history', () => {
|
|
230
|
-
grok.shell.windows.showProperties = !grok.shell.windows.showProperties;
|
|
231
|
-
historyButton.classList.toggle('d4-current');
|
|
232
|
-
grok.shell.o = this.historyRoot;
|
|
233
|
-
});
|
|
234
|
-
historyButton.classList.add('d4-toggle-button');
|
|
235
|
-
if (grok.shell.windows.showProperties)
|
|
236
|
-
historyButton.classList.add('d4-current');
|
|
237
|
-
newRibbonPanels.push([
|
|
238
|
-
historyButton
|
|
239
|
-
]);
|
|
240
|
-
}
|
|
241
|
-
this.setRibbonPanels(newRibbonPanels);
|
|
242
|
-
return newRibbonPanels;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Override to create a custom ribbon menu on the top.
|
|
246
|
-
* @stability Stable
|
|
247
|
-
*/
|
|
248
|
-
buildRibbonMenu() {
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Called before saving the FUncCall results to the historical results, returns the saved call. See also {@link saveRun}.
|
|
252
|
-
* @param callToSave FuncCall object to save
|
|
253
|
-
* @returns Saved FuncCall
|
|
254
|
-
* @stability Stable
|
|
255
|
-
*/
|
|
256
|
-
onBeforeSaveRun(callToSave) {
|
|
257
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Saves the computation results to the historical results, returns the saved call. See also {@link saveRun}.
|
|
261
|
-
* @param savedCall FuncCall object to save
|
|
262
|
-
* @returns Saved FuncCall
|
|
263
|
-
* @stability Stable
|
|
264
|
-
*/
|
|
265
|
-
onAfterSaveRun(savedCall) {
|
|
266
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Saves the computation results to the historical results, returns the saved call. See also {@link loadRun}.
|
|
270
|
-
* @param callToSave FuncCall object to save
|
|
271
|
-
* @returns Saved FuncCall
|
|
272
|
-
* @stability Stable
|
|
273
|
-
*/
|
|
274
|
-
saveRun(callToSave) {
|
|
275
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
276
|
-
yield this.onBeforeSaveRun(callToSave);
|
|
277
|
-
const savedCall = yield historyUtils.saveRun(callToSave);
|
|
278
|
-
savedCall.options['isHistorical'] = false;
|
|
279
|
-
this.linkFunccall(savedCall);
|
|
280
|
-
if (this.options.historyEnabled)
|
|
281
|
-
this.buildHistoryBlock();
|
|
282
|
-
if (!this.options.isTabbed)
|
|
283
|
-
this.path = `?id=${savedCall.id}`;
|
|
284
|
-
yield this.onAfterSaveRun(savedCall);
|
|
285
|
-
return savedCall;
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Called before deleting the computation results from history, returns its id. See also {@link loadRun}.
|
|
290
|
-
* @param callToDelete FuncCall object to be deleted
|
|
291
|
-
* @stability Stable
|
|
292
|
-
*/
|
|
293
|
-
onBeforeDeleteRun(callToDelete) {
|
|
294
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Called after deleting the computation results from history, returns its id. See also {@link loadRun}.
|
|
298
|
-
* @param deletedCall deleted FuncCall value
|
|
299
|
-
* @stability Stable
|
|
300
|
-
*/
|
|
301
|
-
onAfterDeleteRun(deletedCall) {
|
|
302
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Deletes the computation results from history, returns its id. See also {@link loadRun}.
|
|
306
|
-
* @param callToDelete FuncCall object to delete
|
|
307
|
-
* @returns ID of deleted historical run
|
|
308
|
-
* @stability Stable
|
|
309
|
-
*/
|
|
310
|
-
deleteRun(callToDelete) {
|
|
311
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
312
|
-
yield this.onBeforeDeleteRun(callToDelete);
|
|
313
|
-
yield historyUtils.deleteRun(callToDelete);
|
|
314
|
-
yield this.onAfterDeleteRun(callToDelete);
|
|
315
|
-
return callToDelete.id;
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Called before fetching the historical run data in {@link loadRun}.
|
|
320
|
-
* @stability Stable
|
|
321
|
-
*/
|
|
322
|
-
onBeforeLoadRun() {
|
|
323
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Called after fetching the historical run data in {@link loadRun}.
|
|
327
|
-
* @param funcCall FuncCall fetched from server during {@link loadRun}
|
|
328
|
-
* @stability Stable
|
|
329
|
-
*/
|
|
330
|
-
onAfterLoadRun(funcCall) {
|
|
331
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Loads the specified historical run. See also {@link saveRun}.
|
|
335
|
-
* @param funcCallId ID of FuncCall to look for. Get it using {@see funcCall.id} field
|
|
336
|
-
* @returns FuncCall augemented with inputs' and outputs' values
|
|
337
|
-
* @stability Stable
|
|
338
|
-
*/
|
|
339
|
-
loadRun(funcCallId) {
|
|
340
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
341
|
-
yield this.onBeforeLoadRun();
|
|
342
|
-
const pulledRun = yield historyUtils.loadRun(funcCallId);
|
|
343
|
-
this.lastCall = pulledRun;
|
|
344
|
-
yield this.onAfterLoadRun(pulledRun);
|
|
345
|
-
return pulledRun;
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Called before actual computations are made {@link run}.
|
|
350
|
-
* @param funcToCall FuncCall object to be called {@see DG.FuncCall.call()}
|
|
351
|
-
* @stability Stable
|
|
352
|
-
*/
|
|
353
|
-
onBeforeRun(funcToCall) {
|
|
354
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Called after actual computations are made {@link run}.
|
|
358
|
-
* @param runFunc FuncCall object after call method {@see DG.FuncCall.call()}
|
|
359
|
-
* @stability Stable
|
|
360
|
-
*/
|
|
361
|
-
onAfterRun(runFunc) {
|
|
362
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Called to perform actual computations.
|
|
366
|
-
* @stability Stable
|
|
367
|
-
*/
|
|
368
|
-
run() {
|
|
369
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
370
|
-
if (!this.funcCall)
|
|
371
|
-
throw new Error('The correspoding function is not specified');
|
|
372
|
-
yield this.onBeforeRun(this.funcCall);
|
|
373
|
-
const pi = DG.TaskBarProgressIndicator.create('Calculating...');
|
|
374
|
-
this.funcCall.newId();
|
|
375
|
-
yield this.funcCall.call(); // CAUTION: mutates the funcCall field
|
|
376
|
-
pi.close();
|
|
377
|
-
yield this.onAfterRun(this.funcCall);
|
|
378
|
-
// If a view is incapuslated into a tab (e.g. in PipelineView),
|
|
379
|
-
// there is no need to save run till an entire pipeline is over.
|
|
380
|
-
this.lastCall = this.options.isTabbed ? this.funcCall.clone() : yield this.saveRun(this.funcCall);
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJELHVDQUF1QztBQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTlDLE1BQU0sT0FBZ0IsWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBV3BEOzs7Ozs7T0FNRztJQUNILFlBQ1ksUUFBZ0IsRUFDbkIsVUFBd0QsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7UUFFdEcsS0FBSyxFQUFFLENBQUM7UUFIRSxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQXdGO1FBakI5RixVQUFLLEdBQVcsVUFBVSxDQUFDO1FBRXJDLDhDQUE4QztRQUNwQyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWpELG1EQUFtRDtRQUM1QyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFRLEtBQUssQ0FBQyxDQUFDO1FBdUczRDs7VUFFRTtRQUNGLGlCQUFZLEdBaUNELElBQUksQ0FBQztRQXdRTixnQkFBVyxHQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEVB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LE9BQW9COzhEQUFHLENBQUM7S0FBQTtJQUVoRDs7O09BR0c7SUFDVSxHQUFHOztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFFbEYsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7WUFDbEUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQywrREFBK0Q7WUFDL0QsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEcsQ0FBQztLQUFBO0NBdUJGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge1N1YmplY3QsIEJlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2hpc3RvcnlVdGlsc30gZnJvbSAnLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCB7VWlVdGlsc30gZnJvbSAnLi9zaGFyZWQtY29tcG9uZW50cy91aS11dGlscyc7XG5cbi8vIEdldHRpbmcgaW5pdGFsIFVSTCB1c2VyIGVudGVyZWQgd2l0aFxuY29uc3Qgc3RhcnRVcmwgPSBuZXcgVVJMKGdyb2suc2hlbGwuc3RhcnRVcmkpO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25WaWV3IGV4dGVuZHMgREcuVmlld0Jhc2Uge1xuICBwcm90ZWN0ZWQgX2Z1bmNDYWxsPzogREcuRnVuY0NhbGw7XG4gIHByb3RlY3RlZCBfbGFzdENhbGw/OiBERy5GdW5jQ2FsbDtcbiAgcHJvdGVjdGVkIF90eXBlOiBzdHJpbmcgPSAnZnVuY3Rpb24nO1xuXG4gIC8vIGVtaXR0ZWQgd2hlbiBhZnRlciBhIG5ldyBGdW5jQ2FsbCBpcyBsaW5rZWRcbiAgcHJvdGVjdGVkIGZ1bmNDYWxsUmVwbGFjZWQgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuXG4gIC8vIGVtaXR0ZWQgd2hlbiBhZnRlciBhbiBpbml0aWFsIEZ1bmNDYWxsIGlzIGxpbmtlZFxuICBwdWJsaWMgb25GdW5jQ2FsbFJlYWR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxmYWxzZT4oZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHZpZXcgdXNpbmcgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4ge0BsaW5rIGZ1bmNOYW1lfS4gQW4gZnVsbHktc3BlY2lmaWVkIG5hbWUgaXMgZXhwZWN0ZWQuXG4gICAqIFNlYXJjaCBvZiB0aGUgZnVuY3Rpb24gaXMgYXN5bmMsIHNvIGFzeW5jIHtAbGluayBpbml0fSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgKiBBbGwgb3RoZXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQgb25seSB3aGVuIGluaXRpYWxpemF0aW9uIGlzIG92ZXIgYW5kIHtAbGluayB0aGlzLm9uRnVuY0NhbGxSZWFkeX0gaXMgZW1pdHRlZC5cbiAgICogQHBhcmFtIGZ1bmNOYW1lIE5hbWUgb2YgREcuRnVuYyAoZWl0aGVyIHNjcmlwdCBvciBwYWNrYWdlIGZ1bmN0aW9uKSB0byB1c2UgYXMgdmlldyBmb3VuZGF0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgdmlldy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmdW5jTmFtZTogc3RyaW5nLFxuICAgIHB1YmxpYyBvcHRpb25zOiB7aGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sIGlzVGFiYmVkOiBib29sZWFufSA9IHtoaXN0b3J5RW5hYmxlZDogdHJ1ZSwgaXNUYWJiZWQ6IGZhbHNlfVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYm94ID0gdHJ1ZTtcblxuICAgIC8vIENoYW5naW5nIHZpZXcgYW5kIGJ1aWxkaW5nIElPIGFyZSByZWFzb25hYmxlIG9ubHkgYWZ0ZXIgRnVuY0NhbGwgaXMgbGlua2VkXG4gICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICB0aGlzLm9uRnVuY0NhbGxSZWFkeS5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbmdlVmlld05hbWUodGhpcy5mdW5jQ2FsbC5mdW5jLmZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgdGhpcy5idWlsZCgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZ2V0U3RhcnRJZCgpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQmVmb3JlTG9hZFJ1bigpO1xuICAgICAgICAgICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMuZnVuY0NhbGw7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHRoaXMuZnVuY0NhbGwpO1xuXG4gICAgICAgICAgICB0aGlzLnNldEFzTG9hZGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBuYW1lIG9mIHRoZSB2aWV3LiBUaGlzIG1ldGhvZCBhbHNvIGRlYWxzIHdpdGggcmFyZSBidWcgd2hlbiB2aWV3IG5hbWUgaXMgbm90IHVwZGF0ZWQgYWZ0ZXIgY2hhbmdlLlxuICAgKiBAcGFyYW0gbmV3TmFtZSBOZXcgbmFtZSBmb3IgdGhlIHZpZXdcbiAgICovXG4gIHByb3RlY3RlZCBjaGFuZ2VWaWV3TmFtZShuZXdOYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPOiBGaW5kIGEgcmVwcm9kdWNpYmxlIHNhbXBsZSBvZiB0aGUgYnVnXG4gICAgdGhpcy5uYW1lID0gbmV3TmFtZTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuZDQtcmliYm9uLW5hbWUnKT8ucmVwbGFjZUNoaWxkcmVuKHVpLnNwYW4oW25ld05hbWVdKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXJ0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBUbyBwcmV2ZW50IGxvYWRpbmcgc2FtZSBJRCBvbiBvcGVuaW5nIGRpZmZlcmVudCBwYWNrYWdlLFxuICAgIC8vIHdlIHNob3VsZCBjaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIHJ1biBieSB0aGlzIElEXG5cbiAgICAvL0B0cy1pZ25vcmVcbiAgICByZXR1cm4gKCFncm9rLnNoZWxsLmdldFZhcignaXNMb2FkZWQnKSkgPyBzdGFydFVybC5zZWFyY2hQYXJhbXMuZ2V0KCdpZCcpOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHNldEFzTG9hZGVkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBncm9rLnNoZWxsLnNldFZhcignaXNMb2FkZWQnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBmdW5jdGlvbiBjYWxsIG9mIHRoZSB2aWV3XG4gICAqIEByZXR1cm5zIFRoZSBhY3R1YWwgZnVuY2NhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGdldCBmdW5jQ2FsbCgpOiBERy5GdW5jQ2FsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmNDYWxsITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRnVuYyBvZiB0aGUgdmlld1xuICAgKiBAcmV0dXJucyBUaGUgYWN0dWFsIGZ1bmMgYXNzb2NpYXRlZCB3aXRoIHRoZSB2aWV3XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgZ2V0IGZ1bmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY0NhbGw/LmZ1bmM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmdW5jIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIGdldCBsYXN0Q2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdENhbGw7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRhdGEgb2YgbGFzdCBjYWxsIG9mIGFzc29jaWF0ZWQgZnVuY3Rpb25cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBzZXQgbGFzdENhbGwobGFzdENhbGw6IERHLkZ1bmNDYWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbGFzdENhbGwgPSBsYXN0Q2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3IHR5cGVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIC8qKiBFeHBvcnQgb3B0aW9ucy4gQ291bGQgYmUgb3ZlcnJpZGVuIHBhcnRpYWxseSwgdXNpbmcgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBlYWNoIG9wdGlvbi5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIGV4cG9ydENvbmZpZzoge1xuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBleHBvcnQgbG9naWMuXG4gICAgICAqIFRoZXJlIGlzIG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHNpbmNlLCBpbiBnZW5lcmFsLCBleHBvcnQgaXMgZGVwZW5kZW50IG9uIHRoZSBVSS5cbiAgICAgICpcbiAgICAgICogQHJldHVybnMgQmxvYiB3aXRoIGRhdGEgdG8gYmUgZXhwb3J0ZWQgaW50byB0aGUgZmlsZS5cbiAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIGV4cG9ydDogKChmb3JtYXQ6IHN0cmluZykgPT4gUHJvbWlzZTxCbG9iPik7XG5cblxuICAgIC8qKiBGaWxlbmFtZSBmb3IgZXhwb3J0ZWQgZmlsZXMuIE92ZXJyaWRlIGZvciBjdXN0b20gZmlsZW5hbWVzLlxuICAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0RXhwb3J0RmlsZW5hbWV9XG4gICAgICAqIEBwYXJhbSBmb3JtYXQgRm9ybWF0IG5hbWUgdG8gYmUgZXhwb3J0ZWRcbiAgICAgICogQHJldHVybnMgVGhlIGFjdHVhbCBmaWxlbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAgKi9cbiAgICBmaWxlbmFtZTogKChmb3JtYXQ6IHN0cmluZykgPT4gc3RyaW5nKTtcblxuICAgIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBsaXN0IG9mIHN1cHBvcnRlZCBleHBvcnQgZm9ybWF0cy5cbiAgICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIHtAbGluayBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0c31cbiAgICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC5cbiAgICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgZm9ybWF0cyBhdmFpbGFibGUgZm9yIHRoZSBleHBvcnQuXG4gICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAqL1xuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZXhwb3J0ZWQgZm9ybWF0cy5cbiAgICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zfVxuICAgICAgICogVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCBpbiBmaWxlbmFtZXMge0BsaW5rIGV4cG9ydEZpbGVuYW1lfS5cbiAgICAgICAqIEByZXR1cm5zIFRoZSBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzIGFuZCB0aGVpciBleHRlbnNpb25zLlxuICAgICAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAgICAgKi9cbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIExpbmtzIEZ1bmNDYWxsIHRvIHRoZSB2aWV3LiBJbiBhZGRpdGlvbiwgc2V0cyBcInBhdGhcIiBhbmQgXCJuYW1lXCIgcHJvcGVydGllcyB0byBjb3JyZXNwb25kaW5nIG9uZXMuXG4gICAqIEFmdGVyIGxpbmtpbmcsIGVtaXRzIHtAbGluayB0aGlzLmZ1bmNDYWxsUmVwbGFjZWR9IGV2ZW50LlxuICAgKiBAcGFyYW0gZnVuY0NhbGwgVGhlIGFjdHVhbCBmdW5jY2FsbCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZXdcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgbGlua0Z1bmNjYWxsKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGlzUHJldmlvdXNIaXN0b3JpY2FsID0gdGhpcy5fZnVuY0NhbGw/Lm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddO1xuICAgIHRoaXMuX2Z1bmNDYWxsID0gZnVuY0NhbGw7XG5cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5pc1RhYmJlZCkge1xuICAgICAgaWYgKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzSGlzdG9yaWNhbCddKSB7XG4gICAgICAgIGlmICghaXNQcmV2aW91c0hpc3RvcmljYWwpXG4gICAgICAgICAgdGhpcy5jaGFuZ2VWaWV3TmFtZShgJHt0aGlzLm5hbWV9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmNoYW5nZVZpZXdOYW1lKGAke3RoaXMubmFtZS5zdWJzdHJpbmcoMCwgKHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpID4gMCkgPyB0aGlzLm5hbWUuaW5kZXhPZignIOKAlCAnKSA6IHVuZGVmaW5lZCl9IOKAlCAke2Z1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gbmV3IERhdGUoZnVuY0NhbGwuc3RhcnRlZC50b1N0cmluZygpKS50b0xvY2FsZVN0cmluZygnZW4tdXMnLCB7bW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJ251bWVyaWMnfSl9YCk7XG4gICAgICAgIHRoaXMucGF0aCA9IGA/aWQ9JHt0aGlzLl9mdW5jQ2FsbCEuaWR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGF0aCA9IGBgO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlVmlld05hbWUoYCR7dGhpcy5uYW1lLnN1YnN0cmluZygwLCAodGhpcy5uYW1lLmluZGV4T2YoJyDigJQgJykgPiAwKSA/IHRoaXMubmFtZS5pbmRleE9mKCcg4oCUICcpIDogdW5kZWZpbmVkKX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZ1bmNDYWxsUmVwbGFjZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgbG9hZHMgY29ycmVzcG9uZGluZyBGdW5jQ2FsbCBmcm9tIERCIGlmIFwiaWRcIiBwYXJhbSBpcyBwcm92aWRlZCBpbiBVUkwuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkRnVuY0NhbGxCeUlkKCkge1xuICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIHRydWUpO1xuXG4gICAgY29uc3QgcnVuSWQgPSB0aGlzLmdldFN0YXJ0SWQoKTtcbiAgICBpZiAocnVuSWQgJiYgIXRoaXMub3B0aW9ucy5pc1RhYmJlZCkge1xuICAgICAgdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgaGlzdG9yeVV0aWxzLmxvYWRSdW4ocnVuSWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZnVuYzogREcuRnVuYyA9IGF3YWl0IGdyb2suZnVuY3Rpb25zLmV2YWwodGhpcy5mdW5jTmFtZSk7XG4gICAgICB0aGlzLmxpbmtGdW5jY2FsbChmdW5jLnByZXBhcmUoe30pKTtcbiAgICB9XG5cbiAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciBhbnkgYXN5bmMgbG9naWMgdGhhdCBjb3VsZCBub3QgYmUgcGxhY2VkIGluIHRoZSBjb25zdHJ1Y3RvciBkaXJlY3RseS5cbiAgICogSXQgaXMgb25seSBjYWxsZWQgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgbm90IGF3YWl0ZWQuXG4gICAqIEEgc29vbiBhcyB7QGxpbmsgdGhpcy5mdW5jQ2FsbH0gaXMgc2V0LCB7QGxpbmsgdGhpcy5vbkZ1bmNDYWxsUmVhZHl9IGlzIGVtaXR0ZWQuXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIGluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnVuY0NhbGxCeUlkKCk7XG5cbiAgICB0aGlzLm9uRnVuY0NhbGxSZWFkeS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGZ1bGx5IGN1c3RvbSBVSSBpbmNsdWRpbmcgcmliYm9uIG1lbnVzIGFuZCBwYW5lbHNcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGQoKTogdm9pZCB7XG4gICAgdWkuZW1wdHkodGhpcy5yb290KTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5idWlsZElPKCkpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaXN0b3J5RW5hYmxlZCkgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIHRoaXMuYnVpbGRSaWJib25NZW51KCk7XG4gICAgdGhpcy5idWlsZFJpYmJvblBhbmVscygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dC1vdXRwdXQgYmxvY2suXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIHdob2xlIFVJIGV4Y2x1ZGluZyByaWJib24gbWVudXMgYW5kIHBhbmVsc1xuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhYnN0cmFjdCBidWlsZElPKCk6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaGlzdG9yaWNhbCBydW5zIGNvbnRyb2wuXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudCB3aXRoIGhpc3RvcnkgYmxvY2sgVUlcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRIaXN0b3J5QmxvY2soKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IG5ld0hpc3RvcnlCbG9jayA9IFVpVXRpbHMuaGlzdG9yeVBhbmVsKHRoaXMuZnVuYyEpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICBuZXdIaXN0b3J5QmxvY2sub25SdW5DaG9zZW4uc3Vic2NyaWJlKGFzeW5jIChpZCkgPT4gdGhpcy5saW5rRnVuY2NhbGwoYXdhaXQgdGhpcy5sb2FkUnVuKGlkKSkpXG4gICAgKTtcblxuICAgIHVpLmVtcHR5KHRoaXMuaGlzdG9yeVJvb3QpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2p1c3RpZnktY29udGVudCcpO1xuICAgIHRoaXMuaGlzdG9yeVJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5hcHBlbmQobmV3SGlzdG9yeUJsb2NrLnJvb3QpO1xuICAgIHJldHVybiBuZXdIaXN0b3J5QmxvY2sucm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rcyBmb3Ige0BsaW5rIHN1cHBvcnRlZEV4cG9ydEZvcm1hdHN9IG1lbWJlcnMgYW5kIGNyZWF0ZXMgcmliYm9uIHBhbmVsXG4gICAqIEByZXR1cm5zIFRoZSBIVE1MRWxlbWVudHMgb2YgcmliYm9uUGFuZWxzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgYnVpbGRSaWJib25QYW5lbHMoKTogSFRNTEVsZW1lbnRbXVtdIHtcbiAgICBjb25zdCBuZXdSaWJib25QYW5lbHM6IEhUTUxFbGVtZW50W11bXSA9IFtcbiAgICAgIFsuLi4odGhpcy5leHBvcnRDb25maWcgJiYgdGhpcy5leHBvcnRDb25maWcuc3VwcG9ydGVkRm9ybWF0cy5sZW5ndGggPiAwKSA/IFt1aS5kaXZIKFtcbiAgICAgICAgdWkuY29tYm9Qb3B1cChcbiAgICAgICAgICB1aS5pY29uRkEoJ2Fycm93LXRvLWJvdHRvbScpLFxuICAgICAgICAgIHRoaXMuZXhwb3J0Q29uZmlnLnN1cHBvcnRlZEZvcm1hdHMsXG4gICAgICAgICAgYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiBERy5VdGlscy5kb3dubG9hZCh0aGlzLmV4cG9ydENvbmZpZyEuZmlsZW5hbWUoZm9ybWF0KSwgYXdhaXQgdGhpcy5leHBvcnRDb25maWchLmV4cG9ydChmb3JtYXQpKSksXG4gICAgICBdKV06IFtdXG4gICAgICBdXTtcblxuICAgIGlmICh0aGlzLmZ1bmM/LmlkKSB7XG4gICAgICBjb25zdCBoaXN0b3J5QnV0dG9uID0gdWkuaWNvbkZBKCdoaXN0b3J5JywgKCkgPT4ge1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXMgPSAhZ3Jvay5zaGVsbC53aW5kb3dzLnNob3dQcm9wZXJ0aWVzO1xuICAgICAgICBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoJ2Q0LWN1cnJlbnQnKTtcbiAgICAgICAgZ3Jvay5zaGVsbC5vID0gdGhpcy5oaXN0b3J5Um9vdDtcbiAgICAgIH0pO1xuXG4gICAgICBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Q0LXRvZ2dsZS1idXR0b24nKTtcbiAgICAgIGlmIChncm9rLnNoZWxsLndpbmRvd3Muc2hvd1Byb3BlcnRpZXMpIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZCgnZDQtY3VycmVudCcpO1xuXG4gICAgICBuZXdSaWJib25QYW5lbHMucHVzaChbXG4gICAgICAgIGhpc3RvcnlCdXR0b25cbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UmliYm9uUGFuZWxzKG5ld1JpYmJvblBhbmVscyk7XG4gICAgcmV0dXJuIG5ld1JpYmJvblBhbmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gcmliYm9uIG1lbnUgb24gdGhlIHRvcC5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYnVpbGRSaWJib25NZW51KCkge1xuXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzYXZpbmcgdGhlIEZVbmNDYWxsIHJlc3VsdHMgdG8gdGhlIGhpc3RvcmljYWwgcmVzdWx0cywgcmV0dXJucyB0aGUgc2F2ZWQgY2FsbC4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gY2FsbFRvU2F2ZSBGdW5jQ2FsbCBvYmplY3QgdG8gc2F2ZVxuICAgKiBAcmV0dXJucyBTYXZlZCBGdW5jQ2FsbFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVNhdmVSdW4oY2FsbFRvU2F2ZTogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIHRoZSBzYXZlZCBjYWxsLiBTZWUgYWxzbyB7QGxpbmsgc2F2ZVJ1bn0uXG4gICAqIEBwYXJhbSBzYXZlZENhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclNhdmVSdW4oc2F2ZWRDYWxsOiBERy5GdW5jQ2FsbCkgeyB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgdGhlIHNhdmVkIGNhbGwuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb1NhdmUgRnVuY0NhbGwgb2JqZWN0IHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgc2F2ZVJ1bihjYWxsVG9TYXZlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlU2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBjb25zdCBzYXZlZENhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMuc2F2ZVJ1bihjYWxsVG9TYXZlKTtcbiAgICBzYXZlZENhbGwub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSBmYWxzZTtcbiAgICB0aGlzLmxpbmtGdW5jY2FsbChzYXZlZENhbGwpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaXN0b3J5RW5hYmxlZCkgdGhpcy5idWlsZEhpc3RvcnlCbG9jaygpO1xuICAgIGlmICghdGhpcy5vcHRpb25zLmlzVGFiYmVkKSB0aGlzLnBhdGggPSBgP2lkPSR7c2F2ZWRDYWxsLmlkfWA7XG5cbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJTYXZlUnVuKHNhdmVkQ2FsbCk7XG4gICAgcmV0dXJuIHNhdmVkQ2FsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gYmUgZGVsZXRlZFxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGU6IERHLkZ1bmNDYWxsKSB7IH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGRlbGV0aW5nIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGRlbGV0ZWRDYWxsIGRlbGV0ZWQgRnVuY0NhbGwgdmFsdWVcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlckRlbGV0ZVJ1bihkZWxldGVkQ2FsbDogREcuRnVuY0NhbGwpIHsgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIGZyb20gaGlzdG9yeSwgcmV0dXJucyBpdHMgaWQuIFNlZSBhbHNvIHtAbGluayBsb2FkUnVufS5cbiAgICogQHBhcmFtIGNhbGxUb0RlbGV0ZSBGdW5jQ2FsbCBvYmplY3QgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIElEIG9mIGRlbGV0ZWQgaGlzdG9yaWNhbCBydW5cbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZURlbGV0ZVJ1bihjYWxsVG9EZWxldGUpO1xuICAgIGF3YWl0IGhpc3RvcnlVdGlscy5kZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJEZWxldGVSdW4oY2FsbFRvRGVsZXRlKTtcbiAgICByZXR1cm4gY2FsbFRvRGVsZXRlLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZmV0Y2hpbmcgdGhlIGhpc3RvcmljYWwgcnVuIGRhdGEgaW4ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZUxvYWRSdW4oKSB7fVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZmV0Y2hpbmcgdGhlIGhpc3RvcmljYWwgcnVuIGRhdGEgaW4ge0BsaW5rIGxvYWRSdW59LlxuICAgKiBAcGFyYW0gZnVuY0NhbGwgRnVuY0NhbGwgZmV0Y2hlZCBmcm9tIHNlcnZlciBkdXJpbmcge0BsaW5rIGxvYWRSdW59XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cbiAgcHVibGljIGFzeW5jIG9uQWZ0ZXJMb2FkUnVuKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHNwZWNpZmllZCBoaXN0b3JpY2FsIHJ1bi4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LlxuICAgKiBAcGFyYW0gZnVuY0NhbGxJZCBJRCBvZiBGdW5jQ2FsbCB0byBsb29rIGZvci4gR2V0IGl0IHVzaW5nIHtAc2VlIGZ1bmNDYWxsLmlkfSBmaWVsZFxuICAgKiBAcmV0dXJucyBGdW5jQ2FsbCBhdWdlbWVudGVkIHdpdGggaW5wdXRzJyBhbmQgb3V0cHV0cycgdmFsdWVzXG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gKi9cblxuICBwdWJsaWMgYXN5bmMgbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgYXdhaXQgdGhpcy5vbkJlZm9yZUxvYWRSdW4oKTtcbiAgICBjb25zdCBwdWxsZWRSdW4gPSBhd2FpdCBoaXN0b3J5VXRpbHMubG9hZFJ1bihmdW5jQ2FsbElkKTtcbiAgICB0aGlzLmxhc3RDYWxsID0gcHVsbGVkUnVuO1xuICAgIGF3YWl0IHRoaXMub25BZnRlckxvYWRSdW4ocHVsbGVkUnVuKTtcbiAgICByZXR1cm4gcHVsbGVkUnVuO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgYWN0dWFsIGNvbXB1dGF0aW9ucyBhcmUgbWFkZSB7QGxpbmsgcnVufS5cbiAgICogQHBhcmFtIGZ1bmNUb0NhbGwgRnVuY0NhbGwgb2JqZWN0IHRvIGJlIGNhbGxlZCB7QHNlZSBERy5GdW5jQ2FsbC5jYWxsKCl9XG4gICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICovXG4gIHB1YmxpYyBhc3luYyBvbkJlZm9yZVJ1bihmdW5jVG9DYWxsOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICAqIENhbGxlZCBhZnRlciBhY3R1YWwgY29tcHV0YXRpb25zIGFyZSBtYWRlIHtAbGluayBydW59LlxuICAgICogQHBhcmFtIHJ1bkZ1bmMgRnVuY0NhbGwgb2JqZWN0IGFmdGVyIGNhbGwgbWV0aG9kIHtAc2VlIERHLkZ1bmNDYWxsLmNhbGwoKX1cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCkge31cblxuICAvKipcbiAgICAqIENhbGxlZCB0byBwZXJmb3JtIGFjdHVhbCBjb21wdXRhdGlvbnMuXG4gICAgKiBAc3RhYmlsaXR5IFN0YWJsZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIENBVVRJT046IG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSdW4odGhpcy5mdW5jQ2FsbCk7XG5cbiAgICAvLyBJZiBhIHZpZXcgaXMgaW5jYXB1c2xhdGVkIGludG8gYSB0YWIgKGUuZy4gaW4gUGlwZWxpbmVWaWV3KSxcbiAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHNhdmUgcnVuIHRpbGwgYW4gZW50aXJlIHBpcGVsaW5lIGlzIG92ZXIuXG4gICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMub3B0aW9ucy5pc1RhYmJlZCA/IHRoaXMuZnVuY0NhbGwuY2xvbmUoKSA6IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaXN0b3J5Um9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5kaXZWKFtdLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ2NlbnRlcid9fSk7XG5cbiAgLyoqXG4gICAgKiBEZWZhdWx0IGV4cG9ydCBmaWxlbmFtZSBnZW5lcmF0aW9uIG1ldGhvZC5cbiAgICAqIEl0IGF1dG9tYXRpY2FsbHkgcmVwbGFjZXMgYWxsIHN5bWJvbHMgdW5zdXBwb3J0ZWQgYnkgV2luZG93cyBmaWxlc3lzdGVtLlxuICAgICogQHBhcmFtIGZvcm1hdCBBIGZvcm1hdCBsaXN0ZWQgaW4ge0BsaW5rIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRGb3JtYXRzfS5cbiAgICAqIEBzdGFiaWxpdHkgU3RhYmxlXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydEZpbGVuYW1lID0gKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJykucmVwbGFjZUFsbCgvOnxcXC8vZywgJy0nKX0uJHt0aGlzLmV4cG9ydENvbmZpZyEuc3VwcG9ydGVkRXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zOiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAnRXhjZWwnOiAneGxzeCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBkZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cyA9ICgpID0+IHtcbiAgICByZXR1cm4gWydFeGNlbCddO1xuICB9O1xufVxuIl19
|
package/src/history-utils.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
type DateOptions = 'Any time' | 'Today' | 'Yesterday' | 'This week' | 'Last week' | 'This month' | 'Last month' | 'This year' | 'Last year';
|
|
3
|
-
type FilterOptions = {
|
|
4
|
-
text?: string;
|
|
5
|
-
date?: DateOptions;
|
|
6
|
-
author?: DG.User;
|
|
7
|
-
isShared?: boolean;
|
|
8
|
-
};
|
|
9
|
-
export declare namespace historyUtils {
|
|
10
|
-
function loadChildRuns(funcCallId: string): Promise<{
|
|
11
|
-
parentRun: DG.FuncCall;
|
|
12
|
-
childRuns: DG.FuncCall[];
|
|
13
|
-
}>;
|
|
14
|
-
/**
|
|
15
|
-
* Loads a FuncCall with a specified ID. By default, also loads its' inputs/outputs and author.
|
|
16
|
-
* FuncCall is loaded with internal TableInfo structs instead of DG.Dataframe-s.
|
|
17
|
-
* Thus, we should load them separately, and it is time-consuming. If you don't need actual values of DF-s,
|
|
18
|
-
* you can skip DF loading using {@link skipDfLoad} param.
|
|
19
|
-
* @param funcCallId FuncCall ID to load
|
|
20
|
-
* @param skipDfLoad If true, skips replacing TableInfo with th actual dataframe
|
|
21
|
-
* @returns Requested FuncCall
|
|
22
|
-
*/
|
|
23
|
-
function loadRun(funcCallId: string, skipDfLoad?: boolean): Promise<DG.FuncCall>;
|
|
24
|
-
/**
|
|
25
|
-
* Saved given FuncCall.
|
|
26
|
-
* FuncCall is only stores references to actual dataframes. Thus, we should upload them separately
|
|
27
|
-
* @param funcCallcallToSaveId FuncCall to save
|
|
28
|
-
* @returns Saved FuncCall
|
|
29
|
-
*/
|
|
30
|
-
function saveRun(callToSave: DG.FuncCall): Promise<DG.FuncCall>;
|
|
31
|
-
function deleteRun(callToDelete: DG.FuncCall): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Loads all the function call of this function.
|
|
34
|
-
* Designed to pull hstorical runs in fast manner and the call {@link loadRun} with specified run ID.
|
|
35
|
-
* WARNING: FuncCall inputs/outputs fields are not included
|
|
36
|
-
* @param funcId ID of Func which calls we are looking for. Get it using {@link func.id} field
|
|
37
|
-
* @return Promise on array of FuncCalls corresponding to the passed Func ID
|
|
38
|
-
* @stability Deprecated. Script ID changes with every package release, so searching by ID is useless in practice.
|
|
39
|
-
*/
|
|
40
|
-
function pullRuns(funcId: string, filterOptions?: FilterOptions, listOptions?: {
|
|
41
|
-
pageSize?: number;
|
|
42
|
-
pageNumber?: number;
|
|
43
|
-
filter?: string;
|
|
44
|
-
order?: string;
|
|
45
|
-
}): Promise<DG.FuncCall[]>;
|
|
46
|
-
/**
|
|
47
|
-
* Loads all the function call of this function.
|
|
48
|
-
* Designed to pull hstorical runs in fast manner and the call {@link loadRun} with specified run ID.
|
|
49
|
-
* WARNING: FuncCall inputs/outputs fields are not included by default. Use {@link includedFields} to specify fields to load.
|
|
50
|
-
* @param funcName Name of Func which calls we are looking for. Get it using {@link func.name} field
|
|
51
|
-
* @param filterOptions Struct containing filtering options. These options will be passed as valid filtering string to a request.
|
|
52
|
-
* @param listOptions Struct containing listing options.
|
|
53
|
-
* @param includedFields List of fields to include into response. See {@link DG.FuncCall} struct to see possible values. E.g., 'inputs' or 'outputs'
|
|
54
|
-
* @return Promise on array of FuncCalls corresponding to the passed Func ID
|
|
55
|
-
* @stability Stable
|
|
56
|
-
*/
|
|
57
|
-
function pullRunsByName(funcName: string, filterOptions?: FilterOptions[], listOptions?: {
|
|
58
|
-
pageSize?: number;
|
|
59
|
-
pageNumber?: number;
|
|
60
|
-
filter?: string;
|
|
61
|
-
order?: string;
|
|
62
|
-
}, includedFields?: string[]): Promise<DG.FuncCall[]>;
|
|
63
|
-
}
|
|
64
|
-
export {};
|
|
65
|
-
//# sourceMappingURL=history-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"history-utils.d.ts","sourceRoot":"","sources":["history-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,KAAK,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5I,KAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAyBF,yBAAiB,YAAY,CAAC;IAI5B,SAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC;QAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAA;KAAC,CAAC,CAiB7D;IAED;;;;;;;;OAQG;IACH,SAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,UAAQ,wBAyBnE;IAED;;;;;OAKG;IACH,SAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,wBAapD;IAED,SAAsB,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,iBAExD;IAED;;;;;;;KAOC;IACD,SAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,aAAkB,EACjC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,GAC1F,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAUxB;IAED;;;;;;;;;;KAUC;IACD,SAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,aAAa,EAAO,EACnC,WAAW,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAM,EAC3F,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAyDxB;CACF"}
|