@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,46 @@
|
|
|
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 "./SqlTreeNodeVisitor";
|
|
19
|
+
export declare class ParamCollectingVisitor implements SqlTreeNodeVisitor<any[]> {
|
|
20
|
+
protected fromLikeAndJoinAcceptor: FromLikeAndJoinVisitorAcceptor<any[]>;
|
|
21
|
+
protected columnLikeAcceptor: ColumnLikeVisitorAcceptor<any[]>;
|
|
22
|
+
private readonly keyValuePairs;
|
|
23
|
+
private readonly params;
|
|
24
|
+
constructor(keyValuePairs: Record<string, any>);
|
|
25
|
+
visitInsertQuery(node: InsertQuery): any[];
|
|
26
|
+
visitSelectQuery(node: SelectQuery): any[];
|
|
27
|
+
visitTableFrom(_node: TableFrom): any[];
|
|
28
|
+
visitSubqueryFrom(node: SubqueryFrom): any[];
|
|
29
|
+
visitJsonEachFrom(node: JsonEachFrom): any[];
|
|
30
|
+
visitColumn(_node: Column): any[];
|
|
31
|
+
visitAlias(node: Alias<From | AliasableExpression>): any[];
|
|
32
|
+
visitJoinClause(node: Join): any[];
|
|
33
|
+
visitOrderBy(node: OrderBy): any[];
|
|
34
|
+
visitWithClause(node: With): any[];
|
|
35
|
+
visitBinaryExpression(node: BinaryExpression): any[];
|
|
36
|
+
visitUnaryExpression(node: UnaryExpression): any[];
|
|
37
|
+
visitInExpression(node: InExpression): any[];
|
|
38
|
+
visitConcat(node: Concat): any[];
|
|
39
|
+
visitCaseExpression(node: CaseExpression): any[];
|
|
40
|
+
visitFunctionExpression(node: FunctionExpression): any[];
|
|
41
|
+
visitParamExpression(node: Param): any[];
|
|
42
|
+
visitStringLiteral(_node: StringLiteral): any[];
|
|
43
|
+
visitNumberLiteral(_node: NumberLiteral): any[];
|
|
44
|
+
visitNullLiteral(_node: NullLiteral): any[];
|
|
45
|
+
visitExistsExpression(node: ExistsExpression): any[];
|
|
46
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParamCollectingVisitor = void 0;
|
|
4
|
+
const SelectQuery_1 = require("../ast/SelectQuery");
|
|
5
|
+
const SqlTreeNodeVisitor_1 = require("./SqlTreeNodeVisitor");
|
|
6
|
+
class ParamCollectingVisitor {
|
|
7
|
+
constructor(keyValuePairs) {
|
|
8
|
+
this.fromLikeAndJoinAcceptor = new SqlTreeNodeVisitor_1.FromLikeAndJoinVisitorAcceptor();
|
|
9
|
+
this.columnLikeAcceptor = new SqlTreeNodeVisitor_1.ColumnLikeVisitorAcceptor();
|
|
10
|
+
this.params = [];
|
|
11
|
+
this.keyValuePairs = keyValuePairs;
|
|
12
|
+
}
|
|
13
|
+
visitInsertQuery(node) {
|
|
14
|
+
node['_values'].forEach(v => v.accept(this));
|
|
15
|
+
return this.params;
|
|
16
|
+
}
|
|
17
|
+
visitSelectQuery(node) {
|
|
18
|
+
node['_with'].forEach(w => w.accept(this));
|
|
19
|
+
node['_fromsAndJoins'].forEach(item => this.fromLikeAndJoinAcceptor.accept(this, item));
|
|
20
|
+
node['_columns'].forEach(c => this.columnLikeAcceptor.accept(this, c));
|
|
21
|
+
if (node['_where']) {
|
|
22
|
+
node['_where'].accept(this);
|
|
23
|
+
}
|
|
24
|
+
node['_groupBy'].forEach(c => c.accept(this));
|
|
25
|
+
if (node['_having']) {
|
|
26
|
+
node['_having'].accept(this);
|
|
27
|
+
}
|
|
28
|
+
node['_union'].forEach(u => u.accept(this));
|
|
29
|
+
node['_orderBy'].forEach(o => o.accept(this));
|
|
30
|
+
return this.params;
|
|
31
|
+
}
|
|
32
|
+
visitTableFrom(_node) {
|
|
33
|
+
return this.params;
|
|
34
|
+
}
|
|
35
|
+
visitSubqueryFrom(node) {
|
|
36
|
+
node.subquery.accept(this);
|
|
37
|
+
return this.params;
|
|
38
|
+
}
|
|
39
|
+
visitJsonEachFrom(node) {
|
|
40
|
+
node.jsonExpression.accept(this);
|
|
41
|
+
if (node.jsonPath) {
|
|
42
|
+
node.jsonPath.accept(this);
|
|
43
|
+
}
|
|
44
|
+
return this.params;
|
|
45
|
+
}
|
|
46
|
+
visitColumn(_node) {
|
|
47
|
+
return this.params;
|
|
48
|
+
}
|
|
49
|
+
visitAlias(node) {
|
|
50
|
+
node.referent.accept(this);
|
|
51
|
+
return this.params;
|
|
52
|
+
}
|
|
53
|
+
visitJoinClause(node) {
|
|
54
|
+
node.on.accept(this);
|
|
55
|
+
return this.params;
|
|
56
|
+
}
|
|
57
|
+
visitOrderBy(node) {
|
|
58
|
+
node.column.accept(this);
|
|
59
|
+
return this.params;
|
|
60
|
+
}
|
|
61
|
+
visitWithClause(node) {
|
|
62
|
+
node.query.accept(this);
|
|
63
|
+
return this.params;
|
|
64
|
+
}
|
|
65
|
+
visitBinaryExpression(node) {
|
|
66
|
+
node.left.accept(this);
|
|
67
|
+
node.right.accept(this);
|
|
68
|
+
return this.params;
|
|
69
|
+
}
|
|
70
|
+
visitUnaryExpression(node) {
|
|
71
|
+
node.operand.accept(this);
|
|
72
|
+
return this.params;
|
|
73
|
+
}
|
|
74
|
+
visitInExpression(node) {
|
|
75
|
+
node.left.forEach(l => l.accept(this));
|
|
76
|
+
if (node.values instanceof SelectQuery_1.SelectQuery) {
|
|
77
|
+
node.values.accept(this);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
node.values.forEach(set => set.forEach(v => v.accept(this)));
|
|
81
|
+
}
|
|
82
|
+
return this.params;
|
|
83
|
+
}
|
|
84
|
+
visitConcat(node) {
|
|
85
|
+
node.expressions.forEach(e => e.accept(this));
|
|
86
|
+
return this.params;
|
|
87
|
+
}
|
|
88
|
+
visitCaseExpression(node) {
|
|
89
|
+
node.cases.forEach(c => {
|
|
90
|
+
c.when.accept(this);
|
|
91
|
+
c.then.accept(this);
|
|
92
|
+
});
|
|
93
|
+
if (node.else) {
|
|
94
|
+
node.else.accept(this);
|
|
95
|
+
}
|
|
96
|
+
return this.params;
|
|
97
|
+
}
|
|
98
|
+
visitFunctionExpression(node) {
|
|
99
|
+
node.args.forEach(a => a.accept(this));
|
|
100
|
+
return this.params;
|
|
101
|
+
}
|
|
102
|
+
visitParamExpression(node) {
|
|
103
|
+
if (node.paramName) {
|
|
104
|
+
if (!this.keyValuePairs || typeof this.keyValuePairs !== 'object' || !(node.paramName in this.keyValuePairs)) {
|
|
105
|
+
throw new Error(`No value provided for parameter: ${node.paramName}`);
|
|
106
|
+
}
|
|
107
|
+
this.params.push(this.keyValuePairs[node.paramName]);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this.params.push(undefined);
|
|
111
|
+
}
|
|
112
|
+
return this.params;
|
|
113
|
+
}
|
|
114
|
+
visitStringLiteral(_node) {
|
|
115
|
+
return this.params;
|
|
116
|
+
}
|
|
117
|
+
visitNumberLiteral(_node) {
|
|
118
|
+
return this.params;
|
|
119
|
+
}
|
|
120
|
+
visitNullLiteral(_node) {
|
|
121
|
+
return this.params;
|
|
122
|
+
}
|
|
123
|
+
visitExistsExpression(node) {
|
|
124
|
+
node.subquery.accept(this);
|
|
125
|
+
return this.params;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.ParamCollectingVisitor = ParamCollectingVisitor;
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYW1Db2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9QYXJhbUNvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxvREFBaUQ7QUFHakQsNkRBQXFIO0FBRXJILE1BQWEsc0JBQXNCO0lBUWpDLFlBQVksYUFBa0M7UUFOcEMsNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBUyxDQUFDO1FBQ3RFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVMsQ0FBQztRQUdyRCxXQUFNLEdBQVUsRUFBRSxDQUFDO1FBR2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxD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Q0Y7QUFoSkQsd0RBZ0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiB9IGZyb20gXCIuLi9hc3QvSm9pblwiO1xuaW1wb3J0IHsgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvciwgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yLCBTcWxUcmVlTm9kZVZpc2l0b3IgfSBmcm9tIFwiLi9TcWxUcmVlTm9kZVZpc2l0b3JcIjtcblxuZXhwb3J0IGNsYXNzIFBhcmFtQ29sbGVjdGluZ1Zpc2l0b3IgaW1wbGVtZW50cyBTcWxUcmVlTm9kZVZpc2l0b3I8YW55W10+IHtcblxuICBwcm90ZWN0ZWQgZnJvbUxpa2VBbmRKb2luQWNjZXB0b3IgPSBuZXcgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yPGFueVtdPigpO1xuICBwcm90ZWN0ZWQgY29sdW1uTGlrZUFjY2VwdG9yID0gbmV3IENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8YW55W10+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBrZXlWYWx1ZVBhaXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihrZXlWYWx1ZVBhaXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy5rZXlWYWx1ZVBhaXJzID0ga2V5VmFsdWVQYWlycztcbiAgfVxuXG4gIHZpc2l0SW5zZXJ0UXVlcnkobm9kZTogSW5zZXJ0UXVlcnkpOiBhbnlbXSB7XG4gICAgbm9kZVsnX3ZhbHVlcyddLmZvckVhY2godiA9PiB2LmFjY2VwdCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IGFueVtdIHtcbiAgICBub2RlWydfd2l0aCddLmZvckVhY2godyA9PiB3LmFjY2VwdCh0aGlzKSk7XG4gICAgbm9kZVsnX2Zyb21zQW5kSm9pbnMnXS5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5mcm9tTGlrZUFuZEpvaW5BY2NlcHRvci5hY2NlcHQodGhpcywgaXRlbSkpO1xuICAgIG5vZGVbJ19jb2x1bW5zJ10uZm9yRWFjaChjID0+IHRoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKSk7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIG5vZGVbJ19ncm91cEJ5J10uZm9yRWFjaChjID0+IGMuYWNjZXB0KHRoaXMpKTtcbiAgICBpZiAobm9kZVsnX2hhdmluZyddKSB7XG4gICAgICBub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICBub2RlWydfdW5pb24nXS5mb3JFYWNoKHUgPT4gdS5hY2NlcHQodGhpcykpO1xuICAgIG5vZGVbJ19vcmRlckJ5J10uZm9yRWFjaChvID0+IG8uYWNjZXB0KHRoaXMpKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShfbm9kZTogVGFibGVGcm9tKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IGFueVtdIHtcbiAgICBub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBhbnlbXSB7XG4gICAgbm9kZS5qc29uRXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUuanNvblBhdGgpIHtcbiAgICAgIG5vZGUuanNvblBhdGguYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENvbHVtbihfbm9kZTogQ29sdW1uKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0QWxpYXMobm9kZTogQWxpYXM8RnJvbXxBbGlhc2FibGVFeHByZXNzaW9uPik6IGFueVtdIHtcbiAgICBub2RlLnJlZmVyZW50LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IGFueVtdIHtcbiAgICBub2RlLm9uLmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IGFueVtdIHtcbiAgICBub2RlLmNvbHVtbi5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBhbnlbXSB7XG4gICAgbm9kZS5xdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5sZWZ0LmFjY2VwdCh0aGlzKTtcbiAgICBub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5sZWZ0LmZvckVhY2gobCA9PiBsLmFjY2VwdCh0aGlzKSk7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIG5vZGUudmFsdWVzLmFjY2VwdCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS52YWx1ZXMuZm9yRWFjaChzZXQgPT4gc2V0LmZvckVhY2godiA9PiB2LmFjY2VwdCh0aGlzKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBhbnlbXSB7XG4gICAgbm9kZS5leHByZXNzaW9ucy5mb3JFYWNoKGUgPT4gZS5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5jYXNlcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgYy53aGVuLmFjY2VwdCh0aGlzKTtcbiAgICAgIGMudGhlbi5hY2NlcHQodGhpcyk7XG4gICAgfSk7XG4gICAgaWYgKG5vZGUuZWxzZSkge1xuICAgICAgbm9kZS5lbHNlLmFjY2VwdCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24obm9kZTogRnVuY3Rpb25FeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUuYXJncy5mb3JFYWNoKGEgPT4gYS5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogYW55W10ge1xuICAgIGlmIChub2RlLnBhcmFtTmFtZSkge1xuICAgICAgaWYgKCF0aGlzLmtleVZhbHVlUGFpcnMgfHwgdHlwZW9mIHRoaXMua2V5VmFsdWVQYWlycyAhPT0gJ29iamVjdCcgfHwgIShub2RlLnBhcmFtTmFtZSBpbiB0aGlzLmtleVZhbHVlUGFpcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHBhcmFtZXRlcjogJHtub2RlLnBhcmFtTmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFyYW1zLnB1c2godGhpcy5rZXlWYWx1ZVBhaXJzW25vZGUucGFyYW1OYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1zLnB1c2godW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKF9ub2RlOiBTdHJpbmdMaXRlcmFsKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0TnVtYmVyTGl0ZXJhbChfbm9kZTogTnVtYmVyTGl0ZXJhbCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdE51bGxMaXRlcmFsKF9ub2RlOiBOdWxsTGl0ZXJhbCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Aliasable, SqlTreeNode } 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 { 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 { SqlTreeNodeTransformer } from "./SqlTreeNodeTransformer";
|
|
19
|
+
export declare class QueryIdentityTransformer implements SqlTreeNodeTransformer {
|
|
20
|
+
transform(node: SqlTreeNode): SqlTreeNode;
|
|
21
|
+
protected expectSingle<T extends SqlTreeNode>(result: SqlTreeNode | SqlTreeNode[], typeName: string): T;
|
|
22
|
+
protected flatList(results: (SqlTreeNode | SqlTreeNode[])[]): SqlTreeNode[];
|
|
23
|
+
protected flatList2D(results: (SqlTreeNode | SqlTreeNode[])[][]): SqlTreeNode[][];
|
|
24
|
+
visitSelectQuery(node: SelectQuery): SqlTreeNode | SqlTreeNode[];
|
|
25
|
+
visitInsertQuery(node: InsertQuery): SqlTreeNode | SqlTreeNode[];
|
|
26
|
+
visitTableFrom(node: TableFrom): SqlTreeNode | SqlTreeNode[];
|
|
27
|
+
visitSubqueryFrom(node: SubqueryFrom): SqlTreeNode | SqlTreeNode[];
|
|
28
|
+
visitJsonEachFrom(node: JsonEachFrom): SqlTreeNode | SqlTreeNode[];
|
|
29
|
+
visitColumn(node: Column): SqlTreeNode | SqlTreeNode[];
|
|
30
|
+
visitAlias<T extends Aliasable>(node: Alias<T>): SqlTreeNode | SqlTreeNode[];
|
|
31
|
+
visitJoinClause(node: Join): SqlTreeNode | SqlTreeNode[];
|
|
32
|
+
visitOrderBy(node: OrderBy): SqlTreeNode | SqlTreeNode[];
|
|
33
|
+
visitWithClause(node: With): SqlTreeNode | SqlTreeNode[];
|
|
34
|
+
visitBinaryExpression(node: BinaryExpression): SqlTreeNode | SqlTreeNode[];
|
|
35
|
+
visitUnaryExpression(node: UnaryExpression): SqlTreeNode | SqlTreeNode[];
|
|
36
|
+
visitInExpression(node: InExpression): SqlTreeNode | SqlTreeNode[];
|
|
37
|
+
visitConcat(node: Concat): SqlTreeNode | SqlTreeNode[];
|
|
38
|
+
visitCaseExpression(node: CaseExpression): SqlTreeNode | SqlTreeNode[];
|
|
39
|
+
visitFunctionExpression(node: FunctionExpression): SqlTreeNode | SqlTreeNode[];
|
|
40
|
+
visitParamExpression(node: Param): SqlTreeNode | SqlTreeNode[];
|
|
41
|
+
visitStringLiteral(node: StringLiteral): SqlTreeNode | SqlTreeNode[];
|
|
42
|
+
visitNumberLiteral(node: NumberLiteral): SqlTreeNode | SqlTreeNode[];
|
|
43
|
+
visitNullLiteral(node: NullLiteral): SqlTreeNode | SqlTreeNode[];
|
|
44
|
+
visitExistsExpression(node: ExistsExpression): SqlTreeNode | SqlTreeNode[];
|
|
45
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryIdentityTransformer = void 0;
|
|
4
|
+
const Alias_1 = require("../ast/Alias");
|
|
5
|
+
const BinaryExpression_1 = require("../ast/BinaryExpression");
|
|
6
|
+
const CaseExpression_1 = require("../ast/CaseExpression");
|
|
7
|
+
const Column_1 = require("../ast/Column");
|
|
8
|
+
const Concat_1 = require("../ast/Concat");
|
|
9
|
+
const ExistsExpression_1 = require("../ast/ExistsExpression");
|
|
10
|
+
const From_1 = require("../ast/From");
|
|
11
|
+
const FunctionExpression_1 = require("../ast/FunctionExpression");
|
|
12
|
+
const InExpression_1 = require("../ast/InExpression");
|
|
13
|
+
const InsertQuery_1 = require("../ast/InsertQuery");
|
|
14
|
+
const Join_1 = require("../ast/Join");
|
|
15
|
+
const Literals_1 = require("../ast/Literals");
|
|
16
|
+
const OrderBy_1 = require("../ast/OrderBy");
|
|
17
|
+
const SelectQuery_1 = require("../ast/SelectQuery");
|
|
18
|
+
const UnaryExpression_1 = require("../ast/UnaryExpression");
|
|
19
|
+
const With_1 = require("../ast/With");
|
|
20
|
+
class QueryIdentityTransformer {
|
|
21
|
+
transform(node) {
|
|
22
|
+
const result = node.accept(this);
|
|
23
|
+
if (Array.isArray(result)) {
|
|
24
|
+
throw new Error('Top-level transformation must return a single SqlTreeNode');
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
expectSingle(result, typeName) {
|
|
29
|
+
if (Array.isArray(result)) {
|
|
30
|
+
throw new Error(`Unexpected array in single-node context for ${typeName}`);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
flatList(results) {
|
|
35
|
+
return results.flatMap(r => Array.isArray(r) ? r : [r]);
|
|
36
|
+
}
|
|
37
|
+
flatList2D(results) {
|
|
38
|
+
return results.map(set => this.flatList(set));
|
|
39
|
+
}
|
|
40
|
+
visitSelectQuery(node) {
|
|
41
|
+
const newQuery = new SelectQuery_1.SelectQuery();
|
|
42
|
+
newQuery['_distinct'] = node['_distinct'];
|
|
43
|
+
newQuery['_with'] = this.flatList(node['_with'].map(w => w.accept(this)));
|
|
44
|
+
newQuery['_fromsAndJoins'] = node['_fromsAndJoins'].map(fj => {
|
|
45
|
+
if (fj && typeof fj === 'object' && 'referent' in fj && 'alias' in fj) {
|
|
46
|
+
return new Alias_1.Alias(this.expectSingle(fj.referent.accept(this), 'referent'), fj.alias);
|
|
47
|
+
}
|
|
48
|
+
else if (fj && typeof fj === 'object' && 'accept' in fj) {
|
|
49
|
+
return this.expectSingle(fj.accept(this), 'from/join');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error('Invalid from/join object');
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
newQuery['_columns'] = node['_columns'].map(c => {
|
|
56
|
+
if (c && typeof c === 'object' && 'referent' in c && 'alias' in c) {
|
|
57
|
+
return new Alias_1.Alias(this.expectSingle(c.referent.accept(this), 'referent'), c.alias);
|
|
58
|
+
}
|
|
59
|
+
else if (c && typeof c === 'object' && 'accept' in c) {
|
|
60
|
+
return this.expectSingle(c.accept(this), 'column');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw new Error('Invalid column object');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (node['_where'])
|
|
67
|
+
newQuery['_where'] = this.expectSingle(node['_where'].accept(this), 'WHERE');
|
|
68
|
+
newQuery['_groupBy'] = this.flatList(node['_groupBy'].map(g => g.accept(this)));
|
|
69
|
+
if (node['_having'])
|
|
70
|
+
newQuery['_having'] = this.expectSingle(node['_having'].accept(this), 'HAVING');
|
|
71
|
+
newQuery['_union'] = this.flatList(node['_union'].map(u => u.accept(this)));
|
|
72
|
+
newQuery['_orderBy'] = this.flatList(node['_orderBy'].map(o => o.accept(this)));
|
|
73
|
+
newQuery['_offset'] = node['_offset'];
|
|
74
|
+
newQuery['_limit'] = node['_limit'];
|
|
75
|
+
return newQuery;
|
|
76
|
+
}
|
|
77
|
+
visitInsertQuery(node) {
|
|
78
|
+
const newQuery = new InsertQuery_1.InsertQuery(node['_tableName']);
|
|
79
|
+
newQuery['_orReplace'] = node['_orReplace'];
|
|
80
|
+
newQuery['_columns'] = [...node['_columns']]; // Strings, reuse
|
|
81
|
+
newQuery['_values'] = this.flatList(node['_values'].map(v => v.accept(this)));
|
|
82
|
+
return newQuery;
|
|
83
|
+
}
|
|
84
|
+
visitTableFrom(node) {
|
|
85
|
+
return new From_1.TableFrom(node.tableName);
|
|
86
|
+
}
|
|
87
|
+
visitSubqueryFrom(node) {
|
|
88
|
+
return new From_1.SubqueryFrom(this.expectSingle(node.subquery.accept(this), 'subquery'));
|
|
89
|
+
}
|
|
90
|
+
visitJsonEachFrom(node) {
|
|
91
|
+
const newJsonExpr = this.expectSingle(node.jsonExpression.accept(this), 'jsonExpression');
|
|
92
|
+
const newJsonPath = node.jsonPath ? this.expectSingle(node.jsonPath.accept(this), 'jsonPath') : undefined;
|
|
93
|
+
return new From_1.JsonEachFrom(newJsonExpr, newJsonPath);
|
|
94
|
+
}
|
|
95
|
+
visitColumn(node) {
|
|
96
|
+
return new Column_1.Column(node.hasTableName() ? node.tableName : node.columnName, node.hasTableName() ? node.columnName : undefined);
|
|
97
|
+
}
|
|
98
|
+
visitAlias(node) {
|
|
99
|
+
return new Alias_1.Alias(this.expectSingle(node.referent.accept(this), 'referent'), node.alias);
|
|
100
|
+
}
|
|
101
|
+
visitJoinClause(node) {
|
|
102
|
+
return new Join_1.Join(node.type, node.tableName, node.alias, this.expectSingle(node.on.accept(this), 'on'));
|
|
103
|
+
}
|
|
104
|
+
visitOrderBy(node) {
|
|
105
|
+
return new OrderBy_1.OrderBy(this.expectSingle(node.column.accept(this), 'column'), node.direction);
|
|
106
|
+
}
|
|
107
|
+
visitWithClause(node) {
|
|
108
|
+
return new With_1.With(node.name, this.expectSingle(node.query.accept(this), 'query'));
|
|
109
|
+
}
|
|
110
|
+
visitBinaryExpression(node) {
|
|
111
|
+
return new BinaryExpression_1.BinaryExpression(this.expectSingle(node.left.accept(this), 'left'), node.operator, this.expectSingle(node.right.accept(this), 'right'));
|
|
112
|
+
}
|
|
113
|
+
visitUnaryExpression(node) {
|
|
114
|
+
return new UnaryExpression_1.UnaryExpression(node.operator, this.expectSingle(node.operand.accept(this), 'operand'));
|
|
115
|
+
}
|
|
116
|
+
visitInExpression(node) {
|
|
117
|
+
const newLeft = this.flatList(node.left.map(l => l.accept(this)));
|
|
118
|
+
let newValues;
|
|
119
|
+
if (node.values instanceof SelectQuery_1.SelectQuery) {
|
|
120
|
+
newValues = this.expectSingle(node.values.accept(this), 'values subquery');
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const newSets = [];
|
|
124
|
+
for (const set of node.values) {
|
|
125
|
+
const transformedSetParts = set.map(v => v.accept(this));
|
|
126
|
+
if (set.length > 1 && transformedSetParts.some(Array.isArray)) {
|
|
127
|
+
throw new Error('Array replacement not allowed in multi-column tuple position');
|
|
128
|
+
}
|
|
129
|
+
if (set.length === 1 && Array.isArray(transformedSetParts[0])) {
|
|
130
|
+
// Single-column splice: add as separate sets
|
|
131
|
+
transformedSetParts[0].forEach(r => newSets.push([r]));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Normal or multi-column (no arrays)
|
|
135
|
+
newSets.push(transformedSetParts);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
newValues = newSets;
|
|
139
|
+
}
|
|
140
|
+
return new InExpression_1.InExpression(newLeft, newValues, node.not);
|
|
141
|
+
}
|
|
142
|
+
visitConcat(node) {
|
|
143
|
+
return new Concat_1.Concat(...this.flatList(node.expressions.map(e => e.accept(this))));
|
|
144
|
+
}
|
|
145
|
+
visitCaseExpression(node) {
|
|
146
|
+
const newCases = node.cases.map(c => ({
|
|
147
|
+
when: this.expectSingle(c.when.accept(this), 'when'),
|
|
148
|
+
then: this.expectSingle(c.then.accept(this), 'then')
|
|
149
|
+
}));
|
|
150
|
+
const newElse = node.else ? this.expectSingle(node.else.accept(this), 'else') : undefined;
|
|
151
|
+
return new CaseExpression_1.CaseExpression(newCases, newElse);
|
|
152
|
+
}
|
|
153
|
+
visitFunctionExpression(node) {
|
|
154
|
+
return new FunctionExpression_1.FunctionExpression(node.name, this.flatList(node.args.map(a => a.accept(this))));
|
|
155
|
+
}
|
|
156
|
+
visitParamExpression(node) {
|
|
157
|
+
return new Literals_1.Param(node.paramName);
|
|
158
|
+
}
|
|
159
|
+
visitStringLiteral(node) {
|
|
160
|
+
return new Literals_1.StringLiteral(node.value);
|
|
161
|
+
}
|
|
162
|
+
visitNumberLiteral(node) {
|
|
163
|
+
return new Literals_1.NumberLiteral(node.value);
|
|
164
|
+
}
|
|
165
|
+
visitNullLiteral(node) {
|
|
166
|
+
return Literals_1.NullLiteral.INSTANCE;
|
|
167
|
+
}
|
|
168
|
+
visitExistsExpression(node) {
|
|
169
|
+
return new ExistsExpression_1.ExistsExpression(this.expectSingle(node.subquery.accept(this), 'subquery'));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.QueryIdentityTransformer = QueryIdentityTransformer;
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHdDQUFxQztBQUNyQyw4REFBMkQ7QUFDM0QsMERBQWlFO0FBQ2pFLDBDQUFtRDtBQUNuRCwwQ0FBdUM7QUFDdkMsOERBQTJEO0FBQzNELHNDQUFvRjtBQUNwRixrRUFBK0Q7QUFFL0Qsc0RBQW1EO0FBQ25ELG9EQUFpRDtBQUNqRCxzQ0FBNkM7QUFDN0MsOENBQW1GO0FBRW5GLDRDQUEyRDtBQUMzRCxvREFBaUQ7QUFDakQsNERBQXlEO0FBQ3pELHNDQUFtQztBQUduQyxNQUFhLHdCQUF3QjtJQUM1QixTQUFTLENBQUMsSUFBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxZQUFZLENBQXdCLE1BQW1DLEVBQUUsUUFBZ0I7UUFDakcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxNQUFXLENBQUM7SUFDckIsQ0FBQztJQUVTLFFBQVEsQ0FBQyxPQUF3QztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQWdCLENBQUMsQ0FBQztJQUN4RyxDQUFDO0NBQ0Y7QUEzS0QsNERBMktDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlLCBBbGlhc2FibGVFeHByZXNzaW9uLCBFeHByZXNzaW9uLCBTcWxUcmVlTm9kZSB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uLCBDYXNlSXRlbSB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uTGlrZSB9IGZyb20gXCIuLi9hc3QvQ29sdW1uXCI7XG5pbXBvcnQgeyBDb25jYXQgfSBmcm9tIFwiLi4vYXN0L0NvbmNhdFwiO1xuaW1wb3J0IHsgRXhpc3RzRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRXhpc3RzRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnJvbSwgRnJvbUxpa2UsIEpzb25FYWNoRnJvbSwgU3VicXVlcnlGcm9tLCBUYWJsZUZyb20gfSBmcm9tIFwiLi4vYXN0L0Zyb21cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRnVuY3Rpb25FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGdW5jdGlvbk5hbWUgfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uTmFtZVwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiwgSm9pblR5cGUgfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE51bGxMaXRlcmFsLCBOdW1iZXJMaXRlcmFsLCBQYXJhbSwgU3RyaW5nTGl0ZXJhbCB9IGZyb20gXCIuLi9hc3QvTGl0ZXJhbHNcIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgT3JkZXJCeSwgT3JkZXJCeURpcmVjdGlvbiB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgU3FsVHJlZU5vZGVUcmFuc2Zvcm1lciB9IGZyb20gXCIuL1NxbFRyZWVOb2RlVHJhbnNmb3JtZXJcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5SWRlbnRpdHlUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIge1xuICBwdWJsaWMgdHJhbnNmb3JtKG5vZGU6IFNxbFRyZWVOb2RlKTogU3FsVHJlZU5vZGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5vZGUuYWNjZXB0KHRoaXMpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG9wLWxldmVsIHRyYW5zZm9ybWF0aW9uIG11c3QgcmV0dXJuIGEgc2luZ2xlIFNxbFRyZWVOb2RlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhwZWN0U2luZ2xlPFQgZXh0ZW5kcyBTcWxUcmVlTm9kZT4ocmVzdWx0OiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10sIHR5cGVOYW1lOiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJyYXkgaW4gc2luZ2xlLW5vZGUgY29udGV4dCBmb3IgJHt0eXBlTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0KHJlc3VsdHM6IChTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10pW10pOiBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5mbGF0TWFwKHIgPT4gQXJyYXkuaXNBcnJheShyKSA/IHIgOiBbcl0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZsYXRMaXN0MkQocmVzdWx0czogKFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSlbXVtdKTogU3FsVHJlZU5vZGVbXVtdIHtcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAoc2V0ID0+IHRoaXMuZmxhdExpc3Qoc2V0KSk7XG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBTZWxlY3RRdWVyeSgpO1xuICAgIG5ld1F1ZXJ5WydfZGlzdGluY3QnXSA9IG5vZGVbJ19kaXN0aW5jdCddO1xuICAgIG5ld1F1ZXJ5Wydfd2l0aCddID0gdGhpcy5mbGF0TGlzdChub2RlWydfd2l0aCddLm1hcCh3ID0+IHcuYWNjZXB0KHRoaXMpKSkgYXMgV2l0aFtdO1xuICAgIG5ld1F1ZXJ5WydfZnJvbXNBbmRKb2lucyddID0gbm9kZVsnX2Zyb21zQW5kSm9pbnMnXS5tYXAoZmogPT4ge1xuICAgICAgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBmaiAmJiAnYWxpYXMnIGluIGZqKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUoZmoucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBGcm9tLCBmai5hbGlhcyk7XG4gICAgICB9IGVsc2UgaWYgKGZqICYmIHR5cGVvZiBmaiA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gZmopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0U2luZ2xlKChmaiBhcyBhbnkpLmFjY2VwdCh0aGlzKSwgJ2Zyb20vam9pbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20vam9pbiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICB9KSBhcyAoRnJvbUxpa2UgfCBKb2luKVtdO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gbm9kZVsnX2NvbHVtbnMnXS5tYXAoYyA9PiB7XG4gICAgICBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBjICYmICdhbGlhcycgaW4gYykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzKHRoaXMuZXhwZWN0U2luZ2xlKGMucmVmZXJlbnQuYWNjZXB0KHRoaXMpLCAncmVmZXJlbnQnKSBhcyBBbGlhc2FibGVFeHByZXNzaW9uLCBjLmFsaWFzKTtcbiAgICAgIH0gZWxzZSBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ2FjY2VwdCcgaW4gYykge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBlY3RTaW5nbGUoKGMgYXMgYW55KS5hY2NlcHQodGhpcyksICdjb2x1bW4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2x1bW4gb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSkgYXMgQ29sdW1uTGlrZVtdO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkgbmV3UXVlcnlbJ193aGVyZSddID0gdGhpcy5leHBlY3RTaW5nbGUobm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpLCAnV0hFUkUnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfZ3JvdXBCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfZ3JvdXBCeSddLm1hcChnID0+IGcuYWNjZXB0KHRoaXMpKSkgYXMgQ29sdW1uW107XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkgbmV3UXVlcnlbJ19oYXZpbmcnXSA9IHRoaXMuZXhwZWN0U2luZ2xlKG5vZGVbJ19oYXZpbmcnXS5hY2NlcHQodGhpcyksICdIQVZJTkcnKSBhcyBFeHByZXNzaW9uO1xuICAgIG5ld1F1ZXJ5WydfdW5pb24nXSA9IHRoaXMuZmxhdExpc3Qobm9kZVsnX3VuaW9uJ10ubWFwKHUgPT4gdS5hY2NlcHQodGhpcykpKSBhcyBTZWxlY3RRdWVyeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb3JkZXJCeSddID0gdGhpcy5mbGF0TGlzdChub2RlWydfb3JkZXJCeSddLm1hcChvID0+IG8uYWNjZXB0KHRoaXMpKSkgYXMgT3JkZXJCeVtdO1xuICAgIG5ld1F1ZXJ5Wydfb2Zmc2V0J10gPSBub2RlWydfb2Zmc2V0J107XG4gICAgbmV3UXVlcnlbJ19saW1pdCddID0gbm9kZVsnX2xpbWl0J107XG4gICAgcmV0dXJuIG5ld1F1ZXJ5O1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3UXVlcnkgPSBuZXcgSW5zZXJ0UXVlcnkobm9kZVsnX3RhYmxlTmFtZSddKTtcbiAgICBuZXdRdWVyeVsnX29yUmVwbGFjZSddID0gbm9kZVsnX29yUmVwbGFjZSddO1xuICAgIG5ld1F1ZXJ5WydfY29sdW1ucyddID0gWy4uLm5vZGVbJ19jb2x1bW5zJ11dOyAvLyBTdHJpbmdzLCByZXVzZVxuICAgIG5ld1F1ZXJ5WydfdmFsdWVzJ10gPSB0aGlzLmZsYXRMaXN0KG5vZGVbJ192YWx1ZXMnXS5tYXAodiA9PiB2LmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICByZXR1cm4gbmV3UXVlcnk7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVGFibGVGcm9tKG5vZGUudGFibGVOYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBTdWJxdWVyeUZyb20odGhpcy5leHBlY3RTaW5nbGUobm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyksICdzdWJxdWVyeScpIGFzIFNlbGVjdFF1ZXJ5KTtcbiAgfVxuXG4gIHZpc2l0SnNvbkVhY2hGcm9tKG5vZGU6IEpzb25FYWNoRnJvbSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgY29uc3QgbmV3SnNvbkV4cHIgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25FeHByZXNzaW9uLmFjY2VwdCh0aGlzKSwgJ2pzb25FeHByZXNzaW9uJykgYXMgRXhwcmVzc2lvbjtcbiAgICBjb25zdCBuZXdKc29uUGF0aCA9IG5vZGUuanNvblBhdGggPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKSwgJ2pzb25QYXRoJykgYXMgRXhwcmVzc2lvbiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IEpzb25FYWNoRnJvbShuZXdKc29uRXhwciwgbmV3SnNvblBhdGgpO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4obm9kZTogQ29sdW1uKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IENvbHVtbihub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS50YWJsZU5hbWUhIDogbm9kZS5jb2x1bW5OYW1lLCBub2RlLmhhc1RhYmxlTmFtZSgpID8gbm9kZS5jb2x1bW5OYW1lIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZpc2l0QWxpYXM8VCBleHRlbmRzIEFsaWFzYWJsZT4obm9kZTogQWxpYXM8VD4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQWxpYXModGhpcy5leHBlY3RTaW5nbGUobm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyksICdyZWZlcmVudCcpIGFzIFQsIG5vZGUuYWxpYXMpO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgSm9pbihub2RlLnR5cGUsIG5vZGUudGFibGVOYW1lLCBub2RlLmFsaWFzLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLm9uLmFjY2VwdCh0aGlzKSwgJ29uJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBPcmRlckJ5KHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUuY29sdW1uLmFjY2VwdCh0aGlzKSwgJ2NvbHVtbicpIGFzIEV4cHJlc3Npb24sIG5vZGUuZGlyZWN0aW9uKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFdpdGgobm9kZS5uYW1lLCB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3F1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQmluYXJ5RXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUubGVmdC5hY2NlcHQodGhpcyksICdsZWZ0JykgYXMgRXhwcmVzc2lvbixcbiAgICAgIG5vZGUub3BlcmF0b3IsXG4gICAgICB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKSwgJ3JpZ2h0JykgYXMgRXhwcmVzc2lvblxuICAgICk7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uKG5vZGUub3BlcmF0b3IsIHRoaXMuZXhwZWN0U2luZ2xlKG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyksICdvcGVyYW5kJykgYXMgRXhwcmVzc2lvbik7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0xlZnQgPSB0aGlzLmZsYXRMaXN0KG5vZGUubGVmdC5tYXAobCA9PiBsLmFjY2VwdCh0aGlzKSkpIGFzIEV4cHJlc3Npb25bXTtcbiAgICBsZXQgbmV3VmFsdWVzOiBFeHByZXNzaW9uW11bXSB8IFNlbGVjdFF1ZXJ5O1xuICAgIGlmIChub2RlLnZhbHVlcyBpbnN0YW5jZW9mIFNlbGVjdFF1ZXJ5KSB7XG4gICAgICBuZXdWYWx1ZXMgPSB0aGlzLmV4cGVjdFNpbmdsZShub2RlLnZhbHVlcy5hY2NlcHQodGhpcyksICd2YWx1ZXMgc3VicXVlcnknKSBhcyBTZWxlY3RRdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3U2V0czogRXhwcmVzc2lvbltdW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgc2V0IG9mIG5vZGUudmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2V0UGFydHM6IChFeHByZXNzaW9uIHwgRXhwcmVzc2lvbltdKVtdID0gc2V0Lm1hcCh2ID0+IHYuYWNjZXB0KHRoaXMpKTtcbiAgICAgICAgaWYgKHNldC5sZW5ndGggPiAxICYmIHRyYW5zZm9ybWVkU2V0UGFydHMuc29tZShBcnJheS5pc0FycmF5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgcmVwbGFjZW1lbnQgbm90IGFsbG93ZWQgaW4gbXVsdGktY29sdW1uIHR1cGxlIHBvc2l0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldC5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZFNldFBhcnRzWzBdKSkge1xuICAgICAgICAgIC8vIFNpbmdsZS1jb2x1bW4gc3BsaWNlOiBhZGQgYXMgc2VwYXJhdGUgc2V0c1xuICAgICAgICAgIHRyYW5zZm9ybWVkU2V0UGFydHNbMF0uZm9yRWFjaChyID0+IG5ld1NldHMucHVzaChbcl0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBOb3JtYWwgb3IgbXVsdGktY29sdW1uIChubyBhcnJheXMpXG4gICAgICAgICAgbmV3U2V0cy5wdXNoKHRyYW5zZm9ybWVkU2V0UGFydHMgYXMgRXhwcmVzc2lvbltdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3VmFsdWVzID0gbmV3U2V0cztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbkV4cHJlc3Npb24obmV3TGVmdCwgbmV3VmFsdWVzLCBub2RlLm5vdCk7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgQ29uY2F0KC4uLih0aGlzLmZsYXRMaXN0KG5vZGUuZXhwcmVzc2lvbnMubWFwKGUgPT4gZS5hY2NlcHQodGhpcykpKSBhcyBFeHByZXNzaW9uW10pKTtcbiAgfVxuXG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIGNvbnN0IG5ld0Nhc2VzOiBDYXNlSXRlbVtdID0gbm9kZS5jYXNlcy5tYXAoYyA9PiAoe1xuICAgICAgd2hlbjogdGhpcy5leHBlY3RTaW5nbGUoYy53aGVuLmFjY2VwdCh0aGlzKSwgJ3doZW4nKSBhcyBFeHByZXNzaW9uLFxuICAgICAgdGhlbjogdGhpcy5leHBlY3RTaW5nbGUoYy50aGVuLmFjY2VwdCh0aGlzKSwgJ3RoZW4nKSBhcyBFeHByZXNzaW9uXG4gICAgfSkpO1xuICAgIGNvbnN0IG5ld0Vsc2UgPSBub2RlLmVsc2UgPyB0aGlzLmV4cGVjdFNpbmdsZShub2RlLmVsc2UuYWNjZXB0KHRoaXMpLCAnZWxzZScpIGFzIEV4cHJlc3Npb24gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBDYXNlRXhwcmVzc2lvbihuZXdDYXNlcywgbmV3RWxzZSk7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25FeHByZXNzaW9uKG5vZGUubmFtZSBhcyBGdW5jdGlvbk5hbWUsIHRoaXMuZmxhdExpc3Qobm9kZS5hcmdzLm1hcChhID0+IGEuYWNjZXB0KHRoaXMpKSkgYXMgRXhwcmVzc2lvbltdKTtcbiAgfVxuXG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFBhcmFtKG5vZGUucGFyYW1OYW1lKTtcbiAgfVxuXG4gIHZpc2l0U3RyaW5nTGl0ZXJhbChub2RlOiBTdHJpbmdMaXRlcmFsKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ0xpdGVyYWwobm9kZS52YWx1ZSk7XG4gIH1cblxuICB2aXNpdE51bWJlckxpdGVyYWwobm9kZTogTnVtYmVyTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJMaXRlcmFsKG5vZGUudmFsdWUpO1xuICB9XG5cbiAgdmlzaXROdWxsTGl0ZXJhbChub2RlOiBOdWxsTGl0ZXJhbCk6IFNxbFRyZWVOb2RlIHwgU3FsVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIE51bGxMaXRlcmFsLklOU1RBTkNFO1xuICB9XG5cbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBTcWxUcmVlTm9kZSB8IFNxbFRyZWVOb2RlW10ge1xuICAgIHJldHVybiBuZXcgRXhpc3RzRXhwcmVzc2lvbih0aGlzLmV4cGVjdFNpbmdsZShub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKSwgJ3N1YnF1ZXJ5JykgYXMgU2VsZWN0UXVlcnkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Expression, SqlTreeNode } from "../ast/Abstractions";
|
|
2
|
+
import { Param } from "../ast/Literals";
|
|
3
|
+
import { QueryIdentityTransformer } from "./QueryIdentityTransformer";
|
|
4
|
+
export type ParamReplacements = {
|
|
5
|
+
[paramName: string]: Expression | Expression[];
|
|
6
|
+
};
|
|
7
|
+
export declare class QueryParamRewriteTransformer extends QueryIdentityTransformer {
|
|
8
|
+
private readonly _replacements;
|
|
9
|
+
constructor(paramNameOrReplacements: string | ParamReplacements, replacement?: Expression | Expression[]);
|
|
10
|
+
visitParamExpression(node: Param): SqlTreeNode | SqlTreeNode[];
|
|
11
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QueryParamRewriteTransformer = void 0;
|
|
4
|
+
const QueryIdentityTransformer_1 = require("./QueryIdentityTransformer");
|
|
5
|
+
class QueryParamRewriteTransformer extends QueryIdentityTransformer_1.QueryIdentityTransformer {
|
|
6
|
+
// Support both old single-param constructor and new multi-param constructor
|
|
7
|
+
constructor(paramNameOrReplacements, replacement) {
|
|
8
|
+
super();
|
|
9
|
+
if (typeof paramNameOrReplacements === 'string') {
|
|
10
|
+
// Legacy single-parameter mode
|
|
11
|
+
this._replacements = { [paramNameOrReplacements]: replacement };
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
// New multi-parameter mode
|
|
15
|
+
this._replacements = paramNameOrReplacements;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
visitParamExpression(node) {
|
|
19
|
+
if (node.paramName && this._replacements && typeof this._replacements === 'object' && node.paramName in this._replacements) {
|
|
20
|
+
return this._replacements[node.paramName];
|
|
21
|
+
}
|
|
22
|
+
return super.visitParamExpression(node);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.QueryParamRewriteTransformer = QueryParamRewriteTransformer;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlQYXJhbVJld3JpdGVUcmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXNpdG9yL1F1ZXJ5UGFyYW1SZXdyaXRlVHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUVBQXNFO0FBTXRFLE1BQWEsNEJBQTZCLFNBQVEsbURBQXdCO0lBR3hFLDRFQUE0RTtJQUM1RSxZQUFZLHVCQUFtRCxFQUFFLFdBQXVDO1FBQ3RHLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxPQUFPLHVCQUF1QixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELCtCQUErQjtZQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFdBQVksRUFBRSxDQUFDO1FBQ25FLENBQUM7YUFBTSxDQUFDO1lBQ04sMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsdUJBQXVCLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFUSxvQkFBb0IsQ0FBQyxJQUFXO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBckJELG9FQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4cHJlc3Npb24sIFNxbFRyZWVOb2RlIH0gZnJvbSBcIi4uL2FzdC9BYnN0cmFjdGlvbnNcIjtcbmltcG9ydCB7IFBhcmFtIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vUXVlcnlJZGVudGl0eVRyYW5zZm9ybWVyXCI7XG5cbmV4cG9ydCB0eXBlIFBhcmFtUmVwbGFjZW1lbnRzID0ge1xuICBbcGFyYW1OYW1lOiBzdHJpbmddOiBFeHByZXNzaW9uIHwgRXhwcmVzc2lvbltdO1xufTtcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyYW1SZXdyaXRlVHJhbnNmb3JtZXIgZXh0ZW5kcyBRdWVyeUlkZW50aXR5VHJhbnNmb3JtZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXBsYWNlbWVudHM6IFBhcmFtUmVwbGFjZW1lbnRzO1xuXG4gIC8vIFN1cHBvcnQgYm90aCBvbGQgc2luZ2xlLXBhcmFtIGNvbnN0cnVjdG9yIGFuZCBuZXcgbXVsdGktcGFyYW0gY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3IocGFyYW1OYW1lT3JSZXBsYWNlbWVudHM6IHN0cmluZyB8IFBhcmFtUmVwbGFjZW1lbnRzLCByZXBsYWNlbWVudD86IEV4cHJlc3Npb24gfCBFeHByZXNzaW9uW10pIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0eXBlb2YgcGFyYW1OYW1lT3JSZXBsYWNlbWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBMZWdhY3kgc2luZ2xlLXBhcmFtZXRlciBtb2RlXG4gICAgICB0aGlzLl9yZXBsYWNlbWVudHMgPSB7IFtwYXJhbU5hbWVPclJlcGxhY2VtZW50c106IHJlcGxhY2VtZW50ISB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZXcgbXVsdGktcGFyYW1ldGVyIG1vZGVcbiAgICAgIHRoaXMuX3JlcGxhY2VtZW50cyA9IHBhcmFtTmFtZU9yUmVwbGFjZW1lbnRzO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogU3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdIHtcbiAgICBpZiAobm9kZS5wYXJhbU5hbWUgJiYgdGhpcy5fcmVwbGFjZW1lbnRzICYmIHR5cGVvZiB0aGlzLl9yZXBsYWNlbWVudHMgPT09ICdvYmplY3QnICYmIG5vZGUucGFyYW1OYW1lIGluIHRoaXMuX3JlcGxhY2VtZW50cykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcGxhY2VtZW50c1tub2RlLnBhcmFtTmFtZV07XG4gICAgfVxuICAgIHJldHVybiBzdXBlci52aXNpdFBhcmFtRXhwcmVzc2lvbihub2RlKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVHJlZU5vZGVUcmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92aXNpdG9yL1NxbFRyZWVOb2RlVHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNxbFRyZWVOb2RlIH0gZnJvbSBcIi4uL2FzdC9BYnN0cmFjdGlvbnNcIjtcbmltcG9ydCB7IFNxbFRyZWVOb2RlVmlzaXRvciB9IGZyb20gXCIuL1NxbFRyZWVOb2RlVmlzaXRvclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNxbFRyZWVOb2RlVHJhbnNmb3JtZXIgZXh0ZW5kcyBTcWxUcmVlTm9kZVZpc2l0b3I8U3FsVHJlZU5vZGUgfCBTcWxUcmVlTm9kZVtdPiB7XG4gIHRyYW5zZm9ybShub2RlOiBTcWxUcmVlTm9kZSk6IFNxbFRyZWVOb2RlO1xufVxuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Alias } from "../ast/Alias";
|
|
2
|
+
import { BinaryExpression } from "../ast/BinaryExpression";
|
|
3
|
+
import { CaseExpression } from "../ast/CaseExpression";
|
|
4
|
+
import { Column, ColumnLike } from "../ast/Column";
|
|
5
|
+
import { Concat } from "../ast/Concat";
|
|
6
|
+
import { ExistsExpression } from "../ast/ExistsExpression";
|
|
7
|
+
import { FromLike, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
|
|
8
|
+
import { FunctionExpression } from "../ast/FunctionExpression";
|
|
9
|
+
import { InExpression } from "../ast/InExpression";
|
|
10
|
+
import { InsertQuery } from "../ast/InsertQuery";
|
|
11
|
+
import { Join } from "../ast/Join";
|
|
12
|
+
import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
|
|
13
|
+
import { OrderBy } from "../ast/OrderBy";
|
|
14
|
+
import { SelectQuery } from "../ast/SelectQuery";
|
|
15
|
+
import { UnaryExpression } from "../ast/UnaryExpression";
|
|
16
|
+
import { With } from "../ast/With";
|
|
17
|
+
export interface SqlTreeNodeVisitor<T> {
|
|
18
|
+
visitSelectQuery(node: SelectQuery): T;
|
|
19
|
+
visitInsertQuery(node: InsertQuery): T;
|
|
20
|
+
visitTableFrom(node: TableFrom): T;
|
|
21
|
+
visitSubqueryFrom(node: SubqueryFrom): T;
|
|
22
|
+
visitJsonEachFrom(node: JsonEachFrom): T;
|
|
23
|
+
visitJoinClause(node: Join): T;
|
|
24
|
+
visitOrderBy(node: OrderBy): T;
|
|
25
|
+
visitWithClause(node: With): T;
|
|
26
|
+
visitColumn(node: Column): T;
|
|
27
|
+
visitAlias(node: Alias<any>): T;
|
|
28
|
+
visitBinaryExpression(node: BinaryExpression): T;
|
|
29
|
+
visitUnaryExpression(node: UnaryExpression): T;
|
|
30
|
+
visitInExpression(node: InExpression): T;
|
|
31
|
+
visitConcat(node: Concat): T;
|
|
32
|
+
visitCaseExpression(node: CaseExpression): T;
|
|
33
|
+
visitFunctionExpression(node: FunctionExpression): T;
|
|
34
|
+
visitParamExpression(node: Param): T;
|
|
35
|
+
visitStringLiteral(node: StringLiteral): T;
|
|
36
|
+
visitNumberLiteral(node: NumberLiteral): T;
|
|
37
|
+
visitNullLiteral(node: NullLiteral): T;
|
|
38
|
+
visitExistsExpression(node: ExistsExpression): T;
|
|
39
|
+
}
|
|
40
|
+
export declare class FromLikeAndJoinVisitorAcceptor<T> {
|
|
41
|
+
accept(visitor: SqlTreeNodeVisitor<T>, f: FromLike | Join): T;
|
|
42
|
+
}
|
|
43
|
+
export declare class ColumnLikeVisitorAcceptor<T> {
|
|
44
|
+
accept(visitor: SqlTreeNodeVisitor<T>, c: ColumnLike): T;
|
|
45
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ColumnLikeVisitorAcceptor = exports.FromLikeAndJoinVisitorAcceptor = void 0;
|
|
4
|
+
const Abstractions_1 = require("../ast/Abstractions");
|
|
5
|
+
const Alias_1 = require("../ast/Alias");
|
|
6
|
+
const Column_1 = require("../ast/Column");
|
|
7
|
+
const From_1 = require("../ast/From");
|
|
8
|
+
const Join_1 = require("../ast/Join");
|
|
9
|
+
const Literals_1 = require("../ast/Literals");
|
|
10
|
+
class FromLikeAndJoinVisitorAcceptor {
|
|
11
|
+
accept(visitor, f) {
|
|
12
|
+
if (f instanceof Join_1.Join ||
|
|
13
|
+
f instanceof From_1.TableFrom ||
|
|
14
|
+
f instanceof From_1.SubqueryFrom ||
|
|
15
|
+
f instanceof From_1.JsonEachFrom ||
|
|
16
|
+
f instanceof Alias_1.Alias) {
|
|
17
|
+
return f.accept(visitor);
|
|
18
|
+
}
|
|
19
|
+
else if (f && typeof f === 'object' && 'referent' in f && 'alias' in f) {
|
|
20
|
+
const alias = new Alias_1.Alias(f.referent, f.alias);
|
|
21
|
+
return alias.accept(visitor);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error('Invalid FROM clause: ' + JSON.stringify(f));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.FromLikeAndJoinVisitorAcceptor = FromLikeAndJoinVisitorAcceptor;
|
|
29
|
+
class ColumnLikeVisitorAcceptor {
|
|
30
|
+
accept(visitor, c) {
|
|
31
|
+
if (c instanceof Column_1.Column ||
|
|
32
|
+
c instanceof Literals_1.LiteralExpression ||
|
|
33
|
+
c instanceof Abstractions_1.AliasableExpression ||
|
|
34
|
+
c instanceof Alias_1.Alias) {
|
|
35
|
+
return c.accept(visitor);
|
|
36
|
+
}
|
|
37
|
+
else if (c && typeof c === 'object' && 'referent' in c && 'alias' in c) {
|
|
38
|
+
const alias = new Alias_1.Alias(c.referent, c.alias);
|
|
39
|
+
return alias.accept(visitor);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error('Invalid COLUMN clause: ' + JSON.stringify(c));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.ColumnLikeVisitorAcceptor = ColumnLikeVisitorAcceptor;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsVHJlZU5vZGVWaXNpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUEwRDtBQUMxRCx3Q0FBcUM7QUFHckMsMENBQW1EO0FBR25ELHNDQUE4RTtBQUk5RSxzQ0FBbUM7QUFDbkMsOENBQXNHO0FBOEJ0RyxNQUFhLDhCQUE4QjtJQUNsQyxNQUFNLENBQUMsT0FBOEIsRUFBRSxDQUFnQjtRQUM1RCxJQUFJLENBQUMsWUFBWSxXQUFJO1lBQ2pCLENBQUMsWUFBWSxnQkFBUztZQUN0QixDQUFDLFlBQVksbUJBQVk7WUFDekIsQ0FBQyxZQUFZLG1CQUFZO1lBQ3pCLENBQUMsWUFBWSxhQUFLLEVBQ3BCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaEJELHdFQWdCQztBQUVELE1BQWEseUJBQXlCO0lBQzdCLE1BQU0sQ0FBQyxPQUE4QixFQUFFLENBQWE7UUFDekQsSUFDRSxDQUFDLFlBQVksZUFBTTtZQUNuQixDQUFDLFlBQVksNEJBQWlCO1lBQzlCLENBQUMsWUFBWSxrQ0FBbUI7WUFDaEMsQ0FBQyxZQUFZLGFBQUssRUFDbEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksYUFBSyxDQUFFLENBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoQkQsOERBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5MaWtlIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tTGlrZSwgSnNvbkVhY2hGcm9tLCBTdWJxdWVyeUZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSB9IGZyb20gXCIuLi9hc3QvSW5zZXJ0UXVlcnlcIjtcbmltcG9ydCB7IEpvaW4gfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IExpdGVyYWxFeHByZXNzaW9uLCBOdWxsTGl0ZXJhbCwgTnVtYmVyTGl0ZXJhbCwgUGFyYW0sIFN0cmluZ0xpdGVyYWwgfSBmcm9tIFwiLi4vYXN0L0xpdGVyYWxzXCI7XG5pbXBvcnQgeyBPcmRlckJ5IH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3FsVHJlZU5vZGVWaXNpdG9yPFQ+IHtcbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IFQ7XG4gIHZpc2l0SW5zZXJ0UXVlcnkobm9kZTogSW5zZXJ0UXVlcnkpOiBUO1xuICB2aXNpdFRhYmxlRnJvbShub2RlOiBUYWJsZUZyb20pOiBUO1xuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBUO1xuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBUO1xuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IFQ7XG4gIHZpc2l0T3JkZXJCeShub2RlOiBPcmRlckJ5KTogVDtcbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBUO1xuICB2aXNpdENvbHVtbihub2RlOiBDb2x1bW4pOiBUO1xuICB2aXNpdEFsaWFzKG5vZGU6IEFsaWFzPGFueT4pOiBUO1xuICB2aXNpdEJpbmFyeUV4cHJlc3Npb24obm9kZTogQmluYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IFQ7XG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IFQ7XG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBUO1xuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBUO1xuICB2aXNpdFBhcmFtRXhwcmVzc2lvbihub2RlOiBQYXJhbSk6IFQ7XG4gIHZpc2l0U3RyaW5nTGl0ZXJhbChub2RlOiBTdHJpbmdMaXRlcmFsKTogVDtcbiAgdmlzaXROdW1iZXJMaXRlcmFsKG5vZGU6IE51bWJlckxpdGVyYWwpOiBUO1xuICB2aXNpdE51bGxMaXRlcmFsKG5vZGU6IE51bGxMaXRlcmFsKTogVDtcbiAgdmlzaXRFeGlzdHNFeHByZXNzaW9uKG5vZGU6IEV4aXN0c0V4cHJlc3Npb24pOiBUO1xufVxuXG5leHBvcnQgY2xhc3MgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yPFQ+IHtcbiAgcHVibGljIGFjY2VwdCh2aXNpdG9yOiBTcWxUcmVlTm9kZVZpc2l0b3I8VD4sIGY6IEZyb21MaWtlfEpvaW4pOiBUIHtcbiAgICBpZiAoZiBpbnN0YW5jZW9mIEpvaW4gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIFRhYmxlRnJvbSB8fFxuICAgICAgICBmIGluc3RhbmNlb2YgU3VicXVlcnlGcm9tIHx8XG4gICAgICAgIGYgaW5zdGFuY2VvZiBKc29uRWFjaEZyb20gfHxcbiAgICAgICAgZiBpbnN0YW5jZW9mIEFsaWFzXG4gICAgKSB7XG4gICAgICByZXR1cm4gZi5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIGlmIChmICYmIHR5cGVvZiBmID09PSAnb2JqZWN0JyAmJiAncmVmZXJlbnQnIGluIGYgJiYgJ2FsaWFzJyBpbiBmKSB7XG4gICAgICBjb25zdCBhbGlhcyA9IG5ldyBBbGlhcyhmLnJlZmVyZW50LCBmLmFsaWFzKTtcbiAgICAgIHJldHVybiBhbGlhcy5hY2NlcHQodmlzaXRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBGUk9NIGNsYXVzZTogJyArIEpTT04uc3RyaW5naWZ5KGYpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8VD4ge1xuICBwdWJsaWMgYWNjZXB0KHZpc2l0b3I6IFNxbFRyZWVOb2RlVmlzaXRvcjxUPiwgYzogQ29sdW1uTGlrZSk6IFQge1xuICAgIGlmIChcbiAgICAgIGMgaW5zdGFuY2VvZiBDb2x1bW4gfHxcbiAgICAgIGMgaW5zdGFuY2VvZiBMaXRlcmFsRXhwcmVzc2lvbiB8fFxuICAgICAgYyBpbnN0YW5jZW9mIEFsaWFzYWJsZUV4cHJlc3Npb24gfHxcbiAgICAgIGMgaW5zdGFuY2VvZiBBbGlhc1xuICAgICkge1xuICAgICAgcmV0dXJuIGMuYWNjZXB0KHZpc2l0b3IpO1xuICAgIH0gZWxzZSBpZiAoYyAmJiB0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgJ3JlZmVyZW50JyBpbiBjICYmICdhbGlhcycgaW4gYykge1xuICAgICAgY29uc3QgYWxpYXMgPSBuZXcgQWxpYXMoKGMgYXMgYW55KS5yZWZlcmVudCwgYy5hbGlhcyk7XG4gICAgICByZXR1cm4gYWxpYXMuYWNjZXB0KHZpc2l0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQ09MVU1OIGNsYXVzZTogJyArIEpTT04uc3RyaW5naWZ5KGMpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|