@shaxpir/squilt 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +289 -1
  2. package/dist/ast/AlterTableQuery.d.ts +32 -0
  3. package/dist/ast/AlterTableQuery.js +60 -0
  4. package/dist/ast/BetweenExpression.d.ts +10 -0
  5. package/dist/ast/BetweenExpression.js +18 -0
  6. package/dist/ast/CastExpression.d.ts +13 -0
  7. package/dist/ast/CastExpression.js +25 -0
  8. package/dist/ast/CollateExpression.d.ts +18 -0
  9. package/dist/ast/CollateExpression.js +30 -0
  10. package/dist/ast/CreateIndexQuery.d.ts +25 -0
  11. package/dist/ast/CreateIndexQuery.js +64 -0
  12. package/dist/ast/CreateTableQuery.d.ts +57 -0
  13. package/dist/ast/CreateTableQuery.js +79 -0
  14. package/dist/ast/CreateViewQuery.d.ts +34 -0
  15. package/dist/ast/CreateViewQuery.js +61 -0
  16. package/dist/ast/CreateVirtualTableQuery.d.ts +32 -0
  17. package/dist/ast/CreateVirtualTableQuery.js +74 -0
  18. package/dist/ast/DeleteQuery.d.ts +17 -0
  19. package/dist/ast/DeleteQuery.js +43 -0
  20. package/dist/ast/DropIndexQuery.d.ts +14 -0
  21. package/dist/ast/DropIndexQuery.js +35 -0
  22. package/dist/ast/DropTableQuery.d.ts +14 -0
  23. package/dist/ast/DropTableQuery.js +35 -0
  24. package/dist/ast/DropViewQuery.d.ts +11 -0
  25. package/dist/ast/DropViewQuery.js +24 -0
  26. package/dist/ast/FunctionExpression.d.ts +21 -0
  27. package/dist/ast/FunctionExpression.js +40 -1
  28. package/dist/ast/FunctionName.d.ts +1 -1
  29. package/dist/ast/FunctionName.js +1 -1
  30. package/dist/ast/InsertQuery.d.ts +24 -1
  31. package/dist/ast/InsertQuery.js +49 -1
  32. package/dist/ast/Operator.d.ts +2 -0
  33. package/dist/ast/Operator.js +3 -1
  34. package/dist/ast/SelectQuery.d.ts +4 -0
  35. package/dist/ast/SelectQuery.js +11 -1
  36. package/dist/ast/SubqueryExpression.d.ts +18 -0
  37. package/dist/ast/SubqueryExpression.js +27 -0
  38. package/dist/ast/UpdateQuery.d.ts +24 -0
  39. package/dist/ast/UpdateQuery.js +51 -0
  40. package/dist/ast/WindowExpression.d.ts +51 -0
  41. package/dist/ast/WindowExpression.js +61 -0
  42. package/dist/ast/WindowSpecification.d.ts +46 -0
  43. package/dist/ast/WindowSpecification.js +60 -0
  44. package/dist/builder/QueryBuilder.d.ts +20 -0
  45. package/dist/builder/QueryBuilder.js +41 -1
  46. package/dist/builder/Shorthand.d.ts +51 -0
  47. package/dist/builder/Shorthand.js +125 -1
  48. package/dist/index.d.ts +17 -1
  49. package/dist/index.js +59 -3
  50. package/dist/renderer/CompactQueryRenderer.d.ts +34 -2
  51. package/dist/renderer/CompactQueryRenderer.js +272 -2
  52. package/dist/renderer/IndentedQueryRenderer.d.ts +34 -2
  53. package/dist/renderer/IndentedQueryRenderer.js +289 -3
  54. package/dist/renderer/QueryRenderer.d.ts +11 -1
  55. package/dist/renderer/QueryRenderer.js +1 -1
  56. package/dist/validate/CommonQueryValidator.d.ts +31 -1
  57. package/dist/validate/CommonQueryValidator.js +253 -4
  58. package/dist/validate/QueryValidator.d.ts +10 -1
  59. package/dist/validate/QueryValidator.js +1 -1
  60. package/dist/validate/SQLiteQueryValidator.d.ts +16 -1
  61. package/dist/validate/SQLiteQueryValidator.js +32 -3
  62. package/dist/visitor/ParamCollector.d.ts +30 -0
  63. package/dist/visitor/ParamCollector.js +109 -2
  64. package/dist/visitor/QueryIdentityTransformer.d.ts +30 -0
  65. package/dist/visitor/QueryIdentityTransformer.js +217 -2
  66. package/dist/visitor/SqlTreeNodeVisitor.d.ts +30 -0
  67. package/dist/visitor/SqlTreeNodeVisitor.js +1 -1
  68. package/package.json +4 -1
@@ -13,7 +13,7 @@ class SQLiteQueryValidator extends CommonQueryValidator_1.CommonQueryValidator {
13
13
  'LOWER', 'UPPER', 'LENGTH', 'SUBSTR', 'TRIM', 'LTRIM', 'RTRIM',
14
14
  'REPLACE', 'INSTR', 'QUOTE', 'CHAR', 'UNICODE', 'HEX', 'ZEROBLOB',
15
15
  'COALESCE', 'IFNULL', 'NULLIF', 'TYPEOF', 'TOTAL_CHANGES', 'CHANGES',
16
- 'LAST_INSERT_ROWID',
16
+ 'LAST_INSERT_ROWID', 'CONCAT',
17
17
  // Aggregate functions
18
18
  'COUNT', 'SUM', 'AVG', 'MIN', 'MAX', 'TOTAL', 'GROUP_CONCAT',
19
19
  // Date and time functions
@@ -22,7 +22,13 @@ class SQLiteQueryValidator extends CommonQueryValidator_1.CommonQueryValidator {
22
22
  'json', 'json_array', 'json_object', 'json_extract', 'json_insert',
23
23
  'json_replace', 'json_set', 'json_remove', 'json_type', 'json_valid',
24
24
  'json_quote', 'json_patch', 'json_array_length', 'json_group_array',
25
- 'json_group_object', 'json_each', 'json_tree'
25
+ 'json_group_object', 'json_each', 'json_tree',
26
+ // Window functions
27
+ 'ROW_NUMBER', 'RANK', 'DENSE_RANK', 'NTILE',
28
+ 'LAG', 'LEAD', 'FIRST_VALUE', 'LAST_VALUE', 'NTH_VALUE',
29
+ 'CUME_DIST', 'PERCENT_RANK',
30
+ // FTS5 functions
31
+ 'bm25', 'highlight', 'snippet', 'offsets', 'matchinfo'
26
32
  ]);
