@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,45 @@
|
|
|
1
|
+
import { AliasableExpression } from "../ast/Abstractions";
|
|
2
|
+
import { Alias } from "../ast/Alias";
|
|
3
|
+
import { BinaryExpression } from "../ast/BinaryExpression";
|
|
4
|
+
import { CaseExpression } from "../ast/CaseExpression";
|
|
5
|
+
import { Column } from "../ast/Column";
|
|
6
|
+
import { Concat } from "../ast/Concat";
|
|
7
|
+
import { ExistsExpression } from "../ast/ExistsExpression";
|
|
8
|
+
import { From, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
|
|
9
|
+
import { FunctionExpression } from "../ast/FunctionExpression";
|
|
10
|
+
import { InExpression } from "../ast/InExpression";
|
|
11
|
+
import { InsertQuery } from "../ast/InsertQuery";
|
|
12
|
+
import { Join } from "../ast/Join";
|
|
13
|
+
import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
|
|
14
|
+
import { OrderBy } from "../ast/OrderBy";
|
|
15
|
+
import { SelectQuery } from "../ast/SelectQuery";
|
|
16
|
+
import { UnaryExpression } from "../ast/UnaryExpression";
|
|
17
|
+
import { With } from "../ast/With";
|
|
18
|
+
import { ColumnLikeVisitorAcceptor, FromLikeAndJoinVisitorAcceptor, SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
|
|
19
|
+
import { QueryRenderer } from "./QueryRenderer";
|
|
20
|
+
export declare class CompactQueryRenderer implements QueryRenderer, SqlTreeNodeVisitor<string> {
|
|
21
|
+
protected fromLikeAndJoinAcceptor: FromLikeAndJoinVisitorAcceptor<void>;
|
|
22
|
+
protected columnLikeAcceptor: ColumnLikeVisitorAcceptor<string>;
|
|
23
|
+
render(node: SelectQuery | InsertQuery): string;
|
|
24
|
+
visitInsertQuery(node: InsertQuery): string;
|
|
25
|
+
visitSelectQuery(node: SelectQuery): string;
|
|
26
|
+
visitTableFrom(node: TableFrom): string;
|
|
27
|
+
visitSubqueryFrom(node: SubqueryFrom): string;
|
|
28
|
+
visitJsonEachFrom(node: JsonEachFrom): string;
|
|
29
|
+
visitColumn(node: Column): string;
|
|
30
|
+
visitAlias(node: Alias<From | AliasableExpression>): string;
|
|
31
|
+
visitJoinClause(node: Join): string;
|
|
32
|
+
visitOrderBy(node: OrderBy): string;
|
|
33
|
+
visitWithClause(node: With): string;
|
|
34
|
+
visitBinaryExpression(node: BinaryExpression): string;
|
|
35
|
+
visitUnaryExpression(node: UnaryExpression): string;
|
|
36
|
+
visitInExpression(node: InExpression): string;
|
|
37
|
+
visitConcat(node: Concat): string;
|
|
38
|
+
visitCaseExpression(node: CaseExpression): string;
|
|
39
|
+
visitFunctionExpression(node: FunctionExpression): string;
|
|
40
|
+
visitParamExpression(_node: Param): string;
|
|
41
|
+
visitStringLiteral(node: StringLiteral): string;
|
|
42
|
+
visitNumberLiteral(node: NumberLiteral): string;
|
|
43
|
+
visitNullLiteral(_node: NullLiteral): string;
|
|
44
|
+
visitExistsExpression(node: ExistsExpression): string;
|
|
45
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompactQueryRenderer = void 0;
|
|
4
|
+
const Alias_1 = require("../ast/Alias");
|
|
5
|
+
const From_1 = require("../ast/From");
|
|
6
|
+
const Join_1 = require("../ast/Join");
|
|
7
|
+
const Operator_1 = require("../ast/Operator");
|
|
8
|
+
const SelectQuery_1 = require("../ast/SelectQuery");
|
|
9
|
+
const SqlTreeNodeVisitor_1 = require("../visitor/SqlTreeNodeVisitor");
|
|
10
|
+
const QueryRenderer_1 = require("./QueryRenderer");
|
|
11
|
+
class CompactQueryRenderer {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.fromLikeAndJoinAcceptor = new SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor();
|
|
14
|
+
this.columnLikeAcceptor = new SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor();
|
|
15
|
+
}
|
|
16
|
+
render(node) {
|
|
17
|
+
return node.accept(this);
|
|
18
|
+
}
|
|
19
|
+
visitInsertQuery(node) {
|
|
20
|
+
const parts = [];
|
|
21
|
+
parts.push(`INSERT${node.isOrReplace() ? ' OR REPLACE' : ''}`);
|
|
22
|
+
parts.push(`INTO ${(0, QueryRenderer_1.quoteIdentifier)(node['_tableName'])}`);
|
|
23
|
+
if (node['_columns'].length > 0) {
|
|
24
|
+
parts.push(`(${node['_columns'].map(QueryRenderer_1.quoteIdentifier).join(', ')})`);
|
|
25
|
+
}
|
|
26
|
+
parts.push(`VALUES (${node['_values'].map(v => v.accept(this)).join(', ')})`);
|
|
27
|
+
return parts.join(' ');
|
|
28
|
+
}
|
|
29
|
+
visitSelectQuery(node) {
|
|
30
|
+
const parts = [];
|
|
31
|
+
if (node['_with'].length > 0) {
|
|
32
|
+
parts.push(`WITH ${node['_with'].map(w => w.accept(this)).join(', ')}`);
|
|
33
|
+
}
|
|
34
|
+
parts.push(`SELECT${node.isDistinct() ? ' DISTINCT' : ''}`);
|
|
35
|
+
if (node['_columns'].length > 0) {
|
|
36
|
+
parts.push(node['_columns'].map(c => this.columnLikeAcceptor.accept(this, c)).join(', '));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
parts.push('*');
|
|
40
|
+
}
|
|
41
|
+
if (node['_fromsAndJoins'].length > 0) {
|
|
42
|
+
let fromsAndJoinsText = '';
|
|
43
|
+
for (const fromOrJoin of node['_fromsAndJoins']) {
|
|
44
|
+
if (fromOrJoin instanceof Join_1.Join) {
|
|
45
|
+
fromsAndJoinsText += ` ${fromOrJoin.accept(this)}`;
|
|
46
|
+
}
|
|
47
|
+
else if (fromOrJoin instanceof Alias_1.Alias ||
|
|
48
|
+
fromOrJoin instanceof From_1.From ||
|
|
49
|
+
fromOrJoin instanceof From_1.TableFrom ||
|
|
50
|
+
fromOrJoin instanceof From_1.SubqueryFrom ||
|
|
51
|
+
fromOrJoin instanceof From_1.JsonEachFrom) {
|
|
52
|
+
if (fromsAndJoinsText) {
|
|
53
|
+
fromsAndJoinsText += `, ${fromOrJoin.accept(this)}`;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
fromsAndJoinsText += `FROM ${fromOrJoin.accept(this)}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
parts.push(fromsAndJoinsText);
|
|
61
|
+
}
|
|
62
|
+
if (node['_where']) {
|
|
63
|
+
parts.push(`WHERE ${node['_where'].accept(this)}`);
|
|
64
|
+
}
|
|
65
|
+
if (node['_groupBy'].length > 0) {
|
|
66
|
+
parts.push(`GROUP BY ${node['_groupBy'].map(c => c.accept(this)).join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
if (node['_having']) {
|
|
69
|
+
parts.push(`HAVING ${node['_having'].accept(this)}`);
|
|
70
|
+
}
|
|
71
|
+
if (node['_union'].length > 0) {
|
|
72
|
+
parts.push(node['_union'].map(u => `UNION ${u.accept(this)}`).join(' '));
|
|
73
|
+
}
|
|
74
|
+
if (node['_orderBy'].length > 0) {
|
|
75
|
+
parts.push(`ORDER BY ${node['_orderBy'].map(o => o.accept(this)).join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
if (node['_limit'] !== null && node['_limit'] !== undefined) {
|
|
78
|
+
parts.push(`LIMIT ${node['_limit']}`);
|
|
79
|
+
if (node['_offset'] !== null && node['_offset'] !== undefined) {
|
|
80
|
+
parts.push(`OFFSET ${node['_offset']}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return parts.filter(p => p).join(' ');
|
|
84
|
+
}
|
|
85
|
+
visitTableFrom(node) {
|
|
86
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}`;
|
|
87
|
+
}
|
|
88
|
+
visitSubqueryFrom(node) {
|
|
89
|
+
return `(${node.subquery.accept(this)})`;
|
|
90
|
+
}
|
|
91
|
+
visitJsonEachFrom(node) {
|
|
92
|
+
const expr = node.jsonExpression.accept(this);
|
|
93
|
+
const path = node.jsonPath ? `, ${node.jsonPath.accept(this)}` : '';
|
|
94
|
+
return `json_each(${expr}${path})`;
|
|
95
|
+
}
|
|
96
|
+
visitColumn(node) {
|
|
97
|
+
if (node.hasTableName()) {
|
|
98
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}.${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
visitAlias(node) {
|
|
105
|
+
const isSubquery = node.referent instanceof From_1.SubqueryFrom || node.referent instanceof SelectQuery_1.SelectQuery;
|
|
106
|
+
const renderedReferent = node.referent.accept(this);
|
|
107
|
+
const renderedAliasName = (0, QueryRenderer_1.quoteIdentifier)(node.alias);
|
|
108
|
+
if (node.referent instanceof From_1.From) {
|
|
109
|
+
return `${renderedReferent} ${renderedAliasName}`;
|
|
110
|
+
}
|
|
111
|
+
else if (isSubquery) {
|
|
112
|
+
return `(${renderedReferent}) AS ${renderedAliasName}`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
return `${renderedReferent} AS ${renderedAliasName}`;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
visitJoinClause(node) {
|
|
119
|
+
return `${node.type} JOIN ${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)} ${(0, QueryRenderer_1.quoteIdentifier)(node.alias)} ON ${node.on.accept(this)}`;
|
|
120
|
+
}
|
|
121
|
+
visitOrderBy(node) {
|
|
122
|
+
return `${node.column.accept(this)} ${node.direction}`;
|
|
123
|
+
}
|
|
124
|
+
visitWithClause(node) {
|
|
125
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.name)} AS (${node.query.accept(this)})`;
|
|
126
|
+
}
|
|
127
|
+
visitBinaryExpression(node) {
|
|
128
|
+
return `(${node.left.accept(this)} ${node.operator} ${node.right.accept(this)})`;
|
|
129
|
+
}
|
|
130
|
+
visitUnaryExpression(node) {
|
|
131
|
+
const operand = node.operand.accept(this);
|
|
132
|
+
if (node.operator === Operator_1.Operator.IS_NULL || node.operator === Operator_1.Operator.IS_NOT_NULL) {
|
|
133
|
+
return `(${operand} ${node.operator})`;
|
|
134
|
+
}
|
|
135
|
+
else if (node.operator === 'NOT') {
|
|
136
|
+
return `(NOT ${operand})`;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return `(${node.operator}${operand})`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
visitInExpression(node) {
|
|
143
|
+
const leftStr = node.left.length > 1
|
|
144
|
+
? `(${node.left.map(l => l.accept(this)).join(', ')})`
|
|
145
|
+
: node.left[0].accept(this);
|
|
146
|
+
const not = node.not ? ' NOT' : '';
|
|
147
|
+
let right;
|
|
148
|
+
if (node.values instanceof SelectQuery_1.SelectQuery) {
|
|
149
|
+
right = `(${node.values.accept(this)})`;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
right = `(${node.values.map(set => set.length > 1 ? `(${set.map(v => v.accept(this)).join(', ')})` : set[0].accept(this)).join(', ')})`;
|
|
153
|
+
}
|
|
154
|
+
return `(${leftStr}${not} IN ${right})`;
|
|
155
|
+
}
|
|
156
|
+
visitConcat(node) {
|
|
157
|
+
return `(${node.expressions.map(e => e.accept(this)).join(' || ')})`;
|
|
158
|
+
}
|
|
159
|
+
visitCaseExpression(node) {
|
|
160
|
+
const parts = ['CASE'];
|
|
161
|
+
for (const c of node.cases) {
|
|
162
|
+
parts.push(`WHEN ${c.when.accept(this)} THEN ${c.then.accept(this)}`);
|
|
163
|
+
}
|
|
164
|
+
if (node.else) {
|
|
165
|
+
parts.push(`ELSE ${node.else.accept(this)}`);
|
|
166
|
+
}
|
|
167
|
+
parts.push('END');
|
|
168
|
+
return parts.join(' ');
|
|
169
|
+
}
|
|
170
|
+
visitFunctionExpression(node) {
|
|
171
|
+
const args = node.args.map(a => a.accept(this)).join(', ');
|
|
172
|
+
const distinctPrefix = node.distinct ? 'DISTINCT ' : '';
|
|
173
|
+
return `${node.name}(${distinctPrefix}${args})`;
|
|
174
|
+
}
|
|
175
|
+
visitParamExpression(_node) {
|
|
176
|
+
return '?';
|
|
177
|
+
}
|
|
178
|
+
visitStringLiteral(node) {
|
|
179
|
+
return `'${node.value.replace(/'/g, "''")}'`;
|
|
180
|
+
}
|
|
181
|
+
visitNumberLiteral(node) {
|
|
182
|
+
return node.value.toString();
|
|
183
|
+
}
|
|
184
|
+
visitNullLiteral(_node) {
|
|
185
|
+
return 'NULL';
|
|
186
|
+
}
|
|
187
|
+
visitExistsExpression(node) {
|
|
188
|
+
return `EXISTS (${node.subquery.accept(this)})`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.CompactQueryRenderer = CompactQueryRenderer;
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFjdFF1ZXJ5UmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIvQ29tcGFjdFF1ZXJ5UmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esd0NBQXFDO0FBTXJDLHNDQUEwRTtBQUkxRSxzQ0FBbUM7QUFFbkMsOENBQTJDO0FBRTNDLG9EQUFpRDtBQUdqRCxzRUFBOEg7QUFDOUgsbURBQWlFO0FBRWpFLE1BQWEsb0JBQW9CO0lBQWpDO1FBR1ksNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBUSxDQUFDO1FBQ3JFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVUsQ0FBQztJQWdNekUsQ0FBQztJQTlMUSxNQUFNLENBQUMsSUFBK0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUNoQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFBLCtCQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQywrQkFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUks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LENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1RCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMs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QUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBc0I7UUFDMUMsT0FBTyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBcE1ELG9EQW9NQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFsaWFzYWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Fic3RyYWN0aW9uc1wiO1xuaW1wb3J0IHsgQWxpYXMgfSBmcm9tIFwiLi4vYXN0L0FsaWFzXCI7XG5pbXBvcnQgeyBCaW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9CaW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDYXNlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gXCIuLi9hc3QvQ29sdW1uXCI7XG5pbXBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi4vYXN0L0NvbmNhdFwiO1xuaW1wb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRXhpc3RzRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnJvbSwgSnNvbkVhY2hGcm9tLCBTdWJxdWVyeUZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSB9IGZyb20gXCIuLi9hc3QvSW5zZXJ0UXVlcnlcIjtcbmltcG9ydCB7IEpvaW4gfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE51bGxMaXRlcmFsLCBOdW1iZXJMaXRlcmFsLCBQYXJhbSwgU3RyaW5nTGl0ZXJhbCB9IGZyb20gXCIuLi9hc3QvTGl0ZXJhbHNcIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvciwgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yLCBTcWxUcmVlTm9kZVZpc2l0b3IgfSBmcm9tIFwiLi4vdmlzaXRvci9TcWxUcmVlTm9kZVZpc2l0b3JcIjtcbmltcG9ydCB7IFF1ZXJ5UmVuZGVyZXIsIHF1b3RlSWRlbnRpZmllciB9IGZyb20gXCIuL1F1ZXJ5UmVuZGVyZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbXBhY3RRdWVyeVJlbmRlcmVyXG4gIGltcGxlbWVudHMgUXVlcnlSZW5kZXJlciwgU3FsVHJlZU5vZGVWaXNpdG9yPHN0cmluZz5cbntcbiAgcHJvdGVjdGVkIGZyb21MaWtlQW5kSm9pbkFjY2VwdG9yID0gbmV3IEZyb21MaWtlQW5kSm9pblZpc2l0b3JBY2NlcHRvcjx2b2lkPigpO1xuICBwcm90ZWN0ZWQgY29sdW1uTGlrZUFjY2VwdG9yID0gbmV3IENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyByZW5kZXIobm9kZTogU2VsZWN0UXVlcnkgfCBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuYWNjZXB0KHRoaXMpO1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgcGFydHMucHVzaChgSU5TRVJUJHtub2RlLmlzT3JSZXBsYWNlKCkgPyAnIE9SIFJFUExBQ0UnIDogJyd9YCk7XG4gICAgcGFydHMucHVzaChgSU5UTyAke3F1b3RlSWRlbnRpZmllcihub2RlWydfdGFibGVOYW1lJ10pfWApO1xuICAgIGlmIChub2RlWydfY29sdW1ucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCgke25vZGVbJ19jb2x1bW5zJ10ubWFwKHF1b3RlSWRlbnRpZmllcikuam9pbignLCAnKX0pYCk7XG4gICAgfVxuICAgIHBhcnRzLnB1c2goYFZBTFVFUyAoJHtub2RlWydfdmFsdWVzJ10ubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9KWApO1xuICAgIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobm9kZVsnX3dpdGgnXS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBXSVRIICR7bm9kZVsnX3dpdGgnXS5tYXAodyA9PiB3LmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgcGFydHMucHVzaChgU0VMRUNUJHtub2RlLmlzRGlzdGluY3QoKSA/ICcgRElTVElOQ1QnIDogJyd9YCk7XG4gICAgaWYgKG5vZGVbJ19jb2x1bW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfY29sdW1ucyddLm1hcChjID0+IHRoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKSkuam9pbignLCAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzLnB1c2goJyonKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGZyb21zQW5kSm9pbnNUZXh0ID0gJyc7XG4gICAgICBmb3IgKGNvbnN0IGZyb21PckpvaW4gb2Ygbm9kZVsnX2Zyb21zQW5kSm9pbnMnXSkge1xuICAgICAgICBpZiAoZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEpvaW4pIHtcbiAgICAgICAgICBmcm9tc0FuZEpvaW5zVGV4dCArPSBgICR7ZnJvbU9ySm9pbi5hY2NlcHQodGhpcyl9YDtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgQWxpYXMgfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgRnJvbSB8fFxuICAgICAgICAgIGZyb21PckpvaW4gaW5zdGFuY2VvZiBUYWJsZUZyb20gfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgU3VicXVlcnlGcm9tIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEpzb25FYWNoRnJvbVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZnJvbXNBbmRKb2luc1RleHQpIHtcbiAgICAgICAgICAgIGZyb21zQW5kSm9pbnNUZXh0ICs9IGAsICR7ZnJvbU9ySm9pbi5hY2NlcHQodGhpcyl9YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbXNBbmRKb2luc1RleHQgKz0gYEZST00gJHtmcm9tT3JKb2luLmFjY2VwdCh0aGlzKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFydHMucHVzaChmcm9tc0FuZEpvaW5zVGV4dCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfd2hlcmUnXSkge1xuICAgICAgcGFydHMucHVzaChgV0hFUkUgJHtub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZ3JvdXBCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYEdST1VQIEJZICR7bm9kZVsnX2dyb3VwQnknXS5tYXAoYyA9PiBjLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkge1xuICAgICAgcGFydHMucHVzaChgSEFWSU5HICR7bm9kZVsnX2hhdmluZyddLmFjY2VwdCh0aGlzKX1gKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ191bmlvbiddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2gobm9kZVsnX3VuaW9uJ10ubWFwKHUgPT4gYFVOSU9OICR7dS5hY2NlcHQodGhpcyl9YCkuam9pbignICcpKTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ19vcmRlckJ5J10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChgT1JERVIgQlkgJHtub2RlWydfb3JkZXJCeSddLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZVsnX2xpbWl0J10gIT09IG51bGwgJiYgbm9kZVsnX2xpbWl0J10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFydHMucHVzaChgTElNSVQgJHtub2RlWydfbGltaXQnXX1gKTtcbiAgICAgIGlmIChub2RlWydfb2Zmc2V0J10gIT09IG51bGwgJiYgbm9kZVsnX29mZnNldCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFydHMucHVzaChgT0ZGU0VUICR7bm9kZVsnX29mZnNldCddfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHMuZmlsdGVyKHAgPT4gcCkuam9pbignICcpO1xuICB9XG5cbiAgdmlzaXRUYWJsZUZyb20obm9kZTogVGFibGVGcm9tKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lKX1gO1xuICB9XG5cbiAgdmlzaXRTdWJxdWVyeUZyb20obm9kZTogU3VicXVlcnlGcm9tKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfSlgO1xuICB9XG5cbiAgdmlzaXRKc29uRWFjaEZyb20obm9kZTogSnNvbkVhY2hGcm9tKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHByID0gbm9kZS5qc29uRXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgY29uc3QgcGF0aCA9IG5vZGUuanNvblBhdGggPyBgLCAke25vZGUuanNvblBhdGguYWNjZXB0KHRoaXMpfWAgOiAnJztcbiAgICByZXR1cm4gYGpzb25fZWFjaCgke2V4cHJ9JHtwYXRofSlgO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogc3RyaW5nIHtcbiAgICBpZiAobm9kZS5oYXNUYWJsZU5hbWUoKSkge1xuICAgICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLnRhYmxlTmFtZSBhcyBzdHJpbmcpfS4ke3F1b3RlSWRlbnRpZmllcihub2RlLmNvbHVtbk5hbWUpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtxdW90ZUlkZW50aWZpZXIobm9kZS5jb2x1bW5OYW1lKX1gO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0QWxpYXMobm9kZTogQWxpYXM8RnJvbXxBbGlhc2FibGVFeHByZXNzaW9uPik6IHN0cmluZyB7XG4gICAgY29uc3QgaXNTdWJxdWVyeSA9IG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBTdWJxdWVyeUZyb20gfHwgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5O1xuICAgIGNvbnN0IHJlbmRlcmVkUmVmZXJlbnQgPSBub2RlLnJlZmVyZW50LmFjY2VwdCh0aGlzKTtcbiAgICBjb25zdCByZW5kZXJlZEFsaWFzTmFtZSA9IHF1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzIGFzIHN0cmluZyk7XG4gICAgaWYgKG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBGcm9tKSB7XG4gICAgICByZXR1cm4gYCR7cmVuZGVyZWRSZWZlcmVudH0gJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH0gZWxzZSBpZiAoaXNTdWJxdWVyeSkge1xuICAgICAgcmV0dXJuIGAoJHtyZW5kZXJlZFJlZmVyZW50fSkgQVMgJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cmVuZGVyZWRSZWZlcmVudH0gQVMgJHtyZW5kZXJlZEFsaWFzTmFtZX1gO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0Sm9pbkNsYXVzZShub2RlOiBKb2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bm9kZS50eXBlfSBKT0lOICR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lKX0gJHtxdW90ZUlkZW50aWZpZXIobm9kZS5hbGlhcyl9IE9OICR7bm9kZS5vbi5hY2NlcHQodGhpcyl9YDtcbiAgfVxuXG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bm9kZS5jb2x1bW4uYWNjZXB0KHRoaXMpfSAke25vZGUuZGlyZWN0aW9ufWA7XG4gIH1cblxuICB2aXNpdFdpdGhDbGF1c2Uobm9kZTogV2l0aCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLm5hbWUpfSBBUyAoJHtub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0QmluYXJ5RXhwcmVzc2lvbihub2RlOiBCaW5hcnlFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUubGVmdC5hY2NlcHQodGhpcyl9ICR7bm9kZS5vcGVyYXRvcn0gJHtub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUub3BlcmF0b3IgPT09IE9wZXJhdG9yLklTX05VTEwgfHwgbm9kZS5vcGVyYXRvciA9PT0gT3BlcmF0b3IuSVNfTk9UX05VTEwpIHtcbiAgICAgIHJldHVybiBgKCR7b3BlcmFuZH0gJHtub2RlLm9wZXJhdG9yfSlgO1xuICAgIH0gZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PT0gJ05PVCcpIHtcbiAgICAgIHJldHVybiBgKE5PVCAke29wZXJhbmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgKCR7bm9kZS5vcGVyYXRvcn0ke29wZXJhbmR9KWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRJbkV4cHJlc3Npb24obm9kZTogSW5FeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZWZ0U3RyID0gbm9kZS5sZWZ0Lmxlbmd0aCA+IDFcbiAgICAgID8gYCgke25vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYFxuICAgICAgOiBub2RlLmxlZnRbMF0uYWNjZXB0KHRoaXMpO1xuICAgIGNvbnN0IG5vdCA9IG5vZGUubm90ID8gJyBOT1QnIDogJyc7XG4gICAgbGV0IHJpZ2h0OiBzdHJpbmc7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJpZ2h0ID0gYCgke25vZGUudmFsdWVzLmFjY2VwdCh0aGlzKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHQgPSBgKCR7bm9kZS52YWx1ZXMubWFwKHNldCA9PlxuICAgICAgICBzZXQubGVuZ3RoID4gMSA/IGAoJHtzZXQubWFwKHYgPT4gdi5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9KWAgOiBzZXRbMF0uYWNjZXB0KHRoaXMpXG4gICAgICApLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIHJldHVybiBgKCR7bGVmdFN0cn0ke25vdH0gSU4gJHtyaWdodH0pYDtcbiAgfVxuXG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAoJHtub2RlLmV4cHJlc3Npb25zLm1hcChlID0+IGUuYWNjZXB0KHRoaXMpKS5qb2luKCcgfHwgJyl9KWA7XG4gIH1cblxuICB2aXNpdENhc2VFeHByZXNzaW9uKG5vZGU6IENhc2VFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbJ0NBU0UnXTtcbiAgICBmb3IgKGNvbnN0IGMgb2Ygbm9kZS5jYXNlcykge1xuICAgICAgcGFydHMucHVzaChgV0hFTiAke2Mud2hlbi5hY2NlcHQodGhpcyl9IFRIRU4gJHtjLnRoZW4uYWNjZXB0KHRoaXMpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZS5lbHNlKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBFTFNFICR7bm9kZS5lbHNlLmFjY2VwdCh0aGlzKX1gKTtcbiAgICB9XG4gICAgcGFydHMucHVzaCgnRU5EJyk7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgYXJncyA9IG5vZGUuYXJncy5tYXAoYSA9PiBhLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKTtcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IG5vZGUuZGlzdGluY3QgPyAnRElTVElOQ1QgJyA6ICcnO1xuICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7ZGlzdGluY3RQcmVmaXh9JHthcmdzfSlgO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24oX25vZGU6IFBhcmFtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJz8nO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJyR7bm9kZS52YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZpc2l0TnVsbExpdGVyYWwoX25vZGU6IE51bGxMaXRlcmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ05VTEwnO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBgRVhJU1RTICgke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfSlgO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { AliasableExpression } from "../ast/Abstractions";
|
|
2
|
+
import { Alias } from "../ast/Alias";
|
|
3
|
+
import { BinaryExpression } from "../ast/BinaryExpression";
|
|
4
|
+
import { CaseExpression } from "../ast/CaseExpression";
|
|
5
|
+
import { Column } from "../ast/Column";
|
|
6
|
+
import { Concat } from "../ast/Concat";
|
|
7
|
+
import { ExistsExpression } from "../ast/ExistsExpression";
|
|
8
|
+
import { From, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
|
|
9
|
+
import { FunctionExpression } from "../ast/FunctionExpression";
|
|
10
|
+
import { InExpression } from "../ast/InExpression";
|
|
11
|
+
import { InsertQuery } from "../ast/InsertQuery";
|
|
12
|
+
import { Join } from "../ast/Join";
|
|
13
|
+
import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
|
|
14
|
+
import { OrderBy } from "../ast/OrderBy";
|
|
15
|
+
import { SelectQuery } from "../ast/SelectQuery";
|
|
16
|
+
import { UnaryExpression } from "../ast/UnaryExpression";
|
|
17
|
+
import { With } from "../ast/With";
|
|
18
|
+
import { ColumnLikeVisitorAcceptor, FromLikeAndJoinVisitorAcceptor, SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
|
|
19
|
+
import { QueryRenderer } from "./QueryRenderer";
|
|
20
|
+
export declare class IndentedQueryRenderer implements QueryRenderer, SqlTreeNodeVisitor<string> {
|
|
21
|
+
protected fromLikeAndJoinAcceptor: FromLikeAndJoinVisitorAcceptor<string>;
|
|
22
|
+
protected columnLikeAcceptor: ColumnLikeVisitorAcceptor<string>;
|
|
23
|
+
private readonly spacesPerLevel;
|
|
24
|
+
private indentationLevel;
|
|
25
|
+
constructor(spacesPerLevel: number);
|
|
26
|
+
render(node: SelectQuery | InsertQuery): string;
|
|
27
|
+
private getIndent;
|
|
28
|
+
private indent;
|
|
29
|
+
private dedent;
|
|
30
|
+
visitInsertQuery(node: InsertQuery): string;
|
|
31
|
+
visitSelectQuery(node: SelectQuery): string;
|
|
32
|
+
visitTableFrom(node: TableFrom): string;
|
|
33
|
+
visitSubqueryFrom(node: SubqueryFrom): string;
|
|
34
|
+
visitJsonEachFrom(node: JsonEachFrom): string;
|
|
35
|
+
visitColumn(node: Column): string;
|
|
36
|
+
visitAlias(node: Alias<From | AliasableExpression>): string;
|
|
37
|
+
visitJoinClause(node: Join): string;
|
|
38
|
+
visitOrderBy(node: OrderBy): string;
|
|
39
|
+
visitWithClause(node: With): string;
|
|
40
|
+
visitBinaryExpression(node: BinaryExpression): string;
|
|
41
|
+
visitUnaryExpression(node: UnaryExpression): string;
|
|
42
|
+
visitInExpression(node: InExpression): string;
|
|
43
|
+
visitConcat(node: Concat): string;
|
|
44
|
+
visitCaseExpression(node: CaseExpression): string;
|
|
45
|
+
visitFunctionExpression(node: FunctionExpression): string;
|
|
46
|
+
visitParamExpression(_node: Param): string;
|
|
47
|
+
visitStringLiteral(node: StringLiteral): string;
|
|
48
|
+
visitNumberLiteral(node: NumberLiteral): string;
|
|
49
|
+
visitNullLiteral(_node: NullLiteral): string;
|
|
50
|
+
visitExistsExpression(node: ExistsExpression): string;
|
|
51
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IndentedQueryRenderer = void 0;
|
|
4
|
+
const Alias_1 = require("../ast/Alias");
|
|
5
|
+
const From_1 = require("../ast/From");
|
|
6
|
+
const Join_1 = require("../ast/Join");
|
|
7
|
+
const Operator_1 = require("../ast/Operator");
|
|
8
|
+
const SelectQuery_1 = require("../ast/SelectQuery");
|
|
9
|
+
const SqlTreeNodeVisitor_1 = require("../visitor/SqlTreeNodeVisitor");
|
|
10
|
+
const QueryRenderer_1 = require("./QueryRenderer");
|
|
11
|
+
class IndentedQueryRenderer {
|
|
12
|
+
constructor(spacesPerLevel) {
|
|
13
|
+
this.fromLikeAndJoinAcceptor = new SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor();
|
|
14
|
+
this.columnLikeAcceptor = new SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor();
|
|
15
|
+
this.indentationLevel = -1;
|
|
16
|
+
if (!Number.isInteger(spacesPerLevel) || spacesPerLevel <= 0) {
|
|
17
|
+
throw new Error('spacesPerLevel must be a positive integer');
|
|
18
|
+
}
|
|
19
|
+
this.spacesPerLevel = spacesPerLevel;
|
|
20
|
+
}
|
|
21
|
+
render(node) {
|
|
22
|
+
return node.accept(this);
|
|
23
|
+
}
|
|
24
|
+
getIndent() {
|
|
25
|
+
return ' '.repeat(this.indentationLevel * this.spacesPerLevel);
|
|
26
|
+
}
|
|
27
|
+
indent() {
|
|
28
|
+
this.indentationLevel++;
|
|
29
|
+
}
|
|
30
|
+
dedent() {
|
|
31
|
+
this.indentationLevel--;
|
|
32
|
+
}
|
|
33
|
+
visitInsertQuery(node) {
|
|
34
|
+
this.indent();
|
|
35
|
+
const parts = [];
|
|
36
|
+
parts.push(`${this.getIndent()}INSERT${node.isOrReplace() ? ' OR REPLACE' : ''}`);
|
|
37
|
+
parts.push(`${this.getIndent()}INTO ${(0, QueryRenderer_1.quoteIdentifier)(node['_tableName'])}`);
|
|
38
|
+
if (node['_columns'].length > 0) {
|
|
39
|
+
parts.push(`${this.getIndent()}(${node['_columns'].map(QueryRenderer_1.quoteIdentifier).join(', ')})`);
|
|
40
|
+
}
|
|
41
|
+
parts.push(`${this.getIndent()}VALUES`);
|
|
42
|
+
parts.push(`${this.getIndent()}(${node['_values'].map(v => v.accept(this)).join(', ')})`);
|
|
43
|
+
this.dedent();
|
|
44
|
+
return parts.join('\n');
|
|
45
|
+
}
|
|
46
|
+
visitSelectQuery(node) {
|
|
47
|
+
const parts = [];
|
|
48
|
+
if (node['_with'].length > 0) {
|
|
49
|
+
this.indent();
|
|
50
|
+
parts.push('WITH');
|
|
51
|
+
parts.push(node['_with'].map(w => w.accept(this)).join(',\n'));
|
|
52
|
+
this.dedent();
|
|
53
|
+
}
|
|
54
|
+
this.indent();
|
|
55
|
+
parts.push(`${this.getIndent()}SELECT${node.isDistinct() ? ' DISTINCT' : ''}`);
|
|
56
|
+
if (node['_columns'].length > 0) {
|
|
57
|
+
parts.push(node['_columns'].map(c => `${this.getIndent()} ${this.columnLikeAcceptor.accept(this, c)}`).join(',\n'));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
parts.push(`${this.getIndent()} *`);
|
|
61
|
+
}
|
|
62
|
+
if (node['_fromsAndJoins'].length > 0) {
|
|
63
|
+
let fromsAndJoinsText = '';
|
|
64
|
+
for (const fromOrJoin of node['_fromsAndJoins']) {
|
|
65
|
+
if (fromOrJoin instanceof Join_1.Join) {
|
|
66
|
+
fromsAndJoinsText += `\n${this.getIndent()}${fromOrJoin.accept(this)}`;
|
|
67
|
+
}
|
|
68
|
+
else if (fromOrJoin instanceof Alias_1.Alias ||
|
|
69
|
+
fromOrJoin instanceof From_1.From ||
|
|
70
|
+
fromOrJoin instanceof From_1.TableFrom ||
|
|
71
|
+
fromOrJoin instanceof From_1.SubqueryFrom ||
|
|
72
|
+
fromOrJoin instanceof From_1.JsonEachFrom) {
|
|
73
|
+
if (fromsAndJoinsText) {
|
|
74
|
+
fromsAndJoinsText += `,\n${this.getIndent()}${fromOrJoin.accept(this)}`;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
fromsAndJoinsText += `${this.getIndent()}FROM ${fromOrJoin.accept(this)}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
parts.push(fromsAndJoinsText);
|
|
82
|
+
}
|
|
83
|
+
if (node['_where']) {
|
|
84
|
+
parts.push(`${this.getIndent()}WHERE ${node['_where'].accept(this)}`);
|
|
85
|
+
}
|
|
86
|
+
if (node['_groupBy'].length > 0) {
|
|
87
|
+
parts.push(`${this.getIndent()}GROUP BY ${node['_groupBy'].map(c => c.accept(this)).join(', ')}`);
|
|
88
|
+
}
|
|
89
|
+
if (node['_having']) {
|
|
90
|
+
parts.push(`${this.getIndent()}HAVING ${node['_having'].accept(this)}`);
|
|
91
|
+
}
|
|
92
|
+
if (node['_union'].length > 0) {
|
|
93
|
+
parts.push(node['_union'].map(u => `${this.getIndent()}UNION\n${u.accept(this)}`).join('\n'));
|
|
94
|
+
}
|
|
95
|
+
if (node['_orderBy'].length > 0) {
|
|
96
|
+
parts.push(`${this.getIndent()}ORDER BY ${node['_orderBy'].map(o => o.accept(this)).join(', ')}`);
|
|
97
|
+
}
|
|
98
|
+
if (node['_limit'] !== null && node['_limit'] !== undefined) {
|
|
99
|
+
parts.push(`${this.getIndent()}LIMIT ${node['_limit']}`);
|
|
100
|
+
if (node['_offset'] !== null && node['_offset'] !== undefined) {
|
|
101
|
+
parts.push(`${this.getIndent()}OFFSET ${node['_offset']}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
this.dedent();
|
|
105
|
+
return parts.filter(p => p).join('\n');
|
|
106
|
+
}
|
|
107
|
+
visitTableFrom(node) {
|
|
108
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}`;
|
|
109
|
+
}
|
|
110
|
+
visitSubqueryFrom(node) {
|
|
111
|
+
this.indent();
|
|
112
|
+
const result = `(\n${node.subquery.accept(this)}\n${this.getIndent()})`;
|
|
113
|
+
this.dedent();
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
visitJsonEachFrom(node) {
|
|
117
|
+
const expr = node.jsonExpression.accept(this);
|
|
118
|
+
const path = node.jsonPath ? `, ${node.jsonPath.accept(this)}` : '';
|
|
119
|
+
return `json_each(${expr}${path})`;
|
|
120
|
+
}
|
|
121
|
+
visitColumn(node) {
|
|
122
|
+
if (node.hasTableName()) {
|
|
123
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)}.${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
return `${(0, QueryRenderer_1.quoteIdentifier)(node.columnName)}`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
visitAlias(node) {
|
|
130
|
+
const renderedAliasName = (0, QueryRenderer_1.quoteIdentifier)(node.alias);
|
|
131
|
+
if (node.referent instanceof From_1.From) {
|
|
132
|
+
return `${node.referent.accept(this)} ${renderedAliasName}`;
|
|
133
|
+
}
|
|
134
|
+
else if (node.referent instanceof From_1.SubqueryFrom ||
|
|
135
|
+
node.referent instanceof SelectQuery_1.SelectQuery) {
|
|
136
|
+
this.indent();
|
|
137
|
+
const renderedSubquery = `${node.referent.accept(this)}\n`;
|
|
138
|
+
const result = `(\n${renderedSubquery}${this.getIndent()}) AS ${renderedAliasName}`;
|
|
139
|
+
this.dedent();
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return `${node.referent.accept(this)} AS ${renderedAliasName}`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
visitJoinClause(node) {
|
|
147
|
+
return `${node.type} JOIN ${(0, QueryRenderer_1.quoteIdentifier)(node.tableName)} ${(0, QueryRenderer_1.quoteIdentifier)(node.alias)} ON ${node.on.accept(this)}`;
|
|
148
|
+
}
|
|
149
|
+
visitOrderBy(node) {
|
|
150
|
+
return `${node.column.accept(this)} ${node.direction}`;
|
|
151
|
+
}
|
|
152
|
+
visitWithClause(node) {
|
|
153
|
+
this.indent();
|
|
154
|
+
const result = `${this.getIndent()}${(0, QueryRenderer_1.quoteIdentifier)(node.name)} AS (\n${node.query.accept(this)}\n${this.getIndent()})`;
|
|
155
|
+
this.dedent();
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
visitBinaryExpression(node) {
|
|
159
|
+
return `(${node.left.accept(this)} ${node.operator} ${node.right.accept(this)})`;
|
|
160
|
+
}
|
|
161
|
+
visitUnaryExpression(node) {
|
|
162
|
+
const operand = node.operand.accept(this);
|
|
163
|
+
if (node.operator === Operator_1.Operator.IS_NULL || node.operator === Operator_1.Operator.IS_NOT_NULL) {
|
|
164
|
+
return `(${operand} ${node.operator})`;
|
|
165
|
+
}
|
|
166
|
+
else if (node.operator === 'NOT') {
|
|
167
|
+
return `(NOT ${operand})`;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
return `(${node.operator}${operand})`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
visitInExpression(node) {
|
|
174
|
+
const leftStr = node.left.length > 1
|
|
175
|
+
? `(${node.left.map(l => l.accept(this)).join(', ')})`
|
|
176
|
+
: node.left[0].accept(this);
|
|
177
|
+
const not = node.not ? ' NOT' : '';
|
|
178
|
+
let right;
|
|
179
|
+
if (node.values instanceof SelectQuery_1.SelectQuery) {
|
|
180
|
+
right = `(\n${node.values.accept(this)}\n${this.getIndent()})`;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
right = `(${node.values.map(set => set.length > 1 ? `(${set.map(v => v.accept(this)).join(', ')})` : set[0].accept(this)).join(', ')})`;
|
|
184
|
+
}
|
|
185
|
+
return `(${leftStr}${not} IN ${right})`;
|
|
186
|
+
}
|
|
187
|
+
visitConcat(node) {
|
|
188
|
+
return `(${node.expressions.map(e => e.accept(this)).join(' || ')})`;
|
|
189
|
+
}
|
|
190
|
+
visitCaseExpression(node) {
|
|
191
|
+
const parts = [`${this.getIndent()}CASE`];
|
|
192
|
+
this.indent();
|
|
193
|
+
for (const c of node.cases) {
|
|
194
|
+
this.indent();
|
|
195
|
+
parts.push(`${this.getIndent()}WHEN ${c.when.accept(this)} THEN ${c.then.accept(this)}`);
|
|
196
|
+
this.dedent();
|
|
197
|
+
}
|
|
198
|
+
if (node.else) {
|
|
199
|
+
this.indent();
|
|
200
|
+
parts.push(`${this.getIndent()}ELSE ${node.else.accept(this)}`);
|
|
201
|
+
this.dedent();
|
|
202
|
+
}
|
|
203
|
+
parts.push(`${this.getIndent()}END`);
|
|
204
|
+
this.dedent();
|
|
205
|
+
return parts.join('\n');
|
|
206
|
+
}
|
|
207
|
+
visitFunctionExpression(node) {
|
|
208
|
+
const args = node.args.map(a => a.accept(this)).join(', ');
|
|
209
|
+
const distinctPrefix = node.distinct ? 'DISTINCT ' : '';
|
|
210
|
+
return `${node.name}(${distinctPrefix}${args})`;
|
|
211
|
+
}
|
|
212
|
+
visitParamExpression(_node) {
|
|
213
|
+
return '?';
|
|
214
|
+
}
|
|
215
|
+
visitStringLiteral(node) {
|
|
216
|
+
return `'${node.value.replace(/'/g, "''")}'`;
|
|
217
|
+
}
|
|
218
|
+
visitNumberLiteral(node) {
|
|
219
|
+
return node.value.toString();
|
|
220
|
+
}
|
|
221
|
+
visitNullLiteral(_node) {
|
|
222
|
+
return 'NULL';
|
|
223
|
+
}
|
|
224
|
+
visitExistsExpression(node) {
|
|
225
|
+
const subquerySql = node.subquery.accept(this);
|
|
226
|
+
return `EXISTS (\n${subquerySql}\n${this.getIndent()})`;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
exports.IndentedQueryRenderer = IndentedQueryRenderer;
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZW50ZWRRdWVyeVJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbmRlcmVyL0luZGVudGVkUXVlcnlSZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx3Q0FBcUM7QUFNckMsc0NBQTBFO0FBSTFFLHNDQUFtQztBQUVuQyw4Q0FBMkM7QUFFM0Msb0RBQWlEO0FBR2pELHNFQUE4SDtBQUM5SCxtREFBaUU7QUFFakUsTUFBYSxxQkFBcUI7SUFTaEMsWUFBbUIsY0FBc0I7UUFOL0IsNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBVSxDQUFDO1FBQ3ZFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVUsQ0FBQztRQUcvRCxxQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUdwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQStCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU8sU0FBUztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU07UUFDWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FB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QUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFL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QUVELGtCQUFrQixDQUFDLElBQW1CO1FBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBc0I7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsT0FBTyxhQUFhLFdBQVcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztJQUMxRCxDQUFDO0NBQ0Y7QUFwUEQsc0RBb1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiB9IGZyb20gXCIuLi9hc3QvSm9pblwiO1xuaW1wb3J0IHsgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tIFwiLi4vYXN0L09wZXJhdG9yXCI7XG5pbXBvcnQgeyBPcmRlckJ5IH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5pbXBvcnQgeyBDb2x1bW5MaWtlVmlzaXRvckFjY2VwdG9yLCBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3IsIFNxbFRyZWVOb2RlVmlzaXRvciB9IGZyb20gXCIuLi92aXNpdG9yL1NxbFRyZWVOb2RlVmlzaXRvclwiO1xuaW1wb3J0IHsgUXVlcnlSZW5kZXJlciwgcXVvdGVJZGVudGlmaWVyIH0gZnJvbSBcIi4vUXVlcnlSZW5kZXJlclwiO1xuXG5leHBvcnQgY2xhc3MgSW5kZW50ZWRRdWVyeVJlbmRlcmVyXG4gIGltcGxlbWVudHMgUXVlcnlSZW5kZXJlciwgU3FsVHJlZU5vZGVWaXNpdG9yPHN0cmluZz5cbntcbiAgcHJvdGVjdGVkIGZyb21MaWtlQW5kSm9pbkFjY2VwdG9yID0gbmV3IEZyb21MaWtlQW5kSm9pblZpc2l0b3JBY2NlcHRvcjxzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCBjb2x1bW5MaWtlQWNjZXB0b3IgPSBuZXcgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzcGFjZXNQZXJMZXZlbDogbnVtYmVyO1xuICBwcml2YXRlIGluZGVudGF0aW9uTGV2ZWw6IG51bWJlciA9IC0xO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzcGFjZXNQZXJMZXZlbDogbnVtYmVyKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHNwYWNlc1BlckxldmVsKSB8fCBzcGFjZXNQZXJMZXZlbCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NwYWNlc1BlckxldmVsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIHRoaXMuc3BhY2VzUGVyTGV2ZWwgPSBzcGFjZXNQZXJMZXZlbDtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIobm9kZTogU2VsZWN0UXVlcnkgfCBJbnNlcnRRdWVyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUuYWNjZXB0KHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyAnLnJlcGVhdCh0aGlzLmluZGVudGF0aW9uTGV2ZWwgKiB0aGlzLnNwYWNlc1BlckxldmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5kZW50KCk6IHZvaWQge1xuICAgIHRoaXMuaW5kZW50YXRpb25MZXZlbCsrO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWRlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbkxldmVsLS07XG4gIH1cblxuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogc3RyaW5nIHtcbiAgICB0aGlzLmluZGVudCgpO1xuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1JTlNFUlQke25vZGUuaXNPclJlcGxhY2UoKSA/ICcgT1IgUkVQTEFDRScgOiAnJ31gKTtcbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9SU5UTyAke3F1b3RlSWRlbnRpZmllcihub2RlWydfdGFibGVOYW1lJ10pfWApO1xuICAgIGlmIChub2RlWydfY29sdW1ucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX0oJHtub2RlWydfY29sdW1ucyddLm1hcChxdW90ZUlkZW50aWZpZXIpLmpvaW4oJywgJyl9KWApO1xuICAgIH1cbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9VkFMVUVTYCk7XG4gICAgcGFydHMucHVzaChgJHt0aGlzLmdldEluZGVudCgpfSgke25vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYCk7XG4gICAgdGhpcy5kZWRlbnQoKTtcbiAgICByZXR1cm4gcGFydHMuam9pbignXFxuJyk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobm9kZVsnX3dpdGgnXS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgcGFydHMucHVzaCgnV0lUSCcpO1xuICAgICAgcGFydHMucHVzaChub2RlWydfd2l0aCddLm1hcCh3ID0+IHcuYWNjZXB0KHRoaXMpKS5qb2luKCcsXFxuJykpO1xuICAgICAgdGhpcy5kZWRlbnQoKTtcbiAgICB9XG4gICAgdGhpcy5pbmRlbnQoKTtcbiAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9U0VMRUNUJHtub2RlLmlzRGlzdGluY3QoKSA/ICcgRElTVElOQ1QnIDogJyd9YCk7XG4gICAgaWYgKG5vZGVbJ19jb2x1bW5zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfY29sdW1ucyddLm1hcChjID0+IGAke3RoaXMuZ2V0SW5kZW50KCl9ICAke3RoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKX1gKS5qb2luKCcsXFxuJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9ICAqYCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZnJvbXNBbmRKb2lucyddLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBmcm9tc0FuZEpvaW5zVGV4dCA9ICcnO1xuICAgICAgZm9yIChjb25zdCBmcm9tT3JKb2luIG9mIG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10pIHtcbiAgICAgICAgaWYgKGZyb21PckpvaW4gaW5zdGFuY2VvZiBKb2luKSB7XG4gICAgICAgICAgZnJvbXNBbmRKb2luc1RleHQgKz0gYFxcbiR7dGhpcy5nZXRJbmRlbnQoKX0ke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEFsaWFzIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIEZyb20gfHxcbiAgICAgICAgICBmcm9tT3JKb2luIGluc3RhbmNlb2YgVGFibGVGcm9tIHx8XG4gICAgICAgICAgZnJvbU9ySm9pbiBpbnN0YW5jZW9mIFN1YnF1ZXJ5RnJvbSB8fFxuICAgICAgICAgIGZyb21PckpvaW4gaW5zdGFuY2VvZiBKc29uRWFjaEZyb21cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGZyb21zQW5kSm9pbnNUZXh0KSB7XG4gICAgICAgICAgICBmcm9tc0FuZEpvaW5zVGV4dCArPSBgLFxcbiR7dGhpcy5nZXRJbmRlbnQoKX0ke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21zQW5kSm9pbnNUZXh0ICs9IGAke3RoaXMuZ2V0SW5kZW50KCl9RlJPTSAke2Zyb21PckpvaW4uYWNjZXB0KHRoaXMpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKGZyb21zQW5kSm9pbnNUZXh0KTtcbiAgICB9XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9V0hFUkUgJHtub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfZ3JvdXBCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1HUk9VUCBCWSAke25vZGVbJ19ncm91cEJ5J10ubWFwKGMgPT4gYy5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfaGF2aW5nJ10pIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1IQVZJTkcgJHtub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpfWApO1xuICAgIH1cbiAgICBpZiAobm9kZVsnX3VuaW9uJ10ubGVuZ3RoID4gMCkge1xuICAgICAgcGFydHMucHVzaChub2RlWydfdW5pb24nXS5tYXAodSA9PiBgJHt0aGlzLmdldEluZGVudCgpfVVOSU9OXFxuJHt1LmFjY2VwdCh0aGlzKX1gKS5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIGlmIChub2RlWydfb3JkZXJCeSddLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1PUkRFUiBCWSAke25vZGVbJ19vcmRlckJ5J10ubWFwKG8gPT4gby5hY2NlcHQodGhpcykpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGlmIChub2RlWydfbGltaXQnXSAhPT0gbnVsbCAmJiBub2RlWydfbGltaXQnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9TElNSVQgJHtub2RlWydfbGltaXQnXX1gKTtcbiAgICAgIGlmIChub2RlWydfb2Zmc2V0J10gIT09IG51bGwgJiYgbm9kZVsnX29mZnNldCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGFydHMucHVzaChgJHt0aGlzLmdldEluZGVudCgpfU9GRlNFVCAke25vZGVbJ19vZmZzZXQnXX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZWRlbnQoKTtcbiAgICByZXR1cm4gcGFydHMuZmlsdGVyKHAgPT4gcCkuam9pbignXFxuJyk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtxdW90ZUlkZW50aWZpZXIobm9kZS50YWJsZU5hbWUpfWA7XG4gIH1cblxuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBzdHJpbmcge1xuICAgIHRoaXMuaW5kZW50KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYChcXG4ke25vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpfVxcbiR7dGhpcy5nZXRJbmRlbnQoKX0pYDtcbiAgICB0aGlzLmRlZGVudCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4cHIgPSBub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcbiAgICBjb25zdCBwYXRoID0gbm9kZS5qc29uUGF0aCA/IGAsICR7bm9kZS5qc29uUGF0aC5hY2NlcHQodGhpcyl9YCA6ICcnO1xuICAgIHJldHVybiBganNvbl9lYWNoKCR7ZXhwcn0ke3BhdGh9KWA7XG4gIH1cblxuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIGlmIChub2RlLmhhc1RhYmxlTmFtZSgpKSB7XG4gICAgICByZXR1cm4gYCR7cXVvdGVJZGVudGlmaWVyKG5vZGUudGFibGVOYW1lIGFzIHN0cmluZyl9LiR7cXVvdGVJZGVudGlmaWVyKG5vZGUuY29sdW1uTmFtZSl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3F1b3RlSWRlbnRpZmllcihub2RlLmNvbHVtbk5hbWUpfWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRBbGlhcyhub2RlOiBBbGlhczxGcm9tfEFsaWFzYWJsZUV4cHJlc3Npb24+KTogc3RyaW5nIHtcbiAgICBjb25zdCByZW5kZXJlZEFsaWFzTmFtZSA9IHF1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzIGFzIHN0cmluZyk7XG4gICAgaWYgKG5vZGUucmVmZXJlbnQgaW5zdGFuY2VvZiBGcm9tKSB7XG4gICAgICByZXR1cm4gYCR7bm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyl9ICR7cmVuZGVyZWRBbGlhc05hbWV9YDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFN1YnF1ZXJ5RnJvbSB8fFxuICAgICAgbm9kZS5yZWZlcmVudCBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5XG4gICAgKSB7XG4gICAgICB0aGlzLmluZGVudCgpO1xuICAgICAgY29uc3QgcmVuZGVyZWRTdWJxdWVyeSA9IGAke25vZGUucmVmZXJlbnQuYWNjZXB0KHRoaXMpfVxcbmA7XG4gICAgICBjb25zdCByZXN1bHQgPSBgKFxcbiR7cmVuZGVyZWRTdWJxdWVyeX0ke3RoaXMuZ2V0SW5kZW50KCl9KSBBUyAke3JlbmRlcmVkQWxpYXNOYW1lfWA7XG4gICAgICB0aGlzLmRlZGVudCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke25vZGUucmVmZXJlbnQuYWNjZXB0KHRoaXMpfSBBUyAke3JlbmRlcmVkQWxpYXNOYW1lfWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtub2RlLnR5cGV9IEpPSU4gJHtxdW90ZUlkZW50aWZpZXIobm9kZS50YWJsZU5hbWUpfSAke3F1b3RlSWRlbnRpZmllcihub2RlLmFsaWFzKX0gT04gJHtub2RlLm9uLmFjY2VwdCh0aGlzKX1gO1xuICB9XG5cbiAgdmlzaXRPcmRlckJ5KG5vZGU6IE9yZGVyQnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtub2RlLmNvbHVtbi5hY2NlcHQodGhpcyl9ICR7bm9kZS5kaXJlY3Rpb259YDtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogc3RyaW5nIHtcbiAgICB0aGlzLmluZGVudCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGAke3RoaXMuZ2V0SW5kZW50KCl9JHtxdW90ZUlkZW50aWZpZXIobm9kZS5uYW1lKX0gQVMgKFxcbiR7bm9kZS5xdWVyeS5hY2NlcHQodGhpcyl9XFxuJHt0aGlzLmdldEluZGVudCgpfSlgO1xuICAgIHRoaXMuZGVkZW50KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZpc2l0QmluYXJ5RXhwcmVzc2lvbihub2RlOiBCaW5hcnlFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke25vZGUubGVmdC5hY2NlcHQodGhpcyl9ICR7bm9kZS5vcGVyYXRvcn0gJHtub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKX0pYDtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUub3BlcmF0b3IgPT09IE9wZXJhdG9yLklTX05VTEwgfHwgbm9kZS5vcGVyYXRvciA9PT0gT3BlcmF0b3IuSVNfTk9UX05VTEwpIHtcbiAgICAgIHJldHVybiBgKCR7b3BlcmFuZH0gJHtub2RlLm9wZXJhdG9yfSlgO1xuICAgIH0gZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PT0gJ05PVCcpIHtcbiAgICAgIHJldHVybiBgKE5PVCAke29wZXJhbmR9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgKCR7bm9kZS5vcGVyYXRvcn0ke29wZXJhbmR9KWA7XG4gICAgfVxuICB9XG5cbiAgdmlzaXRJbkV4cHJlc3Npb24obm9kZTogSW5FeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZWZ0U3RyID0gbm9kZS5sZWZ0Lmxlbmd0aCA+IDFcbiAgICAgID8gYCgke25vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKX0pYFxuICAgICAgOiBub2RlLmxlZnRbMF0uYWNjZXB0KHRoaXMpO1xuICAgIGNvbnN0IG5vdCA9IG5vZGUubm90ID8gJyBOT1QnIDogJyc7XG4gICAgbGV0IHJpZ2h0OiBzdHJpbmc7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIHJpZ2h0ID0gYChcXG4ke25vZGUudmFsdWVzLmFjY2VwdCh0aGlzKX1cXG4ke3RoaXMuZ2V0SW5kZW50KCl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ID0gYCgke25vZGUudmFsdWVzLm1hcChzZXQgPT5cbiAgICAgICAgc2V0Lmxlbmd0aCA+IDEgPyBgKCR7c2V0Lm1hcCh2ID0+IHYuYWNjZXB0KHRoaXMpKS5qb2luKCcsICcpfSlgIDogc2V0WzBdLmFjY2VwdCh0aGlzKVxuICAgICAgKS5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICByZXR1cm4gYCgke2xlZnRTdHJ9JHtub3R9IElOICR7cmlnaHR9KWA7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKCR7bm9kZS5leHByZXNzaW9ucy5tYXAoZSA9PiBlLmFjY2VwdCh0aGlzKSkuam9pbignIHx8ICcpfSlgO1xuICB9XG5cbiAgdmlzaXRDYXNlRXhwcmVzc2lvbihub2RlOiBDYXNlRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2Ake3RoaXMuZ2V0SW5kZW50KCl9Q0FTRWBdO1xuICAgIHRoaXMuaW5kZW50KCk7XG4gICAgZm9yIChjb25zdCBjIG9mIG5vZGUuY2FzZXMpIHtcbiAgICAgIHRoaXMuaW5kZW50KCk7XG4gICAgICBwYXJ0cy5wdXNoKGAke3RoaXMuZ2V0SW5kZW50KCl9V0hFTiAke2Mud2hlbi5hY2NlcHQodGhpcyl9IFRIRU4gJHtjLnRoZW4uYWNjZXB0KHRoaXMpfWApO1xuICAgICAgdGhpcy5kZWRlbnQoKTtcbiAgICB9XG4gICAgaWYgKG5vZGUuZWxzZSkge1xuICAgICAgdGhpcy5pbmRlbnQoKTtcbiAgICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1FTFNFICR7bm9kZS5lbHNlLmFjY2VwdCh0aGlzKX1gKTtcbiAgICAgIHRoaXMuZGVkZW50KCk7XG4gICAgfVxuICAgIHBhcnRzLnB1c2goYCR7dGhpcy5nZXRJbmRlbnQoKX1FTkRgKTtcbiAgICB0aGlzLmRlZGVudCgpO1xuICAgIHJldHVybiBwYXJ0cy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgY29uc3QgYXJncyA9IG5vZGUuYXJncy5tYXAoYSA9PiBhLmFjY2VwdCh0aGlzKSkuam9pbignLCAnKTtcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IG5vZGUuZGlzdGluY3QgPyAnRElTVElOQ1QgJyA6ICcnO1xuICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7ZGlzdGluY3RQcmVmaXh9JHthcmdzfSlgO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24oX25vZGU6IFBhcmFtKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJz8nO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKG5vZGU6IFN0cmluZ0xpdGVyYWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJyR7bm9kZS52YWx1ZS5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZpc2l0TnVsbExpdGVyYWwoX25vZGU6IE51bGxMaXRlcmFsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ05VTEwnO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1YnF1ZXJ5U3FsID0gbm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIGBFWElTVFMgKFxcbiR7c3VicXVlcnlTcWx9XFxuJHt0aGlzLmdldEluZGVudCgpfSlgO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InsertQuery } from "../ast/InsertQuery";
|
|
2
|
+
import { SelectQuery } from "../ast/SelectQuery";
|
|
3
|
+
import { SqlTreeNodeVisitor } from "../visitor/SqlTreeNodeVisitor";
|
|
4
|
+
export declare function quoteIdentifier(identifier: string): string;
|
|
5
|
+
export interface QueryRenderer extends SqlTreeNodeVisitor<string> {
|
|
6
|
+
render(node: SelectQuery | InsertQuery): string;
|
|
7
|
+
}
|
|
8
|
+
export declare function shouldQuoteIdentifier(identifier: string): boolean;
|