@datagrok-libraries/utils 3.3.2 → 4.0.1
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/src/test.d.ts +1 -1
- package/src/test.d.ts.map +1 -1
- package/src/test.js +6 -6
- 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/history-utils.js
DELETED
|
@@ -1,212 +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 max-len */
|
|
11
|
-
/* eslint-disable valid-jsdoc */
|
|
12
|
-
import * as grok from 'datagrok-api/grok';
|
|
13
|
-
import * as DG from 'datagrok-api/dg';
|
|
14
|
-
import wu from 'wu';
|
|
15
|
-
const getSearchStringByPattern = (datePattern) => {
|
|
16
|
-
switch (datePattern) {
|
|
17
|
-
case 'Today':
|
|
18
|
-
return `started > -1d`;
|
|
19
|
-
case 'Yesterday':
|
|
20
|
-
return `started > -2d and started < -1d`;
|
|
21
|
-
case 'Any time':
|
|
22
|
-
return ``;
|
|
23
|
-
case 'Last year':
|
|
24
|
-
return `started > -2y and started < -1y`;
|
|
25
|
-
case 'This year':
|
|
26
|
-
return `started > -1y`;
|
|
27
|
-
case 'Last month':
|
|
28
|
-
return `started > -2m and started < -1m`;
|
|
29
|
-
case 'This month':
|
|
30
|
-
return `started > -1m`;
|
|
31
|
-
case 'Last week':
|
|
32
|
-
return `started > -2w and started < -1w`;
|
|
33
|
-
case 'This week':
|
|
34
|
-
return `started > -1w`;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
export var historyUtils;
|
|
38
|
-
(function (historyUtils) {
|
|
39
|
-
const scriptsCache = {};
|
|
40
|
-
// TODO: add users and groups cache
|
|
41
|
-
function loadChildRuns(funcCallId) {
|
|
42
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
-
const parentRun = yield grok.dapi.functions.calls.allPackageVersions().find(funcCallId);
|
|
44
|
-
parentRun.options['isHistorical'] = true;
|
|
45
|
-
const childRuns = yield grok.dapi.functions.calls.allPackageVersions()
|
|
46
|
-
.filter(`options.parentCallId="${funcCallId}"`).list();
|
|
47
|
-
yield Promise.all(childRuns.map((childRun) => __awaiter(this, void 0, void 0, function* () {
|
|
48
|
-
var _a;
|
|
49
|
-
const id = childRun.func.id;
|
|
50
|
-
// DEALING WITH BUG: https://reddata.atlassian.net/browse/GROK-12464
|
|
51
|
-
const script = (_a = scriptsCache[id]) !== null && _a !== void 0 ? _a : yield grok.dapi.functions.allPackageVersions().find(id);
|
|
52
|
-
if (!scriptsCache[id])
|
|
53
|
-
scriptsCache[id] = script;
|
|
54
|
-
childRun.func = script;
|
|
55
|
-
})));
|
|
56
|
-
return { parentRun, childRuns };
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
historyUtils.loadChildRuns = loadChildRuns;
|
|
60
|
-
/**
|
|
61
|
-
* Loads a FuncCall with a specified ID. By default, also loads its' inputs/outputs and author.
|
|
62
|
-
* FuncCall is loaded with internal TableInfo structs instead of DG.Dataframe-s.
|
|
63
|
-
* Thus, we should load them separately, and it is time-consuming. If you don't need actual values of DF-s,
|
|
64
|
-
* you can skip DF loading using {@link skipDfLoad} param.
|
|
65
|
-
* @param funcCallId FuncCall ID to load
|
|
66
|
-
* @param skipDfLoad If true, skips replacing TableInfo with th actual dataframe
|
|
67
|
-
* @returns Requested FuncCall
|
|
68
|
-
*/
|
|
69
|
-
function loadRun(funcCallId, skipDfLoad = false) {
|
|
70
|
-
var _a;
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const pulledRun = yield grok.dapi.functions.calls.allPackageVersions()
|
|
73
|
-
.include('inputs, outputs, session.user').find(funcCallId);
|
|
74
|
-
const id = pulledRun.func.id;
|
|
75
|
-
// DEALING WITH BUG: https://reddata.atlassian.net/browse/GROK-12464
|
|
76
|
-
const script = (_a = scriptsCache[id]) !== null && _a !== void 0 ? _a : yield grok.dapi.functions.allPackageVersions().find(id);
|
|
77
|
-
if (!scriptsCache[id])
|
|
78
|
-
scriptsCache[id] = script;
|
|
79
|
-
pulledRun.func = script;
|
|
80
|
-
pulledRun.options['isHistorical'] = true;
|
|
81
|
-
if (!skipDfLoad) {
|
|
82
|
-
const dfOutputs = wu(pulledRun.outputParams.values())
|
|
83
|
-
.filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
84
|
-
for (const output of dfOutputs)
|
|
85
|
-
pulledRun.outputs[output.name] = yield grok.dapi.tables.getTable(pulledRun.outputs[output.name]);
|
|
86
|
-
const dfInputs = wu(pulledRun.inputParams.values())
|
|
87
|
-
.filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
88
|
-
for (const input of dfInputs)
|
|
89
|
-
pulledRun.inputs[input.name] = yield grok.dapi.tables.getTable(pulledRun.inputs[input.name]);
|
|
90
|
-
}
|
|
91
|
-
return pulledRun;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
historyUtils.loadRun = loadRun;
|
|
95
|
-
/**
|
|
96
|
-
* Saved given FuncCall.
|
|
97
|
-
* FuncCall is only stores references to actual dataframes. Thus, we should upload them separately
|
|
98
|
-
* @param funcCallcallToSaveId FuncCall to save
|
|
99
|
-
* @returns Saved FuncCall
|
|
100
|
-
*/
|
|
101
|
-
function saveRun(callToSave) {
|
|
102
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
-
const dfOutputs = wu(callToSave.outputParams.values())
|
|
104
|
-
.filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
105
|
-
for (const output of dfOutputs)
|
|
106
|
-
yield grok.dapi.tables.uploadDataFrame(callToSave.outputs[output.name]);
|
|
107
|
-
const dfInputs = wu(callToSave.inputParams.values())
|
|
108
|
-
.filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
109
|
-
for (const input of dfInputs)
|
|
110
|
-
yield grok.dapi.tables.uploadDataFrame(callToSave.inputs[input.name]);
|
|
111
|
-
return yield grok.dapi.functions.calls.allPackageVersions().save(callToSave);
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
historyUtils.saveRun = saveRun;
|
|
115
|
-
function deleteRun(callToDelete) {
|
|
116
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
yield grok.dapi.functions.calls.allPackageVersions().delete(callToDelete);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
historyUtils.deleteRun = deleteRun;
|
|
121
|
-
/**
|
|
122
|
-
* Loads all the function call of this function.
|
|
123
|
-
* Designed to pull hstorical runs in fast manner and the call {@link loadRun} with specified run ID.
|
|
124
|
-
* WARNING: FuncCall inputs/outputs fields are not included
|
|
125
|
-
* @param funcId ID of Func which calls we are looking for. Get it using {@link func.id} field
|
|
126
|
-
* @return Promise on array of FuncCalls corresponding to the passed Func ID
|
|
127
|
-
* @stability Deprecated. Script ID changes with every package release, so searching by ID is useless in practice.
|
|
128
|
-
*/
|
|
129
|
-
function pullRuns(funcId, filterOptions = {}, listOptions = {}) {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
-
let filteringString = `func.id="${funcId}"`;
|
|
132
|
-
filteringString += filterOptions.author ? ` and session.user.id="${filterOptions.author.id}"` : '';
|
|
133
|
-
filteringString += filterOptions.date ? getSearchStringByPattern(filterOptions.date) : '';
|
|
134
|
-
const filter = grok.dapi.functions.calls
|
|
135
|
-
.allPackageVersions()
|
|
136
|
-
.filter(filteringString)
|
|
137
|
-
.include('session.user, options');
|
|
138
|
-
const list = filter.list(listOptions);
|
|
139
|
-
return list;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
historyUtils.pullRuns = pullRuns;
|
|
143
|
-
/**
|
|
144
|
-
* Loads all the function call of this function.
|
|
145
|
-
* Designed to pull hstorical runs in fast manner and the call {@link loadRun} with specified run ID.
|
|
146
|
-
* WARNING: FuncCall inputs/outputs fields are not included by default. Use {@link includedFields} to specify fields to load.
|
|
147
|
-
* @param funcName Name of Func which calls we are looking for. Get it using {@link func.name} field
|
|
148
|
-
* @param filterOptions Struct containing filtering options. These options will be passed as valid filtering string to a request.
|
|
149
|
-
* @param listOptions Struct containing listing options.
|
|
150
|
-
* @param includedFields List of fields to include into response. See {@link DG.FuncCall} struct to see possible values. E.g., 'inputs' or 'outputs'
|
|
151
|
-
* @return Promise on array of FuncCalls corresponding to the passed Func ID
|
|
152
|
-
* @stability Stable
|
|
153
|
-
*/
|
|
154
|
-
function pullRunsByName(funcName, filterOptions = [], listOptions = {}, includedFields = []) {
|
|
155
|
-
var _a;
|
|
156
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
-
let filteringString = ``;
|
|
158
|
-
for (const filterOption of filterOptions) {
|
|
159
|
-
const filterOptionCriteria = [];
|
|
160
|
-
if (filterOption.author)
|
|
161
|
-
filterOptionCriteria.push(`session.user.id="${filterOption.author.id}"`);
|
|
162
|
-
if (filterOption.date)
|
|
163
|
-
filterOptionCriteria.push(getSearchStringByPattern(filterOption.date));
|
|
164
|
-
if (filterOption.isShared)
|
|
165
|
-
filterOptionCriteria.push(`options.isShared="true"`);
|
|
166
|
-
if (filterOption.text) {
|
|
167
|
-
filterOptionCriteria.push(`((options.title like "${filterOption.text}") or (options.annotation like "${filterOption.text}"))`);
|
|
168
|
-
}
|
|
169
|
-
const filterOptionString = filterOptionCriteria.join(' and ');
|
|
170
|
-
if (filterOptionString !== '') {
|
|
171
|
-
if (filteringString === '')
|
|
172
|
-
filteringString += `(${filterOptionString})`;
|
|
173
|
-
else
|
|
174
|
-
filteringString += ` or (${filterOptionString})`;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
if (filteringString !== '')
|
|
178
|
-
filteringString = ` and (${filteringString})`;
|
|
179
|
-
const result = yield grok.dapi.functions.calls
|
|
180
|
-
.allPackageVersions()
|
|
181
|
-
.filter(`func.name="${funcName}"${filteringString}`)
|
|
182
|
-
.include(`${includedFields.join(',')}`)
|
|
183
|
-
.list(listOptions);
|
|
184
|
-
for (const pulledRun of result) {
|
|
185
|
-
const id = pulledRun.func.id;
|
|
186
|
-
const script = (_a = scriptsCache[id]) !== null && _a !== void 0 ? _a : yield grok.dapi.functions.allPackageVersions().find(id);
|
|
187
|
-
if (!scriptsCache[id])
|
|
188
|
-
scriptsCache[id] = script;
|
|
189
|
-
pulledRun.func = script;
|
|
190
|
-
}
|
|
191
|
-
if (includedFields.includes('inputs') || includedFields.includes('func.params')) {
|
|
192
|
-
for (const pulledRun of result) {
|
|
193
|
-
const dfInputs = wu(pulledRun.inputParams.values())
|
|
194
|
-
.filter((input) => input.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
195
|
-
for (const input of dfInputs)
|
|
196
|
-
pulledRun.inputs[input.name] = yield grok.dapi.tables.getTable(pulledRun.inputs[input.name]);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
if (includedFields.includes('outputs') || includedFields.includes('func.params')) {
|
|
200
|
-
for (const pulledRun of result) {
|
|
201
|
-
const dfOutputs = wu(pulledRun.outputParams.values())
|
|
202
|
-
.filter((output) => output.property.propertyType === DG.TYPE.DATA_FRAME);
|
|
203
|
-
for (const output of dfOutputs)
|
|
204
|
-
pulledRun.outputs[output.name] = yield grok.dapi.tables.getTable(pulledRun.outputs[output.name]);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return result;
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
historyUtils.pullRunsByName = pullRunsByName;
|
|
211
|
-
})(historyUtils || (historyUtils = {}));
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBRTFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBV3BCLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7SUFDNUQsUUFBUSxXQUFXLEVBQUU7UUFDckIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxXQUFXO1lBQ2QsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFVBQVU7WUFDYixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssV0FBVztZQUNkLE9BQU8saUNBQWlDLENBQUM7UUFDM0MsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUM7UUFDekIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxpQ0FBaUMsQ0FBQztRQUMzQyxLQUFLLFlBQVk7WUFDZixPQUFPLGVBQWUsQ0FBQztRQUN6QixLQUFLLFdBQVc7WUFDZCxPQUFPLGlDQUFpQyxDQUFDO1FBQzNDLEtBQUssV0FBVztZQUNkLE9BQU8sZUFBZSxDQUFDO0tBQ3hCO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxLQUFXLFlBQVksQ0F3TDVCO0FBeExELFdBQWlCLFlBQVk7SUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBK0IsQ0FBQztJQUNyRCxtQ0FBbUM7SUFFbkMsU0FBc0IsYUFBYSxDQUNqQyxVQUFrQjs7WUFFbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEYs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TUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUNoRzthQUNGO1lBRUQsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ2hGLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxFQUFFO29CQUM5QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQXdCLENBQUM7eUJBQ3hFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDM0UsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTO3dCQUM1QixTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUNwRzthQUNGO1lBRUQsT0FBTyxNQUFNLENBQUM7O0tBQ2Y7SUE5RHFCLDJCQUFjLGlCQThEbkMsQ0FBQTtBQUNILENBQUMsRUF4TGdCLFlBQVksS0FBWixZQUFZLFFBd0w1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcblxudHlwZSBEYXRlT3B0aW9ucyA9ICdBbnkgdGltZScgfCAnVG9kYXknIHwgJ1llc3RlcmRheScgfCAnVGhpcyB3ZWVrJyB8ICdMYXN0IHdlZWsnIHwgJ1RoaXMgbW9udGgnIHwgJ0xhc3QgbW9udGgnIHwgJ1RoaXMgeWVhcicgfCAnTGFzdCB5ZWFyJztcblxudHlwZSBGaWx0ZXJPcHRpb25zID0ge1xuICB0ZXh0Pzogc3RyaW5nLFxuICBkYXRlPzogRGF0ZU9wdGlvbnMsXG4gIGF1dGhvcj86IERHLlVzZXIsXG4gIGlzU2hhcmVkPzogYm9vbGVhbixcbn07XG5cbmNvbnN0IGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybiA9IChkYXRlUGF0dGVybjogRGF0ZU9wdGlvbnMpID0+IHtcbiAgc3dpdGNoIChkYXRlUGF0dGVybikge1xuICBjYXNlICdUb2RheSc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTFkYDtcbiAgY2FzZSAnWWVzdGVyZGF5JzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMmQgYW5kIHN0YXJ0ZWQgPCAtMWRgO1xuICBjYXNlICdBbnkgdGltZSc6XG4gICAgcmV0dXJuIGBgO1xuICBjYXNlICdMYXN0IHllYXInOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0yeSBhbmQgc3RhcnRlZCA8IC0xeWA7XG4gIGNhc2UgJ1RoaXMgeWVhcic6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTF5YDtcbiAgY2FzZSAnTGFzdCBtb250aCc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTJtIGFuZCBzdGFydGVkIDwgLTFtYDtcbiAgY2FzZSAnVGhpcyBtb250aCc6XG4gICAgcmV0dXJuIGBzdGFydGVkID4gLTFtYDtcbiAgY2FzZSAnTGFzdCB3ZWVrJzpcbiAgICByZXR1cm4gYHN0YXJ0ZWQgPiAtMncgYW5kIHN0YXJ0ZWQgPCAtMXdgO1xuICBjYXNlICdUaGlzIHdlZWsnOlxuICAgIHJldHVybiBgc3RhcnRlZCA+IC0xd2A7XG4gIH1cbn07XG5cbmV4cG9ydCBuYW1lc3BhY2UgaGlzdG9yeVV0aWxzIHtcbiAgY29uc3Qgc2NyaXB0c0NhY2hlID0ge30gYXMgUmVjb3JkPHN0cmluZywgREcuU2NyaXB0PjtcbiAgLy8gVE9ETzogYWRkIHVzZXJzIGFuZCBncm91cHMgY2FjaGVcblxuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENoaWxkUnVucyhcbiAgICBmdW5jQ2FsbElkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7cGFyZW50UnVuOiBERy5GdW5jQ2FsbCwgY2hpbGRSdW5zOiBERy5GdW5jQ2FsbFtdfT4ge1xuICAgIGNvbnN0IHBhcmVudFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuZmluZChmdW5jQ2FsbElkKTtcbiAgICBwYXJlbnRSdW4ub3B0aW9uc1snaXNIaXN0b3JpY2FsJ10gPSB0cnVlO1xuXG4gICAgY29uc3QgY2hpbGRSdW5zID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgLmZpbHRlcihgb3B0aW9ucy5wYXJlbnRDYWxsSWQ9XCIke2Z1bmNDYWxsSWR9XCJgKS5saXN0KCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChjaGlsZFJ1bnMubWFwKGFzeW5jIChjaGlsZFJ1bikgPT4ge1xuICAgICAgY29uc3QgaWQgPSBjaGlsZFJ1bi5mdW5jLmlkO1xuICAgICAgLy8gREVBTElORyBXSVRIIEJVRzogaHR0cHM6Ly9yZWRkYXRhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0dST0stMTI0NjRcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgICAgaWYgKCFzY3JpcHRzQ2FjaGVbaWRdKSBzY3JpcHRzQ2FjaGVbaWRdID0gc2NyaXB0O1xuICAgICAgY2hpbGRSdW4uZnVuYyA9IHNjcmlwdDtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge3BhcmVudFJ1biwgY2hpbGRSdW5zfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIEZ1bmNDYWxsIHdpdGggYSBzcGVjaWZpZWQgSUQuIEJ5IGRlZmF1bHQsIGFsc28gbG9hZHMgaXRzJyBpbnB1dHMvb3V0cHV0cyBhbmQgYXV0aG9yLlxuICAgKiBGdW5jQ2FsbCBpcyBsb2FkZWQgd2l0aCBpbnRlcm5hbCBUYWJsZUluZm8gc3RydWN0cyBpbnN0ZWFkIG9mIERHLkRhdGFmcmFtZS1zLlxuICAgKiBUaHVzLCB3ZSBzaG91bGQgbG9hZCB0aGVtIHNlcGFyYXRlbHksIGFuZCBpdCBpcyB0aW1lLWNvbnN1bWluZy4gSWYgeW91IGRvbid0IG5lZWQgYWN0dWFsIHZhbHVlcyBvZiBERi1zLFxuICAgKiB5b3UgY2FuIHNraXAgREYgbG9hZGluZyB1c2luZyB7QGxpbmsgc2tpcERmTG9hZH0gcGFyYW0uXG4gICAqIEBwYXJhbSBmdW5jQ2FsbElkIEZ1bmNDYWxsIElEIHRvIGxvYWRcbiAgICogQHBhcmFtIHNraXBEZkxvYWQgSWYgdHJ1ZSwgc2tpcHMgcmVwbGFjaW5nIFRhYmxlSW5mbyB3aXRoIHRoIGFjdHVhbCBkYXRhZnJhbWVcbiAgICogQHJldHVybnMgUmVxdWVzdGVkIEZ1bmNDYWxsXG4gICAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJ1bihmdW5jQ2FsbElkOiBzdHJpbmcsIHNraXBEZkxvYWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IHB1bGxlZFJ1biA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKClcbiAgICAgIC5pbmNsdWRlKCdpbnB1dHMsIG91dHB1dHMsIHNlc3Npb24udXNlcicpLmZpbmQoZnVuY0NhbGxJZCk7XG5cbiAgICBjb25zdCBpZCA9IHB1bGxlZFJ1bi5mdW5jLmlkO1xuICAgIC8vIERFQUxJTkcgV0lUSCBCVUc6IGh0dHBzOi8vcmVkZGF0YS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9HUk9LLTEyNDY0XG4gICAgY29uc3Qgc2NyaXB0ID0gc2NyaXB0c0NhY2hlW2lkXSA/PyBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmFsbFBhY2thZ2VWZXJzaW9ucygpLmZpbmQoaWQpO1xuXG4gICAgaWYgKCFzY3JpcHRzQ2FjaGVbaWRdKSBzY3JpcHRzQ2FjaGVbaWRdID0gc2NyaXB0O1xuICAgIHB1bGxlZFJ1bi5mdW5jID0gc2NyaXB0O1xuICAgIHB1bGxlZFJ1bi5vcHRpb25zWydpc0hpc3RvcmljYWwnXSA9IHRydWU7XG5cbiAgICBpZiAoIXNraXBEZkxvYWQpIHtcbiAgICAgIGNvbnN0IGRmT3V0cHV0cyA9IHd1KHB1bGxlZFJ1bi5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAuZmlsdGVyKChvdXRwdXQpID0+IG91dHB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICAgIHB1bGxlZFJ1bi5vdXRwdXRzW291dHB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdKTtcblxuICAgICAgY29uc3QgZGZJbnB1dHMgPSB3dShwdWxsZWRSdW4uaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgICAgcHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSA9IGF3YWl0IGdyb2suZGFwaS50YWJsZXMuZ2V0VGFibGUocHVsbGVkUnVuLmlucHV0c1tpbnB1dC5uYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1bGxlZFJ1bjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlZCBnaXZlbiBGdW5jQ2FsbC5cbiAgICogRnVuY0NhbGwgaXMgb25seSBzdG9yZXMgcmVmZXJlbmNlcyB0byBhY3R1YWwgZGF0YWZyYW1lcy4gVGh1cywgd2Ugc2hvdWxkIHVwbG9hZCB0aGVtIHNlcGFyYXRlbHlcbiAgICogQHBhcmFtIGZ1bmNDYWxsY2FsbFRvU2F2ZUlkIEZ1bmNDYWxsIHRvIHNhdmVcbiAgICogQHJldHVybnMgU2F2ZWQgRnVuY0NhbGxcbiAgICovXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlUnVuKGNhbGxUb1NhdmU6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UoY2FsbFRvU2F2ZS5vdXRwdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cylcbiAgICAgIGF3YWl0IGdyb2suZGFwaS50YWJsZXMudXBsb2FkRGF0YUZyYW1lKGNhbGxUb1NhdmUub3V0cHV0c1tvdXRwdXQubmFtZV0pO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShjYWxsVG9TYXZlLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKGlucHV0KSA9PiBpbnB1dC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBkZklucHV0cylcbiAgICAgIGF3YWl0IGdyb2suZGFwaS50YWJsZXMudXBsb2FkRGF0YUZyYW1lKGNhbGxUb1NhdmUuaW5wdXRzW2lucHV0Lm5hbWVdKTtcblxuXG4gICAgcmV0dXJuIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9TYXZlKTtcbiAgfVxuXG4gIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVSdW4oY2FsbFRvRGVsZXRlOiBERy5GdW5jQ2FsbCkge1xuICAgIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuZGVsZXRlKGNhbGxUb0RlbGV0ZSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYWxsIHRoZSBmdW5jdGlvbiBjYWxsIG9mIHRoaXMgZnVuY3Rpb24uXG4gICAqIERlc2lnbmVkIHRvIHB1bGwgaHN0b3JpY2FsIHJ1bnMgaW4gZmFzdCBtYW5uZXIgYW5kIHRoZSBjYWxsIHtAbGluayBsb2FkUnVufSB3aXRoIHNwZWNpZmllZCBydW4gSUQuXG4gICAqIFdBUk5JTkc6IEZ1bmNDYWxsIGlucHV0cy9vdXRwdXRzIGZpZWxkcyBhcmUgbm90IGluY2x1ZGVkXG4gICAqIEBwYXJhbSBmdW5jSWQgSUQgb2YgRnVuYyB3aGljaCBjYWxscyB3ZSBhcmUgbG9va2luZyBmb3IuIEdldCBpdCB1c2luZyB7QGxpbmsgZnVuYy5pZH0gZmllbGRcbiAgICogQHJldHVybiBQcm9taXNlIG9uIGFycmF5IG9mIEZ1bmNDYWxscyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgRnVuYyBJRFxuICAgKiBAc3RhYmlsaXR5IERlcHJlY2F0ZWQuIFNjcmlwdCBJRCBjaGFuZ2VzIHdpdGggZXZlcnkgcGFja2FnZSByZWxlYXNlLCBzbyBzZWFyY2hpbmcgYnkgSUQgaXMgdXNlbGVzcyBpbiBwcmFjdGljZS5cbiAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVsbFJ1bnMoXG4gICAgZnVuY0lkOiBzdHJpbmcsXG4gICAgZmlsdGVyT3B0aW9uczogRmlsdGVyT3B0aW9ucyA9IHt9LFxuICAgIGxpc3RPcHRpb25zOiB7cGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGZpbHRlcj86IHN0cmluZywgb3JkZXI/OiBzdHJpbmd9ID0ge31cbiAgKTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgbGV0IGZpbHRlcmluZ1N0cmluZyA9IGBmdW5jLmlkPVwiJHtmdW5jSWR9XCJgO1xuICAgIGZpbHRlcmluZ1N0cmluZyArPSBmaWx0ZXJPcHRpb25zLmF1dGhvciA/IGAgYW5kIHNlc3Npb24udXNlci5pZD1cIiR7ZmlsdGVyT3B0aW9ucy5hdXRob3IuaWR9XCJgOicnO1xuICAgIGZpbHRlcmluZ1N0cmluZyArPSBmaWx0ZXJPcHRpb25zLmRhdGUgPyBnZXRTZWFyY2hTdHJpbmdCeVBhdHRlcm4oZmlsdGVyT3B0aW9ucy5kYXRlKTogJyc7XG4gICAgY29uc3QgZmlsdGVyID0gZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxsc1xuICAgICAgLmFsbFBhY2thZ2VWZXJzaW9ucygpXG4gICAgICAuZmlsdGVyKGZpbHRlcmluZ1N0cmluZylcbiAgICAgIC5pbmNsdWRlKCdzZXNzaW9uLnVzZXIsIG9wdGlvbnMnKTtcbiAgICBjb25zdCBsaXN0ID0gZmlsdGVyLmxpc3QobGlzdE9wdGlvbnMpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLlxuICAgKiBEZXNpZ25lZCB0byBwdWxsIGhzdG9yaWNhbCBydW5zIGluIGZhc3QgbWFubmVyIGFuZCB0aGUgY2FsbCB7QGxpbmsgbG9hZFJ1bn0gd2l0aCBzcGVjaWZpZWQgcnVuIElELlxuICAgKiBXQVJOSU5HOiBGdW5jQ2FsbCBpbnB1dHMvb3V0cHV0cyBmaWVsZHMgYXJlIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LiBVc2Uge0BsaW5rIGluY2x1ZGVkRmllbGRzfSB0byBzcGVjaWZ5IGZpZWxkcyB0byBsb2FkLlxuICAgKiBAcGFyYW0gZnVuY05hbWUgTmFtZSBvZiBGdW5jIHdoaWNoIGNhbGxzIHdlIGFyZSBsb29raW5nIGZvci4gR2V0IGl0IHVzaW5nIHtAbGluayBmdW5jLm5hbWV9IGZpZWxkXG4gICAqIEBwYXJhbSBmaWx0ZXJPcHRpb25zIFN0cnVjdCBjb250YWluaW5nIGZpbHRlcmluZyBvcHRpb25zLiBUaGVzZSBvcHRpb25zIHdpbGwgYmUgcGFzc2VkIGFzIHZhbGlkIGZpbHRlcmluZyBzdHJpbmcgdG8gYSByZXF1ZXN0LlxuICAgKiBAcGFyYW0gbGlzdE9wdGlvbnMgU3RydWN0IGNvbnRhaW5pbmcgbGlzdGluZyBvcHRpb25zLlxuICAgKiBAcGFyYW0gaW5jbHVkZWRGaWVsZHMgTGlzdCBvZiBmaWVsZHMgdG8gaW5jbHVkZSBpbnRvIHJlc3BvbnNlLiBTZWUge0BsaW5rIERHLkZ1bmNDYWxsfSBzdHJ1Y3QgdG8gc2VlIHBvc3NpYmxlIHZhbHVlcy4gRS5nLiwgJ2lucHV0cycgb3IgJ291dHB1dHMnXG4gICAqIEByZXR1cm4gUHJvbWlzZSBvbiBhcnJheSBvZiBGdW5jQ2FsbHMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIEZ1bmMgSURcbiAgICogQHN0YWJpbGl0eSBTdGFibGVcbiAqL1xuICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVsbFJ1bnNCeU5hbWUoXG4gICAgZnVuY05hbWU6IHN0cmluZyxcbiAgICBmaWx0ZXJPcHRpb25zOiBGaWx0ZXJPcHRpb25zW10gPSBbXSxcbiAgICBsaXN0T3B0aW9uczoge3BhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBmaWx0ZXI/OiBzdHJpbmcsIG9yZGVyPzogc3RyaW5nfSA9IHt9LFxuICAgIGluY2x1ZGVkRmllbGRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IFByb21pc2U8REcuRnVuY0NhbGxbXT4ge1xuICAgIGxldCBmaWx0ZXJpbmdTdHJpbmcgPSBgYDtcbiAgICBmb3IgKGNvbnN0IGZpbHRlck9wdGlvbiBvZiBmaWx0ZXJPcHRpb25zKSB7XG4gICAgICBjb25zdCBmaWx0ZXJPcHRpb25Dcml0ZXJpYSA9IFtdIGFzIHN0cmluZ1tdO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbi5hdXRob3IpIGZpbHRlck9wdGlvbkNyaXRlcmlhLnB1c2goYHNlc3Npb24udXNlci5pZD1cIiR7ZmlsdGVyT3B0aW9uLmF1dGhvci5pZH1cImApO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbi5kYXRlKSBmaWx0ZXJPcHRpb25Dcml0ZXJpYS5wdXNoKGdldFNlYXJjaFN0cmluZ0J5UGF0dGVybihmaWx0ZXJPcHRpb24uZGF0ZSkpO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbi5pc1NoYXJlZCkgZmlsdGVyT3B0aW9uQ3JpdGVyaWEucHVzaChgb3B0aW9ucy5pc1NoYXJlZD1cInRydWVcImApO1xuICAgICAgaWYgKGZpbHRlck9wdGlvbi50ZXh0KSB7XG4gICAgICAgIGZpbHRlck9wdGlvbkNyaXRlcmlhLnB1c2goXG4gICAgICAgICAgYCgob3B0aW9ucy50aXRsZSBsaWtlIFwiJHtmaWx0ZXJPcHRpb24udGV4dH1cIikgb3IgKG9wdGlvbnMuYW5ub3RhdGlvbiBsaWtlIFwiJHtmaWx0ZXJPcHRpb24udGV4dH1cIikpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyT3B0aW9uU3RyaW5nID0gZmlsdGVyT3B0aW9uQ3JpdGVyaWEuam9pbignIGFuZCAnKTtcbiAgICAgIGlmIChmaWx0ZXJPcHRpb25TdHJpbmcgIT09ICcnKSB7XG4gICAgICAgIGlmIChmaWx0ZXJpbmdTdHJpbmcgPT09ICcnKVxuICAgICAgICAgIGZpbHRlcmluZ1N0cmluZyArPSBgKCR7ZmlsdGVyT3B0aW9uU3RyaW5nfSlgO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgZmlsdGVyaW5nU3RyaW5nICs9IGAgb3IgKCR7ZmlsdGVyT3B0aW9uU3RyaW5nfSlgO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlsdGVyaW5nU3RyaW5nICE9PSAnJylcbiAgICAgIGZpbHRlcmluZ1N0cmluZyA9IGAgYW5kICgke2ZpbHRlcmluZ1N0cmluZ30pYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzXG4gICAgICAgIC5hbGxQYWNrYWdlVmVyc2lvbnMoKVxuICAgICAgICAuZmlsdGVyKGBmdW5jLm5hbWU9XCIke2Z1bmNOYW1lfVwiJHtmaWx0ZXJpbmdTdHJpbmd9YClcbiAgICAgICAgLmluY2x1ZGUoYCR7aW5jbHVkZWRGaWVsZHMuam9pbignLCcpfWApXG4gICAgICAgIC5saXN0KGxpc3RPcHRpb25zKTtcblxuICAgIGZvciAoY29uc3QgcHVsbGVkUnVuIG9mIHJlc3VsdCkge1xuICAgICAgY29uc3QgaWQgPSBwdWxsZWRSdW4uZnVuYy5pZDtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHNjcmlwdHNDYWNoZVtpZF0gPz8gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5maW5kKGlkKTtcblxuICAgICAgaWYgKCFzY3JpcHRzQ2FjaGVbaWRdKSBzY3JpcHRzQ2FjaGVbaWRdID0gc2NyaXB0O1xuICAgICAgcHVsbGVkUnVuLmZ1bmMgPSBzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVkRmllbGRzLmluY2x1ZGVzKCdpbnB1dHMnKSB8fCBpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnZnVuYy5wYXJhbXMnKSkge1xuICAgICAgZm9yIChjb25zdCBwdWxsZWRSdW4gb2YgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRmSW5wdXRzID0gd3UocHVsbGVkUnVuLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGRmSW5wdXRzKVxuICAgICAgICAgIHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0gPSBhd2FpdCBncm9rLmRhcGkudGFibGVzLmdldFRhYmxlKHB1bGxlZFJ1bi5pbnB1dHNbaW5wdXQubmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlZEZpZWxkcy5pbmNsdWRlcygnb3V0cHV0cycpIHx8IGluY2x1ZGVkRmllbGRzLmluY2x1ZGVzKCdmdW5jLnBhcmFtcycpKSB7XG4gICAgICBmb3IgKGNvbnN0IHB1bGxlZFJ1biBvZiByZXN1bHQpIHtcbiAgICAgICAgY29uc3QgZGZPdXRwdXRzID0gd3UocHVsbGVkUnVuLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAgICAgLmZpbHRlcigob3V0cHV0KSA9PiBvdXRwdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBkZk91dHB1dHMpXG4gICAgICAgICAgcHVsbGVkUnVuLm91dHB1dHNbb3V0cHV0Lm5hbWVdID0gYXdhaXQgZ3Jvay5kYXBpLnRhYmxlcy5nZXRUYWJsZShwdWxsZWRSdW4ub3V0cHV0c1tvdXRwdXQubmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
package/src/pipeline-view.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
import { FunctionView } from './function-view';
|
|
4
|
-
import { ComputationView } from './computation-view';
|
|
5
|
-
import '../css/pipeline-view.css';
|
|
6
|
-
export declare class PipelineView extends ComputationView {
|
|
7
|
-
private stepsConfig;
|
|
8
|
-
steps: {
|
|
9
|
-
[scriptNqName: string]: {
|
|
10
|
-
editor: string;
|
|
11
|
-
view: FunctionView;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
onStepCompleted: Subject<DG.FuncCall>;
|
|
15
|
-
private stepTabs;
|
|
16
|
-
protected pipelineViewExportExtensions: () => Record<string, string>;
|
|
17
|
-
protected pipelineViewExportFormats: () => string[];
|
|
18
|
-
protected pipelineViewExport: (format: string) => Promise<Blob>;
|
|
19
|
-
exportConfig: {
|
|
20
|
-
supportedExtensions: Record<string, string>;
|
|
21
|
-
supportedFormats: string[];
|
|
22
|
-
export: (format: string) => Promise<Blob>;
|
|
23
|
-
filename: (format: string) => string;
|
|
24
|
-
};
|
|
25
|
-
constructor(funcName: string, stepsConfig: {
|
|
26
|
-
funcName: string;
|
|
27
|
-
}[]);
|
|
28
|
-
init(): Promise<void>;
|
|
29
|
-
buildIO(): HTMLDivElement;
|
|
30
|
-
run(): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Overrided to use {@link loadChildRuns} during run load.
|
|
33
|
-
* This implementation takes "parentCallId" and looks for the funcCalls with options.parentCallId = parentCallId.
|
|
34
|
-
* Each child run is related to the particular pipeline step.
|
|
35
|
-
* @param funcCallId ID of the parent FuncCall
|
|
36
|
-
* @returns Parent FuncCall
|
|
37
|
-
*/
|
|
38
|
-
loadRun(funcCallId: string): Promise<DG.FuncCall>;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=pipeline-view.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-view.d.ts","sourceRoot":"","sources":["pipeline-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEnD,OAAO,0BAA0B,CAAC;AAElC,qBAAa,YAAa,SAAQ,eAAe;IA+C7C,OAAO,CAAC,WAAW;IA9Cd,KAAK;;oBAA4C,MAAM;kBAAQ,YAAY;;MAAI;IAC/E,eAAe,uBAA8B;IAEpD,OAAO,CAAC,QAAQ,CAA8B;IAG9C,SAAS,CAAC,4BAA4B,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlE;IAEF,SAAS,CAAC,yBAAyB,iBAEjC;IAEF,SAAS,CAAC,kBAAkB,WAAkB,MAAM,mBAmBlD;IAEF,YAAY;;;yBArBkC,MAAM;;MA0BlD;gBAGA,QAAQ,EAAE,MAAM,EACR,WAAW,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,EAAE;IAQrB,IAAI;IA0EV,OAAO;IA2BD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB1C;;;;;;OAMG;IACU,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC;CAkB/D"}
|
package/src/pipeline-view.js
DELETED
|
@@ -1,178 +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
|
-
import * as grok from 'datagrok-api/grok';
|
|
12
|
-
import * as ui from 'datagrok-api/ui';
|
|
13
|
-
import * as DG from 'datagrok-api/dg';
|
|
14
|
-
import JSZip from 'jszip';
|
|
15
|
-
import { Subject } from 'rxjs';
|
|
16
|
-
import { historyUtils } from './history-utils';
|
|
17
|
-
import { ComputationView } from './computation-view';
|
|
18
|
-
import { filter } from 'rxjs/operators';
|
|
19
|
-
import '../css/pipeline-view.css';
|
|
20
|
-
export class PipelineView extends ComputationView {
|
|
21
|
-
constructor(funcName, stepsConfig) {
|
|
22
|
-
super(funcName, { historyEnabled: true, isTabbed: false });
|
|
23
|
-
this.stepsConfig = stepsConfig;
|
|
24
|
-
this.steps = {};
|
|
25
|
-
this.onStepCompleted = new Subject();
|
|
26
|
-
this.stepTabs = null;
|
|
27
|
-
// PipelineView unites several export files into single ZIP file
|
|
28
|
-
this.pipelineViewExportExtensions = () => {
|
|
29
|
-
return {
|
|
30
|
-
'Archive': 'zip'
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
this.pipelineViewExportFormats = () => {
|
|
34
|
-
return ['Archive'];
|
|
35
|
-
};
|
|
36
|
-
this.pipelineViewExport = (format) => __awaiter(this, void 0, void 0, function* () {
|
|
37
|
-
var _a;
|
|
38
|
-
if (format !== 'Archive')
|
|
39
|
-
throw new Error('This export format is not supported');
|
|
40
|
-
if (!this.stepTabs)
|
|
41
|
-
throw new Error('Set step tabs please for export');
|
|
42
|
-
const zip = new JSZip();
|
|
43
|
-
for (const { nqName, stepView } of Object.entries(this.steps)
|
|
44
|
-
.map(([nqName, step]) => ({ nqName, stepView: step.view }))) {
|
|
45
|
-
this.stepTabs.currentPane = (_a = this.stepTabs) === null || _a === void 0 ? void 0 : _a.getPane(nqName);
|
|
46
|
-
yield new Promise((r) => setTimeout(r, 100));
|
|
47
|
-
const stepBlob = yield stepView.exportConfig.export('Excel');
|
|
48
|
-
zip.file(stepView.exportConfig.filename('Excel'), stepBlob, { binary: true, createFolders: false });
|
|
49
|
-
}
|
|
50
|
-
;
|
|
51
|
-
return yield zip.generateAsync({ type: 'blob' });
|
|
52
|
-
});
|
|
53
|
-
this.exportConfig = {
|
|
54
|
-
supportedExtensions: this.pipelineViewExportExtensions(),
|
|
55
|
-
supportedFormats: this.pipelineViewExportFormats(),
|
|
56
|
-
export: this.pipelineViewExport,
|
|
57
|
-
filename: this.defaultExportFilename,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
init() {
|
|
61
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
yield this.loadFuncCallById();
|
|
63
|
-
this.stepsConfig.forEach((stepConfig) => {
|
|
64
|
-
//@ts-ignore
|
|
65
|
-
this.steps[stepConfig.funcName] = {};
|
|
66
|
-
});
|
|
67
|
-
this.subs.push(grok.functions.onAfterRunAction.pipe(filter((run) => Object.keys(this.steps).includes(run.func.nqName))).subscribe((run) => {
|
|
68
|
-
this.onStepCompleted.next(run);
|
|
69
|
-
if (run.func.nqName === this.stepsConfig[this.stepsConfig.length - 1].funcName)
|
|
70
|
-
this.run();
|
|
71
|
-
}));
|
|
72
|
-
const stepScripts = Object.keys(this.steps).map((stepNqName) => {
|
|
73
|
-
const stepScript = grok.functions.eval(stepNqName);
|
|
74
|
-
return stepScript;
|
|
75
|
-
});
|
|
76
|
-
const allStepsLoading = Promise.all(stepScripts);
|
|
77
|
-
this.root.classList.remove('ui-panel');
|
|
78
|
-
const loadedScripts = yield allStepsLoading;
|
|
79
|
-
const editorFuncs = {};
|
|
80
|
-
const EDITOR_TAG = 'editor:';
|
|
81
|
-
const NEWLINE = '\n';
|
|
82
|
-
const DEFAULT_EDITOR = 'Compute:PipelineStepEditor';
|
|
83
|
-
const extractEditor = (script) => {
|
|
84
|
-
const scriptCode = script.script;
|
|
85
|
-
const editorTagIndex = scriptCode.indexOf(EDITOR_TAG);
|
|
86
|
-
if (editorTagIndex < 0)
|
|
87
|
-
return DEFAULT_EDITOR;
|
|
88
|
-
const newlineIndex = scriptCode.indexOf(NEWLINE, editorTagIndex);
|
|
89
|
-
const editorFuncName = scriptCode.substring(editorTagIndex + EDITOR_TAG.length, newlineIndex).trim();
|
|
90
|
-
return editorFuncName;
|
|
91
|
-
};
|
|
92
|
-
const editorsLoading = loadedScripts.map((loadedScript) => __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
// TO DO: replace for type guard
|
|
94
|
-
const editorName = (loadedScript.script) ? extractEditor(loadedScript) : DEFAULT_EDITOR;
|
|
95
|
-
if (!editorFuncs[editorName])
|
|
96
|
-
editorFuncs[editorName] = yield grok.functions.eval(editorName.split(' ').join(''));
|
|
97
|
-
this.steps[loadedScript.nqName].editor = editorName;
|
|
98
|
-
return Promise.resolve();
|
|
99
|
-
}));
|
|
100
|
-
yield Promise.all(editorsLoading);
|
|
101
|
-
const viewsLoading = loadedScripts.map((loadedScript) => __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
const scriptCall = loadedScript.prepare();
|
|
103
|
-
this.steps[loadedScript.nqName].view =
|
|
104
|
-
(yield editorFuncs[this.steps[loadedScript.nqName].editor].apply({ 'call': scriptCall }));
|
|
105
|
-
if (!this.steps[loadedScript.nqName].view.onFuncCallReady.value) {
|
|
106
|
-
const prom = this.steps[loadedScript.nqName].view.onFuncCallReady.toPromise();
|
|
107
|
-
return prom;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
return Promise.resolve();
|
|
111
|
-
}
|
|
112
|
-
}));
|
|
113
|
-
yield Promise.all(viewsLoading);
|
|
114
|
-
this.onFuncCallReady.complete();
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
buildIO() {
|
|
118
|
-
const tabs = Object.entries(this.steps)
|
|
119
|
-
.reduce((prev, [funcName, step]) => (Object.assign(Object.assign({}, prev), { [funcName]: step.view.root })), {});
|
|
120
|
-
const pipelineTabs = ui.tabControl(tabs);
|
|
121
|
-
const tabsLine = pipelineTabs.panes[0].header.parentElement;
|
|
122
|
-
tabsLine.classList.add('d4-ribbon', 'pipeline-view');
|
|
123
|
-
tabsLine.classList.remove('d4-tab-header-stripe');
|
|
124
|
-
tabsLine.firstChild.remove();
|
|
125
|
-
for (let i = 0; i < pipelineTabs.panes.length; i++) {
|
|
126
|
-
pipelineTabs.panes[i].header.classList.add('d4-ribbon-name');
|
|
127
|
-
pipelineTabs.panes[i].header.classList.remove('d4-tab-header');
|
|
128
|
-
}
|
|
129
|
-
pipelineTabs.panes[0].header.style.marginLeft = '12px';
|
|
130
|
-
pipelineTabs.root.style.height = '100%';
|
|
131
|
-
pipelineTabs.root.style.width = '100%';
|
|
132
|
-
this.stepTabs = pipelineTabs;
|
|
133
|
-
return pipelineTabs.root;
|
|
134
|
-
}
|
|
135
|
-
run() {
|
|
136
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
if (!this.funcCall)
|
|
138
|
-
throw new Error('The correspoding function is not specified');
|
|
139
|
-
yield this.onBeforeRun(this.funcCall);
|
|
140
|
-
const pi = DG.TaskBarProgressIndicator.create('Calculating...');
|
|
141
|
-
this.funcCall.newId();
|
|
142
|
-
yield this.funcCall.call(); // mutates the funcCall field
|
|
143
|
-
pi.close();
|
|
144
|
-
Object.values(this.steps)
|
|
145
|
-
.forEach((step) => __awaiter(this, void 0, void 0, function* () {
|
|
146
|
-
const scriptCall = step.view.funcCall;
|
|
147
|
-
scriptCall.options['parentCallId'] = this.funcCall.id;
|
|
148
|
-
this.steps[scriptCall.func.nqName].view.lastCall =
|
|
149
|
-
yield this.steps[scriptCall.func.nqName].view.saveRun(scriptCall);
|
|
150
|
-
}));
|
|
151
|
-
yield this.onAfterRun(this.funcCall);
|
|
152
|
-
this.lastCall = yield this.saveRun(this.funcCall);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Overrided to use {@link loadChildRuns} during run load.
|
|
157
|
-
* This implementation takes "parentCallId" and looks for the funcCalls with options.parentCallId = parentCallId.
|
|
158
|
-
* Each child run is related to the particular pipeline step.
|
|
159
|
-
* @param funcCallId ID of the parent FuncCall
|
|
160
|
-
* @returns Parent FuncCall
|
|
161
|
-
*/
|
|
162
|
-
loadRun(funcCallId) {
|
|
163
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
-
const { parentRun: pulledParentRun, childRuns: pulledChildRuns } = yield historyUtils.loadChildRuns(funcCallId);
|
|
165
|
-
this.subs.push(this.onFuncCallReady.subscribe({
|
|
166
|
-
complete: () => __awaiter(this, void 0, void 0, function* () {
|
|
167
|
-
yield this.onBeforeLoadRun();
|
|
168
|
-
pulledChildRuns.forEach((pulledChildRun) => __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
this.steps[pulledChildRun.func.nqName].view.loadRun(pulledChildRun.id);
|
|
170
|
-
}));
|
|
171
|
-
yield this.onAfterLoadRun(pulledParentRun);
|
|
172
|
-
})
|
|
173
|
-
}));
|
|
174
|
-
return pulledParentRun;
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBpcGVsaW5lLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sMEJBQTBCLENBQUM7QUFFbEMsTUFBTSxPQUFPLFlBQWEsU0FBUSxlQUFlO0lBNkMvQyxZQUNFLFFBQWdCLEVBQ1IsV0FBaUM7UUFFekMsS0FBSyxDQUNILFFBQVEsRUFDUixFQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQyxDQUN4QyxDQUFDO1FBTE0sZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBOUNwQyxVQUFLLEdBQUcsRUFBc0UsQ0FBQztRQUMvRSxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFFNUMsYUFBUSxHQUF5QixJQUFJLENBQUM7UUFFOUMsZ0VBQWdFO1FBQ3RELGlDQUE0QixHQUFpQyxHQUFHLEVBQUU7WUFDMUUsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRVEsOEJBQXlCLEdBQUcsR0FBRyxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQixDQUFDLENB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QUM7b0JBRUgsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUE7YUFDRixDQUFDLENBQ0gsQ0FBQztZQUNGLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuL2hpc3RvcnktdXRpbHMnO1xuaW1wb3J0IHtGdW5jdGlvblZpZXd9IGZyb20gJy4vZnVuY3Rpb24tdmlldyc7XG5pbXBvcnQge0NvbXB1dGF0aW9uVmlld30gZnJvbSAnLi9jb21wdXRhdGlvbi12aWV3JztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgJy4uL2Nzcy9waXBlbGluZS12aWV3LmNzcyc7XG5cbmV4cG9ydCBjbGFzcyBQaXBlbGluZVZpZXcgZXh0ZW5kcyBDb21wdXRhdGlvblZpZXcge1xuICBwdWJsaWMgc3RlcHMgPSB7fSBhcyB7W3NjcmlwdE5xTmFtZTogc3RyaW5nXTogeyBlZGl0b3I6IHN0cmluZywgdmlldzogRnVuY3Rpb25WaWV3IH19O1xuICBwdWJsaWMgb25TdGVwQ29tcGxldGVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgcHJpdmF0ZSBzdGVwVGFiczogREcuVGFiQ29udHJvbCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFBpcGVsaW5lVmlldyB1bml0ZXMgc2V2ZXJhbCBleHBvcnQgZmlsZXMgaW50byBzaW5nbGUgWklQIGZpbGVcbiAgcHJvdGVjdGVkIHBpcGVsaW5lVmlld0V4cG9ydEV4dGVuc2lvbnM6ICgpID0+IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdBcmNoaXZlJzogJ3ppcCdcbiAgICB9O1xuICB9O1xuXG4gIHByb3RlY3RlZCBwaXBlbGluZVZpZXdFeHBvcnRGb3JtYXRzID0gKCkgPT4ge1xuICAgIHJldHVybiBbJ0FyY2hpdmUnXTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcGlwZWxpbmVWaWV3RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGZvcm1hdCAhPT0gJ0FyY2hpdmUnKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGV4cG9ydCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZCcpO1xuXG4gICAgaWYgKCF0aGlzLnN0ZXBUYWJzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXQgc3RlcCB0YWJzIHBsZWFzZSBmb3IgZXhwb3J0Jyk7XG5cbiAgICBjb25zdCB6aXAgPSBuZXcgSlNaaXAoKTtcblxuICAgIGZvciAoY29uc3Qge25xTmFtZSwgc3RlcFZpZXd9IG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RlcHMpXG4gICAgICAubWFwKChbbnFOYW1lLCBzdGVwXSkgPT4gKHtucU5hbWUsIHN0ZXBWaWV3OiBzdGVwLnZpZXd9KSkpIHtcbiAgICAgIHRoaXMuc3RlcFRhYnMuY3VycmVudFBhbmUgPSB0aGlzLnN0ZXBUYWJzPy5nZXRQYW5lKG5xTmFtZSk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDApKTtcbiAgICAgIGNvbnN0IHN0ZXBCbG9iID0gYXdhaXQgc3RlcFZpZXcuZXhwb3J0Q29uZmlnIS5leHBvcnQoJ0V4Y2VsJyk7XG5cbiAgICAgIHppcC5maWxlKHN0ZXBWaWV3LmV4cG9ydENvbmZpZyEuZmlsZW5hbWUoJ0V4Y2VsJyksIHN0ZXBCbG9iLCB7YmluYXJ5OiB0cnVlLCBjcmVhdGVGb2xkZXJzOiBmYWxzZX0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoe3R5cGU6ICdibG9iJ30pO1xuICB9O1xuXG4gIGV4cG9ydENvbmZpZyA9IHtcbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLnBpcGVsaW5lVmlld0V4cG9ydEV4dGVuc2lvbnMoKSxcbiAgICBzdXBwb3J0ZWRGb3JtYXRzOiB0aGlzLnBpcGVsaW5lVmlld0V4cG9ydEZvcm1hdHMoKSxcbiAgICBleHBvcnQ6IHRoaXMucGlwZWxpbmVWaWV3RXhwb3J0LFxuICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmdW5jTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgc3RlcHNDb25maWc6IHtmdW5jTmFtZTogc3RyaW5nfVtdXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZnVuY05hbWUsXG4gICAgICB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2FkRnVuY0NhbGxCeUlkKCk7XG5cbiAgICB0aGlzLnN0ZXBzQ29uZmlnLmZvckVhY2goKHN0ZXBDb25maWcpID0+IHtcbiAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgdGhpcy5zdGVwc1tzdGVwQ29uZmlnLmZ1bmNOYW1lXSA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICBncm9rLmZ1bmN0aW9ucy5vbkFmdGVyUnVuQWN0aW9uLnBpcGUoXG4gICAgICAgIGZpbHRlcigocnVuKSA9PiBPYmplY3Qua2V5cyh0aGlzLnN0ZXBzKS5pbmNsdWRlcyhydW4uZnVuYy5ucU5hbWUpKVxuICAgICAgKS5zdWJzY3JpYmUoKHJ1bikgPT4ge1xuICAgICAgICB0aGlzLm9uU3RlcENvbXBsZXRlZC5uZXh0KHJ1bik7XG5cbiAgICAgICAgaWYgKHJ1bi5mdW5jLm5xTmFtZSA9PT0gdGhpcy5zdGVwc0NvbmZpZ1t0aGlzLnN0ZXBzQ29uZmlnLmxlbmd0aC0xXS5mdW5jTmFtZSkgdGhpcy5ydW4oKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHN0ZXBTY3JpcHRzID0gT2JqZWN0LmtleXModGhpcy5zdGVwcykubWFwKChzdGVwTnFOYW1lKSA9PiB7XG4gICAgICBjb25zdCBzdGVwU2NyaXB0ID0gKGdyb2suZnVuY3Rpb25zLmV2YWwoc3RlcE5xTmFtZSkgYXMgUHJvbWlzZTxERy5GdW5jPik7XG4gICAgICByZXR1cm4gc3RlcFNjcmlwdDtcbiAgICB9KTtcbiAgICBjb25zdCBhbGxTdGVwc0xvYWRpbmcgPSBQcm9taXNlLmFsbChzdGVwU2NyaXB0cykgYXMgUHJvbWlzZTxERy5TY3JpcHRbXT47XG4gICAgdGhpcy5yb290LmNsYXNzTGlzdC5yZW1vdmUoJ3VpLXBhbmVsJyk7XG5cbiAgICBjb25zdCBsb2FkZWRTY3JpcHRzID0gYXdhaXQgYWxsU3RlcHNMb2FkaW5nO1xuXG4gICAgY29uc3QgZWRpdG9yRnVuY3MgPSB7fSBhcyB7W2VkaXRvcjogc3RyaW5nXTogREcuRnVuY307XG5cbiAgICBjb25zdCBFRElUT1JfVEFHID0gJ2VkaXRvcjonIGFzIGNvbnN0O1xuICAgIGNvbnN0IE5FV0xJTkUgPSAnXFxuJyBhcyBjb25zdDtcbiAgICBjb25zdCBERUZBVUxUX0VESVRPUiA9ICdDb21wdXRlOlBpcGVsaW5lU3RlcEVkaXRvcic7XG5cbiAgICBjb25zdCBleHRyYWN0RWRpdG9yID0gKHNjcmlwdDogREcuU2NyaXB0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRDb2RlID0gc2NyaXB0LnNjcmlwdDtcbiAgICAgIGNvbnN0IGVkaXRvclRhZ0luZGV4ID0gc2NyaXB0Q29kZS5pbmRleE9mKEVESVRPUl9UQUcpO1xuICAgICAgaWYgKGVkaXRvclRhZ0luZGV4IDwgMClcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfRURJVE9SO1xuXG4gICAgICBjb25zdCBuZXdsaW5lSW5kZXggPSBzY3JpcHRDb2RlLmluZGV4T2YoTkVXTElORSwgZWRpdG9yVGFnSW5kZXgpO1xuICAgICAgY29uc3QgZWRpdG9yRnVuY05hbWUgPSBzY3JpcHRDb2RlLnN1YnN0cmluZyhlZGl0b3JUYWdJbmRleCArIEVESVRPUl9UQUcubGVuZ3RoLCBuZXdsaW5lSW5kZXgpLnRyaW0oKTtcblxuICAgICAgcmV0dXJuIGVkaXRvckZ1bmNOYW1lO1xuICAgIH07XG5cbiAgICBjb25zdCBlZGl0b3JzTG9hZGluZyA9IGxvYWRlZFNjcmlwdHMubWFwKGFzeW5jIChsb2FkZWRTY3JpcHQpID0+IHtcbiAgICAgIC8vIFRPIERPOiByZXBsYWNlIGZvciB0eXBlIGd1YXJkXG4gICAgICBjb25zdCBlZGl0b3JOYW1lID0gKGxvYWRlZFNjcmlwdC5zY3JpcHQpID8gZXh0cmFjdEVkaXRvcihsb2FkZWRTY3JpcHQpOiBERUZBVUxUX0VESVRPUjtcbiAgICAgIGlmICghZWRpdG9yRnVuY3NbZWRpdG9yTmFtZV0pXG4gICAgICAgIGVkaXRvckZ1bmNzW2VkaXRvck5hbWVdID0gYXdhaXQoZ3Jvay5mdW5jdGlvbnMuZXZhbChlZGl0b3JOYW1lLnNwbGl0KCcgJykuam9pbignJykpIGFzIFByb21pc2U8REcuRnVuYz4pO1xuICAgICAgdGhpcy5zdGVwc1tsb2FkZWRTY3JpcHQubnFOYW1lXS5lZGl0b3IgPSBlZGl0b3JOYW1lO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChlZGl0b3JzTG9hZGluZyk7XG5cbiAgICBjb25zdCB2aWV3c0xvYWRpbmcgPSBsb2FkZWRTY3JpcHRzLm1hcChhc3luYyAobG9hZGVkU2NyaXB0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHRDYWxsOiBERy5GdW5jQ2FsbCA9IGxvYWRlZFNjcmlwdC5wcmVwYXJlKCk7XG5cbiAgICAgIHRoaXMuc3RlcHNbbG9hZGVkU2NyaXB0Lm5xTmFtZV0udmlldyA9XG4gICAgICAgIGF3YWl0IGVkaXRvckZ1bmNzW3RoaXMuc3RlcHNbbG9hZGVkU2NyaXB0Lm5xTmFtZV0uZWRpdG9yXS5hcHBseSh7J2NhbGwnOiBzY3JpcHRDYWxsfSkgYXMgRnVuY3Rpb25WaWV3O1xuXG4gICAgICBpZiAoIXRoaXMuc3RlcHNbbG9hZGVkU2NyaXB0Lm5xTmFtZV0udmlldy5vbkZ1bmNDYWxsUmVhZHkudmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvbSA9IHRoaXMuc3RlcHNbbG9hZGVkU2NyaXB0Lm5xTmFtZV0udmlldy5vbkZ1bmNDYWxsUmVhZHkudG9Qcm9taXNlKCk7XG4gICAgICAgIHJldHVybiBwcm9tO1xuICAgICAgfSBlbHNlIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh2aWV3c0xvYWRpbmcpO1xuXG4gICAgdGhpcy5vbkZ1bmNDYWxsUmVhZHkuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBidWlsZElPKCkge1xuICAgIGNvbnN0IHRhYnMgPSBPYmplY3QuZW50cmllcyh0aGlzLnN0ZXBzKVxuICAgICAgLnJlZHVjZSgocHJldiwgW2Z1bmNOYW1lLCBzdGVwXSkgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2Z1bmNOYW1lXTogc3RlcC52aWV3LnJvb3RcbiAgICAgIH0pLCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBIVE1MRWxlbWVudD4pO1xuXG4gICAgY29uc3QgcGlwZWxpbmVUYWJzID0gdWkudGFiQ29udHJvbCh0YWJzKTtcblxuICAgIGNvbnN0IHRhYnNMaW5lID0gcGlwZWxpbmVUYWJzLnBhbmVzWzBdLmhlYWRlci5wYXJlbnRFbGVtZW50ITtcbiAgICB0YWJzTGluZS5jbGFzc0xpc3QuYWRkKCdkNC1yaWJib24nLCAncGlwZWxpbmUtdmlldycpO1xuICAgIHRhYnNMaW5lLmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LXRhYi1oZWFkZXItc3RyaXBlJyk7XG4gICAgdGFic0xpbmUuZmlyc3RDaGlsZCEucmVtb3ZlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaXBlbGluZVRhYnMucGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBpcGVsaW5lVGFicy5wYW5lc1tpXS5oZWFkZXIuY2xhc3NMaXN0LmFkZCgnZDQtcmliYm9uLW5hbWUnKTtcbiAgICAgIHBpcGVsaW5lVGFicy5wYW5lc1tpXS5oZWFkZXIuY2xhc3NMaXN0LnJlbW92ZSgnZDQtdGFiLWhlYWRlcicpO1xuICAgIH1cbiAgICBwaXBlbGluZVRhYnMucGFuZXNbMF0uaGVhZGVyLnN0eWxlLm1hcmdpbkxlZnQgPSAnMTJweCc7XG5cbiAgICBwaXBlbGluZVRhYnMucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgcGlwZWxpbmVUYWJzLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnN0ZXBUYWJzID0gcGlwZWxpbmVUYWJzO1xuXG4gICAgcmV0dXJuIHBpcGVsaW5lVGFicy5yb290O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdGVwcylcbiAgICAgIC5mb3JFYWNoKGFzeW5jIChzdGVwKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcmlwdENhbGwgPSBzdGVwLnZpZXcuZnVuY0NhbGw7XG5cbiAgICAgICAgc2NyaXB0Q2FsbC5vcHRpb25zWydwYXJlbnRDYWxsSWQnXSA9IHRoaXMuZnVuY0NhbGwhLmlkO1xuXG4gICAgICAgIHRoaXMuc3RlcHNbc2NyaXB0Q2FsbC5mdW5jLm5xTmFtZV0udmlldy5sYXN0Q2FsbCA9XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdGVwc1tzY3JpcHRDYWxsLmZ1bmMubnFOYW1lXS52aWV3LnNhdmVSdW4oc2NyaXB0Q2FsbCk7XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcblxuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCB0aGlzLnNhdmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVkIHRvIHVzZSB7QGxpbmsgbG9hZENoaWxkUnVuc30gZHVyaW5nIHJ1biBsb2FkLlxuICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIHRha2VzIFwicGFyZW50Q2FsbElkXCIgYW5kIGxvb2tzIGZvciB0aGUgZnVuY0NhbGxzIHdpdGggb3B0aW9ucy5wYXJlbnRDYWxsSWQgPSBwYXJlbnRDYWxsSWQuXG4gICAqIEVhY2ggY2hpbGQgcnVuIGlzIHJlbGF0ZWQgdG8gdGhlIHBhcnRpY3VsYXIgcGlwZWxpbmUgc3RlcC5cbiAgICogQHBhcmFtIGZ1bmNDYWxsSWQgSUQgb2YgdGhlIHBhcmVudCBGdW5jQ2FsbFxuICAgKiBAcmV0dXJucyBQYXJlbnQgRnVuY0NhbGxcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkUnVuKGZ1bmNDYWxsSWQ6IHN0cmluZyk6IFByb21pc2U8REcuRnVuY0NhbGw+IHtcbiAgICBjb25zdCB7cGFyZW50UnVuOiBwdWxsZWRQYXJlbnRSdW4sIGNoaWxkUnVuczogcHVsbGVkQ2hpbGRSdW5zfSA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkQ2hpbGRSdW5zKGZ1bmNDYWxsSWQpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICB0aGlzLm9uRnVuY0NhbGxSZWFkeS5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHRoaXMub25CZWZvcmVMb2FkUnVuKCk7XG5cbiAgICAgICAgICBwdWxsZWRDaGlsZFJ1bnMuZm9yRWFjaChhc3luYyAocHVsbGVkQ2hpbGRSdW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RlcHNbcHVsbGVkQ2hpbGRSdW4uZnVuYy5ucU5hbWVdLnZpZXcubG9hZFJ1bihwdWxsZWRDaGlsZFJ1bi5pZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJMb2FkUnVuKHB1bGxlZFBhcmVudFJ1bik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcHVsbGVkUGFyZW50UnVuO1xuICB9XG59XG4iXX0=
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import * as DG from 'datagrok-api/dg';
|
|
2
|
-
import { FunctionView } from './function-view';
|
|
3
|
-
import '../css/rich-function-view.css';
|
|
4
|
-
export declare class RichFunctionView extends FunctionView {
|
|
5
|
-
options: {
|
|
6
|
-
historyEnabled: boolean;
|
|
7
|
-
isTabbed: boolean;
|
|
8
|
-
};
|
|
9
|
-
private checkDisability;
|
|
10
|
-
private isRunning;
|
|
11
|
-
static fromFuncCall(funcCall: DG.FuncCall, options?: {
|
|
12
|
-
historyEnabled: boolean;
|
|
13
|
-
isTabbed: boolean;
|
|
14
|
-
}): RichFunctionView;
|
|
15
|
-
constructor(funcName: string, options?: {
|
|
16
|
-
historyEnabled: boolean;
|
|
17
|
-
isTabbed: boolean;
|
|
18
|
-
});
|
|
19
|
-
/**
|
|
20
|
-
* Showing UI after completion of function call.
|
|
21
|
-
* @param runFunc
|
|
22
|
-
*/
|
|
23
|
-
onAfterRun(runFunc: DG.FuncCall): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* RichFunctionView has adavanced automatic UI builder. It takes {@link this.funcCall} as a base and constructs flexible view.
|
|
26
|
-
* This view is updated automatically when {@link this.funcCallReplaced} is emitted or any of input/output param changes.
|
|
27
|
-
* @returns HTMLElement attached to the root of the view
|
|
28
|
-
*/
|
|
29
|
-
buildIO(): HTMLElement;
|
|
30
|
-
buildInputBlock(): HTMLElement;
|
|
31
|
-
buildRibbonPanels(): HTMLElement[][];
|
|
32
|
-
private tabsElem;
|
|
33
|
-
buildOutputBlock(): HTMLElement;
|
|
34
|
-
onAfterLoadRun(loadedRun: DG.FuncCall): Promise<void>;
|
|
35
|
-
private dfToViewerMapping;
|
|
36
|
-
protected get isInputPanelRequired(): boolean;
|
|
37
|
-
protected get tabsLabels(): string[];
|
|
38
|
-
protected get categoryToParamMap(): Record<string, DG.Property[]>;
|
|
39
|
-
private doRun;
|
|
40
|
-
private renderRunSection;
|
|
41
|
-
/**
|
|
42
|
-
* RichFunctionView know everything about its UI, so it exports not only data, but also viewer screenshots.
|
|
43
|
-
* This function iterates over all of the tabs and sequentally exports all dataframes, their viewers and scalars.
|
|
44
|
-
* @param format format needed to export. See {@link this.defaultSupportedExportFormats} for available formats.
|
|
45
|
-
* @returns Promise<Blob> with data ready for download
|
|
46
|
-
*/
|
|
47
|
-
protected defaultExport: (format: string) => Promise<Blob>;
|
|
48
|
-
exportConfig: {
|
|
49
|
-
supportedExtensions: Record<string, string>;
|
|
50
|
-
supportedFormats: string[];
|
|
51
|
-
export: (format: string) => Promise<Blob>;
|
|
52
|
-
filename: (format: string) => string;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=rich-function-view.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAmCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAazC;;;OAGG;IACa,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D;;;;OAIG;IACI,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,iBAAiB,IAAI,WAAW,EAAE,EAAE;IAgBpC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IA6JzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAgBlD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;YAEa,KAAK;IAanB,OAAO,CAAC,gBAAgB;IAsHxB;;;;;OAKG;IACH,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAoI7C;IAEF,YAAY;;;yBAtI6B,MAAM;;MA2I7C;CACH"}
|