27
33
  this.supportedUnaryOperators = new Set([
28
34
  Operator_1.Operator.NOT, Operator_1.Operator.PLUS, Operator_1.Operator.MINUS,
@@ -42,6 +48,14 @@ class SQLiteQueryValidator extends CommonQueryValidator_1.CommonQueryValidator {
42
48
  super.visitInsertQuery(node);
43
49
  // SQLite-specific validation (if any) can be added here
44
50
  }
51
+ visitDeleteQuery(node) {
52
+ super.visitDeleteQuery(node);
53
+ // SQLite-specific validation (if any) can be added here
54
+ }
55
+ visitUpdateQuery(node) {
56
+ super.visitUpdateQuery(node);
57
+ // SQLite-specific validation (if any) can be added here
58
+ }
45
59
  visitSelectQuery(node) {
46
60
  super.visitSelectQuery(node);
47
61
  if (node['_limit'] !== null && node['_limit'] !== undefined && !Number.isInteger(node['_limit'])) {
@@ -91,6 +105,21 @@ class SQLiteQueryValidator extends CommonQueryValidator_1.CommonQueryValidator {
91
105
  visitInExpression(node) {
92
106
  super.visitInExpression(node);
93
107
  }
108
+ visitCreateVirtualTableQuery(node) {
109
+ super.visitCreateVirtualTableQuery(node);
110
+ // FTS5-specific validation
111
+ if (node.module === 'fts5') {
112
+ // Validate content table reference if specified
113
+ if (node.options.content) {
114
+ // Content table name should be a valid identifier
115
+ // Note: we can't validate that the table exists at this point
116
+ }
117
+ // If contentRowid is specified, content must also be specified
118
+ if (node.options.contentRowid && !node.options.content) {
119
+ throw new Error('FTS5 content_rowid requires content option to be specified');
120
+ }
121
+ }
122
+ }
94
123
  }
95
124
  exports.SQLiteQueryValidator = SQLiteQueryValidator;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMaXRlUXVlcnlWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGUvU1FMaXRlUXVlcnlWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0Esc0NBQTZDO0FBQzdDLDhDQUEyQztBQUszQyxpRUFBOEQ7QUFHOUQsTUFBYSxvQkFDWCxTQUFRLDJDQUFvQjtJQUQ5Qjs7UUFJVSx1QkFBa0IsR0FBc0IsSUFBSSxHQUFHLENBQUM7WUFDdEQsd0JBQXdCO1lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVk7WUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTztZQUM5RCxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVO1lBQ2pFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUztZQUNwRSxtQkFBbUI7WUFDbkIsc0JBQXNCO1lBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGNBQWM7WUFDNUQsMEJBQTBCO1lBQzFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVO1lBQ25ELGtCQUFrQjtZQUNsQixNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYTtZQUNsRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWTtZQUNwRSxZQUFZLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQjtZQUNuRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVztTQUM5QyxD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Q3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBa0I7UUFDbEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFxQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsUUFBUSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQWtCO1FBQ2xDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFwR0Qsb0RBb0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSnNvbkVhY2hGcm9tLCBUYWJsZUZyb20gfSBmcm9tIFwiLi4vYXN0L0Zyb21cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvRnVuY3Rpb25FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGdW5jdGlvbk5hbWUgfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uTmFtZVwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiwgSm9pblR5cGUgfSBmcm9tIFwiLi4vYXN0L0pvaW5cIjtcbmltcG9ydCB7IE9wZXJhdG9yIH0gZnJvbSBcIi4uL2FzdC9PcGVyYXRvclwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgU3FsVHJlZU5vZGVWaXNpdG9yIH0gZnJvbSBcIi4uL3Zpc2l0b3IvU3FsVHJlZU5vZGVWaXNpdG9yXCI7XG5pbXBvcnQgeyBDb21tb25RdWVyeVZhbGlkYXRvciB9IGZyb20gXCIuL0NvbW1vblF1ZXJ5VmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBRdWVyeVZhbGlkYXRvciB9IGZyb20gXCIuL1F1ZXJ5VmFsaWRhdG9yXCI7XG5cbmV4cG9ydCBjbGFzcyBTUUxpdGVRdWVyeVZhbGlkYXRvclxuICBleHRlbmRzIENvbW1vblF1ZXJ5VmFsaWRhdG9yXG4gIGltcGxlbWVudHMgUXVlcnlWYWxpZGF0b3IsIFNxbFRyZWVOb2RlVmlzaXRvcjx2b2lkPlxue1xuICBwcml2YXRlIHN1cHBvcnRlZEZ1bmN0aW9uczogU2V0PEZ1bmN0aW9uTmFtZT4gPSBuZXcgU2V0KFtcbiAgICAvLyBDb3JlIHNjYWxhciBmdW5jdGlvbnNcbiAgICAnQUJTJywgJ0NFSUwnLCAnRkxPT1InLCAnUk9VTkQnLCAnVFJVTkMnLCAnUkFORE9NJywgJ1JBTkRPTUJMT0InLFxuICAgICdMT1dFUicsICdVUFBFUicsICdMRU5HVEgnLCAnU1VCU1RSJywgJ1RSSU0nLCAnTFRSSU0nLCAnUlRSSU0nLFxuICAgICdSRVBMQUNFJywgJ0lOU1RSJywgJ1FVT1RFJywgJ0NIQVInLCAnVU5JQ09ERScsICdIRVgnLCAnWkVST0JMT0InLFxuICAgICdDT0FMRVNDRScsICdJRk5VTEwnLCAnTlVMTElGJywgJ1RZUEVPRicsICdUT1RBTF9DSEFOR0VTJywgJ0NIQU5HRVMnLFxuICAgICdMQVNUX0lOU0VSVF9ST1dJRCcsXG4gICAgLy8gQWdncmVnYXRlIGZ1bmN0aW9uc1xuICAgICdDT1VOVCcsICdTVU0nLCAnQVZHJywgJ01JTicsICdNQVgnLCAnVE9UQUwnLCAnR1JPVVBfQ09OQ0FUJyxcbiAgICAvLyBEYXRlIGFuZCB0aW1lIGZ1bmN0aW9uc1xuICAgICdEQVRFJywgJ1RJTUUnLCAnREFURVRJTUUnLCAnSlVMSUFOREFZJywgJ1NUUkZUSU1FJyxcbiAgICAvLyBKU09OMSBmdW5jdGlvbnNcbiAgICAnanNvbicsICdqc29uX2FycmF5JywgJ2pzb25fb2JqZWN0JywgJ2pzb25fZXh0cmFjdCcsICdqc29uX2luc2VydCcsXG4gICAgJ2pzb25fcmVwbGFjZScsICdqc29uX3NldCcsICdqc29uX3JlbW92ZScsICdqc29uX3R5cGUnLCAnanNvbl92YWxpZCcsXG4gICAgJ2pzb25fcXVvdGUnLCAnanNvbl9wYXRjaCcsICdqc29uX2FycmF5X2xlbmd0aCcsICdqc29uX2dyb3VwX2FycmF5JyxcbiAgICAnanNvbl9ncm91cF9vYmplY3QnLCAnanNvbl9lYWNoJywgJ2pzb25fdHJlZSdcbiAgXSk7XG5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRVbmFyeU9wZXJhdG9yczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgICBPcGVyYXRvci5OT1QsIE9wZXJhdG9yLlBMVVMsIE9wZXJhdG9yLk1JTlVTLFxuICAgIE9wZXJhdG9yLklTX05VTEwsIE9wZXJhdG9yLklTX05PVF9OVUxMLFxuICBdKTtcblxuICBwcml2YXRlIGlzV2l0aFJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyB2YWxpZGF0ZShxdWVyeTogU2VsZWN0UXVlcnkgfCBJbnNlcnRRdWVyeSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBxdWVyeS5hY2NlcHQodGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXQoKTogdm9pZCB7XG4gICAgc3VwZXIucmVzZXQoKTtcbiAgICB0aGlzLmlzV2l0aFJlY3Vyc2l2ZSA9IGZhbHNlO1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IHZvaWQge1xuICAgIHN1cGVyLnZpc2l0SW5zZXJ0UXVlcnkobm9kZSk7XG4gICAgLy8gU1FMaXRlLXNwZWNpZmljIHZhbGlkYXRpb24gKGlmIGFueSkgY2FuIGJlIGFkZGVkIGhlcmVcbiAgfVxuXG4gIHZpc2l0U2VsZWN0UXVlcnkobm9kZTogU2VsZWN0UXVlcnkpOiB2b2lkIHtcbiAgICBzdXBlci52aXNpdFNlbGVjdFF1ZXJ5KG5vZGUpO1xuICAgIGlmIChub2RlWydfbGltaXQnXSAhPT0gbnVsbCAmJiBub2RlWydfbGltaXQnXSAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNJbnRlZ2VyKG5vZGVbJ19saW1pdCddKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUgTElNSVQgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgfVxuICAgIGlmIChub2RlWydfb2Zmc2V0J10gIT09IG51bGwgJiYgbm9kZVsnX29mZnNldCddICE9PSB1bmRlZmluZWQgJiYgIU51bWJlci5pc0ludGVnZXIobm9kZVsnX29mZnNldCddKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTUUxpdGUgT0ZGU0VUIG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIH1cbiAgfVxuXG4gIHZpc2l0Sm9pbkNsYXVzZShub2RlOiBKb2luKTogdm9pZCB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gSm9pblR5cGUuUklHSFQgfHwgbm9kZS50eXBlID09PSBKb2luVHlwZS5GVUxMKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNRTGl0ZSBkb2VzIG5vdCBzdXBwb3J0ICR7bm9kZS50eXBlfSBKT0lOYCk7XG4gICAgfVxuICAgIHN1cGVyLnZpc2l0Sm9pbkNsYXVzZShub2RlKTtcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogdm9pZCB7XG4gICAgY29uc3QgcHJldlJlY3Vyc2l2ZSA9IHRoaXMuaXNXaXRoUmVjdXJzaXZlO1xuICAgIHRoaXMuaXNXaXRoUmVjdXJzaXZlID0gZmFsc2U7XG4gICAgbm9kZS5xdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgaWYgKHRoaXMuaXNXaXRoUmVjdXJzaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY3Vyc2l2ZSBXSVRIIGNsYXVzZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyB2YWxpZGF0b3InKTtcbiAgICB9XG4gICAgdGhpcy5pc1dpdGhSZWN1cnNpdmUgPSBwcmV2UmVjdXJzaXZlO1xuICAgIHN1cGVyLnZpc2l0V2l0aENsYXVzZShub2RlKTtcbiAgfVxuXG4gIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IEZ1bmN0aW9uRXhwcmVzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMuaGFzKG5vZGUubmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gJHtub2RlLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQgaW4gU1FMaXRlYCk7XG4gICAgfVxuICAgIHN1cGVyLnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpO1xuICB9XG5cbiAgdmlzaXRUYWJsZUZyb20obm9kZTogVGFibGVGcm9tKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNXaXRoUmVjdXJzaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlY3Vyc2l2ZSByZWZlcmVuY2UgdG8gV0lUSCBjbGF1c2UgZGV0ZWN0ZWQnKTtcbiAgICB9XG4gICAgc3VwZXIudmlzaXRUYWJsZUZyb20obm9kZSk7XG4gIH1cblxuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiB2b2lkIHtcbiAgICBzdXBlci52aXNpdEpzb25FYWNoRnJvbShub2RlKTtcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdXBwb3J0ZWRVbmFyeU9wZXJhdG9ycy5oYXMobm9kZS5vcGVyYXRvcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hcnkgb3BlcmF0b3IgJHtub2RlLm9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkIGluIFNRTGl0ZWApO1xuICAgIH1cbiAgICBzdXBlci52aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlKTtcbiAgfVxuXG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IHZvaWQge1xuICAgIHN1cGVyLnZpc2l0SW5FeHByZXNzaW9uKG5vZGUpO1xuICB9XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMaXRlUXVlcnlWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGUvU1FMaXRlUXVlcnlWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsc0NBQTZDO0FBQzdDLDhDQUEyQztBQUszQyxpRUFBOEQ7QUFpQjlELE1BQWEsb0JBQ1gsU0FBUSwyQ0FBb0I7SUFEOUI7O1FBSVUsdUJBQWtCLEdBQXNCLElBQUksR0FBRyxDQUFDO1lBQ3RELHdCQUF3QjtZQUN4QixLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZO1lBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU87WUFDOUQsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVTtZQUNqRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVM7WUFDcEUsbUJBQW1CLEVBQUUsUUFBUTtZQUM3QixzQkFBc0I7WUFDdEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYztZQUM1RCwwQkFBMEI7WUFDMUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVU7WUFDbkQsa0JBQWtCO1lBQ2xCLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhO1lBQ2xFLGNBQWMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZO1lBQ3BFLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCO1lBQ25FLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxX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SyxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLDJCQUEyQjtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDM0IsZ0RBQWdEO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekIsa0RBQWtEO2dCQUNsRCw4REFBOEQ7WUFDaEUsQ0FBQztZQUVELCtEQUErRDtZQUMvRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdElELG9EQXNJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFsdGVyVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQWx0ZXJUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpZXdRdWVyeSB9IGZyb20gXCIuLi9hc3QvQ3JlYXRlVmlld1F1ZXJ5XCI7XG5pbXBvcnQgeyBEZWxldGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRGVsZXRlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9Ecm9wSW5kZXhRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcFRhYmxlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9Ecm9wVmlld1F1ZXJ5XCI7XG5pbXBvcnQgeyBKc29uRWFjaEZyb20sIFRhYmxlRnJvbSB9IGZyb20gXCIuLi9hc3QvRnJvbVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L1VwZGF0ZVF1ZXJ5XCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRnVuY3Rpb25OYW1lIH0gZnJvbSBcIi4uL2FzdC9GdW5jdGlvbk5hbWVcIjtcbmltcG9ydCB7IEluRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvSW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeSB9IGZyb20gXCIuLi9hc3QvSW5zZXJ0UXVlcnlcIjtcbmltcG9ydCB7IEpvaW4sIEpvaW5UeXBlIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBPcGVyYXRvciB9IGZyb20gXCIuLi9hc3QvT3BlcmF0b3JcIjtcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9TZWxlY3RRdWVyeVwiO1xuaW1wb3J0IHsgVW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9VbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IFdpdGggfSBmcm9tIFwiLi4vYXN0L1dpdGhcIjtcbmltcG9ydCB7IFNxbFRyZWVOb2RlVmlzaXRvciB9IGZyb20gXCIuLi92aXNpdG9yL1NxbFRyZWVOb2RlVmlzaXRvclwiO1xuaW1wb3J0IHsgQ29tbW9uUXVlcnlWYWxpZGF0b3IgfSBmcm9tIFwiLi9Db21tb25RdWVyeVZhbGlkYXRvclwiO1xuaW1wb3J0IHsgUXVlcnlWYWxpZGF0b3IgfSBmcm9tIFwiLi9RdWVyeVZhbGlkYXRvclwiO1xuXG50eXBlIFZhbGlkYXRhYmxlUXVlcnkgPVxuICB8IFNlbGVjdFF1ZXJ5XG4gIHwgSW5zZXJ0UXVlcnlcbiAgfCBVcGRhdGVRdWVyeVxuICB8IERlbGV0ZVF1ZXJ5XG4gIHwgQ3JlYXRlVGFibGVRdWVyeVxuICB8IENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5XG4gIHwgQ3JlYXRlSW5kZXhRdWVyeVxuICB8IENyZWF0ZVZpZXdRdWVyeVxuICB8IEFsdGVyVGFibGVRdWVyeVxuICB8IERyb3BUYWJsZVF1ZXJ5XG4gIHwgRHJvcEluZGV4UXVlcnlcbiAgfCBEcm9wVmlld1F1ZXJ5O1xuXG5leHBvcnQgY2xhc3MgU1FMaXRlUXVlcnlWYWxpZGF0b3JcbiAgZXh0ZW5kcyBDb21tb25RdWVyeVZhbGlkYXRvclxuICBpbXBsZW1lbnRzIFF1ZXJ5VmFsaWRhdG9yLCBTcWxUcmVlTm9kZVZpc2l0b3I8dm9pZD5cbntcbiAgcHJpdmF0ZSBzdXBwb3J0ZWRGdW5jdGlvbnM6IFNldDxGdW5jdGlvbk5hbWU+ID0gbmV3IFNldChbXG4gICAgLy8gQ29yZSBzY2FsYXIgZnVuY3Rpb25zXG4gICAgJ0FCUycsICdDRUlMJywgJ0ZMT09SJywgJ1JPVU5EJywgJ1RSVU5DJywgJ1JBTkRPTScsICdSQU5ET01CTE9CJyxcbiAgICAnTE9XRVInLCAnVVBQRVInLCAnTEVOR1RIJywgJ1NVQlNUUicsICdUUklNJywgJ0xUUklNJywgJ1JUUklNJyxcbiAgICAnUkVQTEFDRScsICdJTlNUUicsICdRVU9URScsICdDSEFSJywgJ1VOSUNPREUnLCAnSEVYJywgJ1pFUk9CTE9CJyxcbiAgICAnQ09BTEVTQ0UnLCAnSUZOVUxMJywgJ05VTExJRicsICdUWVBFT0YnLCAnVE9UQUxfQ0hBTkdFUycsICdDSEFOR0VTJyxcbiAgICAnTEFTVF9JTlNFUlRfUk9XSUQnLCAnQ09OQ0FUJyxcbiAgICAvLyBBZ2dyZWdhdGUgZnVuY3Rpb25zXG4gICAgJ0NPVU5UJywgJ1NVTScsICdBVkcnLCAnTUlOJywgJ01BWCcsICdUT1RBTCcsICdHUk9VUF9DT05DQVQnLFxuICAgIC8vIERhdGUgYW5kIHRpbWUgZnVuY3Rpb25zXG4gICAgJ0RBVEUnLCAnVElNRScsICdEQVRFVElNRScsICdKVUxJQU5EQVknLCAnU1RSRlRJTUUnLFxuICAgIC8vIEpTT04xIGZ1bmN0aW9uc1xuICAgICdqc29uJywgJ2pzb25fYXJyYXknLCAnanNvbl9vYmplY3QnLCAnanNvbl9leHRyYWN0JywgJ2pzb25faW5zZXJ0JyxcbiAgICAnanNvbl9yZXBsYWNlJywgJ2pzb25fc2V0JywgJ2pzb25fcmVtb3ZlJywgJ2pzb25fdHlwZScsICdqc29uX3ZhbGlkJyxcbiAgICAnanNvbl9xdW90ZScsICdqc29uX3BhdGNoJywgJ2pzb25fYXJyYXlfbGVuZ3RoJywgJ2pzb25fZ3JvdXBfYXJyYXknLFxuICAgICdqc29uX2dyb3VwX29iamVjdCcsICdqc29uX2VhY2gnLCAnanNvbl90cmVlJyxcbiAgICAvLyBXaW5kb3cgZnVuY3Rpb25zXG4gICAgJ1JPV19OVU1CRVInLCAnUkFOSycsICdERU5TRV9SQU5LJywgJ05USUxFJyxcbiAgICAnTEFHJywgJ0xFQUQnLCAnRklSU1RfVkFMVUUnLCAnTEFTVF9WQUxVRScsICdOVEhfVkFMVUUnLFxuICAgICdDVU1FX0RJU1QnLCAnUEVSQ0VOVF9SQU5LJyxcbiAgICAvLyBGVFM1IGZ1bmN0aW9uc1xuICAgICdibTI1JywgJ2hpZ2hsaWdodCcsICdzbmlwcGV0JywgJ29mZnNldHMnLCAnbWF0Y2hpbmZvJ1xuICBdKTtcblxuICBwcml2YXRlIHN1cHBvcnRlZFVuYXJ5T3BlcmF0b3JzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgIE9wZXJhdG9yLk5PVCwgT3BlcmF0b3IuUExVUywgT3BlcmF0b3IuTUlOVVMsXG4gICAgT3BlcmF0b3IuSVNfTlVMTCwgT3BlcmF0b3IuSVNfTk9UX05VTEwsXG4gIF0pO1xuXG4gIHByaXZhdGUgaXNXaXRoUmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIHZhbGlkYXRlKHF1ZXJ5OiBWYWxpZGF0YWJsZVF1ZXJ5KTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHF1ZXJ5LmFjY2VwdCh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldCgpOiB2b2lkIHtcbiAgICBzdXBlci5yZXNldCgpO1xuICAgIHRoaXMuaXNXaXRoUmVjdXJzaXZlID0gZmFsc2U7XG4gIH1cblxuICB2aXNpdEluc2VydFF1ZXJ5KG5vZGU6IEluc2VydFF1ZXJ5KTogdm9pZCB7XG4gICAgc3VwZXIudmlzaXRJbnNlcnRRdWVyeShub2RlKTtcbiAgICAvLyBTUUxpdGUtc3BlY2lmaWMgdmFsaWRhdGlvbiAoaWYgYW55KSBjYW4gYmUgYWRkZWQgaGVyZVxuICB9XG5cbiAgdmlzaXREZWxldGVRdWVyeShub2RlOiBEZWxldGVRdWVyeSk6IHZvaWQge1xuICAgIHN1cGVyLnZpc2l0RGVsZXRlUXVlcnkobm9kZSk7XG4gICAgLy8gU1FMaXRlLXNwZWNpZmljIHZhbGlkYXRpb24gKGlmIGFueSkgY2FuIGJlIGFkZGVkIGhlcmVcbiAgfVxuXG4gIHZpc2l0VXBkYXRlUXVlcnkobm9kZTogVXBkYXRlUXVlcnkpOiB2b2lkIHtcbiAgICBzdXBlci52aXNpdFVwZGF0ZVF1ZXJ5KG5vZGUpO1xuICAgIC8vIFNRTGl0ZS1zcGVjaWZpYyB2YWxpZGF0aW9uIChpZiBhbnkpIGNhbiBiZSBhZGRlZCBoZXJlXG4gIH1cblxuICB2aXNpdFNlbGVjdFF1ZXJ5KG5vZGU6IFNlbGVjdFF1ZXJ5KTogdm9pZCB7XG4gICAgc3VwZXIudmlzaXRTZWxlY3RRdWVyeShub2RlKTtcbiAgICBpZiAobm9kZVsnX2xpbWl0J10gIT09IG51bGwgJiYgbm9kZVsnX2xpbWl0J10gIT09IHVuZGVmaW5lZCAmJiAhTnVtYmVyLmlzSW50ZWdlcihub2RlWydfbGltaXQnXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1FMaXRlIExJTUlUIG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIH1cbiAgICBpZiAobm9kZVsnX29mZnNldCddICE9PSBudWxsICYmIG5vZGVbJ19vZmZzZXQnXSAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNJbnRlZ2VyKG5vZGVbJ19vZmZzZXQnXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1FMaXRlIE9GRlNFVCBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG4gIH1cblxuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IHZvaWQge1xuICAgIGlmIChub2RlLnR5cGUgPT09IEpvaW5UeXBlLlJJR0hUIHx8IG5vZGUudHlwZSA9PT0gSm9pblR5cGUuRlVMTCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTUUxpdGUgZG9lcyBub3Qgc3VwcG9ydCAke25vZGUudHlwZX0gSk9JTmApO1xuICAgIH1cbiAgICBzdXBlci52aXNpdEpvaW5DbGF1c2Uobm9kZSk7XG4gIH1cblxuICB2aXNpdFdpdGhDbGF1c2Uobm9kZTogV2l0aCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZSZWN1cnNpdmUgPSB0aGlzLmlzV2l0aFJlY3Vyc2l2ZTtcbiAgICB0aGlzLmlzV2l0aFJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgIG5vZGUucXVlcnkuYWNjZXB0KHRoaXMpO1xuICAgIGlmICh0aGlzLmlzV2l0aFJlY3Vyc2l2ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWN1cnNpdmUgV0lUSCBjbGF1c2VzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdmFsaWRhdG9yJyk7XG4gICAgfVxuICAgIHRoaXMuaXNXaXRoUmVjdXJzaXZlID0gcHJldlJlY3Vyc2l2ZTtcbiAgICBzdXBlci52aXNpdFdpdGhDbGF1c2Uobm9kZSk7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zLmhhcyhub2RlLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uICR7bm9kZS5uYW1lfSBpcyBub3Qgc3VwcG9ydGVkIGluIFNRTGl0ZWApO1xuICAgIH1cbiAgICBzdXBlci52aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlKTtcbiAgfVxuXG4gIHZpc2l0VGFibGVGcm9tKG5vZGU6IFRhYmxlRnJvbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzV2l0aFJlY3Vyc2l2ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWN1cnNpdmUgcmVmZXJlbmNlIHRvIFdJVEggY2xhdXNlIGRldGVjdGVkJyk7XG4gICAgfVxuICAgIHN1cGVyLnZpc2l0VGFibGVGcm9tKG5vZGUpO1xuICB9XG5cbiAgdmlzaXRKc29uRWFjaEZyb20obm9kZTogSnNvbkVhY2hGcm9tKTogdm9pZCB7XG4gICAgc3VwZXIudmlzaXRKc29uRWFjaEZyb20obm9kZSk7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVW5hcnlPcGVyYXRvcnMuaGFzKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYXJ5IG9wZXJhdG9yICR7bm9kZS5vcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZCBpbiBTUUxpdGVgKTtcbiAgICB9XG4gICAgc3VwZXIudmlzaXRVbmFyeUV4cHJlc3Npb24obm9kZSk7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiB2b2lkIHtcbiAgICBzdXBlci52aXNpdEluRXhwcmVzc2lvbihub2RlKTtcbiAgfVxuXG4gIHZpc2l0Q3JlYXRlVmlydHVhbFRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnkpOiB2b2lkIHtcbiAgICBzdXBlci52aXNpdENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5KG5vZGUpO1xuXG4gICAgLy8gRlRTNS1zcGVjaWZpYyB2YWxpZGF0aW9uXG4gICAgaWYgKG5vZGUubW9kdWxlID09PSAnZnRzNScpIHtcbiAgICAgIC8vIFZhbGlkYXRlIGNvbnRlbnQgdGFibGUgcmVmZXJlbmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICAgIC8vIENvbnRlbnQgdGFibGUgbmFtZSBzaG91bGQgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG4gICAgICAgIC8vIE5vdGU6IHdlIGNhbid0IHZhbGlkYXRlIHRoYXQgdGhlIHRhYmxlIGV4aXN0cyBhdCB0aGlzIHBvaW50XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGNvbnRlbnRSb3dpZCBpcyBzcGVjaWZpZWQsIGNvbnRlbnQgbXVzdCBhbHNvIGJlIHNwZWNpZmllZFxuICAgICAgaWYgKG5vZGUub3B0aW9ucy5jb250ZW50Um93aWQgJiYgIW5vZGUub3B0aW9ucy5jb250ZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRlRTNSBjb250ZW50X3Jvd2lkIHJlcXVpcmVzIGNvbnRlbnQgb3B0aW9uIHRvIGJlIHNwZWNpZmllZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,14 +1,29 @@
1
1
  import { AliasableExpression } from "../ast/Abstractions";
2
2
  import { Alias } from "../ast/Alias";
3
+ import { AlterTableQuery } from "../ast/AlterTableQuery";
4
+ import { BetweenExpression } from "../ast/BetweenExpression";
3
5
  import { BinaryExpression } from "../ast/BinaryExpression";
4
6
  import { CaseExpression } from "../ast/CaseExpression";
7
+ import { CastExpression } from "../ast/CastExpression";
8
+ import { CollateExpression } from "../ast/CollateExpression";
9
+ import { SubqueryExpression } from "../ast/SubqueryExpression";
10
+ import { WindowExpression } from "../ast/WindowExpression";
5
11
  import { Column } from "../ast/Column";
6
12
  import { Concat } from "../ast/Concat";
13
+ import { CreateIndexQuery } from "../ast/CreateIndexQuery";
14
+ import { CreateTableQuery } from "../ast/CreateTableQuery";
15
+ import { CreateVirtualTableQuery } from "../ast/CreateVirtualTableQuery";
16
+ import { CreateViewQuery } from "../ast/CreateViewQuery";
17
+ import { DeleteQuery } from "../ast/DeleteQuery";
18
+ import { DropIndexQuery } from "../ast/DropIndexQuery";
19
+ import { DropTableQuery } from "../ast/DropTableQuery";
20
+ import { DropViewQuery } from "../ast/DropViewQuery";
7
21
  import { ExistsExpression } from "../ast/ExistsExpression";
8
22
  import { From, JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
9
23
  import { FunctionExpression } from "../ast/FunctionExpression";
10
24
  import { InExpression } from "../ast/InExpression";
11
25
  import { InsertQuery } from "../ast/InsertQuery";
26
+ import { UpdateQuery } from "../ast/UpdateQuery";
12
27
  import { Join } from "../ast/Join";
13
28
  import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
14
29
  import { OrderBy } from "../ast/OrderBy";
@@ -23,6 +38,16 @@ export declare class ParamCollectingVisitor implements SqlTreeNodeVisitor<any[]>
23
38
  private readonly params;
24
39
  constructor(keyValuePairs: Record<string, any>);
25
40
  visitInsertQuery(node: InsertQuery): any[];
41
+ visitDeleteQuery(node: DeleteQuery): any[];
42
+ visitUpdateQuery(node: UpdateQuery): any[];
43
+ visitDropTableQuery(_node: DropTableQuery): any[];
44
+ visitDropIndexQuery(_node: DropIndexQuery): any[];
45
+ visitDropViewQuery(_node: DropViewQuery): any[];
46
+ visitCreateViewQuery(node: CreateViewQuery): any[];
47
+ visitCreateIndexQuery(node: CreateIndexQuery): any[];
48
+ visitAlterTableQuery(node: AlterTableQuery): any[];
49
+ visitCreateTableQuery(node: CreateTableQuery): any[];
50
+ visitCreateVirtualTableQuery(_node: CreateVirtualTableQuery): any[];
26
51
  visitSelectQuery(node: SelectQuery): any[];
27
52
  visitTableFrom(_node: TableFrom): any[];
28
53
  visitSubqueryFrom(node: SubqueryFrom): any[];
@@ -33,6 +58,7 @@ export declare class ParamCollectingVisitor implements SqlTreeNodeVisitor<any[]>
33
58
  visitOrderBy(node: OrderBy): any[];
34
59
  visitWithClause(node: With): any[];
35
60
  visitBinaryExpression(node: BinaryExpression): any[];
61
+ visitBetweenExpression(node: BetweenExpression): any[];
36
62
  visitUnaryExpression(node: UnaryExpression): any[];
37
63
  visitInExpression(node: InExpression): any[];
38
64
  visitConcat(node: Concat): any[];
@@ -43,4 +69,8 @@ export declare class ParamCollectingVisitor implements SqlTreeNodeVisitor<any[]>
43
69
  visitNumberLiteral(_node: NumberLiteral): any[];
44
70
  visitNullLiteral(_node: NullLiteral): any[];
45
71
  visitExistsExpression(node: ExistsExpression): any[];
72
+ visitCastExpression(node: CastExpression): any[];
73
+ visitCollateExpression(node: CollateExpression): any[];
74
+ visitSubqueryExpression(node: SubqueryExpression): any[];
75
+ visitWindowExpression(node: WindowExpression): any[];
46
76
  }
@@ -11,7 +11,85 @@ class ParamCollectingVisitor {
11
11
  this.keyValuePairs = keyValuePairs;
12
12
  }
13
13
  visitInsertQuery(node) {
14
- node['_values'].forEach(v => v.accept(this));
14
+ if (node['_fromSelect']) {
15
+ node['_fromSelect'].accept(this);
16
+ }
17
+ else {
18
+ node['_values'].forEach(v => v.accept(this));
19
+ }
20
+ // Collect params from ON CONFLICT clause
21
+ node['_doUpdateSets'].forEach(s => s.value.accept(this));
22
+ if (node['_onConflictWhere']) {
23
+ node['_onConflictWhere'].accept(this);
24
+ }
25
+ node['_returning'].forEach(r => r.accept(this));
26
+ return this.params;
27
+ }
28
+ visitDeleteQuery(node) {
29
+ if (node['_where']) {
30
+ node['_where'].accept(this);
31
+ }
32
+ node['_returning'].forEach(r => r.accept(this));
33
+ return this.params;
34
+ }
35
+ visitUpdateQuery(node) {
36
+ node['_set'].forEach(s => s.value.accept(this));
37
+ if (node['_where']) {
38
+ node['_where'].accept(this);
39
+ }
40
+ node['_returning'].forEach(r => r.accept(this));
41
+ return this.params;
42
+ }
43
+ visitDropTableQuery(_node) {
44
+ // DROP TABLE has no parameters
45
+ return this.params;
46
+ }
47
+ visitDropIndexQuery(_node) {
48
+ // DROP INDEX has no parameters
49
+ return this.params;
50
+ }
51
+ visitDropViewQuery(_node) {
52
+ // DROP VIEW has no parameters
53
+ return this.params;
54
+ }
55
+ visitCreateViewQuery(node) {
56
+ // Collect params from the SELECT query
57
+ if (node.selectQuery) {
58
+ node.selectQuery.accept(this);
59
+ }
60
+ return this.params;
61
+ }
62
+ visitCreateIndexQuery(node) {
63
+ // Collect params from WHERE expression
64
+ if (node.whereExpression) {
65
+ node.whereExpression.accept(this);
66
+ }
67
+ return this.params;
68
+ }
69
+ visitAlterTableQuery(node) {
70
+ // Collect params from ADD COLUMN CHECK constraint
71
+ const op = node.operation;
72
+ if (op && op.type === 'ADD_COLUMN' && op.column.constraints.check) {
73
+ op.column.constraints.check.accept(this);
74
+ }
75
+ return this.params;
76
+ }
77
+ visitCreateTableQuery(node) {
78
+ // Collect params from CHECK constraints
79
+ for (const col of node.columns) {
80
+ if (col.constraints.check) {
81
+ col.constraints.check.accept(this);
82
+ }
83
+ }
84
+ for (const constraint of node.tableConstraints) {
85
+ if (constraint.check) {
86
+ constraint.check.accept(this);
87
+ }
88
+ }
89
+ return this.params;
90
+ }
91
+ visitCreateVirtualTableQuery(_node) {
92
+ // CREATE VIRTUAL TABLE has no parameters
15
93
  return this.params;
16
94
  }
17
95
  visitSelectQuery(node) {
@@ -26,6 +104,8 @@ class ParamCollectingVisitor {
26
104
  node['_having'].accept(this);
27
105
  }
28
106
  node['_union'].forEach(u => u.accept(this));
107
+ node['_intersect'].forEach(i => i.accept(this));
108
+ node['_except'].forEach(e => e.accept(this));
29
109
  node['_orderBy'].forEach(o => o.accept(this));
30
110
  return this.params;
31
111
  }
@@ -67,6 +147,12 @@ class ParamCollectingVisitor {
67
147
  node.right.accept(this);
68
148
  return this.params;
69
149
  }
150
+ visitBetweenExpression(node) {
151
+ node.operand.accept(this);
152
+ node.low.accept(this);
153
+ node.high.accept(this);
154
+ return this.params;
155
+ }
70
156
  visitUnaryExpression(node) {
71
157
  node.operand.accept(this);
72
158
  return this.params;
@@ -124,6 +210,27 @@ class ParamCollectingVisitor {
124
210
  node.subquery.accept(this);
125
211
  return this.params;
126
212
  }
213
+ visitCastExpression(node) {
214
+ node.expression.accept(this);
215
+ return this.params;
216
+ }
217
+ visitCollateExpression(node) {
218
+ node.expression.accept(this);
219
+ return this.params;
220
+ }
221
+ visitSubqueryExpression(node) {
222
+ node.subquery.accept(this);
223
+ return this.params;
224
+ }
225
+ visitWindowExpression(node) {
226
+ // Collect params from the underlying function
227
+ node.function.accept(this);
228
+ // Collect params from partition by columns
229
+ node.windowSpec.partitionByColumns.forEach(c => c.accept(this));
230
+ // Collect params from order by clauses
231
+ node.windowSpec.orderByColumns.forEach(o => o.accept(this));
232
+ return this.params;
233
+ }
127
234
  }
128
235
  exports.ParamCollectingVisitor = ParamCollectingVisitor;
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYW1Db2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9QYXJhbUNvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFjQSxvREFBaUQ7QUFHakQsNkRBQXFIO0FBRXJILE1BQWEsc0JBQXNCO0lBUWpDLFlBQVksYUFBa0M7UUFOcEMsNEJBQXVCLEdBQUcsSUFBSSxtREFBOEIsRUFBUyxDQUFDO1FBQ3RFLHVCQUFrQixHQUFHLElBQUksOENBQXlCLEVBQVMsQ0FBQztRQUdyRCxXQUFNLEdBQVUsRUFBRSxDQUFDO1FBR2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFpQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxD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Q0Y7QUFoSkQsd0RBZ0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWxpYXNhYmxlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQWJzdHJhY3Rpb25zXCI7XG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuLi9hc3QvQWxpYXNcIjtcbmltcG9ydCB7IEJpbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JpbmFyeUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc2VFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXNlRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgSm9pbiB9IGZyb20gXCIuLi9hc3QvSm9pblwiO1xuaW1wb3J0IHsgTnVsbExpdGVyYWwsIE51bWJlckxpdGVyYWwsIFBhcmFtLCBTdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4uL2FzdC9MaXRlcmFsc1wiO1xuaW1wb3J0IHsgT3JkZXJCeSB9IGZyb20gXCIuLi9hc3QvT3JkZXJCeVwiO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnkgfSBmcm9tIFwiLi4vYXN0L1NlbGVjdFF1ZXJ5XCI7XG5pbXBvcnQgeyBVbmFyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1VuYXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2l0aCB9IGZyb20gXCIuLi9hc3QvV2l0aFwiO1xuaW1wb3J0IHsgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvciwgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yLCBTcWxUcmVlTm9kZVZpc2l0b3IgfSBmcm9tIFwiLi9TcWxUcmVlTm9kZVZpc2l0b3JcIjtcblxuZXhwb3J0IGNsYXNzIFBhcmFtQ29sbGVjdGluZ1Zpc2l0b3IgaW1wbGVtZW50cyBTcWxUcmVlTm9kZVZpc2l0b3I8YW55W10+IHtcblxuICBwcm90ZWN0ZWQgZnJvbUxpa2VBbmRKb2luQWNjZXB0b3IgPSBuZXcgRnJvbUxpa2VBbmRKb2luVmlzaXRvckFjY2VwdG9yPGFueVtdPigpO1xuICBwcm90ZWN0ZWQgY29sdW1uTGlrZUFjY2VwdG9yID0gbmV3IENvbHVtbkxpa2VWaXNpdG9yQWNjZXB0b3I8YW55W10+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBrZXlWYWx1ZVBhaXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihrZXlWYWx1ZVBhaXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgdGhpcy5rZXlWYWx1ZVBhaXJzID0ga2V5VmFsdWVQYWlycztcbiAgfVxuXG4gIHZpc2l0SW5zZXJ0UXVlcnkobm9kZTogSW5zZXJ0UXVlcnkpOiBhbnlbXSB7XG4gICAgbm9kZVsnX3ZhbHVlcyddLmZvckVhY2godiA9PiB2LmFjY2VwdCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRTZWxlY3RRdWVyeShub2RlOiBTZWxlY3RRdWVyeSk6IGFueVtdIHtcbiAgICBub2RlWydfd2l0aCddLmZvckVhY2godyA9PiB3LmFjY2VwdCh0aGlzKSk7XG4gICAgbm9kZVsnX2Zyb21zQW5kSm9pbnMnXS5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5mcm9tTGlrZUFuZEpvaW5BY2NlcHRvci5hY2NlcHQodGhpcywgaXRlbSkpO1xuICAgIG5vZGVbJ19jb2x1bW5zJ10uZm9yRWFjaChjID0+IHRoaXMuY29sdW1uTGlrZUFjY2VwdG9yLmFjY2VwdCh0aGlzLCBjKSk7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIG5vZGVbJ19ncm91cEJ5J10uZm9yRWFjaChjID0+IGMuYWNjZXB0KHRoaXMpKTtcbiAgICBpZiAobm9kZVsnX2hhdmluZyddKSB7XG4gICAgICBub2RlWydfaGF2aW5nJ10uYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICBub2RlWydfdW5pb24nXS5mb3JFYWNoKHUgPT4gdS5hY2NlcHQodGhpcykpO1xuICAgIG5vZGVbJ19vcmRlckJ5J10uZm9yRWFjaChvID0+IG8uYWNjZXB0KHRoaXMpKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFRhYmxlRnJvbShfbm9kZTogVGFibGVGcm9tKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0U3VicXVlcnlGcm9tKG5vZGU6IFN1YnF1ZXJ5RnJvbSk6IGFueVtdIHtcbiAgICBub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEpzb25FYWNoRnJvbShub2RlOiBKc29uRWFjaEZyb20pOiBhbnlbXSB7XG4gICAgbm9kZS5qc29uRXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgaWYgKG5vZGUuanNvblBhdGgpIHtcbiAgICAgIG5vZGUuanNvblBhdGguYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENvbHVtbihfbm9kZTogQ29sdW1uKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0QWxpYXMobm9kZTogQWxpYXM8RnJvbXxBbGlhc2FibGVFeHByZXNzaW9uPik6IGFueVtdIHtcbiAgICBub2RlLnJlZmVyZW50LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEpvaW5DbGF1c2Uobm9kZTogSm9pbik6IGFueVtdIHtcbiAgICBub2RlLm9uLmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdE9yZGVyQnkobm9kZTogT3JkZXJCeSk6IGFueVtdIHtcbiAgICBub2RlLmNvbHVtbi5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRXaXRoQ2xhdXNlKG5vZGU6IFdpdGgpOiBhbnlbXSB7XG4gICAgbm9kZS5xdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRCaW5hcnlFeHByZXNzaW9uKG5vZGU6IEJpbmFyeUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5sZWZ0LmFjY2VwdCh0aGlzKTtcbiAgICBub2RlLnJpZ2h0LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFVuYXJ5RXhwcmVzc2lvbihub2RlOiBVbmFyeUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEluRXhwcmVzc2lvbihub2RlOiBJbkV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5sZWZ0LmZvckVhY2gobCA9PiBsLmFjY2VwdCh0aGlzKSk7XG4gICAgaWYgKG5vZGUudmFsdWVzIGluc3RhbmNlb2YgU2VsZWN0UXVlcnkpIHtcbiAgICAgIG5vZGUudmFsdWVzLmFjY2VwdCh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS52YWx1ZXMuZm9yRWFjaChzZXQgPT4gc2V0LmZvckVhY2godiA9PiB2LmFjY2VwdCh0aGlzKSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENvbmNhdChub2RlOiBDb25jYXQpOiBhbnlbXSB7XG4gICAgbm9kZS5leHByZXNzaW9ucy5mb3JFYWNoKGUgPT4gZS5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q2FzZUV4cHJlc3Npb24obm9kZTogQ2FzZUV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5jYXNlcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgYy53aGVuLmFjY2VwdCh0aGlzKTtcbiAgICAgIGMudGhlbi5hY2NlcHQodGhpcyk7XG4gICAgfSk7XG4gICAgaWYgKG5vZGUuZWxzZSkge1xuICAgICAgbm9kZS5lbHNlLmFjY2VwdCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24obm9kZTogRnVuY3Rpb25FeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUuYXJncy5mb3JFYWNoKGEgPT4gYS5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0UGFyYW1FeHByZXNzaW9uKG5vZGU6IFBhcmFtKTogYW55W10ge1xuICAgIGlmIChub2RlLnBhcmFtTmFtZSkge1xuICAgICAgaWYgKCF0aGlzLmtleVZhbHVlUGFpcnMgfHwgdHlwZW9mIHRoaXMua2V5VmFsdWVQYWlycyAhPT0gJ29iamVjdCcgfHwgIShub2RlLnBhcmFtTmFtZSBpbiB0aGlzLmtleVZhbHVlUGFpcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHBhcmFtZXRlcjogJHtub2RlLnBhcmFtTmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFyYW1zLnB1c2godGhpcy5rZXlWYWx1ZVBhaXJzW25vZGUucGFyYW1OYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1zLnB1c2godW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRTdHJpbmdMaXRlcmFsKF9ub2RlOiBTdHJpbmdMaXRlcmFsKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0TnVtYmVyTGl0ZXJhbChfbm9kZTogTnVtYmVyTGl0ZXJhbCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdE51bGxMaXRlcmFsKF9ub2RlOiBOdWxsTGl0ZXJhbCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEV4aXN0c0V4cHJlc3Npb24obm9kZTogRXhpc3RzRXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLnN1YnF1ZXJ5LmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cbn1cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYW1Db2xsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzaXRvci9QYXJhbUNvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2QkEsb0RBQWlEO0FBR2pELDZEQUFxSDtBQUVySCxNQUFhLHNCQUFzQjtJQVFqQyxZQUFZLGFBQWtDO1FBTnBDLDRCQUF1QixHQUFHLElBQUksbURBQThCLEVBQVMsQ0FBQztRQUN0RSx1QkFBa0IsR0FBRyxJQUFJLDhDQUF5QixFQUFTLENBQUM7UUFHckQsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQUdsQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENB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LElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBelFELHdEQXlRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFsaWFzYWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Fic3RyYWN0aW9uc1wiO1xuaW1wb3J0IHsgQWxpYXMgfSBmcm9tIFwiLi4vYXN0L0FsaWFzXCI7XG5pbXBvcnQgeyBBbHRlclRhYmxlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L0FsdGVyVGFibGVRdWVyeVwiO1xuaW1wb3J0IHsgQmV0d2VlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0JldHdlZW5FeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBCaW5hcnlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9CaW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBDYXNlRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvQ2FzZUV4cHJlc3Npb25cIjtcbmltcG9ydCB7IENhc3RFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9DYXN0RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sbGF0ZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0NvbGxhdGVFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBTdWJxdWVyeUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L1N1YnF1ZXJ5RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgV2luZG93RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvV2luZG93RXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgQ29sdW1uIH0gZnJvbSBcIi4uL2FzdC9Db2x1bW5cIjtcbmltcG9ydCB7IENvbmNhdCB9IGZyb20gXCIuLi9hc3QvQ29uY2F0XCI7XG5pbXBvcnQgeyBDcmVhdGVJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVJbmRleFF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZVF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9DcmVhdGVUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvQ3JlYXRlVmlydHVhbFRhYmxlUXVlcnlcIjtcbmltcG9ydCB7IENyZWF0ZVZpZXdRdWVyeSB9IGZyb20gXCIuLi9hc3QvQ3JlYXRlVmlld1F1ZXJ5XCI7XG5pbXBvcnQgeyBEZWxldGVRdWVyeSB9IGZyb20gXCIuLi9hc3QvRGVsZXRlUXVlcnlcIjtcbmltcG9ydCB7IERyb3BJbmRleFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9Ecm9wSW5kZXhRdWVyeVwiO1xuaW1wb3J0IHsgRHJvcFRhYmxlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L0Ryb3BUYWJsZVF1ZXJ5XCI7XG5pbXBvcnQgeyBEcm9wVmlld1F1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9Ecm9wVmlld1F1ZXJ5XCI7XG5pbXBvcnQgeyBFeGlzdHNFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9FeGlzdHNFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBGcm9tLCBKc29uRWFjaEZyb20sIFN1YnF1ZXJ5RnJvbSwgVGFibGVGcm9tIH0gZnJvbSBcIi4uL2FzdC9Gcm9tXCI7XG5pbXBvcnQgeyBGdW5jdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vYXN0L0Z1bmN0aW9uRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgSW5FeHByZXNzaW9uIH0gZnJvbSBcIi4uL2FzdC9JbkV4cHJlc3Npb25cIjtcbmltcG9ydCB7IEluc2VydFF1ZXJ5IH0gZnJvbSBcIi4uL2FzdC9JbnNlcnRRdWVyeVwiO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnkgfSBmcm9tIFwiLi4vYXN0L1VwZGF0ZVF1ZXJ5XCI7XG5pbXBvcnQgeyBKb2luIH0gZnJvbSBcIi4uL2FzdC9Kb2luXCI7XG5pbXBvcnQgeyBOdWxsTGl0ZXJhbCwgTnVtYmVyTGl0ZXJhbCwgUGFyYW0sIFN0cmluZ0xpdGVyYWwgfSBmcm9tIFwiLi4vYXN0L0xpdGVyYWxzXCI7XG5pbXBvcnQgeyBPcmRlckJ5IH0gZnJvbSBcIi4uL2FzdC9PcmRlckJ5XCI7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeSB9IGZyb20gXCIuLi9hc3QvU2VsZWN0UXVlcnlcIjtcbmltcG9ydCB7IFVuYXJ5RXhwcmVzc2lvbiB9IGZyb20gXCIuLi9hc3QvVW5hcnlFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBXaXRoIH0gZnJvbSBcIi4uL2FzdC9XaXRoXCI7XG5pbXBvcnQgeyBDb2x1bW5MaWtlVmlzaXRvckFjY2VwdG9yLCBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3IsIFNxbFRyZWVOb2RlVmlzaXRvciB9IGZyb20gXCIuL1NxbFRyZWVOb2RlVmlzaXRvclwiO1xuXG5leHBvcnQgY2xhc3MgUGFyYW1Db2xsZWN0aW5nVmlzaXRvciBpbXBsZW1lbnRzIFNxbFRyZWVOb2RlVmlzaXRvcjxhbnlbXT4ge1xuXG4gIHByb3RlY3RlZCBmcm9tTGlrZUFuZEpvaW5BY2NlcHRvciA9IG5ldyBGcm9tTGlrZUFuZEpvaW5WaXNpdG9yQWNjZXB0b3I8YW55W10+KCk7XG4gIHByb3RlY3RlZCBjb2x1bW5MaWtlQWNjZXB0b3IgPSBuZXcgQ29sdW1uTGlrZVZpc2l0b3JBY2NlcHRvcjxhbnlbXT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGtleVZhbHVlUGFpcnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGtleVZhbHVlUGFpcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0aGlzLmtleVZhbHVlUGFpcnMgPSBrZXlWYWx1ZVBhaXJzO1xuICB9XG5cbiAgdmlzaXRJbnNlcnRRdWVyeShub2RlOiBJbnNlcnRRdWVyeSk6IGFueVtdIHtcbiAgICBpZiAobm9kZVsnX2Zyb21TZWxlY3QnXSkge1xuICAgICAgbm9kZVsnX2Zyb21TZWxlY3QnXS5hY2NlcHQodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVbJ192YWx1ZXMnXS5mb3JFYWNoKHYgPT4gdi5hY2NlcHQodGhpcykpO1xuICAgIH1cbiAgICAvLyBDb2xsZWN0IHBhcmFtcyBmcm9tIE9OIENPTkZMSUNUIGNsYXVzZVxuICAgIG5vZGVbJ19kb1VwZGF0ZVNldHMnXS5mb3JFYWNoKHMgPT4gcy52YWx1ZS5hY2NlcHQodGhpcykpO1xuICAgIGlmIChub2RlWydfb25Db25mbGljdFdoZXJlJ10pIHtcbiAgICAgIG5vZGVbJ19vbkNvbmZsaWN0V2hlcmUnXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIG5vZGVbJ19yZXR1cm5pbmcnXS5mb3JFYWNoKHIgPT4gci5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0RGVsZXRlUXVlcnkobm9kZTogRGVsZXRlUXVlcnkpOiBhbnlbXSB7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIG5vZGVbJ19yZXR1cm5pbmcnXS5mb3JFYWNoKHIgPT4gci5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0VXBkYXRlUXVlcnkobm9kZTogVXBkYXRlUXVlcnkpOiBhbnlbXSB7XG4gICAgbm9kZVsnX3NldCddLmZvckVhY2gocyA9PiBzLnZhbHVlLmFjY2VwdCh0aGlzKSk7XG4gICAgaWYgKG5vZGVbJ193aGVyZSddKSB7XG4gICAgICBub2RlWydfd2hlcmUnXS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIG5vZGVbJ19yZXR1cm5pbmcnXS5mb3JFYWNoKHIgPT4gci5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0RHJvcFRhYmxlUXVlcnkoX25vZGU6IERyb3BUYWJsZVF1ZXJ5KTogYW55W10ge1xuICAgIC8vIERST1AgVEFCTEUgaGFzIG5vIHBhcmFtZXRlcnNcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdERyb3BJbmRleFF1ZXJ5KF9ub2RlOiBEcm9wSW5kZXhRdWVyeSk6IGFueVtdIHtcbiAgICAvLyBEUk9QIElOREVYIGhhcyBubyBwYXJhbWV0ZXJzXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXREcm9wVmlld1F1ZXJ5KF9ub2RlOiBEcm9wVmlld1F1ZXJ5KTogYW55W10ge1xuICAgIC8vIERST1AgVklFVyBoYXMgbm8gcGFyYW1ldGVyc1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q3JlYXRlVmlld1F1ZXJ5KG5vZGU6IENyZWF0ZVZpZXdRdWVyeSk6IGFueVtdIHtcbiAgICAvLyBDb2xsZWN0IHBhcmFtcyBmcm9tIHRoZSBTRUxFQ1QgcXVlcnlcbiAgICBpZiAobm9kZS5zZWxlY3RRdWVyeSkge1xuICAgICAgbm9kZS5zZWxlY3RRdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q3JlYXRlSW5kZXhRdWVyeShub2RlOiBDcmVhdGVJbmRleFF1ZXJ5KTogYW55W10ge1xuICAgIC8vIENvbGxlY3QgcGFyYW1zIGZyb20gV0hFUkUgZXhwcmVzc2lvblxuICAgIGlmIChub2RlLndoZXJlRXhwcmVzc2lvbikge1xuICAgICAgbm9kZS53aGVyZUV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEFsdGVyVGFibGVRdWVyeShub2RlOiBBbHRlclRhYmxlUXVlcnkpOiBhbnlbXSB7XG4gICAgLy8gQ29sbGVjdCBwYXJhbXMgZnJvbSBBREQgQ09MVU1OIENIRUNLIGNvbnN0cmFpbnRcbiAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgIGlmIChvcCAmJiBvcC50eXBlID09PSAnQUREX0NPTFVNTicgJiYgb3AuY29sdW1uLmNvbnN0cmFpbnRzLmNoZWNrKSB7XG4gICAgICBvcC5jb2x1bW4uY29uc3RyYWludHMuY2hlY2suYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENyZWF0ZVRhYmxlUXVlcnkobm9kZTogQ3JlYXRlVGFibGVRdWVyeSk6IGFueVtdIHtcbiAgICAvLyBDb2xsZWN0IHBhcmFtcyBmcm9tIENIRUNLIGNvbnN0cmFpbnRzXG4gICAgZm9yIChjb25zdCBjb2wgb2Ygbm9kZS5jb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmNvbnN0cmFpbnRzLmNoZWNrKSB7XG4gICAgICAgIGNvbC5jb25zdHJhaW50cy5jaGVjay5hY2NlcHQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgY29uc3RyYWludCBvZiBub2RlLnRhYmxlQ29uc3RyYWludHMpIHtcbiAgICAgIGlmIChjb25zdHJhaW50LmNoZWNrKSB7XG4gICAgICAgIGNvbnN0cmFpbnQuY2hlY2suYWNjZXB0KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENyZWF0ZVZpcnR1YWxUYWJsZVF1ZXJ5KF9ub2RlOiBDcmVhdGVWaXJ0dWFsVGFibGVRdWVyeSk6IGFueVtdIHtcbiAgICAvLyBDUkVBVEUgVklSVFVBTCBUQUJMRSBoYXMgbm8gcGFyYW1ldGVyc1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0U2VsZWN0UXVlcnkobm9kZTogU2VsZWN0UXVlcnkpOiBhbnlbXSB7XG4gICAgbm9kZVsnX3dpdGgnXS5mb3JFYWNoKHcgPT4gdy5hY2NlcHQodGhpcykpO1xuICAgIG5vZGVbJ19mcm9tc0FuZEpvaW5zJ10uZm9yRWFjaChpdGVtID0+IHRoaXMuZnJvbUxpa2VBbmRKb2luQWNjZXB0b3IuYWNjZXB0KHRoaXMsIGl0ZW0pKTtcbiAgICBub2RlWydfY29sdW1ucyddLmZvckVhY2goYyA9PiB0aGlzLmNvbHVtbkxpa2VBY2NlcHRvci5hY2NlcHQodGhpcywgYykpO1xuICAgIGlmIChub2RlWydfd2hlcmUnXSkge1xuICAgICAgbm9kZVsnX3doZXJlJ10uYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICBub2RlWydfZ3JvdXBCeSddLmZvckVhY2goYyA9PiBjLmFjY2VwdCh0aGlzKSk7XG4gICAgaWYgKG5vZGVbJ19oYXZpbmcnXSkge1xuICAgICAgbm9kZVsnX2hhdmluZyddLmFjY2VwdCh0aGlzKTtcbiAgICB9XG4gICAgbm9kZVsnX3VuaW9uJ10uZm9yRWFjaCh1ID0+IHUuYWNjZXB0KHRoaXMpKTtcbiAgICBub2RlWydfaW50ZXJzZWN0J10uZm9yRWFjaChpID0+IGkuYWNjZXB0KHRoaXMpKTtcbiAgICBub2RlWydfZXhjZXB0J10uZm9yRWFjaChlID0+IGUuYWNjZXB0KHRoaXMpKTtcbiAgICBub2RlWydfb3JkZXJCeSddLmZvckVhY2gobyA9PiBvLmFjY2VwdCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRUYWJsZUZyb20oX25vZGU6IFRhYmxlRnJvbSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFN1YnF1ZXJ5RnJvbShub2RlOiBTdWJxdWVyeUZyb20pOiBhbnlbXSB7XG4gICAgbm9kZS5zdWJxdWVyeS5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRKc29uRWFjaEZyb20obm9kZTogSnNvbkVhY2hGcm9tKTogYW55W10ge1xuICAgIG5vZGUuanNvbkV4cHJlc3Npb24uYWNjZXB0KHRoaXMpO1xuICAgIGlmIChub2RlLmpzb25QYXRoKSB7XG4gICAgICBub2RlLmpzb25QYXRoLmFjY2VwdCh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRDb2x1bW4oX25vZGU6IENvbHVtbik6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEFsaWFzKG5vZGU6IEFsaWFzPEZyb218QWxpYXNhYmxlRXhwcmVzc2lvbj4pOiBhbnlbXSB7XG4gICAgbm9kZS5yZWZlcmVudC5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRKb2luQ2xhdXNlKG5vZGU6IEpvaW4pOiBhbnlbXSB7XG4gICAgbm9kZS5vbi5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRPcmRlckJ5KG5vZGU6IE9yZGVyQnkpOiBhbnlbXSB7XG4gICAgbm9kZS5jb2x1bW4uYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0V2l0aENsYXVzZShub2RlOiBXaXRoKTogYW55W10ge1xuICAgIG5vZGUucXVlcnkuYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0QmluYXJ5RXhwcmVzc2lvbihub2RlOiBCaW5hcnlFeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUubGVmdC5hY2NlcHQodGhpcyk7XG4gICAgbm9kZS5yaWdodC5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRCZXR3ZWVuRXhwcmVzc2lvbihub2RlOiBCZXR3ZWVuRXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpO1xuICAgIG5vZGUubG93LmFjY2VwdCh0aGlzKTtcbiAgICBub2RlLmhpZ2guYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0VW5hcnlFeHByZXNzaW9uKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0SW5FeHByZXNzaW9uKG5vZGU6IEluRXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLmxlZnQuZm9yRWFjaChsID0+IGwuYWNjZXB0KHRoaXMpKTtcbiAgICBpZiAobm9kZS52YWx1ZXMgaW5zdGFuY2VvZiBTZWxlY3RRdWVyeSkge1xuICAgICAgbm9kZS52YWx1ZXMuYWNjZXB0KHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnZhbHVlcy5mb3JFYWNoKHNldCA9PiBzZXQuZm9yRWFjaCh2ID0+IHYuYWNjZXB0KHRoaXMpKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q29uY2F0KG5vZGU6IENvbmNhdCk6IGFueVtdIHtcbiAgICBub2RlLmV4cHJlc3Npb25zLmZvckVhY2goZSA9PiBlLmFjY2VwdCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRDYXNlRXhwcmVzc2lvbihub2RlOiBDYXNlRXhwcmVzc2lvbik6IGFueVtdIHtcbiAgICBub2RlLmNhc2VzLmZvckVhY2goYyA9PiB7XG4gICAgICBjLndoZW4uYWNjZXB0KHRoaXMpO1xuICAgICAgYy50aGVuLmFjY2VwdCh0aGlzKTtcbiAgICB9KTtcbiAgICBpZiAobm9kZS5lbHNlKSB7XG4gICAgICBub2RlLmVsc2UuYWNjZXB0KHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihub2RlOiBGdW5jdGlvbkV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5hcmdzLmZvckVhY2goYSA9PiBhLmFjY2VwdCh0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRQYXJhbUV4cHJlc3Npb24obm9kZTogUGFyYW0pOiBhbnlbXSB7XG4gICAgaWYgKG5vZGUucGFyYW1OYW1lKSB7XG4gICAgICBpZiAoIXRoaXMua2V5VmFsdWVQYWlycyB8fCB0eXBlb2YgdGhpcy5rZXlWYWx1ZVBhaXJzICE9PSAnb2JqZWN0JyB8fCAhKG5vZGUucGFyYW1OYW1lIGluIHRoaXMua2V5VmFsdWVQYWlycykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB2YWx1ZSBwcm92aWRlZCBmb3IgcGFyYW1ldGVyOiAke25vZGUucGFyYW1OYW1lfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJhbXMucHVzaCh0aGlzLmtleVZhbHVlUGFpcnNbbm9kZS5wYXJhbU5hbWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJhbXMucHVzaCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdFN0cmluZ0xpdGVyYWwoX25vZGU6IFN0cmluZ0xpdGVyYWwpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXROdW1iZXJMaXRlcmFsKF9ub2RlOiBOdW1iZXJMaXRlcmFsKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0TnVsbExpdGVyYWwoX25vZGU6IE51bGxMaXRlcmFsKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0RXhpc3RzRXhwcmVzc2lvbihub2RlOiBFeGlzdHNFeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0Q2FzdEV4cHJlc3Npb24obm9kZTogQ2FzdEV4cHJlc3Npb24pOiBhbnlbXSB7XG4gICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cblxuICB2aXNpdENvbGxhdGVFeHByZXNzaW9uKG5vZGU6IENvbGxhdGVFeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUuZXhwcmVzc2lvbi5hY2NlcHQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zO1xuICB9XG5cbiAgdmlzaXRTdWJxdWVyeUV4cHJlc3Npb24obm9kZTogU3VicXVlcnlFeHByZXNzaW9uKTogYW55W10ge1xuICAgIG5vZGUuc3VicXVlcnkuYWNjZXB0KHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxuXG4gIHZpc2l0V2luZG93RXhwcmVzc2lvbihub2RlOiBXaW5kb3dFeHByZXNzaW9uKTogYW55W10ge1xuICAgIC8vIENvbGxlY3QgcGFyYW1zIGZyb20gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25cbiAgICBub2RlLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKTtcbiAgICAvLyBDb2xsZWN0IHBhcmFtcyBmcm9tIHBhcnRpdGlvbiBieSBjb2x1bW5zXG4gICAgbm9kZS53aW5kb3dTcGVjLnBhcnRpdGlvbkJ5Q29sdW1ucy5mb3JFYWNoKGMgPT4gYy5hY2NlcHQodGhpcykpO1xuICAgIC8vIENvbGxlY3QgcGFyYW1zIGZyb20gb3JkZXIgYnkgY2xhdXNlc1xuICAgIG5vZGUud2luZG93U3BlYy5vcmRlckJ5Q29sdW1ucy5mb3JFYWNoKG8gPT4gby5hY2NlcHQodGhpcykpO1xuICAgIHJldHVybiB0aGlzLnBhcmFtcztcbiAgfVxufVxuIl19
@@ -1,14 +1,29 @@
1
1
  import { Aliasable, SqlTreeNode } from "../ast/Abstractions";
2
2
  import { Alias } from "../ast/Alias";
3
+ import { AlterTableQuery } from "../ast/AlterTableQuery";
4
+ import { BetweenExpression } from "../ast/BetweenExpression";
3
5
  import { BinaryExpression } from "../ast/BinaryExpression";
4
6
  import { CaseExpression } from "../ast/CaseExpression";
7
+ import { CastExpression } from "../ast/CastExpression";
8
+ import { CollateExpression } from "../ast/CollateExpression";
9
+ import { SubqueryExpression } from "../ast/SubqueryExpression";
10
+ import { WindowExpression } from "../ast/WindowExpression";
5
11
  import { Column } from "../ast/Column";
6
12
  import { Concat } from "../ast/Concat";
13
+ import { CreateIndexQuery } from "../ast/CreateIndexQuery";
14
+ import { CreateTableQuery } from "../ast/CreateTableQuery";
15
+ import { CreateVirtualTableQuery } from "../ast/CreateVirtualTableQuery";
16
+ import { CreateViewQuery } from "../ast/CreateViewQuery";
17
+ import { DeleteQuery } from "../ast/DeleteQuery";
18
+ import { DropIndexQuery } from "../ast/DropIndexQuery";
19
+ import { DropTableQuery } from "../ast/DropTableQuery";
20
+ import { DropViewQuery } from "../ast/DropViewQuery";
7
21
  import { ExistsExpression } from "../ast/ExistsExpression";
8
22
  import { JsonEachFrom, SubqueryFrom, TableFrom } from "../ast/From";
9
23
  import { FunctionExpression } from "../ast/FunctionExpression";
10
24
  import { InExpression } from "../ast/InExpression";
11
25
  import { InsertQuery } from "../ast/InsertQuery";
26
+ import { UpdateQuery } from "../ast/UpdateQuery";
12
27
  import { Join } from "../ast/Join";
13
28
  import { NullLiteral, NumberLiteral, Param, StringLiteral } from "../ast/Literals";
14
29
  import { OrderBy } from "../ast/OrderBy";
@@ -23,6 +38,16 @@ export declare class QueryIdentityTransformer implements SqlTreeNodeTransformer
23
38
  protected flatList2D(results: (SqlTreeNode | SqlTreeNode[])[][]): SqlTreeNode[][];
24
39
  visitSelectQuery(node: SelectQuery): SqlTreeNode | SqlTreeNode[];
25
40
  visitInsertQuery(node: InsertQuery): SqlTreeNode | SqlTreeNode[];
41
+ visitDeleteQuery(node: DeleteQuery): SqlTreeNode | SqlTreeNode[];
42
+ visitUpdateQuery(node: UpdateQuery): SqlTreeNode | SqlTreeNode[];
43
+ visitDropTableQuery(node: DropTableQuery): SqlTreeNode | SqlTreeNode[];
44
+ visitDropIndexQuery(node: DropIndexQuery): SqlTreeNode | SqlTreeNode[];
45
+ visitDropViewQuery(node: DropViewQuery): SqlTreeNode | SqlTreeNode[];
46
+ visitCreateViewQuery(node: CreateViewQuery): SqlTreeNode | SqlTreeNode[];
47
+ visitCreateIndexQuery(node: CreateIndexQuery): SqlTreeNode | SqlTreeNode[];
48
+ visitAlterTableQuery(node: AlterTableQuery): SqlTreeNode | SqlTreeNode[];
49
+ visitCreateTableQuery(node: CreateTableQuery): SqlTreeNode | SqlTreeNode[];
50
+ visitCreateVirtualTableQuery(node: CreateVirtualTableQuery): SqlTreeNode | SqlTreeNode[];
26
51
  visitTableFrom(node: TableFrom): SqlTreeNode | SqlTreeNode[];
27
52
  visitSubqueryFrom(node: SubqueryFrom): SqlTreeNode | SqlTreeNode[];
28
53
  visitJsonEachFrom(node: JsonEachFrom): SqlTreeNode | SqlTreeNode[];
@@ -32,6 +57,7 @@ export declare class QueryIdentityTransformer implements SqlTreeNodeTransformer
32
57
  visitOrderBy(node: OrderBy): SqlTreeNode | SqlTreeNode[];
33
58
  visitWithClause(node: With): SqlTreeNode | SqlTreeNode[];
34
59
  visitBinaryExpression(node: BinaryExpression): SqlTreeNode | SqlTreeNode[];
60
+ visitBetweenExpression(node: BetweenExpression): SqlTreeNode | SqlTreeNode[];
35
61
  visitUnaryExpression(node: UnaryExpression): SqlTreeNode | SqlTreeNode[];
36
62
  visitInExpression(node: InExpression): SqlTreeNode | SqlTreeNode[];
37
63
  visitConcat(node: Concat): SqlTreeNode | SqlTreeNode[];
@@ -42,4 +68,8 @@ export declare class QueryIdentityTransformer implements SqlTreeNodeTransformer
42
68
  visitNumberLiteral(node: NumberLiteral): SqlTreeNode | SqlTreeNode[];
43
69
  visitNullLiteral(node: NullLiteral): SqlTreeNode | SqlTreeNode[];
44
70
  visitExistsExpression(node: ExistsExpression): SqlTreeNode | SqlTreeNode[];
71
+ visitCastExpression(node: CastExpression): SqlTreeNode | SqlTreeNode[];
72
+ visitCollateExpression(node: CollateExpression): SqlTreeNode | SqlTreeNode[];
73
+ visitSubqueryExpression(node: SubqueryExpression): SqlTreeNode | SqlTreeNode[];
74
+ visitWindowExpression(node: WindowExpression): SqlTreeNode | SqlTreeNode[];
45
75
  }