@shaxpir/squilt 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +289 -1
- package/dist/ast/AlterTableQuery.d.ts +32 -0
- package/dist/ast/AlterTableQuery.js +60 -0
- package/dist/ast/BetweenExpression.d.ts +10 -0
- package/dist/ast/BetweenExpression.js +18 -0
- package/dist/ast/CastExpression.d.ts +13 -0
- package/dist/ast/CastExpression.js +25 -0
- package/dist/ast/CollateExpression.d.ts +18 -0
- package/dist/ast/CollateExpression.js +30 -0
- package/dist/ast/CreateIndexQuery.d.ts +25 -0
- package/dist/ast/CreateIndexQuery.js +64 -0
- package/dist/ast/CreateTableQuery.d.ts +57 -0
- package/dist/ast/CreateTableQuery.js +79 -0
- package/dist/ast/CreateViewQuery.d.ts +34 -0
- package/dist/ast/CreateViewQuery.js +61 -0
- package/dist/ast/CreateVirtualTableQuery.d.ts +32 -0
- package/dist/ast/CreateVirtualTableQuery.js +74 -0
- package/dist/ast/DeleteQuery.d.ts +17 -0
- package/dist/ast/DeleteQuery.js +43 -0
- package/dist/ast/DropIndexQuery.d.ts +14 -0
- package/dist/ast/DropIndexQuery.js +35 -0
- package/dist/ast/DropTableQuery.d.ts +14 -0
- package/dist/ast/DropTableQuery.js +35 -0
- package/dist/ast/DropViewQuery.d.ts +11 -0
- package/dist/ast/DropViewQuery.js +24 -0
- package/dist/ast/FunctionExpression.d.ts +21 -0
- package/dist/ast/FunctionExpression.js +40 -1
- package/dist/ast/FunctionName.d.ts +1 -1
- package/dist/ast/FunctionName.js +1 -1
- package/dist/ast/InsertQuery.d.ts +24 -1
- package/dist/ast/InsertQuery.js +49 -1
- package/dist/ast/Operator.d.ts +2 -0
- package/dist/ast/Operator.js +3 -1
- package/dist/ast/SelectQuery.d.ts +4 -0
- package/dist/ast/SelectQuery.js +11 -1
- package/dist/ast/SubqueryExpression.d.ts +18 -0
- package/dist/ast/SubqueryExpression.js +27 -0
- package/dist/ast/UpdateQuery.d.ts +24 -0
- package/dist/ast/UpdateQuery.js +51 -0
- package/dist/ast/WindowExpression.d.ts +51 -0
- package/dist/ast/WindowExpression.js +61 -0
- package/dist/ast/WindowSpecification.d.ts +46 -0
- package/dist/ast/WindowSpecification.js +60 -0
- package/dist/builder/QueryBuilder.d.ts +20 -0
- package/dist/builder/QueryBuilder.js +41 -1
- package/dist/builder/Shorthand.d.ts +51 -0
- package/dist/builder/Shorthand.js +125 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +59 -3
- package/dist/renderer/CompactQueryRenderer.d.ts +34 -2
- package/dist/renderer/CompactQueryRenderer.js +272 -2
- package/dist/renderer/IndentedQueryRenderer.d.ts +34 -2
- package/dist/renderer/IndentedQueryRenderer.js +289 -3
- package/dist/renderer/QueryRenderer.d.ts +11 -1
- package/dist/renderer/QueryRenderer.js +1 -1
- package/dist/validate/CommonQueryValidator.d.ts +31 -1
- package/dist/validate/CommonQueryValidator.js +253 -4
- package/dist/validate/QueryValidator.d.ts +10 -1
- package/dist/validate/QueryValidator.js +1 -1
- package/dist/validate/SQLiteQueryValidator.d.ts +16 -1
- package/dist/validate/SQLiteQueryValidator.js +32 -3
- package/dist/visitor/ParamCollector.d.ts +30 -0
- package/dist/visitor/ParamCollector.js +109 -2
- package/dist/visitor/QueryIdentityTransformer.d.ts +30 -0
- package/dist/visitor/QueryIdentityTransformer.js +217 -2
- package/dist/visitor/SqlTreeNodeVisitor.d.ts +30 -0
- package/dist/visitor/SqlTreeNodeVisitor.js +1 -1
- package/package.json +4 -1
|
@@ -2,15 +2,31 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.QueryIdentityTransformer = void 0;
|
|
4
4
|
const Alias_1 = require("../ast/Alias");
|
|
5
|
+
const AlterTableQuery_1 = require("../ast/AlterTableQuery");
|
|
6
|
+
const BetweenExpression_1 = require("../ast/BetweenExpression");
|
|
5
7
|
const BinaryExpression_1 = require("../ast/BinaryExpression");
|
|
6
8
|
const CaseExpression_1 = require("../ast/CaseExpression");
|
|
9
|
+
const CastExpression_1 = require("../ast/CastExpression");
|
|
10
|
+
const CollateExpression_1 = require("../ast/CollateExpression");
|
|
11
|
+
const SubqueryExpression_1 = require("../ast/SubqueryExpression");
|
|
12
|
+
const WindowExpression_1 = require("../ast/WindowExpression");
|
|
13
|
+
const WindowSpecification_1 = require("../ast/WindowSpecification");
|
|
7
14
|
const Column_1 = require("../ast/Column");
|
|
8
15
|
const Concat_1 = require("../ast/Concat");
|
|
16
|
+
const CreateIndexQuery_1 = require("../ast/CreateIndexQuery");
|
|
17
|
+
const CreateTableQuery_1 = require("../ast/CreateTableQuery");
|
|
18
|
+
const CreateVirtualTableQuery_1 = require("../ast/CreateVirtualTableQuery");
|
|
19
|
+
const CreateViewQuery_1 = require("../ast/CreateViewQuery");
|
|
20
|
+
const DeleteQuery_1 = require("../ast/DeleteQuery");
|
|
21
|
+
const DropIndexQuery_1 = require("../ast/DropIndexQuery");
|
|
22
|
+
const DropTableQuery_1 = require("../ast/DropTableQuery");
|
|
23
|
+
const DropViewQuery_1 = require("../ast/DropViewQuery");
|
|
9
24
|
const ExistsExpression_1 = require("../ast/ExistsExpression");
|
|
10
25
|
const From_1 = require("../ast/From");
|
|
11
26
|
const FunctionExpression_1 = require("../ast/FunctionExpression");
|
|
12
27
|
const InExpression_1 = require("../ast/InExpression");
|
|
13
28
|
const InsertQuery_1 = require("../ast/InsertQuery");
|
|
29
|
+
const UpdateQuery_1 = require("../ast/UpdateQuery");
|
|
14
30
|
const Join_1 = require("../ast/Join");
|
|
15
31
|
const Literals_1 = require("../ast/Literals");
|
|
16
32
|
const OrderBy_1 = require("../ast/OrderBy");
|
|
@@ -69,6 +85,8 @@ class QueryIdentityTransformer {
|
|
|
69
85
|
if (node['_having'])
|
|
70
86
|
newQuery['_having'] = this.expectSingle(node['_having'].accept(this), 'HAVING');
|
|
71
87
|
newQuery['_union'] = this.flatList(node['_union'].map(u => u.accept(this)));
|
|
88
|
+
newQuery['_intersect'] = this.flatList(node['_intersect'].map(i => i.accept(this)));
|
|
89
|
+
newQuery['_except'] = this.flatList(node['_except'].map(e => e.accept(this)));
|
|
72
90
|
newQuery['_orderBy'] = this.flatList(node['_orderBy'].map(o => o.accept(this)));
|
|
73
91
|
newQuery['_offset'] = node['_offset'];
|
|
74
92
|
newQuery['_limit'] = node['_limit'];
|
|
@@ -78,7 +96,181 @@ class QueryIdentityTransformer {
|
|
|
78
96
|
const newQuery = new InsertQuery_1.InsertQuery(node['_tableName']);
|
|
79
97
|
newQuery['_orReplace'] = node['_orReplace'];
|
|
80
98
|
newQuery['_columns'] = [...node['_columns']]; // Strings, reuse
|
|
81
|
-
|
|
99
|
+
if (node['_fromSelect']) {
|
|
100
|
+
newQuery['_fromSelect'] = this.expectSingle(node['_fromSelect'].accept(this), 'fromSelect');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
newQuery['_values'] = this.flatList(node['_values'].map(v => v.accept(this)));
|
|
104
|
+
}
|
|
105
|
+
// Transform ON CONFLICT clause
|
|
106
|
+
newQuery['_onConflictColumns'] = [...node['_onConflictColumns']];
|
|
107
|
+
newQuery['_doNothing'] = node['_doNothing'];
|
|
108
|
+
newQuery['_doUpdateSets'] = node['_doUpdateSets'].map(s => ({
|
|
109
|
+
column: s.column,
|
|
110
|
+
value: this.expectSingle(s.value.accept(this), 'DO UPDATE value')
|
|
111
|
+
}));
|
|
112
|
+
if (node['_onConflictWhere']) {
|
|
113
|
+
newQuery['_onConflictWhere'] = this.expectSingle(node['_onConflictWhere'].accept(this), 'ON CONFLICT WHERE');
|
|
114
|
+
}
|
|
115
|
+
newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
|
|
116
|
+
return newQuery;
|
|
117
|
+
}
|
|
118
|
+
visitDeleteQuery(node) {
|
|
119
|
+
const newQuery = new DeleteQuery_1.DeleteQuery(node['_tableName']);
|
|
120
|
+
if (node['_where']) {
|
|
121
|
+
newQuery['_where'] = this.expectSingle(node['_where'].accept(this), 'WHERE');
|
|
122
|
+
}
|
|
123
|
+
newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
|
|
124
|
+
return newQuery;
|
|
125
|
+
}
|
|
126
|
+
visitUpdateQuery(node) {
|
|
127
|
+
const newQuery = new UpdateQuery_1.UpdateQuery(node['_tableName']);
|
|
128
|
+
node['_set'].forEach(s => {
|
|
129
|
+
newQuery.set(s.column, this.expectSingle(s.value.accept(this), 'SET value'));
|
|
130
|
+
});
|
|
131
|
+
if (node['_where']) {
|
|
132
|
+
newQuery['_where'] = this.expectSingle(node['_where'].accept(this), 'WHERE');
|
|
133
|
+
}
|
|
134
|
+
newQuery['_returning'] = this.flatList(node['_returning'].map(r => r.accept(this)));
|
|
135
|
+
return newQuery;
|
|
136
|
+
}
|
|
137
|
+
visitDropTableQuery(node) {
|
|
138
|
+
const newQuery = new DropTableQuery_1.DropTableQuery(node.tableName);
|
|
139
|
+
if (node.hasIfExists) {
|
|
140
|
+
newQuery.ifExists();
|
|
141
|
+
}
|
|
142
|
+
return newQuery;
|
|
143
|
+
}
|
|
144
|
+
visitDropIndexQuery(node) {
|
|
145
|
+
const newQuery = new DropIndexQuery_1.DropIndexQuery(node.indexName);
|
|
146
|
+
if (node.hasIfExists) {
|
|
147
|
+
newQuery.ifExists();
|
|
148
|
+
}
|
|
149
|
+
return newQuery;
|
|
150
|
+
}
|
|
151
|
+
visitDropViewQuery(node) {
|
|
152
|
+
const newQuery = new DropViewQuery_1.DropViewQuery(node.viewName);
|
|
153
|
+
if (node.hasIfExists) {
|
|
154
|
+
newQuery.ifExists();
|
|
155
|
+
}
|
|
156
|
+
return newQuery;
|
|
157
|
+
}
|
|
158
|
+
visitCreateViewQuery(node) {
|
|
159
|
+
const newQuery = new CreateViewQuery_1.CreateViewQuery(node.viewName);
|
|
160
|
+
if (node.columns.length > 0) {
|
|
161
|
+
newQuery.withColumns(...node.columns);
|
|
162
|
+
}
|
|
163
|
+
if (node.isTemporary) {
|
|
164
|
+
newQuery.temporary();
|
|
165
|
+
}
|
|
166
|
+
if (node.hasIfNotExists) {
|
|
167
|
+
newQuery.ifNotExists();
|
|
168
|
+
}
|
|
169
|
+
if (node.selectQuery) {
|
|
170
|
+
newQuery.as(this.expectSingle(node.selectQuery.accept(this), 'SELECT'));
|
|
171
|
+
}
|
|
172
|
+
return newQuery;
|
|
173
|
+
}
|
|
174
|
+
visitCreateIndexQuery(node) {
|
|
175
|
+
const newQuery = new CreateIndexQuery_1.CreateIndexQuery(node.indexName);
|
|
176
|
+
newQuery.on(node.tableName, [...node.columns]);
|
|
177
|
+
if (node.isUnique) {
|
|
178
|
+
newQuery.unique();
|
|
179
|
+
}
|
|
180
|
+
if (node.hasIfNotExists) {
|
|
181
|
+
newQuery.ifNotExists();
|
|
182
|
+
}
|
|
183
|
+
if (node.whereExpression) {
|
|
184
|
+
newQuery.where(this.expectSingle(node.whereExpression.accept(this), 'WHERE'));
|
|
185
|
+
}
|
|
186
|
+
return newQuery;
|
|
187
|
+
}
|
|
188
|
+
visitAlterTableQuery(node) {
|
|
189
|
+
const newQuery = new AlterTableQuery_1.AlterTableQuery(node.tableName);
|
|
190
|
+
const op = node.operation;
|
|
191
|
+
if (op) {
|
|
192
|
+
switch (op.type) {
|
|
193
|
+
case 'ADD_COLUMN':
|
|
194
|
+
const newConstraints = { ...op.column.constraints };
|
|
195
|
+
if (op.column.constraints.check) {
|
|
196
|
+
newConstraints.check = this.expectSingle(op.column.constraints.check.accept(this), 'check constraint');
|
|
197
|
+
}
|
|
198
|
+
newQuery.addColumn(op.column.name, op.column.type, newConstraints);
|
|
199
|
+
break;
|
|
200
|
+
case 'RENAME_COLUMN':
|
|
201
|
+
newQuery.renameColumn(op.oldName, op.newName);
|
|
202
|
+
break;
|
|
203
|
+
case 'DROP_COLUMN':
|
|
204
|
+
newQuery.dropColumn(op.columnName);
|
|
205
|
+
break;
|
|
206
|
+
case 'RENAME_TABLE':
|
|
207
|
+
newQuery.renameTo(op.newTableName);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return newQuery;
|
|
212
|
+
}
|
|
213
|
+
visitCreateTableQuery(node) {
|
|
214
|
+
const newQuery = new CreateTableQuery_1.CreateTableQuery(node.tableName);
|
|
215
|
+
// Copy columns with transformed check constraints
|
|
216
|
+
for (const col of node.columns) {
|
|
217
|
+
const newConstraints = { ...col.constraints };
|
|
218
|
+
if (col.constraints.check) {
|
|
219
|
+
newConstraints.check = this.expectSingle(col.constraints.check.accept(this), 'check constraint');
|
|
220
|
+
}
|
|
221
|
+
newQuery.column(col.name, col.type, newConstraints);
|
|
222
|
+
}
|
|
223
|
+
// Copy table constraints with transformed check expressions
|
|
224
|
+
for (const constraint of node.tableConstraints) {
|
|
225
|
+
switch (constraint.type) {
|
|
226
|
+
case 'PRIMARY KEY':
|
|
227
|
+
newQuery.primaryKey(...constraint.columns);
|
|
228
|
+
break;
|
|
229
|
+
case 'UNIQUE':
|
|
230
|
+
newQuery.unique(...constraint.columns);
|
|
231
|
+
break;
|
|
232
|
+
case 'FOREIGN KEY':
|
|
233
|
+
newQuery.foreignKey(constraint.columns, constraint.references);
|
|
234
|
+
break;
|
|
235
|
+
case 'CHECK':
|
|
236
|
+
const checkExpr = this.expectSingle(constraint.check.accept(this), 'table check constraint');
|
|
237
|
+
newQuery.check(checkExpr, constraint.name);
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (node.hasIfNotExists) {
|
|
242
|
+
newQuery.ifNotExists();
|
|
243
|
+
}
|
|
244
|
+
if (node.hasWithoutRowid) {
|
|
245
|
+
newQuery.withoutRowid();
|
|
246
|
+
}
|
|
247
|
+
if (node.isStrict) {
|
|
248
|
+
newQuery.strict();
|
|
249
|
+
}
|
|
250
|
+
return newQuery;
|
|
251
|
+
}
|
|
252
|
+
visitCreateVirtualTableQuery(node) {
|
|
253
|
+
const newQuery = new CreateVirtualTableQuery_1.CreateVirtualTableQuery(node.tableName, node.module);
|
|
254
|
+
// Copy columns
|
|
255
|
+
for (const col of node.columns) {
|
|
256
|
+
newQuery.column(col);
|
|
257
|
+
}
|
|
258
|
+
// Copy options
|
|
259
|
+
if (node.options.tokenize) {
|
|
260
|
+
newQuery.tokenize(node.options.tokenize);
|
|
261
|
+
}
|
|
262
|
+
if (node.options.content) {
|
|
263
|
+
newQuery.content(node.options.content);
|
|
264
|
+
}
|
|
265
|
+
if (node.options.contentRowid) {
|
|
266
|
+
newQuery.contentRowid(node.options.contentRowid);
|
|
267
|
+
}
|
|
268
|
+
if (node.options.prefix) {
|
|
269
|
+
newQuery.prefix(node.options.prefix);
|
|
270
|
+
}
|
|
271
|
+
if (node.hasIfNotExists) {
|
|
272
|
+
newQuery.ifNotExists();
|
|
273
|
+
}
|
|
82
274
|
return newQuery;
|
|
83
275
|
}
|
|
84
276
|
visitTableFrom(node) {
|
|
@@ -110,6 +302,9 @@ class QueryIdentityTransformer {
|
|
|
110
302
|
visitBinaryExpression(node) {
|
|
111
303
|
return new BinaryExpression_1.BinaryExpression(this.expectSingle(node.left.accept(this), 'left'), node.operator, this.expectSingle(node.right.accept(this), 'right'));
|
|
112
304
|
}
|
|
305
|
+
visitBetweenExpression(node) {
|
|
306
|
+
return new BetweenExpression_1.BetweenExpression(this.expectSingle(node.operand.accept(this), 'operand'), this.expectSingle(node.low.accept(this), 'low'), this.expectSingle(node.high.accept(this), 'high'), node.not);
|
|
307
|
+
}
|
|
113
308
|
visitUnaryExpression(node) {
|
|
114
309
|
return new UnaryExpression_1.UnaryExpression(node.operator, this.expectSingle(node.operand.accept(this), 'operand'));
|
|
115
310
|
}
|
|
@@ -168,6 +363,26 @@ class QueryIdentityTransformer {
|
|
|
168
363
|
visitExistsExpression(node) {
|
|
169
364
|
return new ExistsExpression_1.ExistsExpression(this.expectSingle(node.subquery.accept(this), 'subquery'));
|
|
170
365
|
}
|
|
366
|
+
visitCastExpression(node) {
|
|
367
|
+
return new CastExpression_1.CastExpression(this.expectSingle(node.expression.accept(this), 'cast expression'), node.targetType);
|
|
368
|
+
}
|
|
369
|
+
visitCollateExpression(node) {
|
|
370
|
+
return new CollateExpression_1.CollateExpression(this.expectSingle(node.expression.accept(this), 'collate expression'), node.collation);
|
|
371
|
+
}
|
|
372
|
+
visitSubqueryExpression(node) {
|
|
373
|
+
return new SubqueryExpression_1.SubqueryExpression(this.expectSingle(node.subquery.accept(this), 'subquery'));
|
|
374
|
+
}
|
|
375
|
+
visitWindowExpression(node) {
|
|
376
|
+
const newFn = this.expectSingle(node.function.accept(this), 'window function');
|
|
377
|
+
const newWindowSpec = new WindowSpecification_1.WindowSpecification();
|
|
378
|
+
if (node.windowSpec.partitionByColumns.length > 0) {
|
|
379
|
+
newWindowSpec.setPartitionBy(this.flatList(node.windowSpec.partitionByColumns.map(c => c.accept(this))));
|
|
380
|
+
}
|
|
381
|
+
if (node.windowSpec.orderByColumns.length > 0) {
|
|
382
|
+
newWindowSpec.setOrderBy(this.flatList(node.windowSpec.orderByColumns.map(o => o.accept(this))));
|
|
383
|
+
}
|
|
384
|
+
return new WindowExpression_1.WindowExpression(newFn, newWindowSpec);
|
|
385
|
+
}
|
|
171
386
|
}
|
|
172
387
|
exports.QueryIdentityTransformer = QueryIdentityTransformer;
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdDQUFxQztBQUNyQyw4REFBMkQ7QUFDM0QsMERBQWlFO0FBQ2pFLDBDQUFtRDtBQUNuRCwwQ0FBdUM7QUFDdkMsOERBQTJEO0FBQzNELHNDQUFvRjtBQUNwRixrRUFBK0Q7QUFFL0Qsc0RBQW1EO0FBQ25ELG9EQUFpRDtBQUNqRCxzQ0FBNkM7QUFDN0MsOENBQW1GO0FBRW5GLDRDQUEyRDtBQUMzRCxvREFBaUQ7QUFDakQsNERBQXlEO0FBQ3pELHNDQUFtQztBQUduQyxNQUFhLHdCQUF3QjtJQUM1QixTQUFTLENBQUMsSUFBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxZQUFZLENBQXdCLE1BQW1DLEVBQUUsUUFBZ0I7UUFDakcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxNQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLFFBQVEsQ0FBQyxPQUF3QztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQWdCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0NBQ0Y7QUEzS0QsNERBMktDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlLCBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBTcWxUcmVlTm9kZSB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uTGlrZSB9IGZyb20gXCIuLi9hc3QvQ29sdW1uXCI7XG5pbXBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi4vYXN0L0NvbmNhdFwiO1xuaW1wb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRXhpc3RzRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnJvbSwgRnJvbUxpa2UsIEpzb25FYWNoRnJvbSwgU3VicXVlcnlGcm9tLCBUYWJsZUZyb20gfSBmcm9tIFwiLi4vYXN0L0Zyb21cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRnVuY3Rpb25FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGdW5jdGlvbk5hbWUgfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uTmFtZVwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiwgSm9pblR5cGUgfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE51bGxMaXRlcmFsLCBOdW1iZXJMaXRlcmFsLCBQYXJhbSwgU3RyaW5nTGl0ZXJhbCB9IGZyb20gXCIuLi9hc3QvTGl0ZXJhbHNcIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgT3JkZXJCeSwgT3JkZXJCeURpcmVjdGlvbiB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgU3FsVHJlZU5vZGVUcmFuc2Zvcm1lciB9IGZyb20gXCIuL1NxbFRyZWVOb2RlVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5SWRlbnRpdHlUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIge1xuICBwdWJsaWMgdHJhbnNmb3JtKG5vZGU6IFNxbFRyZWVOb2RlKTogU3FsVHJlZU5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5vZGUuYWNjZXB0KHRoaXMpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9wLWxldmVsIHRyYW5zZm9ybWF0aW9uIG11c3QgcmV0dXJuIGEgc2luZ2xlIFNxbFRyZWVOb2RlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhwZWN0U2luZ2xlPFQgZXh0ZW5kcyBTcWxUcmVlTm9kZT4ocmVzdWx0OiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10sIHR5cGVOYW1lOiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJyYXkgaW4gc2luZ2xlLW5vZGUgY29udGV4dCBmb3IgJHt0eXBlTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0KHJlc3VsdHM6IChTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10pW10pOiBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5mbGF0TWFwKHIgPT4gQXJyYXkuaXNBcnJheShyKSA/IHIgOiBbcl0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0MkQocmVzdWx0czogKFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSlbXVtdKTogU3FsVHJlZU5vZGVbXVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAoc2V0ID0+IHRoaXMuZmxhdExpc3Qoc2V0KSk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBTZWxlY3RRdWVyeSgpO1xuICAgIG5ld1F1ZXJ5WydfZGlzdGluY3QnXSA9IG5vZGVbJ19kaXN0aW5jdCddO1xuICAgIG5ld1F1ZXJ5Wydfd2l0aCddID0gdGhpcy5mbGF0TGlzdChub2RlWydfd2l0aCddLm1hcCh3ID0+IHcuYWNjZXB0KHRoaXMpKSkgYXMgV2l0aFtdO1xuICAgIG5ld1F1ZXJ5WydfZnJvbXNBbmRKb2lucyddID0gbm9kZVsnX2Zyb21zQW5kSm9pbnMnXS5tYXAoZmogPT4ge1xuICAgICAgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBmaiAmJiAnYWxpYXMnIGluIGZqKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUoZmoucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBGcm9tLCBmai5hbGlhcyk7XG4gICAgICB9IGVsc2UgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gZmopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0U2luZ2xlKChmaiBhcyBhbnkpLmFjY2VwdCh0aGlzKSwgJ2Zyb20vam9pbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20vam9pbiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICB9KSBhcyAoRnJvbUxpa2UgfCBKb2luKVtdO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gbm9kZVsnX2NvbHVtbnMnXS5tYXAoYyA9PiB7XG4gICAgICBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBjICYmICdhbGlhcycgaW4gYykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzKHRoaXMuZXhwZWN0U2luZ2xlKGMucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBBbGlhc2FibGVFeHByZXNzaW9uLCBjLmFsaWFzKTtcbiAgICAgIH0gZWxzZSBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gYykge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBlY3RTaW5nbGUoKGMgYXMgYW55KS5hY2NlcHQodGhpcyksICdjb2x1bW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2x1bW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSkgYXMgQ29sdW1uTGlrZVtdO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkgbmV3UXVlcnlbJ193aGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpLCAnV0hFUkUnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfZ3JvdXBCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfZ3JvdXBCeSddLm1hcChnID0+IGcuYWNjZXB0KHRoaXMpKSkgYXMgQ29sdW1uW107XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkgbmV3UXVlcnlbJ19oYXZpbmcnXSA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGVbJ19oYXZpbmcnXS5hY2NlcHQodGhpcyksICdIQVZJTkcnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfdW5pb24nXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3VuaW9uJ10ubWFwKHUgPT4gdS5hY2NlcHQodGhpcykpKSBhcyBTZWxlY3RRdWVyeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb3JkZXJCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfb3JkZXJCeSddLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKSkgYXMgT3JkZXJCeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb2Zmc2V0J10gPSBub2RlWydfb2Zmc2V0J107XG4gICAgbmV3UXVlcnlbJ19saW1pdCddID0gbm9kZVsnX2xpbWl0J107XG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgSW5zZXJ0UXVlcnkobm9kZVsnX3RhYmxlTmFtZSddKTtcbiAgICBuZXdRdWVyeVsnX29yUmVwbGFjZSddID0gbm9kZVsnX29yUmVwbGFjZSddO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gWy4uLm5vZGVbJ19jb2x1bW5zJ11dOyAvLyBTdHJpbmdzLCByZXVzZVxuICAgIG5ld1F1ZXJ5WydfdmFsdWVzJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVGFibGVGcm9tKG5vZGUudGFibGVOYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBTdWJxdWVyeUZyb20odGhpcy5leHBlY3RTaW5nbGUobm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyksICdzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5KTtcbiAgfVxuXG4gIHZpc2l0SnNvbkVhY2hGcm9tKG5vZGU6IEpzb25FYWNoRnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3SnNvbkV4cHIgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2pzb25FeHByZXNzaW9uJykgYXMgRXhwcmVzc2lvbjtcbiAgICBjb25zdCBuZXdKc29uUGF0aCA9IG5vZGUuanNvblBhdGggPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKSwgJ2pzb25QYXRoJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IEpzb25FYWNoRnJvbShuZXdKc29uRXhwciwgbmV3SnNvblBhdGgpO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENvbHVtbihub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS50YWJsZU5hbWUhIDogbm9kZS5jb2x1bW5OYW1lLCBub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS5jb2x1bW5OYW1lIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZpc2l0QWxpYXM8VCBleHRlbmRzIEFsaWFzYWJsZT4obm9kZTogQWxpYXM8VD4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUobm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyksICdyZWZlcmVudCcpIGFzIFQsIG5vZGUuYWxpYXMpO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgSm9pbihub2RlLnR5cGUsIG5vZGUudGFibGVOYW1lLCBub2RlLmFsaWFzLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLm9uLmFjY2VwdCh0aGlzKSwgJ29uJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlckJ5KHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuY29sdW1uLmFjY2VwdCh0aGlzKSwgJ2NvbHVtbicpIGFzIEV4cHJlc3Npb24sIG5vZGUuZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFdpdGgobm9kZS5uYW1lLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3F1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUubGVmdC5hY2NlcHQodGhpcyksICdsZWZ0JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUub3BlcmF0b3IsXG4gICAgICB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKSwgJ3JpZ2h0JykgYXMgRXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uKG5vZGUub3BlcmF0b3IsIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyksICdvcGVyYW5kJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0xlZnQgPSB0aGlzLmZsYXRMaXN0KG5vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICBsZXQgbmV3VmFsdWVzOiBFeHByZXNzaW9uW11bXSB8IFNlbGVjdFF1ZXJ5O1xuICAgIGlmIChub2RlLnZhbHVlcyBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5KSB7XG4gICAgICBuZXdWYWx1ZXMgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnZhbHVlcy5hY2NlcHQodGhpcyksICd2YWx1ZXMgc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3U2V0czogRXhwcmVzc2lvbltdW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2V0IG9mIG5vZGUudmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2V0UGFydHM6IChFeHByZXNzaW9uIHwgRXhwcmVzc2lvbltdKVtdID0gc2V0Lm1hcCh2ID0+IHYuYWNjZXB0KHRoaXMpKTtcbiAgICAgICAgaWYgKHNldC5sZW5ndGggPiAxICYmIHRyYW5zZm9ybWVkU2V0UGFydHMuc29tZShBcnJheS5pc0FycmF5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgcmVwbGFjZW1lbnQgbm90IGFsbG93ZWQgaW4gbXVsdGktY29sdW1uIHR1cGxlIHBvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldC5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZFNldFBhcnRzWzBdKSkge1xuICAgICAgICAgIC8vIFNpbmdsZS1jb2x1bW4gc3BsaWNlOiBhZGQgYXMgc2VwYXJhdGUgc2V0c1xuICAgICAgICAgIHRyYW5zZm9ybWVkU2V0UGFydHNbMF0uZm9yRWFjaChyID0+IG5ld1NldHMucHVzaChbcl0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb3JtYWwgb3IgbXVsdGktY29sdW1uIChubyBhcnJheXMpXG4gICAgICAgICAgbmV3U2V0cy5wdXNoKHRyYW5zZm9ybWVkU2V0UGFydHMgYXMgRXhwcmVzc2lvbltdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3VmFsdWVzID0gbmV3U2V0cztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbkV4cHJlc3Npb24obmV3TGVmdCwgbmV3VmFsdWVzLCBub2RlLm5vdCk7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQ29uY2F0KC4uLih0aGlzLmZsYXRMaXN0KG5vZGUuZXhwcmVzc2lvbnMubWFwKGUgPT4gZS5hY2NlcHQodGhpcykpKSBhcyBFeHByZXNzaW9uW10pKTtcbiAgfVxuXG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0Nhc2VzOiBDYXNlSXRlbVtdID0gbm9kZS5jYXNlcy5tYXAoYyA9PiAoe1xuICAgICAgd2hlbjogdGhpcy5leHBlY3RTaW5nbGUoYy53aGVuLmFjY2VwdCh0aGlzKSwgJ3doZW4nKSBhcyBFeHByZXNzaW9uLFxuICAgICAgdGhlbjogdGhpcy5leHBlY3RTaW5nbGUoYy50aGVuLmFjY2VwdCh0aGlzKSwgJ3RoZW4nKSBhcyBFeHByZXNzaW9uXG4gICAgfSkpO1xuICAgIGNvbnN0IG5ld0Vsc2UgPSBub2RlLmVsc2UgPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmVsc2UuYWNjZXB0KHRoaXMpLCAnZWxzZScpIGFzIEV4cHJlc3Npb24gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBDYXNlRXhwcmVzc2lvbihuZXdDYXNlcywgbmV3RWxzZSk7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUubmFtZSBhcyBGdW5jdGlvbk5hbWUsIHRoaXMuZmxhdExpc3Qobm9kZS5hcmdzLm1hcChhID0+IGEuYWNjZXB0KHRoaXMpKSkgYXMgRXhwcmVzc2lvbltdKTtcbiAgfVxuXG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtKG5vZGUucGFyYW1OYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3RyaW5nTGl0ZXJhbChub2RlOiBTdHJpbmdMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwobm9kZS52YWx1ZSk7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJMaXRlcmFsKG5vZGUudmFsdWUpO1xuICB9XG5cbiAgdmlzaXROdWxsTGl0ZXJhbChub2RlOiBOdWxsTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIE51bGxMaXRlcmFsLklOU1RBTkNFO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRXhpc3RzRXhwcmVzc2lvbih0aGlzLmV4cGVjdFNpbmdsZShub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3N1YnF1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG59XG4iXX0=
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdDQUFxQztBQUNyQyw0REFBeUQ7QUFDekQsZ0VBQTZEO0FBQzdELDhEQUEyRDtBQUMzRCwwREFBaUU7QUFDakUsMERBQXVEO0FBQ3ZELGdFQUE2RDtBQUM3RCxrRUFBK0Q7QUFDL0QsOERBQTJEO0FBQzNELG9FQUFpRTtBQUNqRSwwQ0FBbUQ7QUFDbkQsMENBQXVDO0FBQ3ZDLDhEQUEyRDtBQUMzRCw4REFBOEY7QUFDOUYsNEVBQXlFO0FBQ3pFLDREQUF5RDtBQUN6RCxvREFBaUQ7QUFDakQsMERBQXVEO0FBQ3ZELDBEQUF1RDtBQUN2RCx3REFBcUQ7QUFDckQsOERBQTJEO0FBQzNELHNDQUFvRjtBQUNwRixrRUFBK0Q7QUFFL0Qsc0RBQW1EO0FBQ25ELG9EQUFrRTtBQUNsRSxvREFBNEQ7QUFDNUQsc0NBQTZDO0FBQzdDLDhDQUFtRjtBQUVuRiw0Q0FBMkQ7QUFDM0Qsb0RBQWlEO0FBQ2pELDREQUF5RDtBQUN6RCxzQ0FBbUM7QUFHbkMsTUFBYSx3QkFBd0I7SUFDNUIsU0FBUyxDQUFDLElBQWlCO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRVMsWUFBWSxDQUF3QixNQUFtQyxFQUFFLFFBQWdCO1FBQ2pHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxL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QUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUIsQ0FBdUIsQ0FBQztRQUVyRyxNQUFNLGFBQWEsR0FBRyxJQUFJLHlDQUFtQixFQUFFLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxhQUFhLENBQUMsY0FBYyxDQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFpQixDQUMzRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlDLGFBQWEsQ0FBQyxVQUFVLENBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFjLENBQ3BGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLG1DQUFnQixDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0NBQ0Y7QUFqYUQsNERBaWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlLCBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBTcWxUcmVlTm9kZSB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEFsdGVyVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQWx0ZXJUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBCZXR3ZWVuRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQmV0d2VlbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc3RFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXN0RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sbGF0ZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0NvbGxhdGVFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBTdWJxdWVyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1N1YnF1ZXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2luZG93RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvV2luZG93RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2luZG93U3BlY2lmaWNhdGlvbiB9IGZyb20gXCIuLi9hc3QvV2luZG93U3BlY2lmaWNhdGlvblwiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5MaWtlIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBDcmVhdGVJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZVF1ZXJ5LCBDb2x1bW5EZWZpbml0aW9uLCBUYWJsZUNvbnN0cmFpbnQgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZVRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaXJ0dWFsVGFibGVRdWVyeVwiO1xuaW1wb3J0IHsgQ3JlYXRlVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaWV3UXVlcnlcIjtcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9EZWxldGVRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcEluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRHJvcFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BWaWV3UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BWaWV3UXVlcnlcIjtcbmltcG9ydCB7IEV4aXN0c0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0V4aXN0c0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZyb20sIEZyb21MaWtlLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnVuY3Rpb25OYW1lIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbk5hbWVcIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSwgVXBzZXJ0U2V0Q2xhdXNlIH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnksIFNldENsYXVzZSB9IGZyb20gXCIuLi9hc3QvVXBkYXRlUXVlcnlcIjtcbmltcG9ydCB7IEpvaW4sIEpvaW5UeXBlIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBOdWxsTGl0ZXJhbCwgTnVtYmVyTGl0ZXJhbCwgUGFyYW0sIFN0cmluZ0xpdGVyYWwgfSBmcm9tIFwiLi4vYXN0L0xpdGVyYWxzXCI7XG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gXCIuLi9hc3QvT3BlcmF0b3JcIjtcbmltcG9ydCB7IE9yZGVyQnksIE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tIFwiLi4vYXN0L09yZGVyQnlcIjtcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9TZWxlY3RRdWVyeVwiO1xuaW1wb3J0IHsgVW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9VbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFdpdGggfSBmcm9tIFwiLi4vYXN0L1dpdGhcIjtcbmltcG9ydCB7IFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi9TcWxUcmVlTm9kZVRyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUlkZW50aXR5VHJhbnNmb3JtZXIgaW1wbGVtZW50cyBTcWxUcmVlTm9kZVRyYW5zZm9ybWVyIHtcbiAgcHVibGljIHRyYW5zZm9ybShub2RlOiBTcWxUcmVlTm9kZSk6IFNxbFRyZWVOb2RlIHtcbiAgICBjb25zdCByZXN1bHQgPSBub2RlLmFjY2VwdCh0aGlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvcC1sZXZlbCB0cmFuc2Zvcm1hdGlvbiBtdXN0IHJldHVybiBhIHNpbmdsZSBTcWxUcmVlTm9kZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGV4cGVjdFNpbmdsZTxUIGV4dGVuZHMgU3FsVHJlZU5vZGU+KHJlc3VsdDogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdLCB0eXBlTmFtZTogc3RyaW5nKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFycmF5IGluIHNpbmdsZS1ub2RlIGNvbnRleHQgZm9yICR7dHlwZU5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgYXMgVDtcbiAgfVxuXG4gIHByb3RlY3RlZCBmbGF0TGlzdChyZXN1bHRzOiAoU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdKVtdKTogU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuZmxhdE1hcChyID0+IEFycmF5LmlzQXJyYXkocikgPyByIDogW3JdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmbGF0TGlzdDJEKHJlc3VsdHM6IChTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10pW11bXSk6IFNxbFRyZWVOb2RlW11bXSB7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKHNldCA9PiB0aGlzLmZsYXRMaXN0KHNldCkpO1xuICB9XG5cbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgU2VsZWN0UXVlcnkoKTtcbiAgICBuZXdRdWVyeVsnX2Rpc3RpbmN0J10gPSBub2RlWydfZGlzdGluY3QnXTtcbiAgICBuZXdRdWVyeVsnX3dpdGgnXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3dpdGgnXS5tYXAodyA9PiB3LmFjY2VwdCh0aGlzKSkpIGFzIFdpdGhbXTtcbiAgICBuZXdRdWVyeVsnX2Zyb21zQW5kSm9pbnMnXSA9IG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10ubWFwKGZqID0+IHtcbiAgICAgIGlmIChmaiAmJiB0eXBlb2YgZmogPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gZmogJiYgJ2FsaWFzJyBpbiBmaikge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzKHRoaXMuZXhwZWN0U2luZ2xlKGZqLnJlZmVyZW50LmFjY2VwdCh0aGlzKSwgJ3JlZmVyZW50JykgYXMgRnJvbSwgZmouYWxpYXMpO1xuICAgICAgfSBlbHNlIGlmIChmaiAmJiB0eXBlb2YgZmogPT09ICdvYmplY3QnICYmICdhY2NlcHQnIGluIGZqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGVjdFNpbmdsZSgoZmogYXMgYW55KS5hY2NlcHQodGhpcyksICdmcm9tL2pvaW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tL2pvaW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSkgYXMgKEZyb21MaWtlIHwgSm9pbilbXTtcbiAgICBuZXdRdWVyeVsnX2NvbHVtbnMnXSA9IG5vZGVbJ19jb2x1bW5zJ10ubWFwKGMgPT4ge1xuICAgICAgaWYgKGMgJiYgdHlwZW9mIGMgPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gYyAmJiAnYWxpYXMnIGluIGMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhcyh0aGlzLmV4cGVjdFNpbmdsZShjLnJlZmVyZW50LmFjY2VwdCh0aGlzKSwgJ3JlZmVyZW50JykgYXMgQWxpYXNhYmxlRXhwcmVzc2lvbiwgYy5hbGlhcyk7XG4gICAgICB9IGVsc2UgaWYgKGMgJiYgdHlwZW9mIGMgPT09ICdvYmplY3QnICYmICdhY2NlcHQnIGluIGMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0U2luZ2xlKChjIGFzIGFueSkuYWNjZXB0KHRoaXMpLCAnY29sdW1uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sdW1uIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0pIGFzIENvbHVtbkxpa2VbXTtcbiAgICBpZiAobm9kZVsnX3doZXJlJ10pIG5ld1F1ZXJ5Wydfd2hlcmUnXSA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGVbJ193aGVyZSddLmFjY2VwdCh0aGlzKSwgJ1dIRVJFJykgYXMgRXhwcmVzc2lvbjtcbiAgICBuZXdRdWVyeVsnX2dyb3VwQnknXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX2dyb3VwQnknXS5tYXAoZyA9PiBnLmFjY2VwdCh0aGlzKSkpIGFzIENvbHVtbltdO1xuICAgIGlmIChub2RlWydfaGF2aW5nJ10pIG5ld1F1ZXJ5WydfaGF2aW5nJ10gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpLCAnSEFWSU5HJykgYXMgRXhwcmVzc2lvbjtcbiAgICBuZXdRdWVyeVsnX3VuaW9uJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ191bmlvbiddLm1hcCh1ID0+IHUuYWNjZXB0KHRoaXMpKSkgYXMgU2VsZWN0UXVlcnlbXTtcbiAgICBuZXdRdWVyeVsnX2ludGVyc2VjdCddID0gdGhpcy5mbGF0TGlzdChub2RlWydfaW50ZXJzZWN0J10ubWFwKGkgPT4gaS5hY2NlcHQodGhpcykpKSBhcyBTZWxlY3RRdWVyeVtdO1xuICAgIG5ld1F1ZXJ5WydfZXhjZXB0J10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19leGNlcHQnXS5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkpIGFzIFNlbGVjdFF1ZXJ5W107XG4gICAgbmV3UXVlcnlbJ19vcmRlckJ5J10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19vcmRlckJ5J10ubWFwKG8gPT4gby5hY2NlcHQodGhpcykpKSBhcyBPcmRlckJ5W107XG4gICAgbmV3UXVlcnlbJ19vZmZzZXQnXSA9IG5vZGVbJ19vZmZzZXQnXTtcbiAgICBuZXdRdWVyeVsnX2xpbWl0J10gPSBub2RlWydfbGltaXQnXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBJbnNlcnRRdWVyeShub2RlWydfdGFibGVOYW1lJ10pO1xuICAgIG5ld1F1ZXJ5Wydfb3JSZXBsYWNlJ10gPSBub2RlWydfb3JSZXBsYWNlJ107XG4gICAgbmV3UXVlcnlbJ19jb2x1bW5zJ10gPSBbLi4ubm9kZVsnX2NvbHVtbnMnXV07IC8vIFN0cmluZ3MsIHJldXNlXG4gICAgaWYgKG5vZGVbJ19mcm9tU2VsZWN0J10pIHtcbiAgICAgIG5ld1F1ZXJ5WydfZnJvbVNlbGVjdCddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX2Zyb21TZWxlY3QnXS5hY2NlcHQodGhpcyksICdmcm9tU2VsZWN0JykgYXMgU2VsZWN0UXVlcnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1F1ZXJ5WydfdmFsdWVzJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICB9XG4gICAgLy8gVHJhbnNmb3JtIE9OIENPTkZMSUNUIGNsYXVzZVxuICAgIG5ld1F1ZXJ5Wydfb25Db25mbGljdENvbHVtbnMnXSA9IFsuLi5ub2RlWydfb25Db25mbGljdENvbHVtbnMnXV07XG4gICAgbmV3UXVlcnlbJ19kb05vdGhpbmcnXSA9IG5vZGVbJ19kb05vdGhpbmcnXTtcbiAgICBuZXdRdWVyeVsnX2RvVXBkYXRlU2V0cyddID0gbm9kZVsnX2RvVXBkYXRlU2V0cyddLm1hcChzID0+ICh7XG4gICAgICBjb2x1bW46IHMuY29sdW1uLFxuICAgICAgdmFsdWU6IHRoaXMuZXhwZWN0U2luZ2xlKHMudmFsdWUuYWNjZXB0KHRoaXMpLCAnRE8gVVBEQVRFIHZhbHVlJykgYXMgRXhwcmVzc2lvblxuICAgIH0pKSBhcyBVcHNlcnRTZXRDbGF1c2VbXTtcbiAgICBpZiAobm9kZVsnX29uQ29uZmxpY3RXaGVyZSddKSB7XG4gICAgICBuZXdRdWVyeVsnX29uQ29uZmxpY3RXaGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX29uQ29uZmxpY3RXaGVyZSddLmFjY2VwdCh0aGlzKSwgJ09OIENPTkZMSUNUIFdIRVJFJykgYXMgRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgbmV3UXVlcnlbJ19yZXR1cm5pbmcnXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3JldHVybmluZyddLm1hcChyID0+IHIuYWNjZXB0KHRoaXMpKSkgYXMgQWxpYXNhYmxlRXhwcmVzc2lvbltdO1xuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0RGVsZXRlUXVlcnkobm9kZTogRGVsZXRlUXVlcnkpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IERlbGV0ZVF1ZXJ5KG5vZGVbJ190YWJsZU5hbWUnXSk7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBuZXdRdWVyeVsnX3doZXJlJ10gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyksICdXSEVSRScpIGFzIEV4cHJlc3Npb247XG4gICAgfVxuICAgIG5ld1F1ZXJ5WydfcmV0dXJuaW5nJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ19yZXR1cm5pbmcnXS5tYXAociA9PiByLmFjY2VwdCh0aGlzKSkpIGFzIEFsaWFzYWJsZUV4cHJlc3Npb25bXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFVwZGF0ZVF1ZXJ5KG5vZGU6IFVwZGF0ZVF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBVcGRhdGVRdWVyeShub2RlWydfdGFibGVOYW1lJ10pO1xuICAgIG5vZGVbJ19zZXQnXS5mb3JFYWNoKHMgPT4ge1xuICAgICAgbmV3UXVlcnkuc2V0KHMuY29sdW1uLCB0aGlzLmV4cGVjdFNpbmdsZShzLnZhbHVlLmFjY2VwdCh0aGlzKSwgJ1NFVCB2YWx1ZScpIGFzIEV4cHJlc3Npb24pO1xuICAgIH0pO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkge1xuICAgICAgbmV3UXVlcnlbJ193aGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpLCAnV0hFUkUnKSBhcyBFeHByZXNzaW9uO1xuICAgIH1cbiAgICBuZXdRdWVyeVsnX3JldHVybmluZyddID0gdGhpcy5mbGF0TGlzdChub2RlWydfcmV0dXJuaW5nJ10ubWFwKHIgPT4gci5hY2NlcHQodGhpcykpKSBhcyBBbGlhc2FibGVFeHByZXNzaW9uW107XG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXREcm9wVGFibGVRdWVyeShub2RlOiBEcm9wVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgRHJvcFRhYmxlUXVlcnkobm9kZS50YWJsZU5hbWUpO1xuICAgIGlmIChub2RlLmhhc0lmRXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZkV4aXN0cygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdERyb3BJbmRleFF1ZXJ5KG5vZGU6IERyb3BJbmRleFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBEcm9wSW5kZXhRdWVyeShub2RlLmluZGV4TmFtZSk7XG4gICAgaWYgKG5vZGUuaGFzSWZFeGlzdHMpIHtcbiAgICAgIG5ld1F1ZXJ5LmlmRXhpc3RzKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0RHJvcFZpZXdRdWVyeShub2RlOiBEcm9wVmlld1F1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBEcm9wVmlld1F1ZXJ5KG5vZGUudmlld05hbWUpO1xuICAgIGlmIChub2RlLmhhc0lmRXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZkV4aXN0cygpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdENyZWF0ZVZpZXdRdWVyeShub2RlOiBDcmVhdGVWaWV3UXVlcnkpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IENyZWF0ZVZpZXdRdWVyeShub2RlLnZpZXdOYW1lKTtcblxuICAgIGlmIChub2RlLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgbmV3UXVlcnkud2l0aENvbHVtbnMoLi4ubm9kZS5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuaXNUZW1wb3JhcnkpIHtcbiAgICAgIG5ld1F1ZXJ5LnRlbXBvcmFyeSgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuc2VsZWN0UXVlcnkpIHtcbiAgICAgIG5ld1F1ZXJ5LmFzKHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc2VsZWN0UXVlcnkuYWNjZXB0KHRoaXMpLCAnU0VMRUNUJykgYXMgU2VsZWN0UXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0Q3JlYXRlSW5kZXhRdWVyeShub2RlOiBDcmVhdGVJbmRleFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBDcmVhdGVJbmRleFF1ZXJ5KG5vZGUuaW5kZXhOYW1lKTtcbiAgICBuZXdRdWVyeS5vbihub2RlLnRhYmxlTmFtZSwgWy4uLm5vZGUuY29sdW1uc10pO1xuXG4gICAgaWYgKG5vZGUuaXNVbmlxdWUpIHtcbiAgICAgIG5ld1F1ZXJ5LnVuaXF1ZSgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUud2hlcmVFeHByZXNzaW9uKSB7XG4gICAgICBuZXdRdWVyeS53aGVyZSh0aGlzLmV4cGVjdFNpbmdsZShub2RlLndoZXJlRXhwcmVzc2lvbi5hY2NlcHQodGhpcyksICdXSEVSRScpIGFzIEV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdRdWVyeTtcbiAgfVxuXG4gIHZpc2l0QWx0ZXJUYWJsZVF1ZXJ5KG5vZGU6IEFsdGVyVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQWx0ZXJUYWJsZVF1ZXJ5KG5vZGUudGFibGVOYW1lKTtcbiAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuXG4gICAgaWYgKG9wKSB7XG4gICAgICBzd2l0Y2ggKG9wLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnQUREX0NPTFVNTic6XG4gICAgICAgICAgY29uc3QgbmV3Q29uc3RyYWludHMgPSB7IC4uLm9wLmNvbHVtbi5jb25zdHJhaW50cyB9O1xuICAgICAgICAgIGlmIChvcC5jb2x1bW4uY29uc3RyYWludHMuY2hlY2spIHtcbiAgICAgICAgICAgIG5ld0NvbnN0cmFpbnRzLmNoZWNrID0gdGhpcy5leHBlY3RTaW5nbGUob3AuY29sdW1uLmNvbnN0cmFpbnRzLmNoZWNrLmFjY2VwdCh0aGlzKSwgJ2NoZWNrIGNvbnN0cmFpbnQnKSBhcyBFeHByZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdRdWVyeS5hZGRDb2x1bW4ob3AuY29sdW1uLm5hbWUsIG9wLmNvbHVtbi50eXBlLCBuZXdDb25zdHJhaW50cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1JFTkFNRV9DT0xVTU4nOlxuICAgICAgICAgIG5ld1F1ZXJ5LnJlbmFtZUNvbHVtbihvcC5vbGROYW1lLCBvcC5uZXdOYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRFJPUF9DT0xVTU4nOlxuICAgICAgICAgIG5ld1F1ZXJ5LmRyb3BDb2x1bW4ob3AuY29sdW1uTmFtZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1JFTkFNRV9UQUJMRSc6XG4gICAgICAgICAgbmV3UXVlcnkucmVuYW1lVG8ob3AubmV3VGFibGVOYW1lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdENyZWF0ZVRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQ3JlYXRlVGFibGVRdWVyeShub2RlLnRhYmxlTmFtZSk7XG5cbiAgICAvLyBDb3B5IGNvbHVtbnMgd2l0aCB0cmFuc2Zvcm1lZCBjaGVjayBjb25zdHJhaW50c1xuICAgIGZvciAoY29uc3QgY29sIG9mIG5vZGUuY29sdW1ucykge1xuICAgICAgY29uc3QgbmV3Q29uc3RyYWludHMgPSB7IC4uLmNvbC5jb25zdHJhaW50cyB9O1xuICAgICAgaWYgKGNvbC5jb25zdHJhaW50cy5jaGVjaykge1xuICAgICAgICBuZXdDb25zdHJhaW50cy5jaGVjayA9IHRoaXMuZXhwZWN0U2luZ2xlKGNvbC5jb25zdHJhaW50cy5jaGVjay5hY2NlcHQodGhpcyksICdjaGVjayBjb25zdHJhaW50JykgYXMgRXhwcmVzc2lvbjtcbiAgICAgIH1cbiAgICAgIG5ld1F1ZXJ5LmNvbHVtbihjb2wubmFtZSwgY29sLnR5cGUsIG5ld0NvbnN0cmFpbnRzKTtcbiAgICB9XG5cbiAgICAvLyBDb3B5IHRhYmxlIGNvbnN0cmFpbnRzIHdpdGggdHJhbnNmb3JtZWQgY2hlY2sgZXhwcmVzc2lvbnNcbiAgICBmb3IgKGNvbnN0IGNvbnN0cmFpbnQgb2Ygbm9kZS50YWJsZUNvbnN0cmFpbnRzKSB7XG4gICAgICBzd2l0Y2ggKGNvbnN0cmFpbnQudHlwZSkge1xuICAgICAgICBjYXNlICdQUklNQVJZIEtFWSc6XG4gICAgICAgICAgbmV3UXVlcnkucHJpbWFyeUtleSguLi5jb25zdHJhaW50LmNvbHVtbnMhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVU5JUVVFJzpcbiAgICAgICAgICBuZXdRdWVyeS51bmlxdWUoLi4uY29uc3RyYWludC5jb2x1bW5zISk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0ZPUkVJR04gS0VZJzpcbiAgICAgICAgICBuZXdRdWVyeS5mb3JlaWduS2V5KGNvbnN0cmFpbnQuY29sdW1ucyEsIGNvbnN0cmFpbnQucmVmZXJlbmNlcyEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdDSEVDSyc6XG4gICAgICAgICAgY29uc3QgY2hlY2tFeHByID0gdGhpcy5leHBlY3RTaW5nbGUoY29uc3RyYWludC5jaGVjayEuYWNjZXB0KHRoaXMpLCAndGFibGUgY2hlY2sgY29uc3RyYWludCcpIGFzIEV4cHJlc3Npb247XG4gICAgICAgICAgbmV3UXVlcnkuY2hlY2soY2hlY2tFeHByLCBjb25zdHJhaW50Lm5hbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2RlLmhhc0lmTm90RXhpc3RzKSB7XG4gICAgICBuZXdRdWVyeS5pZk5vdEV4aXN0cygpO1xuICAgIH1cbiAgICBpZiAobm9kZS5oYXNXaXRob3V0Um93aWQpIHtcbiAgICAgIG5ld1F1ZXJ5LndpdGhvdXRSb3dpZCgpO1xuICAgIH1cbiAgICBpZiAobm9kZS5pc1N0cmljdCkge1xuICAgICAgbmV3UXVlcnkuc3RyaWN0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXRDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeShub2RlOiBDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnkobm9kZS50YWJsZU5hbWUsIG5vZGUubW9kdWxlKTtcblxuICAgIC8vIENvcHkgY29sdW1uc1xuICAgIGZvciAoY29uc3QgY29sIG9mIG5vZGUuY29sdW1ucykge1xuICAgICAgbmV3UXVlcnkuY29sdW1uKGNvbCk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBvcHRpb25zXG4gICAgaWYgKG5vZGUub3B0aW9ucy50b2tlbml6ZSkge1xuICAgICAgbmV3UXVlcnkudG9rZW5pemUobm9kZS5vcHRpb25zLnRva2VuaXplKTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICBuZXdRdWVyeS5jb250ZW50KG5vZGUub3B0aW9ucy5jb250ZW50KTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50Um93aWQpIHtcbiAgICAgIG5ld1F1ZXJ5LmNvbnRlbnRSb3dpZChub2RlLm9wdGlvbnMuY29udGVudFJvd2lkKTtcbiAgICB9XG4gICAgaWYgKG5vZGUub3B0aW9ucy5wcmVmaXgpIHtcbiAgICAgIG5ld1F1ZXJ5LnByZWZpeChub2RlLm9wdGlvbnMucHJlZml4KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5oYXNJZk5vdEV4aXN0cykge1xuICAgICAgbmV3UXVlcnkuaWZOb3RFeGlzdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVGFibGVGcm9tKG5vZGUudGFibGVOYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBTdWJxdWVyeUZyb20odGhpcy5leHBlY3RTaW5nbGUobm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyksICdzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5KTtcbiAgfVxuXG4gIHZpc2l0SnNvbkVhY2hGcm9tKG5vZGU6IEpzb25FYWNoRnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3SnNvbkV4cHIgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2pzb25FeHByZXNzaW9uJykgYXMgRXhwcmVzc2lvbjtcbiAgICBjb25zdCBuZXdKc29uUGF0aCA9IG5vZGUuanNvblBhdGggPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKSwgJ2pzb25QYXRoJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IEpzb25FYWNoRnJvbShuZXdKc29uRXhwciwgbmV3SnNvblBhdGgpO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENvbHVtbihub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS50YWJsZU5hbWUhIDogbm9kZS5jb2x1bW5OYW1lLCBub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS5jb2x1bW5OYW1lIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZpc2l0QWxpYXM8VCBleHRlbmRzIEFsaWFzYWJsZT4obm9kZTogQWxpYXM8VD4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUobm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyksICdyZWZlcmVudCcpIGFzIFQsIG5vZGUuYWxpYXMpO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgSm9pbihub2RlLnR5cGUsIG5vZGUudGFibGVOYW1lLCBub2RlLmFsaWFzLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLm9uLmFjY2VwdCh0aGlzKSwgJ29uJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlckJ5KHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuY29sdW1uLmFjY2VwdCh0aGlzKSwgJ2NvbHVtbicpIGFzIEV4cHJlc3Npb24sIG5vZGUuZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFdpdGgobm9kZS5uYW1lLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3F1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUubGVmdC5hY2NlcHQodGhpcyksICdsZWZ0JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUub3BlcmF0b3IsXG4gICAgICB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKSwgJ3JpZ2h0JykgYXMgRXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICB2aXNpdEJldHdlZW5FeHByZXNzaW9uKG5vZGU6IEJldHdlZW5FeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IEJldHdlZW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKSwgJ29wZXJhbmQnKSBhcyBFeHByZXNzaW9uLFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5sb3cuYWNjZXB0KHRoaXMpLCAnbG93JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuaGlnaC5hY2NlcHQodGhpcyksICdoaWdoJykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUubm90XG4gICAgKTtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBVbmFyeUV4cHJlc3Npb24obm9kZS5vcGVyYXRvciwgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKSwgJ29wZXJhbmQnKSBhcyBFeHByZXNzaW9uKTtcbiAgfVxuXG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3TGVmdCA9IHRoaXMuZmxhdExpc3Qobm9kZS5sZWZ0Lm1hcChsID0+IGwuYWNjZXB0KHRoaXMpKSkgYXMgRXhwcmVzc2lvbltdO1xuICAgIGxldCBuZXdWYWx1ZXM6IEV4cHJlc3Npb25bXVtdIHwgU2VsZWN0UXVlcnk7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIG5ld1ZhbHVlcyA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUudmFsdWVzLmFjY2VwdCh0aGlzKSwgJ3ZhbHVlcyBzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTZXRzOiBFeHByZXNzaW9uW11bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBzZXQgb2Ygbm9kZS52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTZXRQYXJ0czogKEV4cHJlc3Npb24gfCBFeHByZXNzaW9uW10pW10gPSBzZXQubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpO1xuICAgICAgICBpZiAoc2V0Lmxlbmd0aCA+IDEgJiYgdHJhbnNmb3JtZWRTZXRQYXJ0cy5zb21lKEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSByZXBsYWNlbWVudCBub3QgYWxsb3dlZCBpbiBtdWx0aS1jb2x1bW4gdHVwbGUgcG9zaXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkU2V0UGFydHNbMF0pKSB7XG4gICAgICAgICAgLy8gU2luZ2xlLWNvbHVtbiBzcGxpY2U6IGFkZCBhcyBzZXBhcmF0ZSBzZXRzXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZXRQYXJ0c1swXS5mb3JFYWNoKHIgPT4gbmV3U2V0cy5wdXNoKFtyXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vcm1hbCBvciBtdWx0aS1jb2x1bW4gKG5vIGFycmF5cylcbiAgICAgICAgICBuZXdTZXRzLnB1c2godHJhbnNmb3JtZWRTZXRQYXJ0cyBhcyBFeHByZXNzaW9uW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXdWYWx1ZXMgPSBuZXdTZXRzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEluRXhwcmVzc2lvbihuZXdMZWZ0LCBuZXdWYWx1ZXMsIG5vZGUubm90KTtcbiAgfVxuXG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBDb25jYXQoLi4uKHRoaXMuZmxhdExpc3Qobm9kZS5leHByZXNzaW9ucy5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXSkpO1xuICB9XG5cbiAgdmlzaXRDYXNlRXhwcmVzc2lvbihub2RlOiBDYXNlRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3Q2FzZXM6IENhc2VJdGVtW10gPSBub2RlLmNhc2VzLm1hcChjID0+ICh7XG4gICAgICB3aGVuOiB0aGlzLmV4cGVjdFNpbmdsZShjLndoZW4uYWNjZXB0KHRoaXMpLCAnd2hlbicpIGFzIEV4cHJlc3Npb24sXG4gICAgICB0aGVuOiB0aGlzLmV4cGVjdFNpbmdsZShjLnRoZW4uYWNjZXB0KHRoaXMpLCAndGhlbicpIGFzIEV4cHJlc3Npb25cbiAgICB9KSk7XG4gICAgY29uc3QgbmV3RWxzZSA9IG5vZGUuZWxzZSA/IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuZWxzZS5hY2NlcHQodGhpcyksICdlbHNlJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IENhc2VFeHByZXNzaW9uKG5ld0Nhc2VzLCBuZXdFbHNlKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24obm9kZS5uYW1lIGFzIEZ1bmN0aW9uTmFtZSwgdGhpcy5mbGF0TGlzdChub2RlLmFyZ3MubWFwKGEgPT4gYS5hY2NlcHQodGhpcykpKSBhcyBFeHByZXNzaW9uW10pO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24obm9kZTogUGFyYW0pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgUGFyYW0obm9kZS5wYXJhbU5hbWUpO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTtcbiAgfVxuXG4gIHZpc2l0TnVtYmVyTGl0ZXJhbChub2RlOiBOdW1iZXJMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IE51bWJlckxpdGVyYWwobm9kZS52YWx1ZSk7XG4gIH1cblxuICB2aXNpdE51bGxMaXRlcmFsKG5vZGU6IE51bGxMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gTnVsbExpdGVyYWwuSU5TVEFOQ0U7XG4gIH1cblxuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBFeGlzdHNFeHByZXNzaW9uKHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpLCAnc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeSk7XG4gIH1cblxuICB2aXNpdENhc3RFeHByZXNzaW9uKG5vZGU6IENhc3RFeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENhc3RFeHByZXNzaW9uKFxuICAgICAgdGhpcy5leHBlY3RTaW5nbGUobm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2Nhc3QgZXhwcmVzc2lvbicpIGFzIEV4cHJlc3Npb24sXG4gICAgICBub2RlLnRhcmdldFR5cGVcbiAgICApO1xuICB9XG5cbiAgdmlzaXRDb2xsYXRlRXhwcmVzc2lvbihub2RlOiBDb2xsYXRlRXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBDb2xsYXRlRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyksICdjb2xsYXRlIGV4cHJlc3Npb24nKSBhcyBFeHByZXNzaW9uLFxuICAgICAgbm9kZS5jb2xsYXRpb25cbiAgICApO1xuICB9XG5cbiAgdmlzaXRTdWJxdWVyeUV4cHJlc3Npb24obm9kZTogU3VicXVlcnlFeHByZXNzaW9uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFN1YnF1ZXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpLCAnc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeVxuICAgICk7XG4gIH1cblxuICB2aXNpdFdpbmRvd0V4cHJlc3Npb24obm9kZTogV2luZG93RXhwcmVzc2lvbik6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3Rm4gPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKSwgJ3dpbmRvdyBmdW5jdGlvbicpIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0IG5ld1dpbmRvd1NwZWMgPSBuZXcgV2luZG93U3BlY2lmaWNhdGlvbigpO1xuICAgIGlmIChub2RlLndpbmRvd1NwZWMucGFydGl0aW9uQnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIG5ld1dpbmRvd1NwZWMuc2V0UGFydGl0aW9uQnkoXG4gICAgICAgIHRoaXMuZmxhdExpc3Qobm9kZS53aW5kb3dTcGVjLnBhcnRpdGlvbkJ5Q29sdW1ucy5tYXAoYyA9PiBjLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG5vZGUud2luZG93U3BlYy5vcmRlckJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXdXaW5kb3dTcGVjLnNldE9yZGVyQnkoXG4gICAgICAgIHRoaXMuZmxhdExpc3Qobm9kZS53aW5kb3dTcGVjLm9yZGVyQnlDb2x1bW5zLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKSkgYXMgT3JkZXJCeVtdXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgV2luZG93RXhwcmVzc2lvbihuZXdGbiwgbmV3V2luZG93U3BlYyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
import { Alias } from "../ast/Alias";
|
|
2
|
+
import { AlterTableQuery } from "../ast/AlterTableQuery";
|
|
3
|
+
import { BetweenExpression } from "../ast/BetweenExpression";
|
|
2
4
|
import { BinaryExpression } from "../ast/BinaryExpression";
|
|
3
5
|
import { CaseExpression } from "../ast/CaseExpression";
|
|
6
|
+
import { CastExpression } from "../ast/CastExpression";
|
|
7
|
+
import { CollateExpression } from "../ast/CollateExpression";
|
|
8
|
+
import { SubqueryExpression } from "../ast/SubqueryExpression";
|
|
9
|
+
import { WindowExpression } from "../ast/WindowExpression";
|
|
4
10
|
import { Column, ColumnLike } from "../ast/Column";
|
|
5
11
|
import { Concat } from "../ast/Concat";
|
|
12
|
+
import { CreateIndexQuery } from "../ast/CreateIndexQuery";
|
|
13
|
+
import { CreateTableQuery } from "../ast/CreateTableQuery";
|
|
14
|
+
import { CreateVirtualTableQuery } from "../ast/CreateVirtualTableQuery";
|
|
15
|
+
import { CreateViewQuery } from "../ast/CreateViewQuery";
|
|
16
|
+
import { DeleteQuery } from "../ast/DeleteQuery";
|
|
17
|
+
import { DropIndexQuery } from "../ast/DropIndexQuery";
|
|
18
|
+
import { DropTableQuery } from "../ast/DropTableQuery";
|
|
19
|
+
import { DropViewQuery } from "../ast/DropViewQuery";
|
|
6
20
|
import { ExistsExpression } from "../ast/ExistsExpression";
|
|
7
21
|
import { FromLike, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
|
|
8
22
|
import { FunctionExpression } from "../ast/FunctionExpression";
|
|
9
23
|
import { InExpression } from "../ast/InExpression";
|
|
10
24
|
import { InsertQuery } from "../ast/InsertQuery";
|
|
25
|
+
import { UpdateQuery } from "../ast/UpdateQuery";
|
|
11
26
|
import { Join } from "../ast/Join";
|
|
12
27
|
import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
|
|
13
28
|
import { OrderBy } from "../ast/OrderBy";
|
|
@@ -17,6 +32,16 @@ import { With } from "../ast/With";
|
|
|
17
32
|
export interface SqlTreeNodeVisitor<T> {
|
|
18
33
|
visitSelectQuery(node: SelectQuery): T;
|
|
19
34
|
visitInsertQuery(node: InsertQuery): T;
|
|
35
|
+
visitDeleteQuery(node: DeleteQuery): T;
|
|
36
|
+
visitUpdateQuery(node: UpdateQuery): T;
|
|
37
|
+
visitCreateTableQuery(node: CreateTableQuery): T;
|
|
38
|
+
visitCreateVirtualTableQuery(node: CreateVirtualTableQuery): T;
|
|
39
|
+
visitCreateIndexQuery(node: CreateIndexQuery): T;
|
|
40
|
+
visitCreateViewQuery(node: CreateViewQuery): T;
|
|
41
|
+
visitAlterTableQuery(node: AlterTableQuery): T;
|
|
42
|
+
visitDropTableQuery(node: DropTableQuery): T;
|
|
43
|
+
visitDropIndexQuery(node: DropIndexQuery): T;
|
|
44
|
+
visitDropViewQuery(node: DropViewQuery): T;
|
|
20
45
|
visitTableFrom(node: TableFrom): T;
|
|
21
46
|
visitSubqueryFrom(node: SubqueryFrom): T;
|
|
22
47
|
visitJsonEachFrom(node: JsonEachFrom): T;
|
|
@@ -26,10 +51,15 @@ export interface SqlTreeNodeVisitor<T> {
|
|
|
26
51
|
visitColumn(node: Column): T;
|
|
27
52
|
visitAlias(node: Alias<any>): T;
|
|
28
53
|
visitBinaryExpression(node: BinaryExpression): T;
|
|
54
|
+
visitBetweenExpression(node: BetweenExpression): T;
|
|
29
55
|
visitUnaryExpression(node: UnaryExpression): T;
|
|
30
56
|
visitInExpression(node: InExpression): T;
|
|
31
57
|
visitConcat(node: Concat): T;
|
|
32
58
|
visitCaseExpression(node: CaseExpression): T;
|
|
59
|
+
visitCastExpression(node: CastExpression): T;
|
|
60
|
+
visitCollateExpression(node: CollateExpression): T;
|
|
61
|
+
visitSubqueryExpression(node: SubqueryExpression): T;
|
|
62
|
+
visitWindowExpression(node: WindowExpression): T;
|
|
33
63
|
visitFunctionExpression(node: FunctionExpression): T;
|
|
34
64
|
visitParamExpression(node: Param): T;
|
|
35
65
|
visitStringLiteral(node: StringLiteral): T;
|
|
@@ -44,4 +44,4 @@ class ColumnLikeVisitorAcceptor {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
exports.ColumnLikeVisitorAcceptor = ColumnLikeVisitorAcceptor;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVHJlZU5vZGVWaXNpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUEwRDtBQUMxRCx3Q0FBcUM7QUFTckMsMENBQW1EO0FBV25ELHNDQUE4RTtBQUs5RSxzQ0FBbUM7QUFDbkMsOENBQXNHO0FBNkN0RyxNQUFhLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsT0FBOEIsRUFBRSxDQUFnQjtRQUM1RCxJQUFJLENBQUMsWUFBWSxXQUFJO1lBQ2pCLENBQUMsWUFBWSxnQkFBUztZQUN0QixDQUFDLFlBQVksbUJBQVk7WUFDekIsQ0FBQyxZQUFZLG1CQUFZO1lBQ3pCLENBQUMsWUFBWSxhQUFLLEVBQ3BCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaEJELHdFQWdCQztBQUVELE1BQWEseUJBQXlCO0lBQzdCLE1BQU0sQ0FBQyxPQUE4QixFQUFFLENBQWE7UUFDekQsSUFDRSxDQUFDLFlBQVksZUFBTTtZQUNuQixDQUFDLFlBQVksNEJBQWlCO1lBQzlCLENBQUMsWUFBWSxrQ0FBbUI7WUFDaEMsQ0FBQyxZQUFZLGFBQUssRUFDbEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSyxDQUFFLENBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoQkQsOERBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEFsdGVyVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQWx0ZXJUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBCZXR3ZWVuRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQmV0d2VlbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ2FzdEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Nhc3RFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDb2xsYXRlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQ29sbGF0ZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFN1YnF1ZXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvU3VicXVlcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaW5kb3dFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9XaW5kb3dFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkxpa2UgfSBmcm9tIFwiLi4vYXN0L0NvbHVtblwiO1xuaW1wb3J0IHsgQ29uY2F0IH0gZnJvbSBcIi4uL2FzdC9Db25jYXRcIjtcbmltcG9ydCB7IENyZWF0ZUluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZUluZGV4UXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVRhYmxlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L0NyZWF0ZVRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaXJ0dWFsVGFibGVRdWVyeVwiO1xuaW1wb3J0IHsgQ3JlYXRlVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVWaWV3UXVlcnlcIjtcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9EZWxldGVRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcEluZGV4UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRHJvcFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BWaWV3UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BWaWV3UXVlcnlcIjtcbmltcG9ydCB7IEV4aXN0c0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0V4aXN0c0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZyb21MaWtlLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L1VwZGF0ZVF1ZXJ5XCI7XG5pbXBvcnQgeyBKb2luIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBMaXRlcmFsRXhwcmVzc2lvbiwgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFRyZWVOb2RlVmlzaXRvcjxUPiB7XG4gIHZpc2l0U2VsZWN0UXVlcnkobm9kZTogU2VsZWN0UXVlcnkpOiBUO1xuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogVDtcbiAgdmlzaXREZWxldGVRdWVyeShub2RlOiBEZWxldGVRdWVyeSk6IFQ7XG4gIHZpc2l0VXBkYXRlUXVlcnkobm9kZTogVXBkYXRlUXVlcnkpOiBUO1xuICB2aXNpdENyZWF0ZVRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVGFibGVRdWVyeSk6IFQ7XG4gIHZpc2l0Q3JlYXRlVmlydHVhbFRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnkpOiBUO1xuICB2aXNpdENyZWF0ZUluZGV4UXVlcnkobm9kZTogQ3JlYXRlSW5kZXhRdWVyeSk6IFQ7XG4gIHZpc2l0Q3JlYXRlVmlld1F1ZXJ5KG5vZGU6IENyZWF0ZVZpZXdRdWVyeSk6IFQ7XG4gIHZpc2l0QWx0ZXJUYWJsZVF1ZXJ5KG5vZGU6IEFsdGVyVGFibGVRdWVyeSk6IFQ7XG4gIHZpc2l0RHJvcFRhYmxlUXVlcnkobm9kZTogRHJvcFRhYmxlUXVlcnkpOiBUO1xuICB2aXNpdERyb3BJbmRleFF1ZXJ5KG5vZGU6IERyb3BJbmRleFF1ZXJ5KTogVDtcbiAgdmlzaXREcm9wVmlld1F1ZXJ5KG5vZGU6IERyb3BWaWV3UXVlcnkpOiBUO1xuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBUO1xuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBUO1xuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IFQ7XG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogVDtcbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBUO1xuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBUO1xuICB2aXNpdEFsaWFzKG5vZGU6IEFsaWFzPGFueT4pOiBUO1xuICB2aXNpdEJpbmFyeUV4cHJlc3Npb24obm9kZTogQmluYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0QmV0d2VlbkV4cHJlc3Npb24obm9kZTogQmV0d2VlbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBUO1xuICB2aXNpdENhc2VFeHByZXNzaW9uKG5vZGU6IENhc2VFeHByZXNzaW9uKTogVDtcbiAgdmlzaXRDYXN0RXhwcmVzc2lvbihub2RlOiBDYXN0RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0Q29sbGF0ZUV4cHJlc3Npb24obm9kZTogQ29sbGF0ZUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RXhwcmVzc2lvbihub2RlOiBTdWJxdWVyeUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFdpbmRvd0V4cHJlc3Npb24obm9kZTogV2luZG93RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogVDtcbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBUO1xuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IFQ7XG4gIHZpc2l0TnVsbExpdGVyYWwobm9kZTogTnVsbExpdGVyYWwpOiBUO1xuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3I8VD4ge1xuICBwdWJsaWMgYWNjZXB0KHZpc2l0b3I6IFNxbFRyZWVOb2RlVmlzaXRvcjxUPiwgZjogRnJvbUxpa2V8Sm9pbik6IFQge1xuICAgIGlmIChmIGluc3RhbmNlb2YgSm9pbiB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgVGFibGVGcm9tIHx8XG4gICAgICAgIGYgaW5zdGFuY2VvZiBTdWJxdWVyeUZyb20gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIEpzb25FYWNoRnJvbSB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgQWxpYXNcbiAgICApIHtcbiAgICAgIHJldHVybiBmLmFjY2VwdCh2aXNpdG9yKTtcbiAgICB9IGVsc2UgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmICdyZWZlcmVudCcgaW4gZiAmJiAnYWxpYXMnIGluIGYpIHtcbiAgICAgIGNvbnN0IGFsaWFzID0gbmV3IEFsaWFzKGYucmVmZXJlbnQsIGYuYWxpYXMpO1xuICAgICAgcmV0dXJuIGFsaWFzLmFjY2VwdCh2aXNpdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEZST00gY2xhdXNlOiAnICsgSlNPTi5zdHJpbmdpZnkoZikpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvcjxUPiB7XG4gIHB1YmxpYyBhY2NlcHQodmlzaXRvcjogU3FsVHJlZU5vZGVWaXNpdG9yPFQ+LCBjOiBDb2x1bW5MaWtlKTogVCB7XG4gICAgaWYgKFxuICAgICAgYyBpbnN0YW5jZW9mIENvbHVtbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIExpdGVyYWxFeHByZXNzaW9uIHx8XG4gICAgICBjIGluc3RhbmNlb2YgQWxpYXNhYmxlRXhwcmVzc2lvbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIEFsaWFzXG4gICAgKSB7XG4gICAgICByZXR1cm4gYy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIGlmIChjICYmIHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiAncmVmZXJlbnQnIGluIGMgJiYgJ2FsaWFzJyBpbiBjKSB7XG4gICAgICBjb25zdCBhbGlhcyA9IG5ldyBBbGlhcygoYyBhcyBhbnkpLnJlZmVyZW50LCBjLmFsaWFzKTtcbiAgICAgIHJldHVybiBhbGlhcy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBDT0xVTU4gY2xhdXNlOiAnICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shaxpir/squilt",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "A lightweight, zero-dependency TypeScript library for building SQL queries through a fluent AST API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -32,5 +32,8 @@
|
|
|
32
32
|
"jest": "^29.7.0",
|
|
33
33
|
"ts-jest": "^29.2.5",
|
|
34
34
|
"typescript": "^5.7.2"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@shaxpir/squilt": "^1.0.0"
|
|
35
38
|
}
|
|
36
39
|
}
|