taon-type-sql 18.0.25 → 19.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/assets/shared/shared_folder_info.txt +1 -1
- package/package.json +1 -1
- package/tmp-environment.json +24 -3
- package/browser/esm2022/lib/builder/column/basic-column.mjs +0 -13
- package/browser/esm2022/lib/builder/column/boolean-column.mjs +0 -14
- package/browser/esm2022/lib/builder/column/comparable-column.mjs +0 -41
- package/browser/esm2022/lib/builder/column/date-column.mjs +0 -14
- package/browser/esm2022/lib/builder/column/number-column.mjs +0 -19
- package/browser/esm2022/lib/builder/column/query-column.mjs +0 -21
- package/browser/esm2022/lib/builder/column/string-column.mjs +0 -36
- package/browser/esm2022/lib/builder/column/value-column.mjs +0 -30
- package/browser/esm2022/lib/builder/condition/query-column-condition.mjs +0 -19
- package/browser/esm2022/lib/builder/condition/query-condition-chain.mjs +0 -28
- package/browser/esm2022/lib/builder/condition/query-condition.mjs +0 -6
- package/browser/esm2022/lib/builder/condition/query-join-condition.mjs +0 -19
- package/browser/esm2022/lib/builder/helpers/generics-helper.mjs +0 -5
- package/browser/esm2022/lib/builder/helpers/internal-types.mjs +0 -4
- package/browser/esm2022/lib/builder/join/joined-tables-chain.mjs +0 -14
- package/browser/esm2022/lib/builder/join/joined-tables.mjs +0 -22
- package/browser/esm2022/lib/builder/other/query-ordering.mjs +0 -17
- package/browser/esm2022/lib/builder/query/select-query.mjs +0 -48
- package/browser/esm2022/lib/builder/query/table-condition-query.mjs +0 -25
- package/browser/esm2022/lib/builder/query/table-query.mjs +0 -54
- package/browser/esm2022/lib/builder/query-source.mjs +0 -20
- package/browser/esm2022/lib/builder/query-table.mjs +0 -24
- package/browser/esm2022/lib/client/mysql.mjs +0 -10
- package/browser/esm2022/lib/client/query-processor.mjs +0 -45
- package/browser/esm2022/lib/converter/param-converter.mjs +0 -27
- package/browser/esm2022/lib/converter/parameterized-converter.mjs +0 -17
- package/browser/esm2022/lib/converter/query-converter.mjs +0 -282
- package/browser/esm2022/lib/converter/result-converter.mjs +0 -88
- package/browser/esm2022/lib/converter/sql-converter.mjs +0 -8
- package/browser/esm2022/lib/converter/type-converter.mjs +0 -39
- package/browser/esm2022/lib/converter/types.mjs +0 -4
- package/browser/esm2022/lib/index.mjs +0 -23
- package/browser/esm2022/public-api.mjs +0 -2
- package/browser/esm2022/taon-type-sql.mjs +0 -5
- package/client/esm2022/lib/builder/column/basic-column.mjs +0 -13
- package/client/esm2022/lib/builder/column/boolean-column.mjs +0 -14
- package/client/esm2022/lib/builder/column/comparable-column.mjs +0 -41
- package/client/esm2022/lib/builder/column/date-column.mjs +0 -14
- package/client/esm2022/lib/builder/column/number-column.mjs +0 -19
- package/client/esm2022/lib/builder/column/query-column.mjs +0 -21
- package/client/esm2022/lib/builder/column/string-column.mjs +0 -36
- package/client/esm2022/lib/builder/column/value-column.mjs +0 -30
- package/client/esm2022/lib/builder/condition/query-column-condition.mjs +0 -19
- package/client/esm2022/lib/builder/condition/query-condition-chain.mjs +0 -28
- package/client/esm2022/lib/builder/condition/query-condition.mjs +0 -6
- package/client/esm2022/lib/builder/condition/query-join-condition.mjs +0 -19
- package/client/esm2022/lib/builder/helpers/generics-helper.mjs +0 -5
- package/client/esm2022/lib/builder/helpers/internal-types.mjs +0 -4
- package/client/esm2022/lib/builder/join/joined-tables-chain.mjs +0 -14
- package/client/esm2022/lib/builder/join/joined-tables.mjs +0 -22
- package/client/esm2022/lib/builder/other/query-ordering.mjs +0 -17
- package/client/esm2022/lib/builder/query/select-query.mjs +0 -48
- package/client/esm2022/lib/builder/query/table-condition-query.mjs +0 -25
- package/client/esm2022/lib/builder/query/table-query.mjs +0 -54
- package/client/esm2022/lib/builder/query-source.mjs +0 -20
- package/client/esm2022/lib/builder/query-table.mjs +0 -24
- package/client/esm2022/lib/client/mysql.mjs +0 -10
- package/client/esm2022/lib/client/query-processor.mjs +0 -45
- package/client/esm2022/lib/converter/param-converter.mjs +0 -27
- package/client/esm2022/lib/converter/parameterized-converter.mjs +0 -17
- package/client/esm2022/lib/converter/query-converter.mjs +0 -282
- package/client/esm2022/lib/converter/result-converter.mjs +0 -88
- package/client/esm2022/lib/converter/sql-converter.mjs +0 -8
- package/client/esm2022/lib/converter/type-converter.mjs +0 -39
- package/client/esm2022/lib/converter/types.mjs +0 -4
- package/client/esm2022/lib/index.mjs +0 -23
- package/client/esm2022/public-api.mjs +0 -2
- package/client/esm2022/taon-type-sql.mjs +0 -5
- package/taon.jsonc +0 -13
- package/websql/esm2022/lib/builder/column/basic-column.mjs +0 -13
- package/websql/esm2022/lib/builder/column/boolean-column.mjs +0 -14
- package/websql/esm2022/lib/builder/column/comparable-column.mjs +0 -41
- package/websql/esm2022/lib/builder/column/date-column.mjs +0 -14
- package/websql/esm2022/lib/builder/column/number-column.mjs +0 -19
- package/websql/esm2022/lib/builder/column/query-column.mjs +0 -21
- package/websql/esm2022/lib/builder/column/string-column.mjs +0 -36
- package/websql/esm2022/lib/builder/column/value-column.mjs +0 -30
- package/websql/esm2022/lib/builder/condition/query-column-condition.mjs +0 -19
- package/websql/esm2022/lib/builder/condition/query-condition-chain.mjs +0 -28
- package/websql/esm2022/lib/builder/condition/query-condition.mjs +0 -6
- package/websql/esm2022/lib/builder/condition/query-join-condition.mjs +0 -19
- package/websql/esm2022/lib/builder/helpers/generics-helper.mjs +0 -5
- package/websql/esm2022/lib/builder/helpers/internal-types.mjs +0 -4
- package/websql/esm2022/lib/builder/join/joined-tables-chain.mjs +0 -14
- package/websql/esm2022/lib/builder/join/joined-tables.mjs +0 -22
- package/websql/esm2022/lib/builder/other/query-ordering.mjs +0 -17
- package/websql/esm2022/lib/builder/query/select-query.mjs +0 -48
- package/websql/esm2022/lib/builder/query/table-condition-query.mjs +0 -25
- package/websql/esm2022/lib/builder/query/table-query.mjs +0 -54
- package/websql/esm2022/lib/builder/query-source.mjs +0 -20
- package/websql/esm2022/lib/builder/query-table.mjs +0 -24
- package/websql/esm2022/lib/client/mysql.mjs +0 -10
- package/websql/esm2022/lib/client/query-processor.mjs +0 -45
- package/websql/esm2022/lib/converter/param-converter.mjs +0 -27
- package/websql/esm2022/lib/converter/parameterized-converter.mjs +0 -17
- package/websql/esm2022/lib/converter/query-converter.mjs +0 -282
- package/websql/esm2022/lib/converter/result-converter.mjs +0 -88
- package/websql/esm2022/lib/converter/sql-converter.mjs +0 -8
- package/websql/esm2022/lib/converter/type-converter.mjs +0 -39
- package/websql/esm2022/lib/converter/types.mjs +0 -4
- package/websql/esm2022/lib/index.mjs +0 -23
- package/websql/esm2022/public-api.mjs +0 -2
- package/websql/esm2022/taon-type-sql.mjs +0 -5
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import TableConditionQuery from "./table-condition-query";
|
|
2
|
-
import ValueColumn from "../column/value-column";
|
|
3
|
-
export default class TableQuery {
|
|
4
|
-
constructor(_queryProcessor, _table) {
|
|
5
|
-
this._queryProcessor = _queryProcessor;
|
|
6
|
-
this._table = _table;
|
|
7
|
-
this._columns = [];
|
|
8
|
-
}
|
|
9
|
-
where(...conditions) {
|
|
10
|
-
return new TableConditionQuery(this._queryProcessor, this._table, conditions);
|
|
11
|
-
}
|
|
12
|
-
insert(param) {
|
|
13
|
-
this._entity = param;
|
|
14
|
-
this._action = 'insert';
|
|
15
|
-
return this._queryProcessor(this);
|
|
16
|
-
}
|
|
17
|
-
deleteAll() {
|
|
18
|
-
this._action = 'delete';
|
|
19
|
-
return this._queryProcessor(this);
|
|
20
|
-
}
|
|
21
|
-
updateAll(entity) {
|
|
22
|
-
this._entity = entity;
|
|
23
|
-
this._action = 'update';
|
|
24
|
-
return this._queryProcessor(this);
|
|
25
|
-
}
|
|
26
|
-
countAll() {
|
|
27
|
-
this._columns = [this._table.$all.count()];
|
|
28
|
-
this._action = 'select';
|
|
29
|
-
return this._queryProcessor(this).then((rows) => rows[0]);
|
|
30
|
-
}
|
|
31
|
-
delete(id) {
|
|
32
|
-
return this._whereId(id).delete().then(count => count > 0);
|
|
33
|
-
}
|
|
34
|
-
update(id, entity) {
|
|
35
|
-
return this._whereId(id).update(entity).then(count => count > 0);
|
|
36
|
-
}
|
|
37
|
-
get(id) {
|
|
38
|
-
let query = this._whereId(id);
|
|
39
|
-
return this._queryProcessor({ _action: 'select', ...query })
|
|
40
|
-
.then((rows) => rows[0]);
|
|
41
|
-
}
|
|
42
|
-
_whereId(id) {
|
|
43
|
-
let $id = this._table.$id;
|
|
44
|
-
if ($id instanceof ValueColumn) {
|
|
45
|
-
return this.where($id.eq(id));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return this.where(...Object.keys($id).map(key => this._table[key].eq(id[key])));
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
;
|
|
53
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query/table-query.ts
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9idWlsZGVyL3F1ZXJ5L3RhYmxlLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sbUJBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFLakQsTUFBTSxDQUFDLE9BQU8sT0FBTyxVQUFVO0lBRTNCLFlBQ2MsZUFBK0IsRUFDL0IsTUFBYTtRQURiLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBS2pCLGFBQVEsR0FBOEIsRUFBRSxDQUFDO0lBSmhELENBQUM7SUFNSixLQUFLLENBQUMsR0FBRyxVQUFtQztRQUN4QyxPQUFPLElBQUksbUJBQW1CLENBQWdCLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBSUQsTUFBTSxDQUFDLEtBQVU7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTSxFQUFFLE1BQXVCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxHQUFHLENBQUMsRUFBTTtRQUNOLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2FBQ3ZELElBQUksQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFNO1FBRVgsSUFBSSxHQUFHLEdBQUksSUFBSSxDQUFDLE1BQWMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsSUFBSSxHQUFHLFlBQVksV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUcsSUFBSSxDQUFDLE1BQWMsQ0FBQyxHQUFHLENBQTZCLENBQUMsRUFBRSxDQUFFLEVBQVUsQ0FBQyxHQUFHLENBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxSSxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywyRUFBMkUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IFF1ZXJ5VGFibGUgZnJvbSBcIi4uL3F1ZXJ5LXRhYmxlXCI7XG5pbXBvcnQgVGFibGVDb25kaXRpb25RdWVyeSBmcm9tIFwiLi90YWJsZS1jb25kaXRpb24tcXVlcnlcIjtcbmltcG9ydCBRdWVyeUNvbmRpdGlvbiBmcm9tIFwiLi4vY29uZGl0aW9uL3F1ZXJ5LWNvbmRpdGlvblwiO1xuaW1wb3J0IFZhbHVlQ29sdW1uIGZyb20gXCIuLi9jb2x1bW4vdmFsdWUtY29sdW1uXCI7XG5pbXBvcnQgUXVlcnlDb2x1bW4gZnJvbSBcIi4uL2NvbHVtbi9xdWVyeS1jb2x1bW5cIjtcbmltcG9ydCB7IFF1ZXJ5UHJvY2Vzc29yLCBRdWVyeUFjdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2ludGVybmFsLXR5cGVzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVRdWVyeTxFbnRpdHksIElkLCBUYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4+IHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX3F1ZXJ5UHJvY2Vzc29yOiBRdWVyeVByb2Nlc3NvcixcbiAgICAgICAgcHJvdGVjdGVkIF90YWJsZTogVGFibGVcbiAgICApIHt9XG5cbiAgICBwcm90ZWN0ZWQgX2VudGl0eTogRW50aXR5IHwgRW50aXR5W10gfCBQYXJ0aWFsPEVudGl0eT47XG4gICAgcHJvdGVjdGVkIF9hY3Rpb246IFF1ZXJ5QWN0aW9uO1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogUXVlcnlDb2x1bW48VGFibGUsIGFueT5bXSA9IFtdO1xuXG4gICAgd2hlcmUoLi4uY29uZGl0aW9uczogUXVlcnlDb25kaXRpb248VGFibGU+W10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUNvbmRpdGlvblF1ZXJ5PEVudGl0eSwgVGFibGU+KHRoaXMuX3F1ZXJ5UHJvY2Vzc29yLCB0aGlzLl90YWJsZSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGVudGl0eTogRW50aXR5KTogUHJvbWlzZTxhbnk+IC8vIHJldHVybnMgdGhlIGdlbmVyYXRlZCBJRCwgYnV0IG5vdCBvdGhlciBraW5kcyBvZiBJRHMsIHNvIHRoZSB0eXBlIGlzIHVua25vd24gKG15c3FsIGxpbWl0YXRpb25zKVxuICAgIGluc2VydChlbnRpdGllczogRW50aXR5W10pOiBQcm9taXNlPHZvaWQ+XG4gICAgaW5zZXJ0KHBhcmFtOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9lbnRpdHkgPSBwYXJhbTtcbiAgICAgICAgdGhpcy5fYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih0aGlzKTtcbiAgICB9XG5cbiAgICBkZWxldGVBbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdGhpcy5fYWN0aW9uID0gJ2RlbGV0ZSc7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih0aGlzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVBbGwoZW50aXR5OiBQYXJ0aWFsPEVudGl0eT4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0aGlzLl9lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIHRoaXMuX2FjdGlvbiA9ICd1cGRhdGUnO1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlQcm9jZXNzb3IodGhpcyk7XG4gICAgfVxuXG4gICAgY291bnRBbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IFt0aGlzLl90YWJsZS4kYWxsLmNvdW50KCldO1xuICAgICAgICB0aGlzLl9hY3Rpb24gPSAnc2VsZWN0JztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UHJvY2Vzc29yKHRoaXMpLnRoZW4oKHJvd3M6IGFueVtdKSA9PiByb3dzWzBdKTtcbiAgICB9XG5cbiAgICBkZWxldGUoaWQ6IElkKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aGVyZUlkKGlkKS5kZWxldGUoKS50aGVuKGNvdW50ID0+IGNvdW50ID4gMCk7XG4gICAgfVxuXG4gICAgdXBkYXRlKGlkOiBJZCwgZW50aXR5OiBQYXJ0aWFsPEVudGl0eT4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZXJlSWQoaWQpLnVwZGF0ZShlbnRpdHkpLnRoZW4oY291bnQgPT4gY291bnQgPiAwKTtcbiAgICB9XG5cbiAgICBnZXQoaWQ6IElkKTogUHJvbWlzZTxFbnRpdHkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fd2hlcmVJZChpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih7IF9hY3Rpb246ICdzZWxlY3QnLCAuLi5xdWVyeSB9KVxuICAgICAgICAgICAgLnRoZW4oKHJvd3M6IEVudGl0eVtdKSA9PiByb3dzWzBdKTtcbiAgICB9XG5cbiAgICBfd2hlcmVJZChpZDogSWQpOiBUYWJsZUNvbmRpdGlvblF1ZXJ5PEVudGl0eSwgVGFibGU+IHtcblxuICAgICAgICBsZXQgJGlkID0gKHRoaXMuX3RhYmxlIGFzIGFueSkuJGlkO1xuICAgICAgICBpZiAoJGlkIGluc3RhbmNlb2YgVmFsdWVDb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKCRpZC5lcShpZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoLi4uT2JqZWN0LmtleXMoJGlkKS5tYXAoa2V5ID0+ICgodGhpcy5fdGFibGUgYXMgYW55KVtrZXldIGFzIFZhbHVlQ29sdW1uPFRhYmxlLCBhbnk+KS5lcSgoaWQgYXMgYW55KVtrZXldIGFzIGFueSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZS1zcWwgbGliL2J1aWxkZXIvcXVlcnkvdGFibGUtcXVlcnkudHMiXX0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import SelectQuery from './query/select-query';
|
|
2
|
-
import TableQuery from "./query/table-query";
|
|
3
|
-
export default class QuerySource {
|
|
4
|
-
constructor(_queryProcessor) {
|
|
5
|
-
this._queryProcessor = _queryProcessor;
|
|
6
|
-
}
|
|
7
|
-
from(table1, table2, table3) {
|
|
8
|
-
if (table3 != null)
|
|
9
|
-
return new SelectQuery(this._queryProcessor, [table1, table2, table3]);
|
|
10
|
-
else if (table2 != null)
|
|
11
|
-
return new SelectQuery(this._queryProcessor, [table1, table2]);
|
|
12
|
-
return new SelectQuery(this._queryProcessor, [table1]);
|
|
13
|
-
}
|
|
14
|
-
table(table) {
|
|
15
|
-
return new TableQuery(this._queryProcessor, table);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
;
|
|
19
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query-source.ts
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvYnVpbGRlci9xdWVyeS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxXQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFHL0MsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFHN0MsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFXO0lBRTVCLFlBQXNCLGVBQStCO1FBQS9CLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtJQUFHLENBQUM7SUFNekQsSUFBSSxDQUF3SCxNQUFXLEVBQUUsTUFBWSxFQUFFLE1BQVk7UUFDL0osSUFBSSxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxXQUFXLENBQWdDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDckgsSUFBSSxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxXQUFXLENBQXVCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RyxPQUFPLElBQUksV0FBVyxDQUFpQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFtRCxLQUFxQztRQUN6RixPQUFPLElBQUksVUFBVSxDQUFvQixJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDSjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0VBQXNFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCBRdWVyeVRhYmxlIGZyb20gJy4vcXVlcnktdGFibGUnO1xuaW1wb3J0IFNlbGVjdFF1ZXJ5IGZyb20gJy4vcXVlcnkvc2VsZWN0LXF1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5UHJvY2Vzc29yIH0gZnJvbSBcIi4vaGVscGVycy9pbnRlcm5hbC10eXBlc1wiO1xuaW1wb3J0IEpvaW5lZFRhYmxlcyBmcm9tIFwiLi9qb2luL2pvaW5lZC10YWJsZXNcIjtcbmltcG9ydCBUYWJsZVF1ZXJ5IGZyb20gXCIuL3F1ZXJ5L3RhYmxlLXF1ZXJ5XCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnlTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9xdWVyeVByb2Nlc3NvcjogUXVlcnlQcm9jZXNzb3IpIHt9XG5cbiAgICBmcm9tPEVudGl0eSwgVGFibGUxIGV4dGVuZHMgUXVlcnlUYWJsZTxFbnRpdHksIGFueT4+KHRhYmxlMTogVGFibGUxICYgUXVlcnlUYWJsZTxFbnRpdHksIGFueT4pOiBTZWxlY3RRdWVyeTxFbnRpdHksIFRhYmxlMT5cbiAgICBmcm9tPFRhYmxlcyBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZXM6IEpvaW5lZFRhYmxlczxUYWJsZXM+KTogU2VsZWN0UXVlcnk8YW55LCBUYWJsZXM+XG4gICAgZnJvbTxUYWJsZTEgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55PiwgVGFibGUyIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlMTogVGFibGUxLCB0YWJsZTI6IFRhYmxlMik6IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyPlxuICAgIGZyb208VGFibGUxIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4sIFRhYmxlMiBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+LCBUYWJsZTMgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55Pj4odGFibGUxOiBUYWJsZTEsIHRhYmxlMjogVGFibGUyLCB0YWJsZTM6IFRhYmxlMyk6IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyIHwgVGFibGUzPlxuICAgIGZyb208RW50aXR5LCBUYWJsZTEgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55PiwgVGFibGUyIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4sIFRhYmxlMyBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZTE6IGFueSwgdGFibGUyPzogYW55LCB0YWJsZTM/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRhYmxlMyAhPSBudWxsKSByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyIHwgVGFibGUzPih0aGlzLl9xdWVyeVByb2Nlc3NvciwgW3RhYmxlMSwgdGFibGUyLCB0YWJsZTNdKTtcbiAgICAgICAgZWxzZSBpZiAodGFibGUyICE9IG51bGwpIHJldHVybiBuZXcgU2VsZWN0UXVlcnk8YW55LCBUYWJsZTEgfCBUYWJsZTI+KHRoaXMuX3F1ZXJ5UHJvY2Vzc29yLCBbdGFibGUxLCB0YWJsZTJdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeTxFbnRpdHksIFRhYmxlMT4odGhpcy5fcXVlcnlQcm9jZXNzb3IsIFt0YWJsZTFdKTtcbiAgICB9XG5cbiAgICB0YWJsZTxFbnRpdHksIElkLCBUYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4+KHRhYmxlOiBUYWJsZSAmIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4pOiBUYWJsZVF1ZXJ5PEVudGl0eSwgSWQsIFRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVRdWVyeTxFbnRpdHksIElkLCBUYWJsZT4odGhpcy5fcXVlcnlQcm9jZXNzb3IsIHRhYmxlKTtcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGUtc3FsIGxpYi9idWlsZGVyL3F1ZXJ5LXNvdXJjZS50cyJdfQ==
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import BasicColumn from "./column/basic-column";
|
|
2
|
-
import JoinedTablesChain from "./join/joined-tables-chain";
|
|
3
|
-
class QueryTable {
|
|
4
|
-
constructor(_$name) {
|
|
5
|
-
this._$name = _$name;
|
|
6
|
-
this.$all = new BasicColumn(this, '*');
|
|
7
|
-
}
|
|
8
|
-
innerJoin(table) {
|
|
9
|
-
return new JoinedTablesChain(table, 'inner', this);
|
|
10
|
-
}
|
|
11
|
-
leftJoin(table) {
|
|
12
|
-
return new JoinedTablesChain(table, 'left', this);
|
|
13
|
-
}
|
|
14
|
-
rightJoin(table) {
|
|
15
|
-
return new JoinedTablesChain(table, 'right', this);
|
|
16
|
-
}
|
|
17
|
-
fullJoin(table) {
|
|
18
|
-
return new JoinedTablesChain(table, 'full', this);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export default QueryTable;
|
|
22
|
-
;
|
|
23
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query-table.ts
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9idWlsZGVyL3F1ZXJ5LXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8saUJBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsTUFBZSxVQUFVO0lBRXJCLFlBQXNCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBT3BDLFNBQUksR0FBRyxJQUFJLFdBQVcsQ0FBZSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFQVCxDQUFDO0lBU3hDLFNBQVMsQ0FBeUMsS0FBZ0I7UUFDOUQsT0FBTyxJQUFJLGlCQUFpQixDQUFtQixLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxRQUFRLENBQXlDLEtBQWdCO1FBQzdELE9BQU8sSUFBSSxpQkFBaUIsQ0FBbUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxDQUF5QyxLQUFnQjtRQUM5RCxPQUFPLElBQUksaUJBQWlCLENBQW1CLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFFBQVEsQ0FBeUMsS0FBZ0I7UUFDN0QsT0FBTyxJQUFJLGlCQUFpQixDQUFtQixLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDSjtBQUVELGVBQWUsVUFBVSxDQUFDO0FBRXpCLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCBCYXNpY0NvbHVtbiBmcm9tIFwiLi9jb2x1bW4vYmFzaWMtY29sdW1uXCI7XG5pbXBvcnQgR2VuZXJpY3NIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9nZW5lcmljcy1oZWxwZXJcIjtcbmltcG9ydCBKb2luZWRUYWJsZXNDaGFpbiBmcm9tIFwiLi9qb2luL2pvaW5lZC10YWJsZXMtY2hhaW5cIjtcblxuXG5hYnN0cmFjdCBjbGFzcyBRdWVyeVRhYmxlPEVudGl0eSwgSWQ+IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfJG5hbWU6IHN0cmluZykge31cblxuICAgIHByb3RlY3RlZCBfJHR5cGU6IEdlbmVyaWNzSGVscGVyPEVudGl0eT47XG4gICAgcHJvdGVjdGVkIF8kaWRUeXBlOiBHZW5lcmljc0hlbHBlcjxJZD47XG5cblxuXG4gICAgJGFsbCA9IG5ldyBCYXNpY0NvbHVtbjx0aGlzLCBFbnRpdHk+KHRoaXMsICcqJyk7XG5cbiAgICBpbm5lckpvaW48Sm9pblRhYmxlIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlOiBKb2luVGFibGUpOiBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4odGFibGUsICdpbm5lcicsIHRoaXMpO1xuICAgIH1cblxuICAgIGxlZnRKb2luPEpvaW5UYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZTogSm9pblRhYmxlKTogSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4ge1xuICAgICAgICByZXR1cm4gbmV3IEpvaW5lZFRhYmxlc0NoYWluPHRoaXMgfCBKb2luVGFibGU+KHRhYmxlLCAnbGVmdCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJpZ2h0Sm9pbjxKb2luVGFibGUgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55Pj4odGFibGU6IEpvaW5UYWJsZSk6IEpvaW5lZFRhYmxlc0NoYWluPHRoaXMgfCBKb2luVGFibGU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPih0YWJsZSwgJ3JpZ2h0JywgdGhpcyk7XG4gICAgfVxuXG4gICAgZnVsbEpvaW48Sm9pblRhYmxlIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlOiBKb2luVGFibGUpOiBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4odGFibGUsICdmdWxsJywgdGhpcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVyeVRhYmxlO1xuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvYnVpbGRlci9xdWVyeS10YWJsZS50cyJdfQ==
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import QuerySource from "../builder/query-source";
|
|
2
|
-
import { createQueryProcessor } from "./query-processor";
|
|
3
|
-
export default class MySqlQuerySource extends QuerySource {
|
|
4
|
-
constructor(client, options = {}) {
|
|
5
|
-
super(createQueryProcessor(client, options, 'mysql'));
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
;
|
|
9
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/client/mysql.ts
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9jbGllbnQvbXlzcWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUF3QixvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTlFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsV0FBVztJQUVyRCxZQUFZLE1BQVcsRUFBRSxVQUFpQyxFQUFFO1FBQ3hELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNKO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyw4REFBOEQiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IFF1ZXJ5U291cmNlIGZyb20gXCIuLi9idWlsZGVyL3F1ZXJ5LXNvdXJjZVwiO1xuaW1wb3J0IHtRdWVyeVByb2Nlc3Nvck9wdGlvbnMsIGNyZWF0ZVF1ZXJ5UHJvY2Vzc29yfSBmcm9tIFwiLi9xdWVyeS1wcm9jZXNzb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXlTcWxRdWVyeVNvdXJjZSBleHRlbmRzIFF1ZXJ5U291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBvcHRpb25zOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihjcmVhdGVRdWVyeVByb2Nlc3NvcihjbGllbnQsIG9wdGlvbnMsICdteXNxbCcpKTtcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGUtc3FsIGxpYi9jbGllbnQvbXlzcWwudHMiXX0=
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Log } from 'ng2-logger/browser';
|
|
2
|
-
import { convertQueryToParameterizedSQL } from '../converter/parameterized-converter';
|
|
3
|
-
import { convertQueryToSQL } from '../converter/sql-converter';
|
|
4
|
-
const log = Log.create('query processor');
|
|
5
|
-
const DEFAULT_OPTIONS = {
|
|
6
|
-
lineBreaks: false,
|
|
7
|
-
parameterized: true,
|
|
8
|
-
logging: true,
|
|
9
|
-
identifierQuote: '"'
|
|
10
|
-
};
|
|
11
|
-
function mySqlTypeCast(field, next) {
|
|
12
|
-
if (field.type == 'TINY' && field.length == 1) { // Boolean
|
|
13
|
-
let value = field.string();
|
|
14
|
-
if (value == '1')
|
|
15
|
-
return true;
|
|
16
|
-
if (value == '0')
|
|
17
|
-
return false;
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
else if (field.type == 'JSON') {
|
|
21
|
-
let value = field.string();
|
|
22
|
-
return value == null ? null : JSON.parse(value);
|
|
23
|
-
}
|
|
24
|
-
return next();
|
|
25
|
-
}
|
|
26
|
-
export function createQueryProcessor(client, _options = {}, engine = 'pg') {
|
|
27
|
-
let options = Object.assign({}, DEFAULT_OPTIONS, _options);
|
|
28
|
-
let queryOptions = {
|
|
29
|
-
lineBreak: options.lineBreaks ? '\n' : ' ',
|
|
30
|
-
nameEscape: _options.identifierQuote || (engine === 'mysql' ? '`' : '"')
|
|
31
|
-
};
|
|
32
|
-
return (query) => {
|
|
33
|
-
if (options.parameterized) {
|
|
34
|
-
let { sql, params } = convertQueryToParameterizedSQL(query, queryOptions, engine);
|
|
35
|
-
return client.query(sql, params);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
let sql = convertQueryToSQL(query, queryOptions, engine);
|
|
39
|
-
return client.query(sql, undefined);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
;
|
|
44
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/client/query-processor.ts
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY2xpZW50L3F1ZXJ5LXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFNL0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FFdkMsQ0FBQTtBQVVELE1BQU0sZUFBZSxHQUEwQjtJQUM3QyxVQUFVLEVBQUUsS0FBSztJQUNqQixhQUFhLEVBQUUsSUFBSTtJQUNuQixPQUFPLEVBQUUsSUFBSTtJQUNiLGVBQWUsRUFBRSxHQUFHO0NBQ3JCLENBQUM7QUFFRixTQUFTLGFBQWEsQ0FBQyxLQUFVLEVBQUUsSUFBUztJQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3pELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLEtBQUssSUFBSSxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxLQUFLLElBQUksR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFXLEVBQUUsV0FBa0MsRUFBRSxFQUFFLFNBQXNCLElBQUk7SUFFaEgsSUFBSSxPQUFPLEdBQTBCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVsRixJQUFJLFlBQVksR0FBcUI7UUFDbkMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztRQUMxQyxVQUFVLEVBQUUsUUFBUSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQ3pFLENBQUM7SUEwQkYsT0FBTyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ3BCLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsOEJBQThCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVsRixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBR25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBR3RDLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBR0EsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RUFBd0UiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5pbXBvcnQgeyBjb252ZXJ0UXVlcnlUb1BhcmFtZXRlcml6ZWRTUUwgfSBmcm9tICcuLi9jb252ZXJ0ZXIvcGFyYW1ldGVyaXplZC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgY29udmVydFF1ZXJ5VG9TUUwgfSBmcm9tICcuLi9jb252ZXJ0ZXIvc3FsLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBjb252ZXJ0UmVzdWx0IH0gZnJvbSBcIi4uL2NvbnZlcnRlci9yZXN1bHQtY29udmVydGVyXCI7XG5pbXBvcnQgeyBRdWVyeUVuZ2luZSwgQ29udmVydGVyT3B0aW9ucyB9IGZyb20gJy4uL2NvbnZlcnRlci90eXBlcyc7XG5pbXBvcnQgeyBRdWVyeVByb2Nlc3NvciB9IGZyb20gJy4uL2J1aWxkZXIvaGVscGVycy9pbnRlcm5hbC10eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5cbmNvbnN0IGxvZyA9IExvZy5jcmVhdGUoJ3F1ZXJ5IHByb2Nlc3NvcicsXG5cbilcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVByb2Nlc3Nvck9wdGlvbnMge1xuICBsaW5lQnJlYWtzPzogYm9vbGVhbixcbiAgcGFyYW1ldGVyaXplZD86IGJvb2xlYW4sXG4gIGxvZ2dpbmc/OiBib29sZWFuLFxuICBsb2dnZXI/OiAoc3FsOiBzdHJpbmcsIHBhcmFtcz86IGFueVtdKSA9PiB2b2lkLFxuICBpZGVudGlmaWVyUXVvdGU/OiBzdHJpbmdcbn1cblxuY29uc3QgREVGQVVMVF9PUFRJT05TOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSB7XG4gIGxpbmVCcmVha3M6IGZhbHNlLFxuICBwYXJhbWV0ZXJpemVkOiB0cnVlLFxuICBsb2dnaW5nOiB0cnVlLFxuICBpZGVudGlmaWVyUXVvdGU6ICdcIidcbn07XG5cbmZ1bmN0aW9uIG15U3FsVHlwZUNhc3QoZmllbGQ6IGFueSwgbmV4dDogYW55KSB7XG4gIGlmIChmaWVsZC50eXBlID09ICdUSU5ZJyAmJiBmaWVsZC5sZW5ndGggPT0gMSkgeyAvLyBCb29sZWFuXG4gICAgbGV0IHZhbHVlID0gZmllbGQuc3RyaW5nKCk7XG4gICAgaWYgKHZhbHVlID09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKHZhbHVlID09ICcwJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT0gJ0pTT04nKSB7XG4gICAgbGV0IHZhbHVlID0gZmllbGQuc3RyaW5nKCk7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBudWxsIDogSlNPTi5wYXJzZSh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1ZXJ5UHJvY2Vzc29yKGNsaWVudDogYW55LCBfb3B0aW9uczogUXVlcnlQcm9jZXNzb3JPcHRpb25zID0ge30sIGVuZ2luZTogUXVlcnlFbmdpbmUgPSAncGcnKTogUXVlcnlQcm9jZXNzb3Ige1xuXG4gIGxldCBvcHRpb25zOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIF9vcHRpb25zKTtcblxuICBsZXQgcXVlcnlPcHRpb25zOiBDb252ZXJ0ZXJPcHRpb25zID0ge1xuICAgIGxpbmVCcmVhazogb3B0aW9ucy5saW5lQnJlYWtzID8gJ1xcbicgOiAnICcsXG4gICAgbmFtZUVzY2FwZTogX29wdGlvbnMuaWRlbnRpZmllclF1b3RlIHx8IChlbmdpbmUgPT09ICdteXNxbCcgPyAnYCcgOiAnXCInKVxuICB9O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gIHJldHVybiAocXVlcnk6IGFueSkgPT4ge1xuICAgIGlmIChvcHRpb25zLnBhcmFtZXRlcml6ZWQpIHtcbiAgICAgIGxldCB7IHNxbCwgcGFyYW1zIH0gPSBjb252ZXJ0UXVlcnlUb1BhcmFtZXRlcml6ZWRTUUwocXVlcnksIHF1ZXJ5T3B0aW9ucywgZW5naW5lKTtcblxuICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG5cblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgc3FsID0gY29udmVydFF1ZXJ5VG9TUUwocXVlcnksIHF1ZXJ5T3B0aW9ucywgZW5naW5lKTtcblxuICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShzcWwsIHVuZGVmaW5lZCk7XG5cblxuICAgIH1cbiAgfTtcbn1cblxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY2xpZW50L3F1ZXJ5LXByb2Nlc3Nvci50cyJdfQ==
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export function convertSubstitutionParam(param) {
|
|
2
|
-
if (param == null)
|
|
3
|
-
return 'NULL';
|
|
4
|
-
if (typeof param === 'string' || param instanceof String) {
|
|
5
|
-
return `'${String(param)}'`;
|
|
6
|
-
}
|
|
7
|
-
else if (typeof param === 'boolean' || param instanceof Boolean) {
|
|
8
|
-
return String(param).toUpperCase();
|
|
9
|
-
}
|
|
10
|
-
else if (param instanceof Date) {
|
|
11
|
-
return `'${param.toISOString()}'`;
|
|
12
|
-
}
|
|
13
|
-
else if (typeof param === 'number' || param instanceof Number) {
|
|
14
|
-
return String(param);
|
|
15
|
-
}
|
|
16
|
-
return `'${JSON.stringify(param)}'`;
|
|
17
|
-
}
|
|
18
|
-
export function convertEscapedParam(param) {
|
|
19
|
-
if (typeof param === 'object' && !(param == null || param instanceof String || param instanceof Number ||
|
|
20
|
-
param instanceof Boolean || param instanceof Date)) {
|
|
21
|
-
return JSON.stringify(param);
|
|
22
|
-
}
|
|
23
|
-
return param;
|
|
24
|
-
}
|
|
25
|
-
;
|
|
26
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/converter/param-converter.ts
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY29udmVydGVyL3BhcmFtLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBVTtJQUMvQyxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7SUFDdEMsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUM5RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUN4QyxDQUFDO0FBSUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQVU7SUFDMUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxZQUFZLE1BQU0sSUFBSSxLQUFLLFlBQVksTUFBTTtRQUNsRyxLQUFLLFlBQVksT0FBTyxJQUFJLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsMkVBQTJFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTdWJzdGl0dXRpb25QYXJhbShwYXJhbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW0gPT0gbnVsbCkgcmV0dXJuICdOVUxMJztcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyB8fCBwYXJhbSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gYCcke1N0cmluZyhwYXJhbSl9J2A7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJyB8fCBwYXJhbSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbSkudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYCcke3BhcmFtLnRvSVNPU3RyaW5nKCl9J2A7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInIHx8IHBhcmFtIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0pO1xuICAgIH1cbiAgICByZXR1cm4gYCcke0pTT04uc3RyaW5naWZ5KHBhcmFtKX0nYDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RXNjYXBlZFBhcmFtKHBhcmFtOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiAhKHBhcmFtID09IG51bGwgfHwgcGFyYW0gaW5zdGFuY2VvZiBTdHJpbmcgfHwgcGFyYW0gaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgcGFyYW0gaW5zdGFuY2VvZiBCb29sZWFuIHx8IHBhcmFtIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcmFtKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY29udmVydGVyL3BhcmFtLWNvbnZlcnRlci50cyJdfQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { createQueryConverter } from "./query-converter";
|
|
2
|
-
import { convertEscapedParam } from './param-converter';
|
|
3
|
-
let pgParamConverter = (index) => '$' + index;
|
|
4
|
-
let mySqlParamConverter = (index) => '?';
|
|
5
|
-
function convertSingleParam(param, params, paramConverter) {
|
|
6
|
-
params.push(convertEscapedParam(param));
|
|
7
|
-
return paramConverter(params.length);
|
|
8
|
-
}
|
|
9
|
-
export function convertQueryToParameterizedSQL(query, options, engine) {
|
|
10
|
-
let params = [];
|
|
11
|
-
let paramConverter = engine === 'mysql' ? mySqlParamConverter : pgParamConverter;
|
|
12
|
-
let sql = createQueryConverter((param) => convertSingleParam(param, params, paramConverter), options, engine)(query);
|
|
13
|
-
return { sql, params };
|
|
14
|
-
}
|
|
15
|
-
;
|
|
16
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/converter/parameterized-converter.ts
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyaXplZC1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9jb252ZXJ0ZXIvcGFyYW1ldGVyaXplZC1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHdEQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN0RCxJQUFJLG1CQUFtQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFFakQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsTUFBYSxFQUFFLGNBQXNDO0lBQ3pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxLQUFVLEVBQUUsT0FBeUIsRUFBRSxNQUFtQjtJQUNyRyxJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7SUFFdkIsSUFBSSxjQUFjLEdBQUcsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pGLElBQUksR0FBRyxHQUFHLG9CQUFvQixDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxSCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1GQUFtRiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQge2NyZWF0ZVF1ZXJ5Q29udmVydGVyfSBmcm9tIFwiLi9xdWVyeS1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7Y29udmVydEVzY2FwZWRQYXJhbX0gZnJvbSAnLi9wYXJhbS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtRdWVyeUVuZ2luZSwgQ29udmVydGVyT3B0aW9uc30gZnJvbSBcIi4vdHlwZXNcIjtcblxubGV0IHBnUGFyYW1Db252ZXJ0ZXIgPSAoaW5kZXg6IG51bWJlcikgPT4gJyQnICsgaW5kZXg7XG5sZXQgbXlTcWxQYXJhbUNvbnZlcnRlciA9IChpbmRleDogbnVtYmVyKSA9PiAnPyc7XG5cbmZ1bmN0aW9uIGNvbnZlcnRTaW5nbGVQYXJhbShwYXJhbTogYW55LCBwYXJhbXM6IGFueVtdLCBwYXJhbUNvbnZlcnRlcjogKHBhcmFtOiBhbnkpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcGFyYW1zLnB1c2goY29udmVydEVzY2FwZWRQYXJhbShwYXJhbSkpO1xuICAgIHJldHVybiBwYXJhbUNvbnZlcnRlcihwYXJhbXMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRRdWVyeVRvUGFyYW1ldGVyaXplZFNRTChxdWVyeTogYW55LCBvcHRpb25zOiBDb252ZXJ0ZXJPcHRpb25zLCBlbmdpbmU6IFF1ZXJ5RW5naW5lKSB7XG4gICAgbGV0IHBhcmFtczogYW55W10gPSBbXTtcblxuICAgIGxldCBwYXJhbUNvbnZlcnRlciA9IGVuZ2luZSA9PT0gJ215c3FsJyA/IG15U3FsUGFyYW1Db252ZXJ0ZXIgOiBwZ1BhcmFtQ29udmVydGVyO1xuICAgIGxldCBzcWwgPSBjcmVhdGVRdWVyeUNvbnZlcnRlcigocGFyYW06IGFueSkgPT4gY29udmVydFNpbmdsZVBhcmFtKHBhcmFtLCBwYXJhbXMsIHBhcmFtQ29udmVydGVyKSwgb3B0aW9ucywgZW5naW5lKShxdWVyeSk7XG5cbiAgICByZXR1cm4geyBzcWwsIHBhcmFtcyB9O1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY29udmVydGVyL3BhcmFtZXRlcml6ZWQtY29udmVydGVyLnRzIl19
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import { string, number, date, boolean } from './type-converter';
|
|
2
|
-
export function createQueryConverter(paramConverter, options, engine) {
|
|
3
|
-
return convertQuery;
|
|
4
|
-
function convertQuery(query) {
|
|
5
|
-
if (query._action === 'select')
|
|
6
|
-
return convertSelectQuery(query);
|
|
7
|
-
if (query._action === 'delete')
|
|
8
|
-
return convertDeleteQuery(query);
|
|
9
|
-
if (query._action === 'update')
|
|
10
|
-
return convertUpdateQuery(query);
|
|
11
|
-
if (query._action === 'insert')
|
|
12
|
-
return convertInsertQuery(query);
|
|
13
|
-
throw new Error('Unknown query type:' + query._action);
|
|
14
|
-
}
|
|
15
|
-
function convertDeleteQuery(query) {
|
|
16
|
-
let s = 'DELETE FROM ' + convertTable(query._table);
|
|
17
|
-
s += convertConditions(query._conditions);
|
|
18
|
-
return s;
|
|
19
|
-
}
|
|
20
|
-
function convertUpdateQuery(query) {
|
|
21
|
-
let s = 'UPDATE ' + convertTable(query._table) + ' SET ';
|
|
22
|
-
s += convertUpdateSetters(query._table, query._entity);
|
|
23
|
-
s += convertConditions(query._conditions);
|
|
24
|
-
return s;
|
|
25
|
-
}
|
|
26
|
-
function convertUpdateSetters(table, entity) {
|
|
27
|
-
return Object.keys(entity).sort().map(key => {
|
|
28
|
-
let value = entity[key];
|
|
29
|
-
let column = table[key];
|
|
30
|
-
return convertColumnName(column) + ' = ' + convertParam(column, value);
|
|
31
|
-
}).join(', ');
|
|
32
|
-
}
|
|
33
|
-
function convertInsertQuery(query) {
|
|
34
|
-
let items = Array.isArray(query._entity) ? query._entity : [query._entity];
|
|
35
|
-
let keySet = items.reduce((set, item) => {
|
|
36
|
-
Object.keys(item).forEach(key => set.add(key));
|
|
37
|
-
return set;
|
|
38
|
-
}, new Set());
|
|
39
|
-
let keys = Array.from(keySet).sort();
|
|
40
|
-
let s = 'INSERT INTO ' + convertTable(query._table) + ' ';
|
|
41
|
-
s += '(' + keys.map(key => convertColumnName(query._table[key])).join(', ') + ')';
|
|
42
|
-
s += options.lineBreak + 'VALUES ';
|
|
43
|
-
s += items.map(item => convertInsertItem(query._table, item, keys))
|
|
44
|
-
.map((row) => '(' + row + ')').join(', ');
|
|
45
|
-
s += getPgInsertReturningIfNeeded(query);
|
|
46
|
-
return s;
|
|
47
|
-
}
|
|
48
|
-
function getPgInsertReturningIfNeeded(query) {
|
|
49
|
-
if (engine === 'pg' && query._action === 'insert' && !Array.isArray(query._entity) &&
|
|
50
|
-
query._table.$id && query._table.$id._table && query._table.$id._name) {
|
|
51
|
-
return ' RETURNING ' + convertColumnName(query._table.$id);
|
|
52
|
-
}
|
|
53
|
-
return '';
|
|
54
|
-
}
|
|
55
|
-
function convertInsertItem(table, entity, keys) {
|
|
56
|
-
return keys.map(key => {
|
|
57
|
-
let value = entity[key];
|
|
58
|
-
let column = table[key];
|
|
59
|
-
return convertParam(column, value);
|
|
60
|
-
}).join(', ');
|
|
61
|
-
}
|
|
62
|
-
function convertSelectQuery(query) {
|
|
63
|
-
let s = 'SELECT ';
|
|
64
|
-
if (query._distinct) {
|
|
65
|
-
s += 'DISTINCT ';
|
|
66
|
-
}
|
|
67
|
-
if (query._columns == null || query._columns.length === 0) {
|
|
68
|
-
s += '*';
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
s += query._columns.map((column) => convertColumn(column)).join(', ');
|
|
72
|
-
}
|
|
73
|
-
s += options.lineBreak + 'FROM ';
|
|
74
|
-
if (query._tables) {
|
|
75
|
-
s += query._tables.map((table) => table._parent ? convertJoin(table) : convertTable(table)).join(', ');
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
s += convertTable(query._table);
|
|
79
|
-
}
|
|
80
|
-
s += convertConditions(query._conditions);
|
|
81
|
-
if (query._groupBy && query._groupBy.length > 0) {
|
|
82
|
-
s += options.lineBreak + 'GROUP BY ';
|
|
83
|
-
s += query._groupBy.map((column) => convertColumn(column)).join(', ');
|
|
84
|
-
}
|
|
85
|
-
s += convertConditions(query._having, 'HAVING');
|
|
86
|
-
if (query._orderings && query._orderings.length > 0) {
|
|
87
|
-
s += options.lineBreak + 'ORDER BY ';
|
|
88
|
-
s += query._orderings.map((ordering) => convertOrdering(ordering)).join(', ');
|
|
89
|
-
}
|
|
90
|
-
if (query._limit != null) {
|
|
91
|
-
s += options.lineBreak + 'LIMIT ' + number(query._limit);
|
|
92
|
-
}
|
|
93
|
-
if (query._offset != null) {
|
|
94
|
-
s += options.lineBreak + 'OFFSET ' + number(query._offset);
|
|
95
|
-
}
|
|
96
|
-
return s;
|
|
97
|
-
}
|
|
98
|
-
function convertConditions(conditions, keyword = 'WHERE') {
|
|
99
|
-
let s = '';
|
|
100
|
-
if (conditions && conditions.length > 0) {
|
|
101
|
-
s += options.lineBreak + keyword + ' ';
|
|
102
|
-
preprocessConditions(conditions);
|
|
103
|
-
s += conditions.map(condition => convertCondition(condition, true)).join(' AND ');
|
|
104
|
-
}
|
|
105
|
-
return s;
|
|
106
|
-
}
|
|
107
|
-
function convertJoin(joinChain) {
|
|
108
|
-
let items = [];
|
|
109
|
-
while (joinChain) {
|
|
110
|
-
items.push(joinChain);
|
|
111
|
-
joinChain = joinChain._parent;
|
|
112
|
-
}
|
|
113
|
-
let root = items[items.length - 1];
|
|
114
|
-
let s = convertTable(root);
|
|
115
|
-
for (let i = items.length - 2; i >= 0; i -= 2) {
|
|
116
|
-
let table = items[i]._table;
|
|
117
|
-
let modifier = items[i]._modifier;
|
|
118
|
-
let condition = items[i - 1]._condition;
|
|
119
|
-
let param = convertColumn(condition._otherColumn);
|
|
120
|
-
s += ' ' + modifier.toUpperCase() + ' JOIN ' + convertTable(table) + ' ON ' +
|
|
121
|
-
convertColumnCondition(condition, param);
|
|
122
|
-
}
|
|
123
|
-
return s;
|
|
124
|
-
}
|
|
125
|
-
function convertOrdering(ordering) {
|
|
126
|
-
if (ordering._column) {
|
|
127
|
-
let s = convertColumn(ordering._column);
|
|
128
|
-
if (ordering._nullsPosition != null) { // "NULLS FIRST" only exists in PG, this is the general solution
|
|
129
|
-
s += ' IS NULL ' + (ordering._nullsPosition === 'FIRST' ? 'DESC' : 'ASC') + ', ' + s;
|
|
130
|
-
}
|
|
131
|
-
if (ordering._direction === 'ASC')
|
|
132
|
-
s += ' ASC';
|
|
133
|
-
if (ordering._direction === 'DESC')
|
|
134
|
-
s += ' DESC';
|
|
135
|
-
return s;
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
return convertColumn(ordering);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
function convertTable(table) {
|
|
142
|
-
return options.nameEscape + table._$name + options.nameEscape;
|
|
143
|
-
}
|
|
144
|
-
function convertColumn(column) {
|
|
145
|
-
let s = '';
|
|
146
|
-
if (!(column._name === '*' && column._modifiers.length > 0 && column._modifiers[0].name === 'count')) {
|
|
147
|
-
s += convertTable(column._table) + '.';
|
|
148
|
-
}
|
|
149
|
-
s += convertColumnName(column);
|
|
150
|
-
return convertColumnModifiers(s, column);
|
|
151
|
-
}
|
|
152
|
-
function convertColumnModifiers(s, column) {
|
|
153
|
-
if (column._modifiers) {
|
|
154
|
-
column._modifiers.forEach((modifier) => {
|
|
155
|
-
let name = modifier.name;
|
|
156
|
-
if (name === 'lower')
|
|
157
|
-
s = 'LOWER(' + s + ')';
|
|
158
|
-
else if (name === 'upper')
|
|
159
|
-
s = 'UPPER(' + s + ')';
|
|
160
|
-
else if (name === 'count')
|
|
161
|
-
s = 'COUNT(' + s + ')';
|
|
162
|
-
else if (name === 'sum')
|
|
163
|
-
s = 'SUM(' + s + ')';
|
|
164
|
-
else if (name === 'avg')
|
|
165
|
-
s = 'AVG(' + s + ')';
|
|
166
|
-
else if (name === 'min')
|
|
167
|
-
s = 'MIN(' + s + ')';
|
|
168
|
-
else if (name === 'max')
|
|
169
|
-
s = 'MAX(' + s + ')';
|
|
170
|
-
else if (name === 'as')
|
|
171
|
-
s = s + ' AS ' + options.nameEscape + modifier.params + options.nameEscape;
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
return s + '';
|
|
175
|
-
}
|
|
176
|
-
function convertColumnName(column) {
|
|
177
|
-
if (column._name === '*')
|
|
178
|
-
return column._name;
|
|
179
|
-
let name = typeof column._name === 'string' ? column._name : column._name.name;
|
|
180
|
-
return options.nameEscape + name + options.nameEscape;
|
|
181
|
-
}
|
|
182
|
-
function preprocessConditions(conditions) {
|
|
183
|
-
conditions.forEach(condition => {
|
|
184
|
-
if (conditions.length > 1 && condition._sibling) {
|
|
185
|
-
condition._parenthesis = true;
|
|
186
|
-
}
|
|
187
|
-
preprocessParams(condition);
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
function preprocessParams(condition) {
|
|
191
|
-
if (condition._sibling) {
|
|
192
|
-
preprocessParams(condition._sibling);
|
|
193
|
-
}
|
|
194
|
-
if (!condition._sibling && !condition._child) {
|
|
195
|
-
condition.__param = getConditionParam(condition);
|
|
196
|
-
}
|
|
197
|
-
if (condition._child) {
|
|
198
|
-
preprocessParams(condition._child);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
function convertCondition(condition, root = false) {
|
|
202
|
-
if (!condition._sibling && !condition._child) {
|
|
203
|
-
return convertColumnCondition(condition, condition.__param);
|
|
204
|
-
}
|
|
205
|
-
let s = '';
|
|
206
|
-
if (condition._child) {
|
|
207
|
-
s += convertCondition(condition._child);
|
|
208
|
-
}
|
|
209
|
-
if (condition._sibling) {
|
|
210
|
-
s = convertCondition(condition._sibling, root) + ' ' + condition._chainType.toUpperCase() + ' ' + s;
|
|
211
|
-
}
|
|
212
|
-
if (condition._parenthesis || ((!root || condition._negation) && condition._child)) {
|
|
213
|
-
s = '( ' + s + ' )';
|
|
214
|
-
}
|
|
215
|
-
if (condition._negation) {
|
|
216
|
-
s = 'NOT ' + s;
|
|
217
|
-
}
|
|
218
|
-
return s;
|
|
219
|
-
}
|
|
220
|
-
function convertColumnCondition(condition, param) {
|
|
221
|
-
let s = convertColumn(condition._column);
|
|
222
|
-
s += getConditionString(condition, param);
|
|
223
|
-
return s;
|
|
224
|
-
}
|
|
225
|
-
function getConditionString(condition, param) {
|
|
226
|
-
switch (condition._type) {
|
|
227
|
-
case 'eq': return ' = ' + param;
|
|
228
|
-
case 'ne': return ' <> ' + param;
|
|
229
|
-
case 'lt': return ' < ' + param;
|
|
230
|
-
case 'gt': return ' > ' + param;
|
|
231
|
-
case 'lte': return ' <= ' + param;
|
|
232
|
-
case 'gte': return ' >= ' + param;
|
|
233
|
-
case 'is-null': return ' IS NULL';
|
|
234
|
-
case 'is-not-null': return ' IS NOT NULL';
|
|
235
|
-
case 'like': return ' LIKE ' + param;
|
|
236
|
-
case 'not-like': return ' NOT LIKE ' + param;
|
|
237
|
-
case 'in': return ' IN (' + param + ')';
|
|
238
|
-
case 'not-in': return ' NOT IN (' + param + ')';
|
|
239
|
-
case 'between': return ' BETWEEN ' + param;
|
|
240
|
-
case 'not-between': return ' NOT BETWEEN ' + param;
|
|
241
|
-
default: return '';
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
function getConditionParam(condition) {
|
|
245
|
-
let param = '';
|
|
246
|
-
if (condition._otherColumn) {
|
|
247
|
-
param = convertColumn(condition._otherColumn);
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
let _convertParam = (param) => convertParam(condition._column, param);
|
|
251
|
-
if (condition._type === 'in' || condition._type === 'not-in') {
|
|
252
|
-
param = condition._values.map((value) => _convertParam(value)).join(', ');
|
|
253
|
-
}
|
|
254
|
-
else if (condition._type === 'between' || condition._type === 'not-between') {
|
|
255
|
-
param = _convertParam(condition._values[0]) + ' AND ' + _convertParam(condition._values[1]);
|
|
256
|
-
}
|
|
257
|
-
else if (condition._type !== 'is-null' && condition._type !== 'is-not-null') {
|
|
258
|
-
param = _convertParam(condition._values[0]);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return param;
|
|
262
|
-
}
|
|
263
|
-
function convertParam(column, param) {
|
|
264
|
-
if (param == null)
|
|
265
|
-
return 'NULL';
|
|
266
|
-
return paramConverter(getTypedParam(column._type, param));
|
|
267
|
-
}
|
|
268
|
-
function getTypedParam(type, param) {
|
|
269
|
-
if (type === 'number')
|
|
270
|
-
return number(param);
|
|
271
|
-
else if (type === 'boolean')
|
|
272
|
-
return boolean(param);
|
|
273
|
-
else if (type === 'date')
|
|
274
|
-
return date(param);
|
|
275
|
-
else if (type === 'string')
|
|
276
|
-
return string(param);
|
|
277
|
-
return param;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
;
|
|
281
|
-
({}); // @--end-of-file-for-module=taon-type-sql lib/converter/query-converter.ts
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY29udmVydGVyL3F1ZXJ5LWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJakUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGNBQXNDLEVBQUUsT0FBeUIsRUFBRSxNQUFtQjtJQUV2SCxPQUFPLFlBQVksQ0FBQztJQUVwQixTQUFTLFlBQVksQ0FBQyxLQUFVO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVE7WUFBRSxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ2xDLElBQUksQ0FBQyxHQUFHLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsT0FBTyxD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RCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLEtBQVU7UUFDM0MsSUFBSSxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZDLElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QyxJQUFJLElBQUksS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywyRUFBMkUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgc3RyaW5nLCBudW1iZXIsIGRhdGUsIGJvb2xlYW4gfSBmcm9tICcuL3R5cGUtY29udmVydGVyJztcbmltcG9ydCB7IFF1ZXJ5RW5naW5lLCBDb252ZXJ0ZXJPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVlcnlDb252ZXJ0ZXIocGFyYW1Db252ZXJ0ZXI6IChwYXJhbTogYW55KSA9PiBzdHJpbmcsIG9wdGlvbnM6IENvbnZlcnRlck9wdGlvbnMsIGVuZ2luZTogUXVlcnlFbmdpbmUpIHtcblxuICAgIHJldHVybiBjb252ZXJ0UXVlcnk7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0UXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnc2VsZWN0JykgcmV0dXJuIGNvbnZlcnRTZWxlY3RRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnZGVsZXRlJykgcmV0dXJuIGNvbnZlcnREZWxldGVRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAndXBkYXRlJykgcmV0dXJuIGNvbnZlcnRVcGRhdGVRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnaW5zZXJ0JykgcmV0dXJuIGNvbnZlcnRJbnNlcnRRdWVyeShxdWVyeSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBxdWVyeSB0eXBlOicgKyBxdWVyeS5fYWN0aW9uKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0RGVsZXRlUXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJ0RFTEVURSBGUk9NICcgKyBjb252ZXJ0VGFibGUocXVlcnkuX3RhYmxlKTtcbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5fY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRVcGRhdGVRdWVyeShxdWVyeTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHMgPSAnVVBEQVRFICcgKyBjb252ZXJ0VGFibGUocXVlcnkuX3RhYmxlKSArICcgU0VUICc7XG4gICAgICAgIHMgKz0gY29udmVydFVwZGF0ZVNldHRlcnMocXVlcnkuX3RhYmxlLCBxdWVyeS5fZW50aXR5KTtcbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5fY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRVcGRhdGVTZXR0ZXJzKHRhYmxlOiBhbnksIGVudGl0eTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eSkuc29ydCgpLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5W2tleV07XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGFibGVba2V5XTtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0Q29sdW1uTmFtZShjb2x1bW4pICsgJyA9ICcgKyBjb252ZXJ0UGFyYW0oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEluc2VydFF1ZXJ5KHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaXRlbXM6IGFueVtdID0gQXJyYXkuaXNBcnJheShxdWVyeS5fZW50aXR5KSA/IHF1ZXJ5Ll9lbnRpdHkgOiBbcXVlcnkuX2VudGl0eV07XG4gICAgICAgIGxldCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gaXRlbXMucmVkdWNlKChzZXQ6IFNldDxzdHJpbmc+LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiBzZXQuYWRkKGtleSkpOyByZXR1cm4gc2V0O1xuICAgICAgICB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gICAgICAgIGxldCBrZXlzID0gQXJyYXkuZnJvbShrZXlTZXQpLnNvcnQoKTtcblxuICAgICAgICBsZXQgcyA9ICdJTlNFUlQgSU5UTyAnICsgY29udmVydFRhYmxlKHF1ZXJ5Ll90YWJsZSkgKyAnICc7XG4gICAgICAgIHMgKz0gJygnICsga2V5cy5tYXAoa2V5ID0+IGNvbnZlcnRDb2x1bW5OYW1lKHF1ZXJ5Ll90YWJsZVtrZXldKSkuam9pbignLCAnKSArICcpJztcbiAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdWQUxVRVMgJztcbiAgICAgICAgcyArPSBpdGVtcy5tYXAoaXRlbSA9PiBjb252ZXJ0SW5zZXJ0SXRlbShxdWVyeS5fdGFibGUsIGl0ZW0sIGtleXMpKVxuICAgICAgICAgICAgLm1hcCgocm93OiBzdHJpbmcpID0+ICcoJyArIHJvdyArICcpJykuam9pbignLCAnKTtcblxuICAgICAgICBzICs9IGdldFBnSW5zZXJ0UmV0dXJuaW5nSWZOZWVkZWQocXVlcnkpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGdldFBnSW5zZXJ0UmV0dXJuaW5nSWZOZWVkZWQocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlbmdpbmUgPT09ICdwZycgJiYgcXVlcnkuX2FjdGlvbiA9PT0gJ2luc2VydCcgJiYgIUFycmF5LmlzQXJyYXkocXVlcnkuX2VudGl0eSkgJiZcbiAgICAgICAgICAgIHF1ZXJ5Ll90YWJsZS4kaWQgJiYgcXVlcnkuX3RhYmxlLiRpZC5fdGFibGUgJiYgcXVlcnkuX3RhYmxlLiRpZC5fbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgUkVUVVJOSU5HICcgKyBjb252ZXJ0Q29sdW1uTmFtZShxdWVyeS5fdGFibGUuJGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEluc2VydEl0ZW0odGFibGU6IGFueSwgZW50aXR5OiBhbnksIGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBlbnRpdHlba2V5XTtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0YWJsZVtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRQYXJhbShjb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0U2VsZWN0UXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJ1NFTEVDVCAnO1xuICAgICAgICBpZiAocXVlcnkuX2Rpc3RpbmN0KSB7XG4gICAgICAgICAgICBzICs9ICdESVNUSU5DVCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1ZXJ5Ll9jb2x1bW5zID09IG51bGwgfHwgcXVlcnkuX2NvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzICs9ICcqJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyArPSBxdWVyeS5fY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiBjb252ZXJ0Q29sdW1uKGNvbHVtbikpLmpvaW4oJywgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzICs9IG9wdGlvbnMubGluZUJyZWFrICsgJ0ZST00gJztcbiAgICAgICAgaWYgKHF1ZXJ5Ll90YWJsZXMpIHtcbiAgICAgICAgICAgIHMrPSBxdWVyeS5fdGFibGVzLm1hcCgodGFibGU6IGFueSkgPT4gdGFibGUuX3BhcmVudCA/IGNvbnZlcnRKb2luKHRhYmxlKSA6IGNvbnZlcnRUYWJsZSh0YWJsZSkpLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzKz0gY29udmVydFRhYmxlKHF1ZXJ5Ll90YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzICs9IGNvbnZlcnRDb25kaXRpb25zKHF1ZXJ5Ll9jb25kaXRpb25zKTtcblxuICAgICAgICBpZiAocXVlcnkuX2dyb3VwQnkgJiYgcXVlcnkuX2dyb3VwQnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdHUk9VUCBCWSAnO1xuICAgICAgICAgICAgcyArPSBxdWVyeS5fZ3JvdXBCeS5tYXAoKGNvbHVtbjogYW55KSA9PiBjb252ZXJ0Q29sdW1uKGNvbHVtbikpLmpvaW4oJywgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5faGF2aW5nLCAnSEFWSU5HJyk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5Ll9vcmRlcmluZ3MgJiYgcXVlcnkuX29yZGVyaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzICs9IG9wdGlvbnMubGluZUJyZWFrICsgJ09SREVSIEJZICc7XG4gICAgICAgICAgICBzICs9IHF1ZXJ5Ll9vcmRlcmluZ3MubWFwKChvcmRlcmluZzogYW55KSA9PiBjb252ZXJ0T3JkZXJpbmcob3JkZXJpbmcpKS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVyeS5fbGltaXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdMSU1JVCAnICsgbnVtYmVyKHF1ZXJ5Ll9saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5Ll9vZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdPRkZTRVQgJyArIG51bWJlcihxdWVyeS5fb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29uZGl0aW9ucyhjb25kaXRpb25zOiBhbnlbXSwga2V5d29yZCA9ICdXSEVSRScpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHMgKz0gb3B0aW9ucy5saW5lQnJlYWsgKyBrZXl3b3JkICsgJyAnO1xuICAgICAgICAgICAgcHJlcHJvY2Vzc0NvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICBzICs9IGNvbmRpdGlvbnMubWFwKGNvbmRpdGlvbiA9PiBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbiwgdHJ1ZSkpLmpvaW4oJyBBTkQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEpvaW4oam9pbkNoYWluOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgICAgIHdoaWxlIChqb2luQ2hhaW4pIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goam9pbkNoYWluKTtcbiAgICAgICAgICAgIGpvaW5DaGFpbiA9IGpvaW5DaGFpbi5fcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJvb3QgPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHMgPSBjb252ZXJ0VGFibGUocm9vdCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS09IDIpIHtcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IGl0ZW1zW2ldLl90YWJsZTtcbiAgICAgICAgICAgIGxldCBtb2RpZmllciA9IGl0ZW1zW2ldLl9tb2RpZmllcjtcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBpdGVtc1tpIC0gMV0uX2NvbmRpdGlvbjtcbiAgICAgICAgICAgIGxldCBwYXJhbSA9IGNvbnZlcnRDb2x1bW4oY29uZGl0aW9uLl9vdGhlckNvbHVtbik7XG4gICAgICAgICAgICBzICs9ICcgJyArIG1vZGlmaWVyLnRvVXBwZXJDYXNlKCkgKyAnIEpPSU4gJyArIGNvbnZlcnRUYWJsZSh0YWJsZSkgKyAnIE9OICcgK1xuICAgICAgICAgICAgICAgIGNvbnZlcnRDb2x1bW5Db25kaXRpb24oY29uZGl0aW9uLCBwYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0T3JkZXJpbmcob3JkZXJpbmc6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChvcmRlcmluZy5fY29sdW1uKSB7XG4gICAgICAgICAgICBsZXQgcyA9IGNvbnZlcnRDb2x1bW4ob3JkZXJpbmcuX2NvbHVtbik7XG5cbiAgICAgICAgICAgIGlmIChvcmRlcmluZy5fbnVsbHNQb3NpdGlvbiAhPSBudWxsKSB7IC8vIFwiTlVMTFMgRklSU1RcIiBvbmx5IGV4aXN0cyBpbiBQRywgdGhpcyBpcyB0aGUgZ2VuZXJhbCBzb2x1dGlvblxuICAgICAgICAgICAgICAgIHMgKz0gJyBJUyBOVUxMICcgKyAob3JkZXJpbmcuX251bGxzUG9zaXRpb24gPT09ICdGSVJTVCcgPyAnREVTQycgOiAnQVNDJykgKyAnLCAnICsgcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9yZGVyaW5nLl9kaXJlY3Rpb24gPT09ICdBU0MnKSBzICs9ICcgQVNDJztcbiAgICAgICAgICAgIGlmIChvcmRlcmluZy5fZGlyZWN0aW9uID09PSAnREVTQycpIHMgKz0gJyBERVNDJztcblxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydENvbHVtbihvcmRlcmluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0VGFibGUodGFibGU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm5hbWVFc2NhcGUgKyB0YWJsZS5fJG5hbWUgKyBvcHRpb25zLm5hbWVFc2NhcGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydENvbHVtbihjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJyc7XG4gICAgICAgIGlmICghKGNvbHVtbi5fbmFtZSA9PT0gJyonICYmIGNvbHVtbi5fbW9kaWZpZXJzLmxlbmd0aCA+IDAgJiYgY29sdW1uLl9tb2RpZmllcnNbMF0ubmFtZSA9PT0gJ2NvdW50JykpIHtcbiAgICAgICAgICAgIHMgKz0gY29udmVydFRhYmxlKGNvbHVtbi5fdGFibGUpICsgJy4nO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gY29udmVydENvbHVtbk5hbWUoY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2x1bW5Nb2RpZmllcnMocywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29sdW1uTW9kaWZpZXJzKHM6IHN0cmluZywgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY29sdW1uLl9tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5fbW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IG1vZGlmaWVyLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdsb3dlcicpIHMgPSAnTE9XRVIoJyArIHMgKyAnKSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ3VwcGVyJykgcyA9ICdVUFBFUignICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY291bnQnKSBzID0gJ0NPVU5UKCcgKyBzICsgJyknO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdzdW0nKSBzID0gJ1NVTSgnICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnYXZnJykgcyA9ICdBVkcoJyArIHMgKyAnKSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ21pbicpIHMgPSAnTUlOKCcgKyBzICsgJyknO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdtYXgnKSBzID0gJ01BWCgnICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnYXMnKSBzID0gcyArICcgQVMgJyArIG9wdGlvbnMubmFtZUVzY2FwZSArIG1vZGlmaWVyLnBhcmFtcyArIG9wdGlvbnMubmFtZUVzY2FwZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzICsgJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydENvbHVtbk5hbWUoY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY29sdW1uLl9uYW1lID09PSAnKicpIHJldHVybiBjb2x1bW4uX25hbWU7XG4gICAgICAgIGxldCBuYW1lID0gdHlwZW9mIGNvbHVtbi5fbmFtZSA9PT0gJ3N0cmluZycgPyBjb2x1bW4uX25hbWUgOiBjb2x1bW4uX25hbWUubmFtZTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubmFtZUVzY2FwZSArIG5hbWUgKyBvcHRpb25zLm5hbWVFc2NhcGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc0NvbmRpdGlvbnMoY29uZGl0aW9uczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxICYmIGNvbmRpdGlvbi5fc2libGluZykge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5fcGFyZW50aGVzaXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcHJvY2Vzc1BhcmFtcyhjb25kaXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NQYXJhbXMoY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fc2libGluZykge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc1BhcmFtcyhjb25kaXRpb24uX3NpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uZGl0aW9uLl9zaWJsaW5nICYmICFjb25kaXRpb24uX2NoaWxkKSB7XG4gICAgICAgICAgICBjb25kaXRpb24uX19wYXJhbSA9IGdldENvbmRpdGlvblBhcmFtKGNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fY2hpbGQpIHtcbiAgICAgICAgICAgIHByZXByb2Nlc3NQYXJhbXMoY29uZGl0aW9uLl9jaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbjogYW55LCByb290ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5fc2libGluZyAmJiAhY29uZGl0aW9uLl9jaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2x1bW5Db25kaXRpb24oY29uZGl0aW9uLCBjb25kaXRpb24uX19wYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBpZiAoY29uZGl0aW9uLl9jaGlsZCkge1xuICAgICAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbi5fY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24uX3NpYmxpbmcpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbi5fc2libGluZywgcm9vdCkgKyAnICcgKyBjb25kaXRpb24uX2NoYWluVHlwZS50b1VwcGVyQ2FzZSgpICsgJyAnICsgcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uLl9wYXJlbnRoZXNpcyB8fCAoKCFyb290IHx8IGNvbmRpdGlvbi5fbmVnYXRpb24pICYmIGNvbmRpdGlvbi5fY2hpbGQpKSB7XG4gICAgICAgICAgICBzID0gJyggJyArIHMgKyAnICknO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24uX25lZ2F0aW9uKSB7XG4gICAgICAgICAgICBzID0gJ05PVCAnICsgcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29sdW1uQ29uZGl0aW9uKGNvbmRpdGlvbjogYW55LCBwYXJhbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHMgPSBjb252ZXJ0Q29sdW1uKGNvbmRpdGlvbi5fY29sdW1uKTtcbiAgICAgICAgcyArPSBnZXRDb25kaXRpb25TdHJpbmcoY29uZGl0aW9uLCBwYXJhbSk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvblN0cmluZyhjb25kaXRpb246IGFueSwgcGFyYW06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLl90eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdlcSc6IHJldHVybiAnID0gJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnbmUnOiByZXR1cm4gJyA8PiAnICsgcGFyYW07XG4gICAgICAgICAgICBjYXNlICdsdCc6IHJldHVybiAnIDwgJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnZ3QnOiByZXR1cm4gJyA+ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2x0ZSc6IHJldHVybiAnIDw9ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2d0ZSc6IHJldHVybiAnID49ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2lzLW51bGwnOiByZXR1cm4gJyBJUyBOVUxMJztcbiAgICAgICAgICAgIGNhc2UgJ2lzLW5vdC1udWxsJzogcmV0dXJuICcgSVMgTk9UIE5VTEwnO1xuICAgICAgICAgICAgY2FzZSAnbGlrZSc6IHJldHVybiAnIExJS0UgJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnbm90LWxpa2UnOiByZXR1cm4gJyBOT1QgTElLRSAnICsgcGFyYW07XG4gICAgICAgICAgICBjYXNlICdpbic6IHJldHVybiAnIElOICgnICsgcGFyYW0gKyAnKSc7XG4gICAgICAgICAgICBjYXNlICdub3QtaW4nOiByZXR1cm4gJyBOT1QgSU4gKCcgKyBwYXJhbSArICcpJztcbiAgICAgICAgICAgIGNhc2UgJ2JldHdlZW4nOiByZXR1cm4gJyBCRVRXRUVOICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ25vdC1iZXR3ZWVuJzogcmV0dXJuICcgTk9UIEJFVFdFRU4gJyArIHBhcmFtO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uUGFyYW0oY29uZGl0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcGFyYW0gPSAnJztcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fb3RoZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHBhcmFtID0gY29udmVydENvbHVtbihjb25kaXRpb24uX290aGVyQ29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBfY29udmVydFBhcmFtID0gKHBhcmFtOiBhbnkpID0+IGNvbnZlcnRQYXJhbShjb25kaXRpb24uX2NvbHVtbiwgcGFyYW0pO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uLl90eXBlID09PSAnaW4nIHx8IGNvbmRpdGlvbi5fdHlwZSA9PT0gJ25vdC1pbicpIHtcbiAgICAgICAgICAgICAgICBwYXJhbSA9IGNvbmRpdGlvbi5fdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4gX2NvbnZlcnRQYXJhbSh2YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5fdHlwZSA9PT0gJ2JldHdlZW4nIHx8IGNvbmRpdGlvbi5fdHlwZSA9PT0gJ25vdC1iZXR3ZWVuJykge1xuICAgICAgICAgICAgICAgIHBhcmFtID0gX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1swXSkgKyAnIEFORCAnICsgX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1sxXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5fdHlwZSAhPT0gJ2lzLW51bGwnICYmIGNvbmRpdGlvbi5fdHlwZSAhPT0gJ2lzLW5vdC1udWxsJykge1xuICAgICAgICAgICAgICAgIHBhcmFtID0gX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRQYXJhbShjb2x1bW46IGFueSwgcGFyYW06IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSByZXR1cm4gJ05VTEwnO1xuICAgICAgICByZXR1cm4gcGFyYW1Db252ZXJ0ZXIoZ2V0VHlwZWRQYXJhbShjb2x1bW4uX3R5cGUsIHBhcmFtKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VHlwZWRQYXJhbSh0eXBlOiBzdHJpbmcsIHBhcmFtOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHJldHVybiBudW1iZXIocGFyYW0pO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHJldHVybiBib29sZWFuKHBhcmFtKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2RhdGUnKSByZXR1cm4gZGF0ZShwYXJhbSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4gc3RyaW5nKHBhcmFtKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZS1zcWwgbGliL2NvbnZlcnRlci9xdWVyeS1jb252ZXJ0ZXIudHMiXX0=
|