@shaxpir/squilt 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +133 -0
- package/dist/ast/Abstractions.d.ts +14 -0
- package/dist/ast/Abstractions.js +11 -0
- package/dist/ast/Alias.d.ts +11 -0
- package/dist/ast/Alias.js +23 -0
- package/dist/ast/BinaryExpression.d.ts +13 -0
- package/dist/ast/BinaryExpression.js +26 -0
- package/dist/ast/CaseExpression.d.ts +14 -0
- package/dist/ast/CaseExpression.js +22 -0
- package/dist/ast/Column.d.ts +17 -0
- package/dist/ast/Column.js +38 -0
- package/dist/ast/Concat.d.ts +8 -0
- package/dist/ast/Concat.js +19 -0
- package/dist/ast/ExistsExpression.d.ts +9 -0
- package/dist/ast/ExistsExpression.js +18 -0
- package/dist/ast/From.d.ts +33 -0
- package/dist/ast/From.js +60 -0
- package/dist/ast/FunctionExpression.d.ts +13 -0
- package/dist/ast/FunctionExpression.js +27 -0
- package/dist/ast/FunctionName.d.ts +1 -0
- package/dist/ast/FunctionName.js +3 -0
- package/dist/ast/InExpression.d.ts +13 -0
- package/dist/ast/InExpression.js +35 -0
- package/dist/ast/InsertQuery.d.ts +17 -0
- package/dist/ast/InsertQuery.js +42 -0
- package/dist/ast/Join.d.ts +21 -0
- package/dist/ast/Join.js +37 -0
- package/dist/ast/Literals.d.ts +31 -0
- package/dist/ast/Literals.js +65 -0
- package/dist/ast/Operator.d.ts +18 -0
- package/dist/ast/Operator.js +23 -0
- package/dist/ast/OrderBy.d.ts +14 -0
- package/dist/ast/OrderBy.js +25 -0
- package/dist/ast/SelectQuery.d.ts +39 -0
- package/dist/ast/SelectQuery.js +109 -0
- package/dist/ast/UnaryExpression.d.ts +11 -0
- package/dist/ast/UnaryExpression.js +22 -0
- package/dist/ast/With.d.ts +11 -0
- package/dist/ast/With.js +21 -0
- package/dist/builder/QueryBuilder.d.ts +8 -0
- package/dist/builder/QueryBuilder.js +20 -0
- package/dist/builder/Shorthand.d.ts +77 -0
- package/dist/builder/Shorthand.js +375 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +133 -0
- package/dist/renderer/CompactQueryRenderer.d.ts +45 -0
- package/dist/renderer/CompactQueryRenderer.js +192 -0
- package/dist/renderer/IndentedQueryRenderer.d.ts +51 -0
- package/dist/renderer/IndentedQueryRenderer.js +230 -0
- package/dist/renderer/QueryRenderer.d.ts +8 -0
- package/dist/renderer/QueryRenderer.js +77 -0
- package/dist/validate/CommonQueryValidator.d.ts +50 -0
- package/dist/validate/CommonQueryValidator.js +262 -0
- package/dist/validate/QueryValidator.d.ts +6 -0
- package/dist/validate/QueryValidator.js +3 -0
- package/dist/validate/SQLiteQueryValidator.d.ts +27 -0
- package/dist/validate/SQLiteQueryValidator.js +96 -0
- package/dist/visitor/ParamCollector.d.ts +46 -0
- package/dist/visitor/ParamCollector.js +129 -0
- package/dist/visitor/QueryIdentityTransformer.d.ts +45 -0
- package/dist/visitor/QueryIdentityTransformer.js +173 -0
- package/dist/visitor/QueryParamRewriteTransformer.d.ts +11 -0
- package/dist/visitor/QueryParamRewriteTransformer.js +26 -0
- package/dist/visitor/SqlTreeNodeTransformer.d.ts +5 -0
- package/dist/visitor/SqlTreeNodeTransformer.js +3 -0
- package/dist/visitor/SqlTreeNodeVisitor.d.ts +45 -0
- package/dist/visitor/SqlTreeNodeVisitor.js +47 -0
- package/package.json +36 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VAL = VAL;
|
|
4
|
+
exports.EQ = EQ;
|
|
5
|
+
exports.NOT_EQ = NOT_EQ;
|
|
6
|
+
exports.NOT = NOT;
|
|
7
|
+
exports.GT = GT;
|
|
8
|
+
exports.LT = LT;
|
|
9
|
+
exports.GTE = GTE;
|
|
10
|
+
exports.LTE = LTE;
|
|
11
|
+
exports.LIKE = LIKE;
|
|
12
|
+
exports.IS_NULL = IS_NULL;
|
|
13
|
+
exports.IS_NOT_NULL = IS_NOT_NULL;
|
|
14
|
+
exports.PLUS = PLUS;
|
|
15
|
+
exports.MINUS = MINUS;
|
|
16
|
+
exports.MULTIPLY = MULTIPLY;
|
|
17
|
+
exports.DIVIDE = DIVIDE;
|
|
18
|
+
exports.AND = AND;
|
|
19
|
+
exports.OR = OR;
|
|
20
|
+
exports.EXISTS = EXISTS;
|
|
21
|
+
exports.COLUMN = COLUMN;
|
|
22
|
+
exports.SELECT = SELECT;
|
|
23
|
+
exports.SELECT_DISTINCT = SELECT_DISTINCT;
|
|
24
|
+
exports.FROM = FROM;
|
|
25
|
+
exports.UNION = UNION;
|
|
26
|
+
exports.JOIN = JOIN;
|
|
27
|
+
exports.LEFT_JOIN = LEFT_JOIN;
|
|
28
|
+
exports.CROSS_JOIN = CROSS_JOIN;
|
|
29
|
+
exports.ABS = ABS;
|
|
30
|
+
exports.COUNT = COUNT;
|
|
31
|
+
exports.SUM = SUM;
|
|
32
|
+
exports.FN = FN;
|
|
33
|
+
exports.FN_DISTINCT = FN_DISTINCT;
|
|
34
|
+
exports.CONCAT = CONCAT;
|
|
35
|
+
exports.PARAM = PARAM;
|
|
36
|
+
exports.INSERT = INSERT;
|
|
37
|
+
exports.INSERT_OR_REPLACE = INSERT_OR_REPLACE;
|
|
38
|
+
exports.IN = IN;
|
|
39
|
+
exports.NOT_IN = NOT_IN;
|
|
40
|
+
exports.GROUP_BY = GROUP_BY;
|
|
41
|
+
exports.HAVING = HAVING;
|
|
42
|
+
exports.ORDER_BY = ORDER_BY;
|
|
43
|
+
exports.CASE = CASE;
|
|
44
|
+
exports.WITH = WITH;
|
|
45
|
+
const Abstractions_1 = require("../ast/Abstractions");
|
|
46
|
+
const Alias_1 = require("../ast/Alias");
|
|
47
|
+
const BinaryExpression_1 = require("../ast/BinaryExpression");
|
|
48
|
+
const CaseExpression_1 = require("../ast/CaseExpression");
|
|
49
|
+
const Column_1 = require("../ast/Column");
|
|
50
|
+
const Concat_1 = require("../ast/Concat");
|
|
51
|
+
const ExistsExpression_1 = require("../ast/ExistsExpression");
|
|
52
|
+
const From_1 = require("../ast/From");
|
|
53
|
+
const FunctionExpression_1 = require("../ast/FunctionExpression");
|
|
54
|
+
const InExpression_1 = require("../ast/InExpression");
|
|
55
|
+
const Join_1 = require("../ast/Join");
|
|
56
|
+
const Literals_1 = require("../ast/Literals");
|
|
57
|
+
const Operator_1 = require("../ast/Operator");
|
|
58
|
+
const OrderBy_1 = require("../ast/OrderBy");
|
|
59
|
+
const SelectQuery_1 = require("../ast/SelectQuery");
|
|
60
|
+
const UnaryExpression_1 = require("../ast/UnaryExpression");
|
|
61
|
+
const With_1 = require("../ast/With");
|
|
62
|
+
const QueryBuilder_1 = require("./QueryBuilder");
|
|
63
|
+
function VAL(val) {
|
|
64
|
+
return LAZY(val);
|
|
65
|
+
}
|
|
66
|
+
// --- Operators ---
|
|
67
|
+
function EQ(left, right) {
|
|
68
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.EQUALS, LAZY(right));
|
|
69
|
+
}
|
|
70
|
+
function NOT_EQ(left, right) {
|
|
71
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.NOT_EQUALS, LAZY(right));
|
|
72
|
+
}
|
|
73
|
+
function NOT(expr) {
|
|
74
|
+
return new UnaryExpression_1.UnaryExpression(Operator_1.Operator.NOT, LAZY(expr));
|
|
75
|
+
}
|
|
76
|
+
function GT(left, right) {
|
|
77
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.GREATER_THAN, LAZY(right));
|
|
78
|
+
}
|
|
79
|
+
function LT(left, right) {
|
|
80
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.LESS_THAN, LAZY(right));
|
|
81
|
+
}
|
|
82
|
+
function GTE(left, right) {
|
|
83
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.GREATER_THAN_OR_EQUAL, LAZY(right));
|
|
84
|
+
}
|
|
85
|
+
function LTE(left, right) {
|
|
86
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.LESS_THAN_OR_EQUAL, LAZY(right));
|
|
87
|
+
}
|
|
88
|
+
function LIKE(left, right) {
|
|
89
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.LIKE, LAZY(right));
|
|
90
|
+
}
|
|
91
|
+
function IS_NULL(expr) {
|
|
92
|
+
return new UnaryExpression_1.UnaryExpression(Operator_1.Operator.IS_NULL, LAZY(expr));
|
|
93
|
+
}
|
|
94
|
+
function IS_NOT_NULL(expr) {
|
|
95
|
+
return new UnaryExpression_1.UnaryExpression(Operator_1.Operator.IS_NOT_NULL, LAZY(expr));
|
|
96
|
+
}
|
|
97
|
+
function PLUS(left, right) {
|
|
98
|
+
if (right === undefined) {
|
|
99
|
+
return new UnaryExpression_1.UnaryExpression(Operator_1.Operator.PLUS, LAZY(left));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.PLUS, LAZY(right));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function MINUS(left, right) {
|
|
106
|
+
if (right === undefined) {
|
|
107
|
+
return new UnaryExpression_1.UnaryExpression(Operator_1.Operator.MINUS, LAZY(left));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.MINUS, LAZY(right));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function MULTIPLY(left, right) {
|
|
114
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.MULTIPLY, LAZY(right));
|
|
115
|
+
}
|
|
116
|
+
function DIVIDE(left, right) {
|
|
117
|
+
return new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.DIVIDE, LAZY(right));
|
|
118
|
+
}
|
|
119
|
+
function AND(...args) {
|
|
120
|
+
if (args.length == 1) {
|
|
121
|
+
return LAZY(args[0]);
|
|
122
|
+
}
|
|
123
|
+
if (args.length < 1) {
|
|
124
|
+
throw new Error('AND requires at least one arguments');
|
|
125
|
+
}
|
|
126
|
+
return args.reduce((left, right) => new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.AND, LAZY(right)));
|
|
127
|
+
}
|
|
128
|
+
function OR(...args) {
|
|
129
|
+
if (args.length == 1) {
|
|
130
|
+
return LAZY(args[0]);
|
|
131
|
+
}
|
|
132
|
+
else if (args.length < 1) {
|
|
133
|
+
throw new Error('OR requires at least one arguments');
|
|
134
|
+
}
|
|
135
|
+
return args.reduce((left, right) => new BinaryExpression_1.BinaryExpression(LAZY(left), Operator_1.Operator.OR, LAZY(right)));
|
|
136
|
+
}
|
|
137
|
+
// --- EXISTS ---
|
|
138
|
+
function EXISTS(subquery) {
|
|
139
|
+
return new ExistsExpression_1.ExistsExpression(subquery);
|
|
140
|
+
}
|
|
141
|
+
// --- Columns ---
|
|
142
|
+
function COLUMN(arg1, arg2) {
|
|
143
|
+
return new Column_1.Column(arg1, arg2);
|
|
144
|
+
}
|
|
145
|
+
// --- Select Queries ---
|
|
146
|
+
function SELECT(...args) {
|
|
147
|
+
return addClausesToSelect(QueryBuilder_1.QueryBuilder.select(), args);
|
|
148
|
+
}
|
|
149
|
+
function SELECT_DISTINCT(...args) {
|
|
150
|
+
return addClausesToSelect(QueryBuilder_1.QueryBuilder.select().distinct(), args);
|
|
151
|
+
}
|
|
152
|
+
function addClausesToSelect(query, args) {
|
|
153
|
+
for (let arg of args) {
|
|
154
|
+
if (arg instanceof Join_1.Join) {
|
|
155
|
+
query.join(arg);
|
|
156
|
+
}
|
|
157
|
+
else if (arg instanceof From_1.From) {
|
|
158
|
+
query.from(arg);
|
|
159
|
+
}
|
|
160
|
+
else if (arg instanceof Column_1.Column) {
|
|
161
|
+
query.column(arg);
|
|
162
|
+
}
|
|
163
|
+
else if (arg instanceof Alias_1.Alias) {
|
|
164
|
+
const referent = arg.referent;
|
|
165
|
+
if (referent instanceof From_1.From) {
|
|
166
|
+
query.from(arg);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
query.column(arg);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else if (arg && typeof arg === 'object' && 'referent' in arg && 'alias' in arg) {
|
|
173
|
+
// Handle ColumnLike object form
|
|
174
|
+
query.column(new Alias_1.Alias(arg.referent, arg.alias));
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
query.column(LAZY(arg));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return query;
|
|
181
|
+
}
|
|
182
|
+
function FROM(arg1, arg2) {
|
|
183
|
+
// Two-argument form: FROM(database, table)
|
|
184
|
+
if (typeof arg1 === 'string' && typeof arg2 === 'string') {
|
|
185
|
+
return new From_1.TableFrom(`${arg1}.${arg2}`);
|
|
186
|
+
}
|
|
187
|
+
// Single-argument form (existing behavior)
|
|
188
|
+
if (typeof arg1 === 'string') {
|
|
189
|
+
return new From_1.TableFrom(arg1);
|
|
190
|
+
}
|
|
191
|
+
else if (arg1 instanceof Alias_1.Alias) {
|
|
192
|
+
return arg1;
|
|
193
|
+
}
|
|
194
|
+
else if (arg1 instanceof SelectQuery_1.SelectQuery) {
|
|
195
|
+
return new From_1.SubqueryFrom(arg1);
|
|
196
|
+
}
|
|
197
|
+
else if (arg1 instanceof From_1.TableFrom ||
|
|
198
|
+
arg1 instanceof From_1.SubqueryFrom ||
|
|
199
|
+
arg1 instanceof From_1.JsonEachFrom) {
|
|
200
|
+
return arg1;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
throw new Error('unexpected argument type for FROM: ' + JSON.stringify(arg1));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function UNION(...queries) {
|
|
207
|
+
const query = QueryBuilder_1.QueryBuilder.select();
|
|
208
|
+
queries.forEach(q => query.union(q));
|
|
209
|
+
return query;
|
|
210
|
+
}
|
|
211
|
+
// --- Joins ---
|
|
212
|
+
function JOIN(tableName, alias, on) {
|
|
213
|
+
return new Join_1.Join(Join_1.JoinType.INNER, tableName, alias, LAZY(on));
|
|
214
|
+
}
|
|
215
|
+
function LEFT_JOIN(tableName, alias, on) {
|
|
216
|
+
return new Join_1.Join(Join_1.JoinType.LEFT, tableName, alias, LAZY(on));
|
|
217
|
+
}
|
|
218
|
+
function CROSS_JOIN(tableName, alias) {
|
|
219
|
+
return new Join_1.Join(Join_1.JoinType.CROSS, tableName, alias, new Literals_1.StringLiteral('TRUE'));
|
|
220
|
+
}
|
|
221
|
+
// --- SQL Functions ---
|
|
222
|
+
function ABS(column) {
|
|
223
|
+
return new FunctionExpression_1.FunctionExpression('ABS', [column]);
|
|
224
|
+
}
|
|
225
|
+
function COUNT(column) {
|
|
226
|
+
return new FunctionExpression_1.FunctionExpression('COUNT', [column]);
|
|
227
|
+
}
|
|
228
|
+
function SUM(column) {
|
|
229
|
+
return new FunctionExpression_1.FunctionExpression('SUM', [column]);
|
|
230
|
+
}
|
|
231
|
+
function FN(name, ...args) {
|
|
232
|
+
return new FunctionExpression_1.FunctionExpression(name, args.map(LAZY));
|
|
233
|
+
}
|
|
234
|
+
function FN_DISTINCT(name, ...args) {
|
|
235
|
+
return new FunctionExpression_1.FunctionExpression(name, args.map(LAZY), true);
|
|
236
|
+
}
|
|
237
|
+
// --- Concatenation ---
|
|
238
|
+
function CONCAT(...args) {
|
|
239
|
+
return new Concat_1.Concat(...args.map(LAZY));
|
|
240
|
+
}
|
|
241
|
+
// --- Parameters ---
|
|
242
|
+
function PARAM(name) {
|
|
243
|
+
return new Literals_1.Param(name);
|
|
244
|
+
}
|
|
245
|
+
// --- Insert Queries ---
|
|
246
|
+
function INSERT(tableName, columns, values) {
|
|
247
|
+
return QueryBuilder_1.QueryBuilder.insertInto(tableName)
|
|
248
|
+
.columns(...columns)
|
|
249
|
+
.values(...values.map(LAZY));
|
|
250
|
+
}
|
|
251
|
+
function INSERT_OR_REPLACE(arg1, arg2, arg3, arg4) {
|
|
252
|
+
// Four-argument form: INSERT_OR_REPLACE(database, table, columns, values)
|
|
253
|
+
if (typeof arg2 === 'string' && Array.isArray(arg3) && Array.isArray(arg4)) {
|
|
254
|
+
const qualifiedTableName = `${arg1}.${arg2}`;
|
|
255
|
+
return QueryBuilder_1.QueryBuilder.insertInto(qualifiedTableName)
|
|
256
|
+
.orReplace()
|
|
257
|
+
.columns(...arg3)
|
|
258
|
+
.values(...arg4.map(LAZY));
|
|
259
|
+
}
|
|
260
|
+
// Three-argument form: INSERT_OR_REPLACE(tableName, columns, values)
|
|
261
|
+
if (Array.isArray(arg2) && Array.isArray(arg3)) {
|
|
262
|
+
return QueryBuilder_1.QueryBuilder.insertInto(arg1)
|
|
263
|
+
.orReplace()
|
|
264
|
+
.columns(...arg2)
|
|
265
|
+
.values(...arg3.map(LAZY));
|
|
266
|
+
}
|
|
267
|
+
throw new Error('Invalid arguments for INSERT_OR_REPLACE');
|
|
268
|
+
}
|
|
269
|
+
// Implementation for IN
|
|
270
|
+
function IN(left, ...args) {
|
|
271
|
+
const not = false;
|
|
272
|
+
const resolvedLeft = Array.isArray(left) ? left.map(LAZY) : LAZY(left);
|
|
273
|
+
let resolvedValues;
|
|
274
|
+
if (Array.isArray(left)) {
|
|
275
|
+
// Multi-column case
|
|
276
|
+
if (args.length === 1 && args[0] instanceof SelectQuery_1.SelectQuery) {
|
|
277
|
+
resolvedValues = args[0];
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
const valuesArg = args[0];
|
|
281
|
+
resolvedValues = valuesArg.map(set => set.map(LAZY));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
// Single-column case
|
|
286
|
+
if (args.length === 1 && args[0] instanceof SelectQuery_1.SelectQuery) {
|
|
287
|
+
resolvedValues = args[0];
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
resolvedValues = args.map(LAZY).map(v => [v]);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return new InExpression_1.InExpression(resolvedLeft, resolvedValues, not);
|
|
294
|
+
}
|
|
295
|
+
// Implementation for NOT_IN
|
|
296
|
+
function NOT_IN(left, ...args) {
|
|
297
|
+
const not = true;
|
|
298
|
+
const resolvedLeft = Array.isArray(left) ? left.map(LAZY) : LAZY(left);
|
|
299
|
+
let resolvedValues;
|
|
300
|
+
if (Array.isArray(left)) {
|
|
301
|
+
// Multi-column case
|
|
302
|
+
if (args.length === 1 && args[0] instanceof SelectQuery_1.SelectQuery) {
|
|
303
|
+
resolvedValues = args[0];
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
const valuesArg = args[0];
|
|
307
|
+
resolvedValues = valuesArg.map(set => set.map(LAZY));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
// Single-column case
|
|
312
|
+
if (args.length === 1 && args[0] instanceof SelectQuery_1.SelectQuery) {
|
|
313
|
+
resolvedValues = args[0];
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
resolvedValues = args.map(LAZY).map(v => [v]);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return new InExpression_1.InExpression(resolvedLeft, resolvedValues, not);
|
|
320
|
+
}
|
|
321
|
+
function GROUP_BY(...columns) {
|
|
322
|
+
return columns.map(col => (typeof col === 'string' ? COLUMN(col) : col));
|
|
323
|
+
}
|
|
324
|
+
function HAVING(expr) {
|
|
325
|
+
return LAZY(expr);
|
|
326
|
+
}
|
|
327
|
+
function ORDER_BY(column, direction = OrderBy_1.OrderByDirection.ASC) {
|
|
328
|
+
return new OrderBy_1.OrderBy(typeof column === 'string' ? COLUMN(column) : column, direction);
|
|
329
|
+
}
|
|
330
|
+
// --- CASE Expressions ---
|
|
331
|
+
function CASE(lazyCases) {
|
|
332
|
+
let elseExpr = undefined;
|
|
333
|
+
const caseItems = [];
|
|
334
|
+
for (const c of lazyCases) {
|
|
335
|
+
if (c.WHEN !== undefined && c.THEN !== undefined) {
|
|
336
|
+
if (elseExpr) {
|
|
337
|
+
throw new Error('ELSE must be the last clause in a CASE expression');
|
|
338
|
+
}
|
|
339
|
+
caseItems.push({ when: LAZY(c.WHEN), then: LAZY(c.THEN) });
|
|
340
|
+
}
|
|
341
|
+
else if (c.ELSE !== undefined) {
|
|
342
|
+
if (elseExpr) {
|
|
343
|
+
throw new Error('CASE expression can only have one ELSE clause');
|
|
344
|
+
}
|
|
345
|
+
elseExpr = LAZY(c.ELSE);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return new CaseExpression_1.CaseExpression(caseItems, elseExpr);
|
|
349
|
+
}
|
|
350
|
+
// --- Subqueries and WITH Clauses ---
|
|
351
|
+
function WITH(name, query) {
|
|
352
|
+
return new With_1.With(name, query);
|
|
353
|
+
}
|
|
354
|
+
// --- Literal Conversion ---
|
|
355
|
+
function LAZY(value) {
|
|
356
|
+
if (value === null) {
|
|
357
|
+
return Literals_1.NullLiteral.INSTANCE;
|
|
358
|
+
}
|
|
359
|
+
else if (typeof value === 'boolean') {
|
|
360
|
+
return new Literals_1.NumberLiteral(value ? 1 : 0);
|
|
361
|
+
}
|
|
362
|
+
else if (typeof value === 'string') {
|
|
363
|
+
return new Literals_1.StringLiteral(value);
|
|
364
|
+
}
|
|
365
|
+
else if (typeof value === 'number') {
|
|
366
|
+
return new Literals_1.NumberLiteral(value);
|
|
367
|
+
}
|
|
368
|
+
else if (value instanceof Abstractions_1.AliasableExpression) {
|
|
369
|
+
return value;
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
throw new Error(`Unsupported value type: ${typeof value}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hvcnRoYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWxkZXIvU2hvcnRoYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0JBLGtCQUVDO0FBSUQsZ0JBRUM7QUFFRCx3QkFFQztBQUVELGtCQUVDO0FBRUQsZ0JBRUM7QUFFRCxnQkFFQztBQUVELGtCQUVDO0FBRUQsa0JBRUM7QUFFRCxvQkFFQztBQUVELDBCQUVDO0FBRUQsa0NBRUM7QUFFRCxvQkFNQztBQUVELHNCQU1DO0FBRUQsNEJBRUM7QUFFRCx3QkFFQztBQUVELGtCQU9DO0FBRUQsZ0JBT0M7QUFJRCx3QkFFQztBQUlELHdCQUVDO0FBSUQsd0JBRUM7QUFFRCwwQ0FFQztBQTJCRCxvQkFzQkM7QUFFRCxzQkFJQztBQUlELG9CQUVDO0FBRUQsOEJBRUM7QUFFRCxnQ0FFQztBQUlELGtCQUVDO0FBRUQsc0JBRUM7QUFFRCxrQkFFQztBQUVELGdCQUVDO0FBRUQsa0NBRUM7QUFJRCx3QkFFQztBQUlELHNCQUVDO0FBSUQsd0JBSUM7QUFJRCw4Q0FtQkM7QUFXRCxnQkFxQkM7QUFTRCx3QkFxQkM7QUFFRCw0QkFFQztBQUVELHdCQUVDO0FBRUQsNEJBRUM7QUFJRCxvQkFpQkM7QUFJRCxvQkFFQztBQXRYRCxzREFBc0U7QUFDdEUsd0NBQXFDO0FBQ3JDLDhEQUEyRDtBQUMzRCwwREFBaUU7QUFDakUsMENBQW1EO0FBQ25ELDBDQUF1QztBQUN2Qyw4REFBMkQ7QUFDM0Qsc0NBQW9GO0FBQ3BGLGtFQUErRDtBQUUvRCxzREFBbUQ7QUFFbkQsc0NBQTZDO0FBQzdDLDhDQUFtRjtBQUNuRiw4Q0FBMkM7QUFDM0MsNENBQTJEO0FBQzNELG9EQUFpRDtBQUNqRCw0REFBeUQ7QUFDekQsc0NBQW1DO0FBQ25DLGlEQUE4QztBQVk5QyxTQUFnQixHQUFHLENBQUMsR0FBbUI7SUFDckMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsQ0FBQztB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RUQsNkJBQTZCO0FBRTdCLFNBQVMsSUFBSSxDQUFDLEtBQXFCO0lBQ2pDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25CLE9BQU8sc0JBQVcsQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLHdCQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSx3QkFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSx3QkFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxrQ0FBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9BYnN0cmFjdGlvbnNcIjtcbmltcG9ydCB7IEFsaWFzIH0gZnJvbSBcIi4uL2FzdC9BbGlhc1wiO1xuaW1wb3J0IHsgQmluYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQmluYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ2FzZUV4cHJlc3Npb24sIENhc2VJdGVtIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5MaWtlIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBGcm9tTGlrZSwgSnNvbkVhY2hGcm9tLCBTdWJxdWVyeUZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uTmFtZSB9IGZyb20gXCIuLi9hc3QvRnVuY3Rpb25OYW1lXCI7XG5pbXBvcnQgeyBJbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0luRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L0luc2VydFF1ZXJ5XCI7XG5pbXBvcnQgeyBKb2luLCBKb2luVHlwZSB9IGZyb20gXCIuLi9hc3QvSm9pblwiO1xuaW1wb3J0IHsgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tIFwiLi4vYXN0L09wZXJhdG9yXCI7XG5pbXBvcnQgeyBPcmRlckJ5LCBPcmRlckJ5RGlyZWN0aW9uIH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXIgfSBmcm9tIFwiLi9RdWVyeUJ1aWxkZXJcIjtcblxudHlwZSBQcmltaXRpdmVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsO1xuXG50eXBlIExhenlFeHByZXNzaW9uID0gRXhwcmVzc2lvbiB8IFByaW1pdGl2ZVZhbHVlO1xuXG50eXBlIExhenlDYXNlSXRlbSA9IHsgV0hFTj86IExhenlFeHByZXNzaW9uOyBUSEVOPzogTGF6eUV4cHJlc3Npb247IEVMU0U/OiBMYXp5RXhwcmVzc2lvbiB9O1xuXG50eXBlIExhenlGcm9tID0gc3RyaW5nIHwgRnJvbSB8IEFsaWFzPEZyb20+IHwgU2VsZWN0UXVlcnk7XG5cbnR5cGUgTGF6eUNvbHVtbiA9IENvbHVtbkxpa2UgfCBQcmltaXRpdmVWYWx1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIFZBTCh2YWw6IFByaW1pdGl2ZVZhbHVlKTogQWxpYXNhYmxlRXhwcmVzc2lvbiB7XG4gIHJldHVybiBMQVpZKHZhbCk7XG59XG5cbi8vIC0tLSBPcGVyYXRvcnMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBFUShsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgcmlnaHQ6IExhenlFeHByZXNzaW9uKTogQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5FUVVBTFMsIExBWlkocmlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE5PVF9FUShsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgcmlnaHQ6IExhenlFeHByZXNzaW9uKTogQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5OT1RfRVFVQUxTLCBMQVpZKHJpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOT1QoZXhwcjogTGF6eUV4cHJlc3Npb24pOiBVbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IFVuYXJ5RXhwcmVzc2lvbihPcGVyYXRvci5OT1QsIExBWlkoZXhwcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR1QobGVmdDogTGF6eUV4cHJlc3Npb24sIHJpZ2h0OiBMYXp5RXhwcmVzc2lvbik6IEJpbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IEJpbmFyeUV4cHJlc3Npb24oTEFaWShsZWZ0KSwgT3BlcmF0b3IuR1JFQVRFUl9USEFOLCBMQVpZKHJpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMVChsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgcmlnaHQ6IExhenlFeHByZXNzaW9uKTogQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5MRVNTX1RIQU4sIExBWlkocmlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdURShsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgcmlnaHQ6IExhenlFeHByZXNzaW9uKTogQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUwsIExBWlkocmlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExURShsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgcmlnaHQ6IExhenlFeHByZXNzaW9uKTogQmluYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5MRVNTX1RIQU5fT1JfRVFVQUwsIExBWlkocmlnaHQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExJS0UobGVmdDogTGF6eUV4cHJlc3Npb24sIHJpZ2h0OiBMYXp5RXhwcmVzc2lvbik6IEJpbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IEJpbmFyeUV4cHJlc3Npb24oTEFaWShsZWZ0KSwgT3BlcmF0b3IuTElLRSwgTEFaWShyaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSVNfTlVMTChleHByOiBMYXp5RXhwcmVzc2lvbik6IFVuYXJ5RXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uKE9wZXJhdG9yLklTX05VTEwsIExBWlkoZXhwcikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSVNfTk9UX05VTEwoZXhwcjogTGF6eUV4cHJlc3Npb24pOiBVbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IFVuYXJ5RXhwcmVzc2lvbihPcGVyYXRvci5JU19OT1RfTlVMTCwgTEFaWShleHByKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQTFVTKGxlZnQ6IExhenlFeHByZXNzaW9uLCByaWdodD86IExhenlFeHByZXNzaW9uKTogQWxpYXNhYmxlRXhwcmVzc2lvbiB7XG4gIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBVbmFyeUV4cHJlc3Npb24oT3BlcmF0b3IuUExVUywgTEFaWShsZWZ0KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBCaW5hcnlFeHByZXNzaW9uKExBWlkobGVmdCksIE9wZXJhdG9yLlBMVVMsIExBWlkocmlnaHQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTUlOVVMobGVmdDogTGF6eUV4cHJlc3Npb24sIHJpZ2h0PzogTGF6eUV4cHJlc3Npb24pOiBBbGlhc2FibGVFeHByZXNzaW9uIHtcbiAgaWYgKHJpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFVuYXJ5RXhwcmVzc2lvbihPcGVyYXRvci5NSU5VUywgTEFaWShsZWZ0KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBCaW5hcnlFeHByZXNzaW9uKExBWlkobGVmdCksIE9wZXJhdG9yLk1JTlVTLCBMQVpZKHJpZ2h0KSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1VTFRJUExZKGxlZnQ6IExhenlFeHByZXNzaW9uLCByaWdodDogTGF6eUV4cHJlc3Npb24pOiBCaW5hcnlFeHByZXNzaW9uIHtcbiAgcmV0dXJuIG5ldyBCaW5hcnlFeHByZXNzaW9uKExBWlkobGVmdCksIE9wZXJhdG9yLk1VTFRJUExZLCBMQVpZKHJpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBESVZJREUobGVmdDogTGF6eUV4cHJlc3Npb24sIHJpZ2h0OiBMYXp5RXhwcmVzc2lvbik6IEJpbmFyeUV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IEJpbmFyeUV4cHJlc3Npb24oTEFaWShsZWZ0KSwgT3BlcmF0b3IuRElWSURFLCBMQVpZKHJpZ2h0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBTkQoLi4uYXJnczogTGF6eUV4cHJlc3Npb25bXSk6IEFsaWFzYWJsZUV4cHJlc3Npb24ge1xuICBpZiAoYXJncy5sZW5ndGggPT0gMSkge1xuICAgIHJldHVybiBMQVpZKGFyZ3NbMF0pXG4gIH0gaWYgKGFyZ3MubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQU5EIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudHMnKTtcbiAgfVxuICByZXR1cm4gYXJncy5yZWR1Y2UoKGxlZnQsIHJpZ2h0KSA9PiBuZXcgQmluYXJ5RXhwcmVzc2lvbihMQVpZKGxlZnQpLCBPcGVyYXRvci5BTkQsIExBWlkocmlnaHQpKSkgYXMgQWxpYXNhYmxlRXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9SKC4uLmFyZ3M6IExhenlFeHByZXNzaW9uW10pOiBBbGlhc2FibGVFeHByZXNzaW9uIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHtcbiAgICByZXR1cm4gTEFaWShhcmdzWzBdKVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT1IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50cycpO1xuICB9XG4gIHJldHVybiBhcmdzLnJlZHVjZSgobGVmdCwgcmlnaHQpID0+IG5ldyBCaW5hcnlFeHByZXNzaW9uKExBWlkobGVmdCksIE9wZXJhdG9yLk9SLCBMQVpZKHJpZ2h0KSkpIGFzIEFsaWFzYWJsZUV4cHJlc3Npb247XG59XG5cbi8vIC0tLSBFWElTVFMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBFWElTVFMoc3VicXVlcnk6IFNlbGVjdFF1ZXJ5KTogRXhpc3RzRXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgRXhpc3RzRXhwcmVzc2lvbihzdWJxdWVyeSk7XG59XG5cbi8vIC0tLSBDb2x1bW5zIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gQ09MVU1OKGFyZzE6IHN0cmluZywgYXJnMj86IHN0cmluZyk6IENvbHVtbiB7XG4gIHJldHVybiBuZXcgQ29sdW1uKGFyZzEsIGFyZzIpO1xufVxuXG4vLyAtLS0gU2VsZWN0IFF1ZXJpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBTRUxFQ1QoLi4uYXJnczogKEZyb21MaWtlIHwgSm9pbiB8IExhenlDb2x1bW4pW10pOiBTZWxlY3RRdWVyeSB7XG4gIHJldHVybiBhZGRDbGF1c2VzVG9TZWxlY3QoUXVlcnlCdWlsZGVyLnNlbGVjdCgpLCBhcmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNFTEVDVF9ESVNUSU5DVCguLi5hcmdzOiAoRnJvbUxpa2UgfCBKb2luIHwgTGF6eUNvbHVtbilbXSk6IFNlbGVjdFF1ZXJ5IHtcbiAgcmV0dXJuIGFkZENsYXVzZXNUb1NlbGVjdChRdWVyeUJ1aWxkZXIuc2VsZWN0KCkuZGlzdGluY3QoKSwgYXJncyk7XG59XG5cbmZ1bmN0aW9uIGFkZENsYXVzZXNUb1NlbGVjdChxdWVyeTogU2VsZWN0UXVlcnksIGFyZ3M6IChGcm9tTGlrZSB8IEpvaW4gfCBMYXp5Q29sdW1uKVtdKTogU2VsZWN0UXVlcnkge1xuICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xuICAgIGlmIChhcmcgaW5zdGFuY2VvZiBKb2luKSB7XG4gICAgICBxdWVyeS5qb2luKGFyZyk7XG4gICAgfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBGcm9tKSB7XG4gICAgICBxdWVyeS5mcm9tKGFyZyk7XG4gICAgfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBDb2x1bW4pIHtcbiAgICAgIHF1ZXJ5LmNvbHVtbihhcmcpO1xuICAgIH0gZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgQWxpYXMpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW50ID0gYXJnLnJlZmVyZW50IGFzIGFueTtcbiAgICAgIGlmIChyZWZlcmVudCBpbnN0YW5jZW9mIEZyb20pIHtcbiAgICAgICAgcXVlcnkuZnJvbShhcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkuY29sdW1uKGFyZyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiAoYXJnIGFzIGFueSkgJiYgJ2FsaWFzJyBpbiAoYXJnIGFzIGFueSkpIHtcbiAgICAgIC8vIEhhbmRsZSBDb2x1bW5MaWtlIG9iamVjdCBmb3JtXG4gICAgICBxdWVyeS5jb2x1bW4obmV3IEFsaWFzKChhcmcgYXMgYW55KS5yZWZlcmVudCwgKGFyZyBhcyBhbnkpLmFsaWFzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5LmNvbHVtbihMQVpZKGFyZyBhcyBMYXp5RXhwcmVzc2lvbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGUk9NKGFyZzE6IExhenlGcm9tLCBhcmcyPzogc3RyaW5nKTogRnJvbXxBbGlhczxGcm9tPiB7XG4gIC8vIFR3by1hcmd1bWVudCBmb3JtOiBGUk9NKGRhdGFiYXNlLCB0YWJsZSlcbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYXJnMiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IFRhYmxlRnJvbShgJHthcmcxfS4ke2FyZzJ9YCk7XG4gIH1cblxuICAvLyBTaW5nbGUtYXJndW1lbnQgZm9ybSAoZXhpc3RpbmcgYmVoYXZpb3IpXG4gIGlmICh0eXBlb2YgYXJnMSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IFRhYmxlRnJvbShhcmcxKTtcbiAgfSBlbHNlIGlmIChhcmcxIGluc3RhbmNlb2YgQWxpYXMpIHtcbiAgICByZXR1cm4gYXJnMTtcbiAgfSBlbHNlIGlmIChhcmcxIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICByZXR1cm4gbmV3IFN1YnF1ZXJ5RnJvbShhcmcxKTtcbiAgfSBlbHNlIGlmIChcbiAgICBhcmcxIGluc3RhbmNlb2YgVGFibGVGcm9tIHx8XG4gICAgYXJnMSBpbnN0YW5jZW9mIFN1YnF1ZXJ5RnJvbSB8fFxuICAgIGFyZzEgaW5zdGFuY2VvZiBKc29uRWFjaEZyb21cbiAgKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUgZm9yIEZST006ICcgKyBKU09OLnN0cmluZ2lmeShhcmcxKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVOSU9OKC4uLnF1ZXJpZXM6IFNlbGVjdFF1ZXJ5W10pOiBTZWxlY3RRdWVyeSB7XG4gIGNvbnN0IHF1ZXJ5ID0gUXVlcnlCdWlsZGVyLnNlbGVjdCgpO1xuICBxdWVyaWVzLmZvckVhY2gocSA9PiBxdWVyeS51bmlvbihxKSk7XG4gIHJldHVybiBxdWVyeTtcbn1cblxuLy8gLS0tIEpvaW5zIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gSk9JTih0YWJsZU5hbWU6IHN0cmluZywgYWxpYXM6IHN0cmluZywgb246IExhenlFeHByZXNzaW9uKTogSm9pbiB7XG4gIHJldHVybiBuZXcgSm9pbihKb2luVHlwZS5JTk5FUiwgdGFibGVOYW1lLCBhbGlhcywgTEFaWShvbikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTEVGVF9KT0lOKHRhYmxlTmFtZTogc3RyaW5nLCBhbGlhczogc3RyaW5nLCBvbjogTGF6eUV4cHJlc3Npb24pOiBKb2luIHtcbiAgcmV0dXJuIG5ldyBKb2luKEpvaW5UeXBlLkxFRlQsIHRhYmxlTmFtZSwgYWxpYXMsIExBWlkob24pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENST1NTX0pPSU4odGFibGVOYW1lOiBzdHJpbmcsIGFsaWFzOiBzdHJpbmcpOiBKb2luIHtcbiAgcmV0dXJuIG5ldyBKb2luKEpvaW5UeXBlLkNST1NTLCB0YWJsZU5hbWUsIGFsaWFzLCBuZXcgU3RyaW5nTGl0ZXJhbCgnVFJVRScpKTtcbn1cblxuLy8gLS0tIFNRTCBGdW5jdGlvbnMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBBQlMoY29sdW1uOkV4cHJlc3Npb24pOiBGdW5jdGlvbkV4cHJlc3Npb24ge1xuICByZXR1cm4gbmV3IEZ1bmN0aW9uRXhwcmVzc2lvbignQUJTJywgWyBjb2x1bW4gXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDT1VOVChjb2x1bW46Q29sdW1ufEZ1bmN0aW9uRXhwcmVzc2lvbnxBbGlhc2FibGVFeHByZXNzaW9uKTogRnVuY3Rpb25FeHByZXNzaW9uIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24oJ0NPVU5UJywgWyBjb2x1bW4gXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTVU0oY29sdW1uOkNvbHVtbnxGdW5jdGlvbkV4cHJlc3Npb258QWxpYXNhYmxlRXhwcmVzc2lvbik6IEZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKCdTVU0nLCBbIGNvbHVtbiBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZOKG5hbWU6IEZ1bmN0aW9uTmFtZSwgLi4uYXJnczogTGF6eUV4cHJlc3Npb25bXSk6IEZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKG5hbWUsIGFyZ3MubWFwKExBWlkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZOX0RJU1RJTkNUKG5hbWU6IEZ1bmN0aW9uTmFtZSwgLi4uYXJnczogTGF6eUV4cHJlc3Npb25bXSk6IEZ1bmN0aW9uRXhwcmVzc2lvbiB7XG4gIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKG5hbWUsIGFyZ3MubWFwKExBWlkpLCB0cnVlKTtcbn1cblxuLy8gLS0tIENvbmNhdGVuYXRpb24gLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBDT05DQVQoLi4uYXJnczogTGF6eUV4cHJlc3Npb25bXSk6IENvbmNhdCB7XG4gIHJldHVybiBuZXcgQ29uY2F0KC4uLmFyZ3MubWFwKExBWlkpKTtcbn1cblxuLy8gLS0tIFBhcmFtZXRlcnMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBQQVJBTShuYW1lPzogc3RyaW5nKTogUGFyYW0ge1xuICByZXR1cm4gbmV3IFBhcmFtKG5hbWUpO1xufVxuXG4vLyAtLS0gSW5zZXJ0IFF1ZXJpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBJTlNFUlQodGFibGVOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IHN0cmluZ1tdLCB2YWx1ZXM6IExhenlFeHByZXNzaW9uW10pOiBJbnNlcnRRdWVyeSB7XG4gIHJldHVybiBRdWVyeUJ1aWxkZXIuaW5zZXJ0SW50byh0YWJsZU5hbWUpXG4gICAgLmNvbHVtbnMoLi4uY29sdW1ucylcbiAgICAudmFsdWVzKC4uLnZhbHVlcy5tYXAoTEFaWSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSU5TRVJUX09SX1JFUExBQ0UoZGF0YWJhc2U6IHN0cmluZywgdGFibGU6IHN0cmluZywgY29sdW1uczogc3RyaW5nW10sIHZhbHVlczogTGF6eUV4cHJlc3Npb25bXSk6IEluc2VydFF1ZXJ5O1xuZXhwb3J0IGZ1bmN0aW9uIElOU0VSVF9PUl9SRVBMQUNFKHRhYmxlTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBzdHJpbmdbXSwgdmFsdWVzOiBMYXp5RXhwcmVzc2lvbltdKTogSW5zZXJ0UXVlcnk7XG5leHBvcnQgZnVuY3Rpb24gSU5TRVJUX09SX1JFUExBQ0UoYXJnMTogc3RyaW5nLCBhcmcyOiBzdHJpbmcgfCBzdHJpbmdbXSwgYXJnMz86IHN0cmluZ1tdIHwgTGF6eUV4cHJlc3Npb25bXSwgYXJnND86IExhenlFeHByZXNzaW9uW10pOiBJbnNlcnRRdWVyeSB7XG4gIC8vIEZvdXItYXJndW1lbnQgZm9ybTogSU5TRVJUX09SX1JFUExBQ0UoZGF0YWJhc2UsIHRhYmxlLCBjb2x1bW5zLCB2YWx1ZXMpXG4gIGlmICh0eXBlb2YgYXJnMiA9PT0gJ3N0cmluZycgJiYgQXJyYXkuaXNBcnJheShhcmczKSAmJiBBcnJheS5pc0FycmF5KGFyZzQpKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkVGFibGVOYW1lID0gYCR7YXJnMX0uJHthcmcyfWA7XG4gICAgcmV0dXJuIFF1ZXJ5QnVpbGRlci5pbnNlcnRJbnRvKHF1YWxpZmllZFRhYmxlTmFtZSlcbiAgICAgIC5vclJlcGxhY2UoKVxuICAgICAgLmNvbHVtbnMoLi4uKGFyZzMgYXMgc3RyaW5nW10pKVxuICAgICAgLnZhbHVlcyguLi5hcmc0Lm1hcChMQVpZKSk7XG4gIH1cblxuICAvLyBUaHJlZS1hcmd1bWVudCBmb3JtOiBJTlNFUlRfT1JfUkVQTEFDRSh0YWJsZU5hbWUsIGNvbHVtbnMsIHZhbHVlcylcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnMikgJiYgQXJyYXkuaXNBcnJheShhcmczKSkge1xuICAgIHJldHVybiBRdWVyeUJ1aWxkZXIuaW5zZXJ0SW50byhhcmcxKVxuICAgICAgLm9yUmVwbGFjZSgpXG4gICAgICAuY29sdW1ucyguLi5hcmcyKVxuICAgICAgLnZhbHVlcyguLi4oYXJnMyBhcyBMYXp5RXhwcmVzc2lvbltdKS5tYXAoTEFaWSkpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50cyBmb3IgSU5TRVJUX09SX1JFUExBQ0UnKTtcbn1cblxuLy8gLS0tIE90aGVyIENsYXVzZXMgLS0tXG5cbi8vIE92ZXJsb2FkcyBmb3IgSU5cbmV4cG9ydCBmdW5jdGlvbiBJTihsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgLi4udmFsdWVzOiBMYXp5RXhwcmVzc2lvbltdKTogSW5FeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIElOKGxlZnQ6IExhenlFeHByZXNzaW9uLCB2YWx1ZXM6IFNlbGVjdFF1ZXJ5KTogSW5FeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIElOKGxlZnQ6IExhenlFeHByZXNzaW9uW10sIHZhbHVlczogTGF6eUV4cHJlc3Npb25bXVtdKTogSW5FeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIElOKGxlZnQ6IExhenlFeHByZXNzaW9uW10sIHZhbHVlczogU2VsZWN0UXVlcnkpOiBJbkV4cHJlc3Npb247XG5cbi8vIEltcGxlbWVudGF0aW9uIGZvciBJTlxuZXhwb3J0IGZ1bmN0aW9uIElOKGxlZnQ6IExhenlFeHByZXNzaW9uIHwgTGF6eUV4cHJlc3Npb25bXSwgLi4uYXJnczogYW55W10pOiBJbkV4cHJlc3Npb24ge1xuICBjb25zdCBub3QgPSBmYWxzZTtcbiAgY29uc3QgcmVzb2x2ZWRMZWZ0ID0gQXJyYXkuaXNBcnJheShsZWZ0KSA/IGxlZnQubWFwKExBWlkpIDogTEFaWShsZWZ0KTtcbiAgbGV0IHJlc29sdmVkVmFsdWVzOiBFeHByZXNzaW9uW11bXSB8IFNlbGVjdFF1ZXJ5O1xuICBpZiAoQXJyYXkuaXNBcnJheShsZWZ0KSkge1xuICAgIC8vIE11bHRpLWNvbHVtbiBjYXNlXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBTZWxlY3RRdWVyeSkge1xuICAgICAgcmVzb2x2ZWRWYWx1ZXMgPSBhcmdzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZXNBcmcgPSBhcmdzWzBdIGFzIExhenlFeHByZXNzaW9uW11bXTtcbiAgICAgIHJlc29sdmVkVmFsdWVzID0gdmFsdWVzQXJnLm1hcChzZXQgPT4gc2V0Lm1hcChMQVpZKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNpbmdsZS1jb2x1bW4gY2FzZVxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmdzWzBdIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJlc29sdmVkVmFsdWVzID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRWYWx1ZXMgPSBhcmdzLm1hcChMQVpZKS5tYXAodiA9PiBbdl0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IEluRXhwcmVzc2lvbihyZXNvbHZlZExlZnQsIHJlc29sdmVkVmFsdWVzLCBub3QpO1xufVxuXG4vLyBPdmVybG9hZHMgZm9yIE5PVF9JTlxuZXhwb3J0IGZ1bmN0aW9uIE5PVF9JTihsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgLi4udmFsdWVzOiBMYXp5RXhwcmVzc2lvbltdKTogSW5FeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIE5PVF9JTihsZWZ0OiBMYXp5RXhwcmVzc2lvbiwgdmFsdWVzOiBTZWxlY3RRdWVyeSk6IEluRXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBOT1RfSU4obGVmdDogTGF6eUV4cHJlc3Npb25bXSwgdmFsdWVzOiBMYXp5RXhwcmVzc2lvbltdW10pOiBJbkV4cHJlc3Npb247XG5leHBvcnQgZnVuY3Rpb24gTk9UX0lOKGxlZnQ6IExhenlFeHByZXNzaW9uW10sIHZhbHVlczogU2VsZWN0UXVlcnkpOiBJbkV4cHJlc3Npb247XG5cbi8vIEltcGxlbWVudGF0aW9uIGZvciBOT1RfSU5cbmV4cG9ydCBmdW5jdGlvbiBOT1RfSU4obGVmdDogTGF6eUV4cHJlc3Npb24gfCBMYXp5RXhwcmVzc2lvbltdLCAuLi5hcmdzOiBhbnlbXSk6IEluRXhwcmVzc2lvbiB7XG4gIGNvbnN0IG5vdCA9IHRydWU7XG4gIGNvbnN0IHJlc29sdmVkTGVmdCA9IEFycmF5LmlzQXJyYXkobGVmdCkgPyBsZWZ0Lm1hcChMQVpZKSA6IExBWlkobGVmdCk7XG4gIGxldCByZXNvbHZlZFZhbHVlczogRXhwcmVzc2lvbltdW10gfCBTZWxlY3RRdWVyeTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobGVmdCkpIHtcbiAgICAvLyBNdWx0aS1jb2x1bW4gY2FzZVxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmdzWzBdIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJlc29sdmVkVmFsdWVzID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzQXJnID0gYXJnc1swXSBhcyBMYXp5RXhwcmVzc2lvbltdW107XG4gICAgICByZXNvbHZlZFZhbHVlcyA9IHZhbHVlc0FyZy5tYXAoc2V0ID0+IHNldC5tYXAoTEFaWSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTaW5nbGUtY29sdW1uIGNhc2VcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXSBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5KSB7XG4gICAgICByZXNvbHZlZFZhbHVlcyA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmVkVmFsdWVzID0gYXJncy5tYXAoTEFaWSkubWFwKHYgPT4gW3ZdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBJbkV4cHJlc3Npb24ocmVzb2x2ZWRMZWZ0LCByZXNvbHZlZFZhbHVlcywgbm90KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdST1VQX0JZKC4uLmNvbHVtbnM6IChDb2x1bW4gfCBzdHJpbmcpW10pOiBDb2x1bW5bXSB7XG4gIHJldHVybiBjb2x1bW5zLm1hcChjb2wgPT4gKHR5cGVvZiBjb2wgPT09ICdzdHJpbmcnID8gQ09MVU1OKGNvbCkgOiBjb2wpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhBVklORyhleHByOiBMYXp5RXhwcmVzc2lvbik6IEV4cHJlc3Npb24ge1xuICByZXR1cm4gTEFaWShleHByKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9SREVSX0JZKGNvbHVtbjogQ29sdW1uIHwgc3RyaW5nLCBkaXJlY3Rpb246IE9yZGVyQnlEaXJlY3Rpb24gPSBPcmRlckJ5RGlyZWN0aW9uLkFTQyk6IE9yZGVyQnkge1xuICByZXR1cm4gbmV3IE9yZGVyQnkodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycgPyBDT0xVTU4oY29sdW1uKSA6IGNvbHVtbiwgZGlyZWN0aW9uKTtcbn1cblxuLy8gLS0tIENBU0UgRXhwcmVzc2lvbnMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBDQVNFKGxhenlDYXNlczogTGF6eUNhc2VJdGVtW10pOiBDYXNlRXhwcmVzc2lvbiB7XG4gIGxldCBlbHNlRXhwcjogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgY29uc3QgY2FzZUl0ZW1zOiBDYXNlSXRlbVtdID0gW107XG4gIGZvciAoY29uc3QgYyBvZiBsYXp5Q2FzZXMpIHtcbiAgICBpZiAoYy5XSEVOICE9PSB1bmRlZmluZWQgJiYgYy5USEVOICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChlbHNlRXhwcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VMU0UgbXVzdCBiZSB0aGUgbGFzdCBjbGF1c2UgaW4gYSBDQVNFIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICAgIGNhc2VJdGVtcy5wdXNoKHsgd2hlbjogTEFaWShjLldIRU4pLCB0aGVuOiBMQVpZKGMuVEhFTikgfSk7XG4gICAgfSBlbHNlIGlmIChjLkVMU0UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGVsc2VFeHByKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ0FTRSBleHByZXNzaW9uIGNhbiBvbmx5IGhhdmUgb25lIEVMU0UgY2xhdXNlJyk7XG4gICAgICB9XG4gICAgICBlbHNlRXhwciA9IExBWlkoYy5FTFNFKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBDYXNlRXhwcmVzc2lvbihjYXNlSXRlbXMsIGVsc2VFeHByKTtcbn1cblxuLy8gLS0tIFN1YnF1ZXJpZXMgYW5kIFdJVEggQ2xhdXNlcyAtLS1cblxuZXhwb3J0IGZ1bmN0aW9uIFdJVEgobmFtZTogc3RyaW5nLCBxdWVyeTogU2VsZWN0UXVlcnkpOiBXaXRoIHtcbiAgcmV0dXJuIG5ldyBXaXRoKG5hbWUsIHF1ZXJ5KTtcbn1cblxuLy8gLS0tIExpdGVyYWwgQ29udmVyc2lvbiAtLS1cblxuZnVuY3Rpb24gTEFaWSh2YWx1ZTogTGF6eUV4cHJlc3Npb24pOiBBbGlhc2FibGVFeHByZXNzaW9uIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIE51bGxMaXRlcmFsLklOU1RBTkNFO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJMaXRlcmFsKHZhbHVlID8gMSA6IDApO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwodmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV3IE51bWJlckxpdGVyYWwodmFsdWUpO1xuICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQWxpYXNhYmxlRXhwcmVzc2lvbikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlIHR5cGU6ICR7dHlwZW9mIHZhbHVlfWApO1xuICB9XG59XG4iXX0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export { SqlTreeNode, Aliasable, Expression, AliasableExpression } from './ast/Abstractions';
|
|
2
|
+
export { Alias } from './ast/Alias';
|
|
3
|
+
export { BinaryExpression } from './ast/BinaryExpression';
|
|
4
|
+
export { CaseExpression, CaseItem } from './ast/CaseExpression';
|
|
5
|
+
export { Column, ColumnLike } from './ast/Column';
|
|
6
|
+
export { Concat } from './ast/Concat';
|
|
7
|
+
export { ExistsExpression } from './ast/ExistsExpression';
|
|
8
|
+
export { From, FromLike, TableFrom, SubqueryFrom, JsonEachFrom } from './ast/From';
|
|
9
|
+
export { FunctionExpression } from './ast/FunctionExpression';
|
|
10
|
+
export { FunctionName } from './ast/FunctionName';
|
|
11
|
+
export { InExpression } from './ast/InExpression';
|
|
12
|
+
export { InsertQuery } from './ast/InsertQuery';
|
|
13
|
+
export { Join, JoinType } from './ast/Join';
|
|
14
|
+
export { LiteralExpression, NumberLiteral, StringLiteral, NullLiteral, Param } from './ast/Literals';
|
|
15
|
+
export { Operator } from './ast/Operator';
|
|
16
|
+
export { OrderBy, OrderByDirection } from './ast/OrderBy';
|
|
17
|
+
export { SelectQuery } from './ast/SelectQuery';
|
|
18
|
+
export { UnaryExpression } from './ast/UnaryExpression';
|
|
19
|
+
export { With } from './ast/With';
|
|
20
|
+
export { QueryBuilder } from './builder/QueryBuilder';
|
|
21
|
+
export { VAL, EQ, NOT_EQ, NOT, GT, LT, GTE, LTE, LIKE, IS_NULL, IS_NOT_NULL, PLUS, MINUS, MULTIPLY, DIVIDE, AND, OR, EXISTS, COLUMN, SELECT, SELECT_DISTINCT, FROM, UNION, JOIN, LEFT_JOIN, CROSS_JOIN, ABS, COUNT, SUM, FN, FN_DISTINCT, CONCAT, PARAM, INSERT, INSERT_OR_REPLACE, IN, NOT_IN, GROUP_BY, HAVING, ORDER_BY, CASE, WITH } from './builder/Shorthand';
|
|
22
|
+
export { QueryRenderer, quoteIdentifier, shouldQuoteIdentifier } from './renderer/QueryRenderer';
|
|
23
|
+
export { CompactQueryRenderer } from './renderer/CompactQueryRenderer';
|
|
24
|
+
export { IndentedQueryRenderer } from './renderer/IndentedQueryRenderer';
|
|
25
|
+
export { QueryValidator } from './validate/QueryValidator';
|
|
26
|
+
export { CommonQueryValidator } from './validate/CommonQueryValidator';
|
|
27
|
+
export { SQLiteQueryValidator } from './validate/SQLiteQueryValidator';
|
|
28
|
+
export { SqlTreeNodeVisitor, FromLikeAndJoinVisitorAcceptor, ColumnLikeVisitorAcceptor } from './visitor/SqlTreeNodeVisitor';
|
|
29
|
+
export { SqlTreeNodeTransformer } from './visitor/SqlTreeNodeTransformer';
|
|
30
|
+
export { QueryIdentityTransformer } from './visitor/QueryIdentityTransformer';
|
|
31
|
+
export { QueryParamRewriteTransformer, ParamReplacements } from './visitor/QueryParamRewriteTransformer';
|
|
32
|
+
export { ParamCollectingVisitor } from './visitor/ParamCollector';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FROM = exports.SELECT_DISTINCT = exports.SELECT = exports.COLUMN = exports.EXISTS = exports.OR = exports.AND = exports.DIVIDE = exports.MULTIPLY = exports.MINUS = exports.PLUS = exports.IS_NOT_NULL = exports.IS_NULL = exports.LIKE = exports.LTE = exports.GTE = exports.LT = exports.GT = exports.NOT = exports.NOT_EQ = exports.EQ = exports.VAL = exports.QueryBuilder = exports.With = exports.UnaryExpression = exports.SelectQuery = exports.OrderByDirection = exports.OrderBy = exports.Operator = exports.Param = exports.NullLiteral = exports.StringLiteral = exports.NumberLiteral = exports.LiteralExpression = exports.JoinType = exports.Join = exports.InsertQuery = exports.InExpression = exports.FunctionExpression = exports.JsonEachFrom = exports.SubqueryFrom = exports.TableFrom = exports.From = exports.ExistsExpression = exports.Concat = exports.Column = exports.CaseExpression = exports.BinaryExpression = exports.Alias = exports.AliasableExpression = void 0;
|
|
4
|
+
exports.ParamCollectingVisitor = exports.QueryParamRewriteTransformer = exports.QueryIdentityTransformer = exports.ColumnLikeVisitorAcceptor = exports.FromLikeAndJoinVisitorAcceptor = exports.SQLiteQueryValidator = exports.CommonQueryValidator = exports.IndentedQueryRenderer = exports.CompactQueryRenderer = exports.shouldQuoteIdentifier = exports.quoteIdentifier = exports.WITH = exports.CASE = exports.ORDER_BY = exports.HAVING = exports.GROUP_BY = exports.NOT_IN = exports.IN = exports.INSERT_OR_REPLACE = exports.INSERT = exports.PARAM = exports.CONCAT = exports.FN_DISTINCT = exports.FN = exports.SUM = exports.COUNT = exports.ABS = exports.CROSS_JOIN = exports.LEFT_JOIN = exports.JOIN = exports.UNION = void 0;
|
|
5
|
+
// AST nodes
|
|
6
|
+
var Abstractions_1 = require("./ast/Abstractions");
|
|
7
|
+
Object.defineProperty(exports, "AliasableExpression", { enumerable: true, get: function () { return Abstractions_1.AliasableExpression; } });
|
|
8
|
+
var Alias_1 = require("./ast/Alias");
|
|
9
|
+
Object.defineProperty(exports, "Alias", { enumerable: true, get: function () { return Alias_1.Alias; } });
|
|
10
|
+
var BinaryExpression_1 = require("./ast/BinaryExpression");
|
|
11
|
+
Object.defineProperty(exports, "BinaryExpression", { enumerable: true, get: function () { return BinaryExpression_1.BinaryExpression; } });
|
|
12
|
+
var CaseExpression_1 = require("./ast/CaseExpression");
|
|
13
|
+
Object.defineProperty(exports, "CaseExpression", { enumerable: true, get: function () { return CaseExpression_1.CaseExpression; } });
|
|
14
|
+
var Column_1 = require("./ast/Column");
|
|
15
|
+
Object.defineProperty(exports, "Column", { enumerable: true, get: function () { return Column_1.Column; } });
|
|
16
|
+
var Concat_1 = require("./ast/Concat");
|
|
17
|
+
Object.defineProperty(exports, "Concat", { enumerable: true, get: function () { return Concat_1.Concat; } });
|
|
18
|
+
var ExistsExpression_1 = require("./ast/ExistsExpression");
|
|
19
|
+
Object.defineProperty(exports, "ExistsExpression", { enumerable: true, get: function () { return ExistsExpression_1.ExistsExpression; } });
|
|
20
|
+
var From_1 = require("./ast/From");
|
|
21
|
+
Object.defineProperty(exports, "From", { enumerable: true, get: function () { return From_1.From; } });
|
|
22
|
+
Object.defineProperty(exports, "TableFrom", { enumerable: true, get: function () { return From_1.TableFrom; } });
|
|
23
|
+
Object.defineProperty(exports, "SubqueryFrom", { enumerable: true, get: function () { return From_1.SubqueryFrom; } });
|
|
24
|
+
Object.defineProperty(exports, "JsonEachFrom", { enumerable: true, get: function () { return From_1.JsonEachFrom; } });
|
|
25
|
+
var FunctionExpression_1 = require("./ast/FunctionExpression");
|
|
26
|
+
Object.defineProperty(exports, "FunctionExpression", { enumerable: true, get: function () { return FunctionExpression_1.FunctionExpression; } });
|
|
27
|
+
var InExpression_1 = require("./ast/InExpression");
|
|
28
|
+
Object.defineProperty(exports, "InExpression", { enumerable: true, get: function () { return InExpression_1.InExpression; } });
|
|
29
|
+
var InsertQuery_1 = require("./ast/InsertQuery");
|
|
30
|
+
Object.defineProperty(exports, "InsertQuery", { enumerable: true, get: function () { return InsertQuery_1.InsertQuery; } });
|
|
31
|
+
var Join_1 = require("./ast/Join");
|
|
32
|
+
Object.defineProperty(exports, "Join", { enumerable: true, get: function () { return Join_1.Join; } });
|
|
33
|
+
Object.defineProperty(exports, "JoinType", { enumerable: true, get: function () { return Join_1.JoinType; } });
|
|
34
|
+
var Literals_1 = require("./ast/Literals");
|
|
35
|
+
Object.defineProperty(exports, "LiteralExpression", { enumerable: true, get: function () { return Literals_1.LiteralExpression; } });
|
|
36
|
+
Object.defineProperty(exports, "NumberLiteral", { enumerable: true, get: function () { return Literals_1.NumberLiteral; } });
|
|
37
|
+
Object.defineProperty(exports, "StringLiteral", { enumerable: true, get: function () { return Literals_1.StringLiteral; } });
|
|
38
|
+
Object.defineProperty(exports, "NullLiteral", { enumerable: true, get: function () { return Literals_1.NullLiteral; } });
|
|
39
|
+
Object.defineProperty(exports, "Param", { enumerable: true, get: function () { return Literals_1.Param; } });
|
|
40
|
+
var Operator_1 = require("./ast/Operator");
|
|
41
|
+
Object.defineProperty(exports, "Operator", { enumerable: true, get: function () { return Operator_1.Operator; } });
|
|
42
|
+
var OrderBy_1 = require("./ast/OrderBy");
|
|
43
|
+
Object.defineProperty(exports, "OrderBy", { enumerable: true, get: function () { return OrderBy_1.OrderBy; } });
|
|
44
|
+
Object.defineProperty(exports, "OrderByDirection", { enumerable: true, get: function () { return OrderBy_1.OrderByDirection; } });
|
|
45
|
+
var SelectQuery_1 = require("./ast/SelectQuery");
|
|
46
|
+
Object.defineProperty(exports, "SelectQuery", { enumerable: true, get: function () { return SelectQuery_1.SelectQuery; } });
|
|
47
|
+
var UnaryExpression_1 = require("./ast/UnaryExpression");
|
|
48
|
+
Object.defineProperty(exports, "UnaryExpression", { enumerable: true, get: function () { return UnaryExpression_1.UnaryExpression; } });
|
|
49
|
+
var With_1 = require("./ast/With");
|
|
50
|
+
Object.defineProperty(exports, "With", { enumerable: true, get: function () { return With_1.With; } });
|
|
51
|
+
// Builder
|
|
52
|
+
var QueryBuilder_1 = require("./builder/QueryBuilder");
|
|
53
|
+
Object.defineProperty(exports, "QueryBuilder", { enumerable: true, get: function () { return QueryBuilder_1.QueryBuilder; } });
|
|
54
|
+
var Shorthand_1 = require("./builder/Shorthand");
|
|
55
|
+
// Value helpers
|
|
56
|
+
Object.defineProperty(exports, "VAL", { enumerable: true, get: function () { return Shorthand_1.VAL; } });
|
|
57
|
+
// Operators
|
|
58
|
+
Object.defineProperty(exports, "EQ", { enumerable: true, get: function () { return Shorthand_1.EQ; } });
|
|
59
|
+
Object.defineProperty(exports, "NOT_EQ", { enumerable: true, get: function () { return Shorthand_1.NOT_EQ; } });
|
|
60
|
+
Object.defineProperty(exports, "NOT", { enumerable: true, get: function () { return Shorthand_1.NOT; } });
|
|
61
|
+
Object.defineProperty(exports, "GT", { enumerable: true, get: function () { return Shorthand_1.GT; } });
|
|
62
|
+
Object.defineProperty(exports, "LT", { enumerable: true, get: function () { return Shorthand_1.LT; } });
|
|
63
|
+
Object.defineProperty(exports, "GTE", { enumerable: true, get: function () { return Shorthand_1.GTE; } });
|
|
64
|
+
Object.defineProperty(exports, "LTE", { enumerable: true, get: function () { return Shorthand_1.LTE; } });
|
|
65
|
+
Object.defineProperty(exports, "LIKE", { enumerable: true, get: function () { return Shorthand_1.LIKE; } });
|
|
66
|
+
Object.defineProperty(exports, "IS_NULL", { enumerable: true, get: function () { return Shorthand_1.IS_NULL; } });
|
|
67
|
+
Object.defineProperty(exports, "IS_NOT_NULL", { enumerable: true, get: function () { return Shorthand_1.IS_NOT_NULL; } });
|
|
68
|
+
Object.defineProperty(exports, "PLUS", { enumerable: true, get: function () { return Shorthand_1.PLUS; } });
|
|
69
|
+
Object.defineProperty(exports, "MINUS", { enumerable: true, get: function () { return Shorthand_1.MINUS; } });
|
|
70
|
+
Object.defineProperty(exports, "MULTIPLY", { enumerable: true, get: function () { return Shorthand_1.MULTIPLY; } });
|
|
71
|
+
Object.defineProperty(exports, "DIVIDE", { enumerable: true, get: function () { return Shorthand_1.DIVIDE; } });
|
|
72
|
+
Object.defineProperty(exports, "AND", { enumerable: true, get: function () { return Shorthand_1.AND; } });
|
|
73
|
+
Object.defineProperty(exports, "OR", { enumerable: true, get: function () { return Shorthand_1.OR; } });
|
|
74
|
+
// EXISTS
|
|
75
|
+
Object.defineProperty(exports, "EXISTS", { enumerable: true, get: function () { return Shorthand_1.EXISTS; } });
|
|
76
|
+
// Columns
|
|
77
|
+
Object.defineProperty(exports, "COLUMN", { enumerable: true, get: function () { return Shorthand_1.COLUMN; } });
|
|
78
|
+
// Select queries
|
|
79
|
+
Object.defineProperty(exports, "SELECT", { enumerable: true, get: function () { return Shorthand_1.SELECT; } });
|
|
80
|
+
Object.defineProperty(exports, "SELECT_DISTINCT", { enumerable: true, get: function () { return Shorthand_1.SELECT_DISTINCT; } });
|
|
81
|
+
Object.defineProperty(exports, "FROM", { enumerable: true, get: function () { return Shorthand_1.FROM; } });
|
|
82
|
+
Object.defineProperty(exports, "UNION", { enumerable: true, get: function () { return Shorthand_1.UNION; } });
|
|
83
|
+
// Joins
|
|
84
|
+
Object.defineProperty(exports, "JOIN", { enumerable: true, get: function () { return Shorthand_1.JOIN; } });
|
|
85
|
+
Object.defineProperty(exports, "LEFT_JOIN", { enumerable: true, get: function () { return Shorthand_1.LEFT_JOIN; } });
|
|
86
|
+
Object.defineProperty(exports, "CROSS_JOIN", { enumerable: true, get: function () { return Shorthand_1.CROSS_JOIN; } });
|
|
87
|
+
// Functions
|
|
88
|
+
Object.defineProperty(exports, "ABS", { enumerable: true, get: function () { return Shorthand_1.ABS; } });
|
|
89
|
+
Object.defineProperty(exports, "COUNT", { enumerable: true, get: function () { return Shorthand_1.COUNT; } });
|
|
90
|
+
Object.defineProperty(exports, "SUM", { enumerable: true, get: function () { return Shorthand_1.SUM; } });
|
|
91
|
+
Object.defineProperty(exports, "FN", { enumerable: true, get: function () { return Shorthand_1.FN; } });
|
|
92
|
+
Object.defineProperty(exports, "FN_DISTINCT", { enumerable: true, get: function () { return Shorthand_1.FN_DISTINCT; } });
|
|
93
|
+
// Concatenation
|
|
94
|
+
Object.defineProperty(exports, "CONCAT", { enumerable: true, get: function () { return Shorthand_1.CONCAT; } });
|
|
95
|
+
// Parameters
|
|
96
|
+
Object.defineProperty(exports, "PARAM", { enumerable: true, get: function () { return Shorthand_1.PARAM; } });
|
|
97
|
+
// Insert queries
|
|
98
|
+
Object.defineProperty(exports, "INSERT", { enumerable: true, get: function () { return Shorthand_1.INSERT; } });
|
|
99
|
+
Object.defineProperty(exports, "INSERT_OR_REPLACE", { enumerable: true, get: function () { return Shorthand_1.INSERT_OR_REPLACE; } });
|
|
100
|
+
// IN expressions
|
|
101
|
+
Object.defineProperty(exports, "IN", { enumerable: true, get: function () { return Shorthand_1.IN; } });
|
|
102
|
+
Object.defineProperty(exports, "NOT_IN", { enumerable: true, get: function () { return Shorthand_1.NOT_IN; } });
|
|
103
|
+
// Clauses
|
|
104
|
+
Object.defineProperty(exports, "GROUP_BY", { enumerable: true, get: function () { return Shorthand_1.GROUP_BY; } });
|
|
105
|
+
Object.defineProperty(exports, "HAVING", { enumerable: true, get: function () { return Shorthand_1.HAVING; } });
|
|
106
|
+
Object.defineProperty(exports, "ORDER_BY", { enumerable: true, get: function () { return Shorthand_1.ORDER_BY; } });
|
|
107
|
+
// CASE expressions
|
|
108
|
+
Object.defineProperty(exports, "CASE", { enumerable: true, get: function () { return Shorthand_1.CASE; } });
|
|
109
|
+
// WITH clauses
|
|
110
|
+
Object.defineProperty(exports, "WITH", { enumerable: true, get: function () { return Shorthand_1.WITH; } });
|
|
111
|
+
// Renderers
|
|
112
|
+
var QueryRenderer_1 = require("./renderer/QueryRenderer");
|
|
113
|
+
Object.defineProperty(exports, "quoteIdentifier", { enumerable: true, get: function () { return QueryRenderer_1.quoteIdentifier; } });
|
|
114
|
+
Object.defineProperty(exports, "shouldQuoteIdentifier", { enumerable: true, get: function () { return QueryRenderer_1.shouldQuoteIdentifier; } });
|
|
115
|
+
var CompactQueryRenderer_1 = require("./renderer/CompactQueryRenderer");
|
|
116
|
+
Object.defineProperty(exports, "CompactQueryRenderer", { enumerable: true, get: function () { return CompactQueryRenderer_1.CompactQueryRenderer; } });
|
|
117
|
+
var IndentedQueryRenderer_1 = require("./renderer/IndentedQueryRenderer");
|
|
118
|
+
Object.defineProperty(exports, "IndentedQueryRenderer", { enumerable: true, get: function () { return IndentedQueryRenderer_1.IndentedQueryRenderer; } });
|
|
119
|
+
var CommonQueryValidator_1 = require("./validate/CommonQueryValidator");
|
|
120
|
+
Object.defineProperty(exports, "CommonQueryValidator", { enumerable: true, get: function () { return CommonQueryValidator_1.CommonQueryValidator; } });
|
|
121
|
+
var SQLiteQueryValidator_1 = require("./validate/SQLiteQueryValidator");
|
|
122
|
+
Object.defineProperty(exports, "SQLiteQueryValidator", { enumerable: true, get: function () { return SQLiteQueryValidator_1.SQLiteQueryValidator; } });
|
|
123
|
+
// Visitors
|
|
124
|
+
var SqlTreeNodeVisitor_1 = require("./visitor/SqlTreeNodeVisitor");
|
|
125
|
+
Object.defineProperty(exports, "FromLikeAndJoinVisitorAcceptor", { enumerable: true, get: function () { return SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor; } });
|
|
126
|
+
Object.defineProperty(exports, "ColumnLikeVisitorAcceptor", { enumerable: true, get: function () { return SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor; } });
|
|
127
|
+
var QueryIdentityTransformer_1 = require("./visitor/QueryIdentityTransformer");
|
|
128
|
+
Object.defineProperty(exports, "QueryIdentityTransformer", { enumerable: true, get: function () { return QueryIdentityTransformer_1.QueryIdentityTransformer; } });
|
|
129
|
+
var QueryParamRewriteTransformer_1 = require("./visitor/QueryParamRewriteTransformer");
|
|
130
|
+
Object.defineProperty(exports, "QueryParamRewriteTransformer", { enumerable: true, get: function () { return QueryParamRewriteTransformer_1.QueryParamRewriteTransformer; } });
|
|
131
|
+
var ParamCollector_1 = require("./visitor/ParamCollector");
|
|
132
|
+
Object.defineProperty(exports, "ParamCollectingVisitor", { enumerable: true, get: function () { return ParamCollector_1.ParamCollectingVisitor; } });
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFlBQVk7QUFDWixtREFBNkY7QUFBaEQsbUhBQUEsbUJBQW1CLE9BQUE7QUFDaEUscUNBQW9DO0FBQTNCLDhGQUFBLEtBQUssT0FBQTtBQUNkLDJEQUEwRDtBQUFqRCxvSEFBQSxnQkFBZ0IsT0FBQTtBQUN6Qix1REFBZ0U7QUFBdkQsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLHVDQUFrRDtBQUF6QyxnR0FBQSxNQUFNLE9BQUE7QUFDZix1Q0FBc0M7QUFBN0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsMkRBQTBEO0FBQWpELG9IQUFBLGdCQUFnQixPQUFBO0FBQ3pCLG1DQUFtRjtBQUExRSw0RkFBQSxJQUFJLE9BQUE7QUFBWSxpR0FBQSxTQUFTLE9BQUE7QUFBRSxvR0FBQSxZQUFZLE9BQUE7QUFBRSxvR0FBQSxZQUFZLE9BQUE7QUFDOUQsK0RBQThEO0FBQXJELHdIQUFBLGtCQUFrQixPQUFBO0FBRTNCLG1EQUFrRDtBQUF6Qyw0R0FBQSxZQUFZLE9BQUE7QUFDckIsaURBQWdEO0FBQXZDLDBHQUFBLFdBQVcsT0FBQTtBQUNwQixtQ0FBNEM7QUFBbkMsNEZBQUEsSUFBSSxPQUFBO0FBQUUsZ0dBQUEsUUFBUSxPQUFBO0FBQ3ZCLDJDQUFxRztBQUE1Riw2R0FBQSxpQkFBaUIsT0FBQTtBQUFFLHlHQUFBLGFBQWEsT0FBQTtBQUFFLHlHQUFBLGFBQWEsT0FBQTtBQUFFLHVHQUFBLFdBQVcsT0FBQTtBQUFFLGlHQUFBLEtBQUssT0FBQTtBQUM1RSwyQ0FBMEM7QUFBakMsb0dBQUEsUUFBUSxPQUFBO0FBQ2pCLHlDQUEwRDtBQUFqRCxrR0FBQSxPQUFPLE9BQUE7QUFBRSwyR0FBQSxnQkFBZ0IsT0FBQTtBQUNsQyxpREFBZ0Q7QUFBdkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLHlEQUF3RDtBQUEvQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIsbUNBQWtDO0FBQXpCLDRGQUFBLElBQUksT0FBQTtBQUViLFVBQVU7QUFDVix1REFBc0Q7QUFBN0MsNEdBQUEsWUFBWSxPQUFBO0FBQ3JCLGlEQWdDNkI7QUEvQjNCLGdCQUFnQjtBQUNoQixnR0FBQSxHQUFHLE9BQUE7QUFDSCxZQUFZO0FBQ1osK0ZBQUEsRUFBRSxPQUFBO0FBQUUsbUdBQUEsTUFBTSxPQUFBO0FBQUUsZ0dBQUEsR0FBRyxPQUFBO0FBQUUsK0ZBQUEsRUFBRSxPQUFBO0FBQUUsK0ZBQUEsRUFBRSxPQUFBO0FBQUUsZ0dBQUEsR0FBRyxPQUFBO0FBQUUsZ0dBQUEsR0FBRyxPQUFBO0FBQUUsaUdBQUEsSUFBSSxPQUFBO0FBQ3ZDLG9HQUFBLE9BQU8sT0FBQTtBQUFFLHdHQUFBLFdBQVcsT0FBQTtBQUNwQixpR0FBQSxJQUFJLE9BQUE7QUFBRSxrR0FBQSxLQUFLLE9BQUE7QUFBRSxxR0FBQSxRQUFRLE9BQUE7QUFBRSxtR0FBQSxNQUFNLE9BQUE7QUFDN0IsZ0dBQUEsR0FBRyxPQUFBO0FBQUUsK0ZBQUEsRUFBRSxPQUFBO0FBQ1AsU0FBUztBQUNULG1HQUFBLE1BQU0sT0FBQTtBQUNOLFVBQVU7QUFDVixtR0FBQSxNQUFNLE9BQUE7QUFDTixpQkFBaUI7QUFDakIsbUdBQUEsTUFBTSxPQUFBO0FBQUUsNEdBQUEsZUFBZSxPQUFBO0FBQUUsaUdBQUEsSUFBSSxPQUFBO0FBQUUsa0dBQUEsS0FBSyxPQUFBO0FBQ3BDLFFBQVE7QUFDUixpR0FBQSxJQUFJLE9BQUE7QUFBRSxzR0FBQSxTQUFTLE9BQUE7QUFBRSx1R0FBQSxVQUFVLE9BQUE7QUFDM0IsWUFBWTtBQUNaLGdHQUFBLEdBQUcsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUFFLGdHQUFBLEdBQUcsT0FBQTtBQUFFLCtGQUFBLEVBQUUsT0FBQTtBQUFFLHdHQUFBLFdBQVcsT0FBQTtBQUNoQyxnQkFBZ0I7QUFDaEIsbUdBQUEsTUFBTSxPQUFBO0FBQ04sYUFBYTtBQUNiLGtHQUFBLEtBQUssT0FBQTtBQUNMLGlCQUFpQjtBQUNqQixtR0FBQSxNQUFNLE9BQUE7QUFBRSw4R0FBQSxpQkFBaUIsT0FBQTtBQUN6QixpQkFBaUI7QUFDakIsK0ZBQUEsRUFBRSxPQUFBO0FBQUUsbUdBQUEsTUFBTSxPQUFBO0FBQ1YsVUFBVTtBQUNWLHFHQUFBLFFBQVEsT0FBQTtBQUFFLG1HQUFBLE1BQU0sT0FBQTtBQUFFLHFHQUFBLFFBQVEsT0FBQTtBQUMxQixtQkFBbUI7QUFDbkIsaUdBQUEsSUFBSSxPQUFBO0FBQ0osZUFBZTtBQUNmLGlHQUFBLElBQUksT0FBQTtBQUdOLFlBQVk7QUFDWiwwREFBaUc7QUFBekUsZ0hBQUEsZUFBZSxPQUFBO0FBQUUsc0hBQUEscUJBQXFCLE9BQUE7QUFDOUQsd0VBQXVFO0FBQTlELDRIQUFBLG9CQUFvQixPQUFBO0FBQzdCLDBFQUF5RTtBQUFoRSw4SEFBQSxxQkFBcUIsT0FBQTtBQUk5Qix3RUFBdUU7QUFBOUQsNEhBQUEsb0JBQW9CLE9BQUE7QUFDN0Isd0VBQXVFO0FBQTlELDRIQUFBLG9CQUFvQixPQUFBO0FBRTdCLFdBQVc7QUFDWCxtRUFBNkg7QUFBaEcsb0lBQUEsOEJBQThCLE9BQUE7QUFBRSwrSEFBQSx5QkFBeUIsT0FBQTtBQUV0RiwrRUFBOEU7QUFBckUsb0lBQUEsd0JBQXdCLE9BQUE7QUFDakMsdUZBQXlHO0FBQWhHLDRJQUFBLDRCQUE0QixPQUFBO0FBQ3JDLDJEQUFrRTtBQUF6RCx3SEFBQSxzQkFBc0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFTVCBub2Rlc1xuZXhwb3J0IHsgU3FsVHJlZU5vZGUsIEFsaWFzYWJsZSwgRXhwcmVzc2lvbiwgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gJy4vYXN0L0Fic3RyYWN0aW9ucyc7XG5leHBvcnQgeyBBbGlhcyB9IGZyb20gJy4vYXN0L0FsaWFzJztcbmV4cG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tICcuL2FzdC9CaW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gJy4vYXN0L0Nhc2VFeHByZXNzaW9uJztcbmV4cG9ydCB7IENvbHVtbiwgQ29sdW1uTGlrZSB9IGZyb20gJy4vYXN0L0NvbHVtbic7XG5leHBvcnQgeyBDb25jYXQgfSBmcm9tICcuL2FzdC9Db25jYXQnO1xuZXhwb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gJy4vYXN0L0V4aXN0c0V4cHJlc3Npb24nO1xuZXhwb3J0IHsgRnJvbSwgRnJvbUxpa2UsIFRhYmxlRnJvbSwgU3VicXVlcnlGcm9tLCBKc29uRWFjaEZyb20gfSBmcm9tICcuL2FzdC9Gcm9tJztcbmV4cG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gJy4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvbic7XG5leHBvcnQgeyBGdW5jdGlvbk5hbWUgfSBmcm9tICcuL2FzdC9GdW5jdGlvbk5hbWUnO1xuZXhwb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSAnLi9hc3QvSW5FeHByZXNzaW9uJztcbmV4cG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSAnLi9hc3QvSW5zZXJ0UXVlcnknO1xuZXhwb3J0IHsgSm9pbiwgSm9pblR5cGUgfSBmcm9tICcuL2FzdC9Kb2luJztcbmV4cG9ydCB7IExpdGVyYWxFeHByZXNzaW9uLCBOdW1iZXJMaXRlcmFsLCBTdHJpbmdMaXRlcmFsLCBOdWxsTGl0ZXJhbCwgUGFyYW0gfSBmcm9tICcuL2FzdC9MaXRlcmFscyc7XG5leHBvcnQgeyBPcGVyYXRvciB9IGZyb20gJy4vYXN0L09wZXJhdG9yJztcbmV4cG9ydCB7IE9yZGVyQnksIE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tICcuL2FzdC9PcmRlckJ5JztcbmV4cG9ydCB7IFNlbGVjdFF1ZXJ5IH0gZnJvbSAnLi9hc3QvU2VsZWN0UXVlcnknO1xuZXhwb3J0IHsgVW5hcnlFeHByZXNzaW9uIH0gZnJvbSAnLi9hc3QvVW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCB7IFdpdGggfSBmcm9tICcuL2FzdC9XaXRoJztcblxuLy8gQnVpbGRlclxuZXhwb3J0IHsgUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyL1F1ZXJ5QnVpbGRlcic7XG5leHBvcnQge1xuICAvLyBWYWx1ZSBoZWxwZXJzXG4gIFZBTCxcbiAgLy8gT3BlcmF0b3JzXG4gIEVRLCBOT1RfRVEsIE5PVCwgR1QsIExULCBHVEUsIExURSwgTElLRSxcbiAgSVNfTlVMTCwgSVNfTk9UX05VTEwsXG4gIFBMVVMsIE1JTlVTLCBNVUxUSVBMWSwgRElWSURFLFxuICBBTkQsIE9SLFxuICAvLyBFWElTVFNcbiAgRVhJU1RTLFxuICAvLyBDb2x1bW5zXG4gIENPTFVNTixcbiAgLy8gU2VsZWN0IHF1ZXJpZXNcbiAgU0VMRUNULCBTRUxFQ1RfRElTVElOQ1QsIEZST00sIFVOSU9OLFxuICAvLyBKb2luc1xuICBKT0lOLCBMRUZUX0pPSU4sIENST1NTX0pPSU4sXG4gIC8vIEZ1bmN0aW9uc1xuICBBQlMsIENPVU5ULCBTVU0sIEZOLCBGTl9ESVNUSU5DVCxcbiAgLy8gQ29uY2F0ZW5hdGlvblxuICBDT05DQVQsXG4gIC8vIFBhcmFtZXRlcnNcbiAgUEFSQU0sXG4gIC8vIEluc2VydCBxdWVyaWVzXG4gIElOU0VSVCwgSU5TRVJUX09SX1JFUExBQ0UsXG4gIC8vIElOIGV4cHJlc3Npb25zXG4gIElOLCBOT1RfSU4sXG4gIC8vIENsYXVzZXNcbiAgR1JPVVBfQlksIEhBVklORywgT1JERVJfQlksXG4gIC8vIENBU0UgZXhwcmVzc2lvbnNcbiAgQ0FTRSxcbiAgLy8gV0lUSCBjbGF1c2VzXG4gIFdJVEhcbn0gZnJvbSAnLi9idWlsZGVyL1Nob3J0aGFuZCc7XG5cbi8vIFJlbmRlcmVyc1xuZXhwb3J0IHsgUXVlcnlSZW5kZXJlciwgcXVvdGVJZGVudGlmaWVyLCBzaG91bGRRdW90ZUlkZW50aWZpZXIgfSBmcm9tICcuL3JlbmRlcmVyL1F1ZXJ5UmVuZGVyZXInO1xuZXhwb3J0IHsgQ29tcGFjdFF1ZXJ5UmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyL0NvbXBhY3RRdWVyeVJlbmRlcmVyJztcbmV4cG9ydCB7IEluZGVudGVkUXVlcnlSZW5kZXJlciB9IGZyb20gJy4vcmVuZGVyZXIvSW5kZW50ZWRRdWVyeVJlbmRlcmVyJztcblxuLy8gVmFsaWRhdG9yc1xuZXhwb3J0IHsgUXVlcnlWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlL1F1ZXJ5VmFsaWRhdG9yJztcbmV4cG9ydCB7IENvbW1vblF1ZXJ5VmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0ZS9Db21tb25RdWVyeVZhbGlkYXRvcic7XG5leHBvcnQgeyBTUUxpdGVRdWVyeVZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUvU1FMaXRlUXVlcnlWYWxpZGF0b3InO1xuXG4vLyBWaXNpdG9yc1xuZXhwb3J0IHsgU3FsVHJlZU5vZGVWaXNpdG9yLCBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3IsIENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3IgfSBmcm9tICcuL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yJztcbmV4cG9ydCB7IFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIgfSBmcm9tICcuL3Zpc2l0b3IvU3FsVHJlZU5vZGVUcmFuc2Zvcm1lcic7XG5leHBvcnQgeyBRdWVyeUlkZW50aXR5VHJhbnNmb3JtZXIgfSBmcm9tICcuL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyJztcbmV4cG9ydCB7IFF1ZXJ5UGFyYW1SZXdyaXRlVHJhbnNmb3JtZXIsIFBhcmFtUmVwbGFjZW1lbnRzIH0gZnJvbSAnLi92aXNpdG9yL1F1ZXJ5UGFyYW1SZXdyaXRlVHJhbnNmb3JtZXInO1xuZXhwb3J0IHsgUGFyYW1Db2xsZWN0aW5nVmlzaXRvciB9IGZyb20gJy4vdmlzaXRvci9QYXJhbUNvbGxlY3Rvcic7XG4iXX0=
|