velocious 1.0.351 → 1.0.353
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/build/src/database/drivers/sqlite/sql/alter-table.d.ts +22 -0
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +122 -91
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts +41 -0
- package/build/src/database/drivers/sqlite/table-rebuilder.d.ts.map +1 -0
- package/build/src/database/drivers/sqlite/table-rebuilder.js +81 -0
- package/build/src/database/query/alter-table-base.d.ts.map +1 -1
- package/build/src/database/query/alter-table-base.js +22 -5
- package/build/src/database/query/create-table-base.d.ts.map +1 -1
- package/build/src/database/query/create-table-base.js +11 -2
- package/build/src/database/table-data/table-column.d.ts +3 -1
- package/build/src/database/table-data/table-column.d.ts.map +1 -1
- package/build/src/database/table-data/table-column.js +4 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable extends AlterTableBase {
|
|
2
2
|
logger: Logger;
|
|
3
|
+
/**
|
|
4
|
+
* Merges the current schema with the alter request to produce the desired final schema
|
|
5
|
+
* and the column copy plan.
|
|
6
|
+
* @param {TableData} currentTableData - Current schema as introspected from the database.
|
|
7
|
+
* @param {TableData} alterTableData - Alter request: new columns (`isNewColumn`), renames (`newName`), drops (`dropColumn`), modifies, and new foreign keys.
|
|
8
|
+
* @returns {{targetTableData: TableData, columnPairs: Array<[string, string]>}} - The merged target schema and the [oldName, newName] pairs for INSERT...SELECT.
|
|
9
|
+
*/
|
|
10
|
+
_buildTargetSchema(currentTableData: TableData, alterTableData: TableData): {
|
|
11
|
+
targetTableData: TableData;
|
|
12
|
+
columnPairs: Array<[string, string]>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Returns the foreign key with its column name updated when the column was renamed in the
|
|
16
|
+
* alter request. SQLite re-creates the constraint inside the rebuilt CREATE TABLE, so a
|
|
17
|
+
* stale column name there would reference a column that no longer exists.
|
|
18
|
+
* @param {TableForeignKey} foreignKey - Foreign key to evaluate.
|
|
19
|
+
* @param {Map<string, string>} columnRenames - Map of old → new column names from the alter request.
|
|
20
|
+
* @returns {TableForeignKey} - The original foreign key, or a fresh instance with the renamed column.
|
|
21
|
+
*/
|
|
22
|
+
_renameForeignKeyColumn(foreignKey: TableForeignKey, columnRenames: Map<string, string>): TableForeignKey;
|
|
3
23
|
}
|
|
4
24
|
import AlterTableBase from "../../../query/alter-table-base.js";
|
|
5
25
|
import Logger from "../../../../logger.js";
|
|
26
|
+
import TableData from "../../../table-data/index.js";
|
|
27
|
+
import TableForeignKey from "../../../table-data/table-foreign-key.js";
|
|
6
28
|
//# sourceMappingURL=alter-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alter-table.d.ts","sourceRoot":"","sources":["../../../../../../src/database/drivers/sqlite/sql/alter-table.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"alter-table.d.ts","sourceRoot":"","sources":["../../../../../../src/database/drivers/sqlite/sql/alter-table.js"],"names":[],"mappings":"AAUA;IAYI,eAA8B;IA8ChC;;;;;;OAMG;IACH,qCAJW,SAAS,kBACT,SAAS,GACP;QAAC,eAAe,EAAE,SAAS,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAC,CAmF9E;IAED;;;;;;;OAOG;IACH,oCAJW,eAAe,iBACf,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjB,eAAe,CAe3B;CACF;2BAlL0B,oCAAoC;mBAC5C,uBAAuB;sBAEpB,8BAA8B;4BACxB,0CAA0C"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import AlterTableBase from "../../../query/alter-table-base.js";
|
|
3
|
-
import CreateIndexBase from "../../../query/create-index-base.js";
|
|
4
3
|
import Logger from "../../../../logger.js";
|
|
5
4
|
import restArgsError from "../../../../utils/rest-args-error.js";
|
|
6
5
|
import TableData from "../../../table-data/index.js";
|
|
6
|
+
import TableForeignKey from "../../../table-data/table-foreign-key.js";
|
|
7
|
+
import TableIndex from "../../../table-data/table-index.js";
|
|
8
|
+
import TableRebuilder from "../table-rebuilder.js";
|
|
7
9
|
export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable extends AlterTableBase {
|
|
8
10
|
/**
|
|
9
11
|
* @param {object} args - Options object.
|
|
@@ -22,109 +24,138 @@ export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable exten
|
|
|
22
24
|
* @returns {Promise<string[]>} - Resolves with SQL statements.
|
|
23
25
|
*/
|
|
24
26
|
async toSQLs() {
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
+
const driver = this.getDriver();
|
|
28
|
+
const { tableData: alterTableData } = this;
|
|
29
|
+
const tableName = alterTableData.getName();
|
|
30
|
+
const table = await driver.getTableByName(tableName);
|
|
27
31
|
if (!table)
|
|
28
|
-
throw new Error(`Table ${
|
|
32
|
+
throw new Error(`Table ${tableName} does not exist`);
|
|
29
33
|
const currentTableData = await table.getTableData();
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const newTableColumn = tableData.getColumns().find((tableColumn) => tableColumn.getName() == column.getName());
|
|
37
|
-
return newTableColumn?.getNewName() || newTableColumn?.getName() || column.getNewName() || column.getName();
|
|
34
|
+
const { targetTableData, columnPairs } = this._buildTargetSchema(currentTableData, alterTableData);
|
|
35
|
+
const rebuilder = new TableRebuilder({
|
|
36
|
+
columnPairs,
|
|
37
|
+
driver,
|
|
38
|
+
originalTableName: tableName,
|
|
39
|
+
targetTableData
|
|
38
40
|
});
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
const rebuildSQLs = await rebuilder.toSQLs();
|
|
42
|
+
const sqls = [];
|
|
43
|
+
// PRAGMA foreign_keys can only be toggled outside an active transaction; when the
|
|
44
|
+
// caller is already inside one these become no-ops (matching prior behavior). Outside
|
|
45
|
+
// a transaction they protect the rebuild from cross-table FK enforcement during the
|
|
46
|
+
// DROP/RENAME swap. Capture the prior state so we restore it instead of unconditionally
|
|
47
|
+
// forcing ON — callers that deliberately disabled FK enforcement (e.g. bulk data fixes)
|
|
48
|
+
// shouldn't be silently flipped back on by a migration.
|
|
49
|
+
const priorState = await driver.query("PRAGMA foreign_keys");
|
|
50
|
+
const wasEnabled = priorState[0]?.foreign_keys == 1;
|
|
51
|
+
sqls.push("PRAGMA foreign_keys = OFF");
|
|
52
|
+
for (const sql of rebuildSQLs)
|
|
53
|
+
sqls.push(sql);
|
|
54
|
+
sqls.push(`PRAGMA foreign_keys = ${wasEnabled ? "ON" : "OFF"}`);
|
|
55
|
+
return sqls;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Merges the current schema with the alter request to produce the desired final schema
|
|
59
|
+
* and the column copy plan.
|
|
60
|
+
* @param {TableData} currentTableData - Current schema as introspected from the database.
|
|
61
|
+
* @param {TableData} alterTableData - Alter request: new columns (`isNewColumn`), renames (`newName`), drops (`dropColumn`), modifies, and new foreign keys.
|
|
62
|
+
* @returns {{targetTableData: TableData, columnPairs: Array<[string, string]>}} - The merged target schema and the [oldName, newName] pairs for INSERT...SELECT.
|
|
63
|
+
*/
|
|
64
|
+
_buildTargetSchema(currentTableData, alterTableData) {
|
|
65
|
+
const targetTableData = new TableData(currentTableData.getName());
|
|
66
|
+
/** @type {Array<[string, string]>} */
|
|
67
|
+
const columnPairs = [];
|
|
68
|
+
const alterColumns = alterTableData.getColumns();
|
|
69
|
+
const existingNames = new Set(currentTableData.getColumns().map((column) => column.getName()));
|
|
70
|
+
/** @type {Map<string, string>} */
|
|
71
|
+
const columnRenames = new Map();
|
|
72
|
+
for (const alterColumn of alterColumns) {
|
|
73
|
+
if (alterColumn.isNewColumn())
|
|
74
|
+
continue;
|
|
75
|
+
const newName = alterColumn.getNewName();
|
|
76
|
+
if (newName)
|
|
77
|
+
columnRenames.set(alterColumn.getName(), newName);
|
|
78
|
+
}
|
|
79
|
+
for (const currentColumn of currentTableData.getColumns()) {
|
|
80
|
+
const alterColumn = alterColumns.find((column) => column.getName() == currentColumn.getName() && !column.isNewColumn());
|
|
81
|
+
if (alterColumn?.getDropColumn())
|
|
82
|
+
continue;
|
|
83
|
+
let targetColumn;
|
|
84
|
+
if (alterColumn) {
|
|
85
|
+
// The alter request supplies a partial column spec (e.g. just a rename or a type change);
|
|
86
|
+
// inherit unset properties from the current column so we don't lose existing definitions.
|
|
87
|
+
alterColumn.setAutoIncrement(alterColumn.getAutoIncrement() || currentColumn.getAutoIncrement());
|
|
88
|
+
if (alterColumn.getDefault() === undefined)
|
|
89
|
+
alterColumn.setDefault(currentColumn.getDefault());
|
|
90
|
+
if (!alterColumn.getIndex())
|
|
91
|
+
alterColumn.setIndex(currentColumn.getIndex());
|
|
92
|
+
if (!alterColumn.getForeignKey())
|
|
93
|
+
alterColumn.setForeignKey(currentColumn.getForeignKey());
|
|
94
|
+
if (alterColumn.getMaxLength() === undefined)
|
|
95
|
+
alterColumn.setMaxLength(currentColumn.getMaxLength());
|
|
96
|
+
alterColumn.setPrimaryKey(alterColumn.getPrimaryKey() || currentColumn.getPrimaryKey());
|
|
97
|
+
if (!alterColumn.getType())
|
|
98
|
+
alterColumn.setType(currentColumn.getType());
|
|
99
|
+
targetColumn = alterColumn;
|
|
48
100
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
newTableDataColumn.setDefault(tableDataColumn.getDefault());
|
|
52
|
-
newTableDataColumn.setIndex(tableDataColumn.getIndex());
|
|
53
|
-
newTableDataColumn.setForeignKey(tableDataColumn.getForeignKey());
|
|
54
|
-
newTableDataColumn.setMaxLength(tableDataColumn.getMaxLength());
|
|
55
|
-
newTableDataColumn.setPrimaryKey(tableDataColumn.getPrimaryKey());
|
|
56
|
-
newTableDataColumn.setType(tableDataColumn.getType());
|
|
101
|
+
else {
|
|
102
|
+
targetColumn = currentColumn;
|
|
57
103
|
}
|
|
58
|
-
|
|
104
|
+
targetTableData.addColumn(targetColumn);
|
|
105
|
+
columnPairs.push([currentColumn.getName(), targetColumn.getNewName() || targetColumn.getName()]);
|
|
59
106
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
for (const tableDataColumn of tableData.getColumns()) {
|
|
63
|
-
if (!tableDataColumn.isNewColumn())
|
|
107
|
+
for (const alterColumn of alterColumns) {
|
|
108
|
+
if (!alterColumn.isNewColumn())
|
|
64
109
|
continue;
|
|
65
|
-
if (
|
|
110
|
+
if (existingNames.has(alterColumn.getName()))
|
|
66
111
|
continue;
|
|
67
|
-
|
|
112
|
+
targetTableData.addColumn(alterColumn);
|
|
68
113
|
}
|
|
69
|
-
const
|
|
70
|
-
for (const
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// Register foreign key on the table
|
|
76
|
-
newTableData.addForeignKey(actualTableDataForeignKey);
|
|
77
|
-
// Register foreign key on the column
|
|
78
|
-
const tableDataColumn = newTableData.getColumns().find((newTableDataColumn) => newTableDataColumn.getName() == actualTableDataForeignKey.getColumnName());
|
|
79
|
-
if (!tableDataColumn)
|
|
80
|
-
throw new Error(`Couldn't find column for foreign key: ${actualTableDataForeignKey.getName()}`);
|
|
81
|
-
this.logger.debugLowLevel(() => `Setting foreign key on column ${tableDataColumn.getName()}`);
|
|
82
|
-
tableDataColumn.setForeignKey(actualTableDataForeignKey);
|
|
114
|
+
const seenForeignKeyNames = new Set();
|
|
115
|
+
for (const currentForeignKey of currentTableData.getForeignKeys()) {
|
|
116
|
+
const alterForeignKey = alterTableData.getForeignKeys().find((foreignKey) => foreignKey.getName() == currentForeignKey.getName());
|
|
117
|
+
const finalForeignKey = this._renameForeignKeyColumn(alterForeignKey || currentForeignKey, columnRenames);
|
|
118
|
+
seenForeignKeyNames.add(finalForeignKey.getName());
|
|
119
|
+
targetTableData.addForeignKey(finalForeignKey);
|
|
83
120
|
}
|
|
84
|
-
for (const
|
|
85
|
-
if (
|
|
121
|
+
for (const alterForeignKey of alterTableData.getForeignKeys()) {
|
|
122
|
+
if (seenForeignKeyNames.has(alterForeignKey.getName()))
|
|
86
123
|
continue;
|
|
87
|
-
|
|
88
|
-
newTableData.addForeignKey(foreignKey);
|
|
89
|
-
// Register foreign key on the column
|
|
90
|
-
const tableDataColumn = newTableData.getColumns().find((newTableDataColumn) => newTableDataColumn.getName() == foreignKey.getColumnName());
|
|
91
|
-
if (!tableDataColumn)
|
|
92
|
-
throw new Error(`Couldn't find column for foreign key: ${foreignKey.getName()}`);
|
|
93
|
-
this.logger.debugLowLevel(() => `Setting foreign key on column ${tableDataColumn.getName()}`);
|
|
94
|
-
tableDataColumn.setForeignKey(foreignKey);
|
|
124
|
+
targetTableData.addForeignKey(this._renameForeignKeyColumn(alterForeignKey, columnRenames));
|
|
95
125
|
}
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
for (const sql of createNewTableSQL) {
|
|
102
|
-
sqls.push(sql);
|
|
103
|
-
}
|
|
104
|
-
sqls.push(insertSQL);
|
|
105
|
-
sqls.push(dropTableSQLs);
|
|
106
|
-
sqls.push(renameTableSQL);
|
|
107
|
-
for (const tableDataIndex of currentTableData.getIndexes()) {
|
|
108
|
-
const newTableDataIndex = newTableData.getIndexes().find((newTableDataIndex) => newTableDataIndex.getName() == tableDataIndex.getName());
|
|
109
|
-
const actualTableIndex = newTableDataIndex || tableDataIndex;
|
|
110
|
-
newTableData.addIndex(actualTableIndex);
|
|
111
|
-
const columnNames = actualTableIndex.getColumns().map((columnName) => {
|
|
112
|
-
const newTableColumn = tableData.getColumns().find((tableColumn) => tableColumn.getName() == columnName);
|
|
113
|
-
return newTableColumn?.getNewName() || newTableColumn?.getName() || columnName;
|
|
126
|
+
for (const currentIndex of currentTableData.getIndexes()) {
|
|
127
|
+
const renamedColumns = currentIndex.getColumns().map((columnName) => {
|
|
128
|
+
if (typeof columnName != "string")
|
|
129
|
+
return columnName;
|
|
130
|
+
return columnRenames.get(columnName) || columnName;
|
|
114
131
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
tableName,
|
|
120
|
-
unique: actualTableIndex.getUnique()
|
|
121
|
-
};
|
|
122
|
-
const createIndexSQLs = await new CreateIndexBase(createIndexArgs).toSQLs();
|
|
123
|
-
for (const createIndexSQL of createIndexSQLs) {
|
|
124
|
-
sqls.push(createIndexSQL);
|
|
125
|
-
}
|
|
132
|
+
targetTableData.addIndex(new TableIndex(renamedColumns, {
|
|
133
|
+
name: currentIndex.getName(),
|
|
134
|
+
unique: currentIndex.getUnique()
|
|
135
|
+
}));
|
|
126
136
|
}
|
|
127
|
-
return
|
|
137
|
+
return { targetTableData, columnPairs };
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Returns the foreign key with its column name updated when the column was renamed in the
|
|
141
|
+
* alter request. SQLite re-creates the constraint inside the rebuilt CREATE TABLE, so a
|
|
142
|
+
* stale column name there would reference a column that no longer exists.
|
|
143
|
+
* @param {TableForeignKey} foreignKey - Foreign key to evaluate.
|
|
144
|
+
* @param {Map<string, string>} columnRenames - Map of old → new column names from the alter request.
|
|
145
|
+
* @returns {TableForeignKey} - The original foreign key, or a fresh instance with the renamed column.
|
|
146
|
+
*/
|
|
147
|
+
_renameForeignKeyColumn(foreignKey, columnRenames) {
|
|
148
|
+
const renamed = columnRenames.get(foreignKey.getColumnName());
|
|
149
|
+
if (!renamed)
|
|
150
|
+
return foreignKey;
|
|
151
|
+
return new TableForeignKey({
|
|
152
|
+
columnName: renamed,
|
|
153
|
+
isNewForeignKey: foreignKey.getIsNewForeignKey(),
|
|
154
|
+
name: foreignKey.getName(),
|
|
155
|
+
referencedColumnName: foreignKey.getReferencedColumnName(),
|
|
156
|
+
referencedTableName: foreignKey.getReferencedTableName(),
|
|
157
|
+
tableName: foreignKey.getTableName()
|
|
158
|
+
});
|
|
128
159
|
}
|
|
129
160
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvc3FsL2FsdGVyLXRhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGNBQWMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMvRCxPQUFPLGVBQWUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNqRSxPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQTtBQUMxQyxPQUFPLGFBQWEsTUFBTSxzQ0FBc0MsQ0FBQTtBQUNoRSxPQUFPLFNBQVMsTUFBTSw4QkFBOEIsQ0FBQTtBQUVwRCxNQUFNLENBQUMsT0FBTyxPQUFPLHFEQUFzRCxTQUFRLGNBQWM7SUFDL0Y7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRXRGLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUV4RSxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFB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YmxlQmFzZSBmcm9tIFwiLi4vLi4vLi4vcXVlcnkvYWx0ZXItdGFibGUtYmFzZS5qc1wiXG5pbXBvcnQgQ3JlYXRlSW5kZXhCYXNlIGZyb20gXCIuLi8uLi8uLi9xdWVyeS9jcmVhdGUtaW5kZXgtYmFzZS5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi8uLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VDb25uZWN0aW9uRHJpdmVyc1NxbGl0ZVNxbEFsdGVyVGFibGUgZXh0ZW5kcyBBbHRlclRhYmxlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCB0YWJsZURhdGEsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyLCB0YWJsZURhdGF9KVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMudGFibGVEYXRhID0gdGFibGVEYXRhXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyB0b1NRTHMoKSB7XG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlRGF0YS5nZXROYW1lKCkpXG5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGVEYXRhLmdldE5hbWUoKX0gZG9lcyBub3QgZXhpc3RgKVxuXG4gICAgY29uc3QgY3VycmVudFRhYmxlRGF0YSA9IGF3YWl0IHRhYmxlLmdldFRhYmxlRGF0YSgpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVEYXRhLmdldE5hbWUoKVxuICAgIGNvbnN0IHRlbXBUYWJsZU5hbWUgPSBgJHt0YWJsZURhdGEuZ2V0TmFtZSgpfUFsdGVyVGFibGVUZW1wYFxuICAgIGNvbnN0IG5ld0NvbHVtbk5hbWVzID0gY3VycmVudFRhYmxlRGF0YS5nZXRDb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc05ld0NvbHVtbigpKVxuICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uID0gdGFibGVEYXRhLmdldENvbHVtbnMoKS5maW5kKCh0YWJsZUNvbHVtbikgPT4gdGFibGVDb2x1bW4uZ2V0TmFtZSgpID09IGNvbHVtbi5nZXROYW1lKCkpXG5cbiAgICAgICAgcmV0dXJuIG5ld1RhYmxlQ29sdW1uPy5nZXROZXdOYW1lKCkgfHwgbmV3VGFibGVDb2x1bW4/LmdldE5hbWUoKSB8fCBjb2x1bW4uZ2V0TmV3TmFtZSgpIHx8IGNvbHVtbi5nZXROYW1lKClcbiAgICAgIH0pXG4gICAgY29uc3Qgb2xkQ29sdW1uTmFtZXMgPSBjdXJyZW50VGFibGVEYXRhLmdldENvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc05ld0NvbHVtbigpKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldE5hbWUoKSlcbiAgICBjb25zdCBuZXdDb2x1bW5zU1FMID0gbmV3Q29sdW1uTmFtZXMubWFwKChuYW1lKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShuYW1lKSkuam9pbihcIiwgXCIpXG4gICAgY29uc3Qgb2xkQ29sdW1uc1NRTCA9IG9sZENvbHVtbk5hbWVzLm1hcCgobmFtZSkgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUobmFtZSkpLmpvaW4oXCIsIFwiKVxuXG4gICAgdGFibGVEYXRhLnNldE5hbWUodGVtcFRhYmxlTmFtZSlcblxuICAgIGNvbnN0IG5ld1RhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGVtcFRhYmxlTmFtZSlcblxuICAgIGZvciAoY29uc3QgdGFibGVEYXRhQ29sdW1uIG9mIGN1cnJlbnRUYWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBsZXQgbmV3VGFibGVEYXRhQ29sdW1uID0gdGFibGVEYXRhLmdldENvbHVtbnMoKS5maW5kKChuZXdUYWJsZURhdGFDb2x1bW4pID0+IG5ld1RhYmxlRGF0YUNvbHVtbi5nZXROYW1lKCkgPT0gdGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSlcblxuICAgICAgaWYgKG5ld1RhYmxlRGF0YUNvbHVtbiAmJiBuZXdUYWJsZURhdGFDb2x1bW4uaXNOZXdDb2x1bW4oKSkge1xuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4gPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1RhYmxlRGF0YUNvbHVtbikge1xuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0QXV0b0luY3JlbWVudCh0YWJsZURhdGFDb2x1bW4uZ2V0QXV0b0luY3JlbWVudCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0RGVmYXVsdCh0YWJsZURhdGFDb2x1bW4uZ2V0RGVmYXVsdCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0SW5kZXgodGFibGVEYXRhQ29sdW1uLmdldEluZGV4KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRGb3JlaWduS2V5KHRhYmxlRGF0YUNvbHVtbi5nZXRGb3JlaWduS2V5KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRNYXhMZW5ndGgodGFibGVEYXRhQ29sdW1uLmdldE1heExlbmd0aCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0UHJpbWFyeUtleSh0YWJsZURhdGFDb2x1bW4uZ2V0UHJpbWFyeUtleSgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0VHlwZSh0YWJsZURhdGFDb2x1bW4uZ2V0VHlwZSgpKVxuICAgICAgfVxuXG4gICAgICBuZXdUYWJsZURhdGEuYWRkQ29sdW1uKG5ld1RhYmxlRGF0YUNvbHVtbiB8fCB0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgLy8gU1FMaXRlIHJlYnVpbGRzIHVzZSBleGlzdGluZyBjb2x1bW5zIHBsdXMgbmV3IG9uZXM7IGF2b2lkIGR1cGxpY2F0aW5nIGEgY29sdW1uIHRoYXQgYWxyZWFkeSBleGlzdHMuXG4gICAgY29uc3QgZXhpc3RpbmdDb2x1bW5OYW1lcyA9IG5ldyBTZXQoY3VycmVudFRhYmxlRGF0YS5nZXRDb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXROYW1lKCkpKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFDb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4uaXNOZXdDb2x1bW4oKSkgY29udGludWVcbiAgICAgIGlmIChleGlzdGluZ0NvbHVtbk5hbWVzLmhhcyh0YWJsZURhdGFDb2x1bW4uZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgbmV3VGFibGVEYXRhLmFkZENvbHVtbih0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRGb3JlaWduS2V5cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlRGF0YUZvcmVpZ25LZXkgb2YgY3VycmVudFRhYmxlRGF0YS5nZXRGb3JlaWduS2V5cygpKSB7XG4gICAgICBjb25zdCBuZXdUYWJsZURhdGFGb3JlaWduS2V5ID0gbmV3VGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkuZmluZCgobmV3VGFibGVEYXRhRm9yZWlnbktleSkgPT4gbmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkgPT0gdGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGlmIChuZXdUYWJsZURhdGFGb3JlaWduS2V5KSBmb3VuZEZvcmVpZ25LZXlzLnB1c2gobmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGNvbnN0IGFjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkgPSBuZXdUYWJsZURhdGFGb3JlaWduS2V5IHx8IHRhYmxlRGF0YUZvcmVpZ25LZXlcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2FjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoYWN0dWFsVGFibGVEYXRhRm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgdGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkpIHtcbiAgICAgIGlmIChmb3VuZEZvcmVpZ25LZXlzLmluY2x1ZGVzKGZvcmVpZ25LZXkuZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShmb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2ZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoZm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVOZXdUYWJsZVNRTCA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlVGFibGVTcWwobmV3VGFibGVEYXRhKVxuICAgIGNvbnN0IGluc2VydFNRTCA9IGBJTlNFUlQgSU5UTyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGVtcFRhYmxlTmFtZSl9ICgke25ld0NvbHVtbnNTUUx9KSBTRUxFQ1QgJHtvbGRDb2x1bW5zU1FMfSBGUk9NICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBkcm9wVGFibGVTUUxzID0gYERST1AgVEFCTEUgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSl9YFxuICAgIGNvbnN0IHJlbmFtZVRhYmxlU1FMID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gUkVOQU1FIFRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBzcWxzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZU5ld1RhYmxlU1FMKSB7XG4gICAgICBzcWxzLnB1c2goc3FsKVxuICAgIH1cblxuICAgIHNxbHMucHVzaChpbnNlcnRTUUwpXG4gICAgc3Fscy5wdXNoKGRyb3BUYWJsZVNRTHMpXG4gICAgc3Fscy5wdXNoKHJlbmFtZVRhYmxlU1FMKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFJbmRleCBvZiBjdXJyZW50VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgbmV3VGFibGVEYXRhSW5kZXggPSBuZXdUYWJsZURhdGEuZ2V0SW5kZXhlcygpLmZpbmQoKG5ld1RhYmxlRGF0YUluZGV4KSA9PiBuZXdUYWJsZURhdGFJbmRleC5nZXROYW1lKCkgPT0gdGFibGVEYXRhSW5kZXguZ2V0TmFtZSgpKVxuICAgICAgY29uc3QgYWN0dWFsVGFibGVJbmRleCA9IG5ld1RhYmxlRGF0YUluZGV4IHx8IHRhYmxlRGF0YUluZGV4XG5cbiAgICAgIG5ld1RhYmxlRGF0YS5hZGRJbmRleChhY3R1YWxUYWJsZUluZGV4KVxuXG4gICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGFjdHVhbFRhYmxlSW5kZXguZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdUYWJsZUNvbHVtbiA9IHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkuZmluZCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLmdldE5hbWUoKSA9PSBjb2x1bW5OYW1lKVxuXG4gICAgICAgIHJldHVybiBuZXdUYWJsZUNvbHVtbj8uZ2V0TmV3TmFtZSgpIHx8IG5ld1RhYmxlQ29sdW1uPy5nZXROYW1lKCkgfHwgY29sdW1uTmFtZVxuICAgICAgfSlcblxuICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5OYW1lcyxcbiAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICBuYW1lOiBhY3R1YWxUYWJsZUluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICB1bmlxdWU6IGFjdHVhbFRhYmxlSW5kZXguZ2V0VW5pcXVlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICBmb3IgKGNvbnN0IGNyZWF0ZUluZGV4U1FMIG9mIGNyZWF0ZUluZGV4U1FMcykge1xuICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbHNcbiAgfVxufVxuIl19
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvc3FsL2FsdGVyLXRhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGNBQWMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMvRCxPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQTtBQUMxQyxPQUFPLGFBQWEsTUFBTSxzQ0FBc0MsQ0FBQTtBQUNoRSxPQUFPLFNBQVMsTUFBTSw4QkFBOEIsQ0FBQTtBQUNwRCxPQUFPLGVBQWUsTUFBTSwwQ0FBMEMsQ0FBQTtBQUN0RSxPQUFPLFVBQVUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMzRCxPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUVsRCxNQUFNLENBQUMsT0FBTyxPQUFPLHFEQUFzRCxTQUFRLGNBQWM7SUFDL0Y7Ozs7T0FJRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRXRGLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFBO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDL0IsTUFBTSxFQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUMsR0FBRyxJQUFJLENBQUE7UUFD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LEVBQUU7U0FDckMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBBbHRlclRhYmxlQmFzZSBmcm9tIFwiLi4vLi4vLi4vcXVlcnkvYWx0ZXItdGFibGUtYmFzZS5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi8uLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi8uLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCJcbmltcG9ydCBUYWJsZUZvcmVpZ25LZXkgZnJvbSBcIi4uLy4uLy4uL3RhYmxlLWRhdGEvdGFibGUtZm9yZWlnbi1rZXkuanNcIlxuaW1wb3J0IFRhYmxlSW5kZXggZnJvbSBcIi4uLy4uLy4uL3RhYmxlLWRhdGEvdGFibGUtaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlUmVidWlsZGVyIGZyb20gXCIuLi90YWJsZS1yZWJ1aWxkZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZUNvbm5lY3Rpb25Ecml2ZXJzU3FsaXRlU3FsQWx0ZXJUYWJsZSBleHRlbmRzIEFsdGVyVGFibGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MudGFibGVEYXRhIC0gVGFibGUgZGF0YS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkcml2ZXIsIHRhYmxlRGF0YSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghKHRhYmxlRGF0YSBpbnN0YW5jZW9mIFRhYmxlRGF0YSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgZGF0YSB3YXMgZ2l2ZW5cIilcblxuICAgIHN1cGVyKHtkcml2ZXIsIHRhYmxlRGF0YX0pXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cy5cbiAgICovXG4gIGFzeW5jIHRvU1FMcygpIHtcbiAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmdldERyaXZlcigpXG4gICAgY29uc3Qge3RhYmxlRGF0YTogYWx0ZXJUYWJsZURhdGF9ID0gdGhpc1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IGFsdGVyVGFibGVEYXRhLmdldE5hbWUoKVxuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgZHJpdmVyLmdldFRhYmxlQnlOYW1lKHRhYmxlTmFtZSlcblxuICAgIGlmICghdGFibGUpIHRocm93IG5ldyBFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IGRvZXMgbm90IGV4aXN0YClcblxuICAgIGNvbnN0IGN1cnJlbnRUYWJsZURhdGEgPSBhd2FpdCB0YWJsZS5nZXRUYWJsZURhdGEoKVxuICAgIGNvbnN0IHt0YXJnZXRUYWJsZURhdGEsIGNvbHVtblBhaXJzfSA9IHRoaXMuX2J1aWxkVGFyZ2V0U2NoZW1hKGN1cnJlbnRUYWJsZURhdGEsIGFsdGVyVGFibGVEYXRhKVxuXG4gICAgY29uc3QgcmVidWlsZGVyID0gbmV3IFRhYmxlUmVidWlsZGVyKHtcbiAgICAgIGNvbHVtblBhaXJzLFxuICAgICAgZHJpdmVyLFxuICAgICAgb3JpZ2luYWxUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICAgIHRhcmdldFRhYmxlRGF0YVxuICAgIH0pXG5cbiAgICBjb25zdCByZWJ1aWxkU1FMcyA9IGF3YWl0IHJlYnVpbGRlci50b1NRTHMoKVxuICAgIGNvbnN0IHNxbHMgPSBbXVxuXG4gICAgLy8gUFJBR01BIGZvcmVpZ25fa2V5cyBjYW4gb25seSBiZSB0b2dnbGVkIG91dHNpZGUgYW4gYWN0aXZlIHRyYW5zYWN0aW9uOyB3aGVuIHRoZVxuICAgIC8vIGNhbGxlciBpcyBhbHJlYWR5IGluc2lkZSBvbmUgdGhlc2UgYmVjb21lIG5vLW9wcyAobWF0Y2hpbmcgcHJpb3IgYmVoYXZpb3IpLiBPdXRzaWRlXG4gICAgLy8gYSB0cmFuc2FjdGlvbiB0aGV5IHByb3RlY3QgdGhlIHJlYnVpbGQgZnJvbSBjcm9zcy10YWJsZSBGSyBlbmZvcmNlbWVudCBkdXJpbmcgdGhlXG4gICAgLy8gRFJPUC9SRU5BTUUgc3dhcC4gQ2FwdHVyZSB0aGUgcHJpb3Igc3RhdGUgc28gd2UgcmVzdG9yZSBpdCBpbnN0ZWFkIG9mIHVuY29uZGl0aW9uYWxseVxuICAgIC8vIGZvcmNpbmcgT04g4oCUIGNhbGxlcnMgdGhhdCBkZWxpYmVyYXRlbHkgZGlzYWJsZWQgRksgZW5mb3JjZW1lbnQgKGUuZy4gYnVsayBkYXRhIGZpeGVzKVxuICAgIC8vIHNob3VsZG4ndCBiZSBzaWxlbnRseSBmbGlwcGVkIGJhY2sgb24gYnkgYSBtaWdyYXRpb24uXG4gICAgY29uc3QgcHJpb3JTdGF0ZSA9IGF3YWl0IGRyaXZlci5xdWVyeShcIlBSQUdNQSBmb3JlaWduX2tleXNcIilcbiAgICBjb25zdCB3YXNFbmFibGVkID0gcHJpb3JTdGF0ZVswXT8uZm9yZWlnbl9rZXlzID09IDFcblxuICAgIHNxbHMucHVzaChcIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPRkZcIilcblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIHJlYnVpbGRTUUxzKSBzcWxzLnB1c2goc3FsKVxuXG4gICAgc3Fscy5wdXNoKGBQUkFHTUEgZm9yZWlnbl9rZXlzID0gJHt3YXNFbmFibGVkID8gXCJPTlwiIDogXCJPRkZcIn1gKVxuXG4gICAgcmV0dXJuIHNxbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIGN1cnJlbnQgc2NoZW1hIHdpdGggdGhlIGFsdGVyIHJlcXVlc3QgdG8gcHJvZHVjZSB0aGUgZGVzaXJlZCBmaW5hbCBzY2hlbWFcbiAgICogYW5kIHRoZSBjb2x1bW4gY29weSBwbGFuLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YX0gY3VycmVudFRhYmxlRGF0YSAtIEN1cnJlbnQgc2NoZW1hIGFzIGludHJvc3BlY3RlZCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtUYWJsZURhdGF9IGFsdGVyVGFibGVEYXRhIC0gQWx0ZXIgcmVxdWVzdDogbmV3IGNvbHVtbnMgKGBpc05ld0NvbHVtbmApLCByZW5hbWVzIChgbmV3TmFtZWApLCBkcm9wcyAoYGRyb3BDb2x1bW5gKSwgbW9kaWZpZXMsIGFuZCBuZXcgZm9yZWlnbiBrZXlzLlxuICAgKiBAcmV0dXJucyB7e3RhcmdldFRhYmxlRGF0YTogVGFibGVEYXRhLCBjb2x1bW5QYWlyczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT59fSAtIFRoZSBtZXJnZWQgdGFyZ2V0IHNjaGVtYSBhbmQgdGhlIFtvbGROYW1lLCBuZXdOYW1lXSBwYWlycyBmb3IgSU5TRVJULi4uU0VMRUNULlxuICAgKi9cbiAgX2J1aWxkVGFyZ2V0U2NoZW1hKGN1cnJlbnRUYWJsZURhdGEsIGFsdGVyVGFibGVEYXRhKSB7XG4gICAgY29uc3QgdGFyZ2V0VGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YShjdXJyZW50VGFibGVEYXRhLmdldE5hbWUoKSlcbiAgICAvKiogQHR5cGUge0FycmF5PFtzdHJpbmcsIHN0cmluZ10+fSAqL1xuICAgIGNvbnN0IGNvbHVtblBhaXJzID0gW11cbiAgICBjb25zdCBhbHRlckNvbHVtbnMgPSBhbHRlclRhYmxlRGF0YS5nZXRDb2x1bW5zKClcbiAgICBjb25zdCBleGlzdGluZ05hbWVzID0gbmV3IFNldChjdXJyZW50VGFibGVEYXRhLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldE5hbWUoKSkpXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGNvbHVtblJlbmFtZXMgPSBuZXcgTWFwKClcblxuICAgIGZvciAoY29uc3QgYWx0ZXJDb2x1bW4gb2YgYWx0ZXJDb2x1bW5zKSB7XG4gICAgICBpZiAoYWx0ZXJDb2x1bW4uaXNOZXdDb2x1bW4oKSkgY29udGludWVcblxuICAgICAgY29uc3QgbmV3TmFtZSA9IGFsdGVyQ29sdW1uLmdldE5ld05hbWUoKVxuXG4gICAgICBpZiAobmV3TmFtZSkgY29sdW1uUmVuYW1lcy5zZXQoYWx0ZXJDb2x1bW4uZ2V0TmFtZSgpLCBuZXdOYW1lKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY3VycmVudENvbHVtbiBvZiBjdXJyZW50VGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgY29uc3QgYWx0ZXJDb2x1bW4gPSBhbHRlckNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uZ2V0TmFtZSgpID09IGN1cnJlbnRDb2x1bW4uZ2V0TmFtZSgpICYmICFjb2x1bW4uaXNOZXdDb2x1bW4oKSlcblxuICAgICAgaWYgKGFsdGVyQ29sdW1uPy5nZXREcm9wQ29sdW1uKCkpIGNvbnRpbnVlXG5cbiAgICAgIGxldCB0YXJnZXRDb2x1bW5cblxuICAgICAgaWYgKGFsdGVyQ29sdW1uKSB7XG4gICAgICAgIC8vIFRoZSBhbHRlciByZXF1ZXN0IHN1cHBsaWVzIGEgcGFydGlhbCBjb2x1bW4gc3BlYyAoZS5nLiBqdXN0IGEgcmVuYW1lIG9yIGEgdHlwZSBjaGFuZ2UpO1xuICAgICAgICAvLyBpbmhlcml0IHVuc2V0IHByb3BlcnRpZXMgZnJvbSB0aGUgY3VycmVudCBjb2x1bW4gc28gd2UgZG9uJ3QgbG9zZSBleGlzdGluZyBkZWZpbml0aW9ucy5cbiAgICAgICAgYWx0ZXJDb2x1bW4uc2V0QXV0b0luY3JlbWVudChhbHRlckNvbHVtbi5nZXRBdXRvSW5jcmVtZW50KCkgfHwgY3VycmVudENvbHVtbi5nZXRBdXRvSW5jcmVtZW50KCkpXG4gICAgICAgIGlmIChhbHRlckNvbHVtbi5nZXREZWZhdWx0KCkgPT09IHVuZGVmaW5lZCkgYWx0ZXJDb2x1bW4uc2V0RGVmYXVsdChjdXJyZW50Q29sdW1uLmdldERlZmF1bHQoKSlcbiAgICAgICAgaWYgKCFhbHRlckNvbHVtbi5nZXRJbmRleCgpKSBhbHRlckNvbHVtbi5zZXRJbmRleChjdXJyZW50Q29sdW1uLmdldEluZGV4KCkpXG4gICAgICAgIGlmICghYWx0ZXJDb2x1bW4uZ2V0Rm9yZWlnbktleSgpKSBhbHRlckNvbHVtbi5zZXRGb3JlaWduS2V5KGN1cnJlbnRDb2x1bW4uZ2V0Rm9yZWlnbktleSgpKVxuICAgICAgICBpZiAoYWx0ZXJDb2x1bW4uZ2V0TWF4TGVuZ3RoKCkgPT09IHVuZGVmaW5lZCkgYWx0ZXJDb2x1bW4uc2V0TWF4TGVuZ3RoKGN1cnJlbnRDb2x1bW4uZ2V0TWF4TGVuZ3RoKCkpXG4gICAgICAgIGFsdGVyQ29sdW1uLnNldFByaW1hcnlLZXkoYWx0ZXJDb2x1bW4uZ2V0UHJpbWFyeUtleSgpIHx8IGN1cnJlbnRDb2x1bW4uZ2V0UHJpbWFyeUtleSgpKVxuICAgICAgICBpZiAoIWFsdGVyQ29sdW1uLmdldFR5cGUoKSkgYWx0ZXJDb2x1bW4uc2V0VHlwZShjdXJyZW50Q29sdW1uLmdldFR5cGUoKSlcblxuICAgICAgICB0YXJnZXRDb2x1bW4gPSBhbHRlckNvbHVtblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Q29sdW1uID0gY3VycmVudENvbHVtblxuICAgICAgfVxuXG4gICAgICB0YXJnZXRUYWJsZURhdGEuYWRkQ29sdW1uKHRhcmdldENvbHVtbilcbiAgICAgIGNvbHVtblBhaXJzLnB1c2goW2N1cnJlbnRDb2x1bW4uZ2V0TmFtZSgpLCB0YXJnZXRDb2x1bW4uZ2V0TmV3TmFtZSgpIHx8IHRhcmdldENvbHVtbi5nZXROYW1lKCldKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWx0ZXJDb2x1bW4gb2YgYWx0ZXJDb2x1bW5zKSB7XG4gICAgICBpZiAoIWFsdGVyQ29sdW1uLmlzTmV3Q29sdW1uKCkpIGNvbnRpbnVlXG4gICAgICBpZiAoZXhpc3RpbmdOYW1lcy5oYXMoYWx0ZXJDb2x1bW4uZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgdGFyZ2V0VGFibGVEYXRhLmFkZENvbHVtbihhbHRlckNvbHVtbilcbiAgICB9XG5cbiAgICBjb25zdCBzZWVuRm9yZWlnbktleU5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGNvbnN0IGN1cnJlbnRGb3JlaWduS2V5IG9mIGN1cnJlbnRUYWJsZURhdGEuZ2V0Rm9yZWlnbktleXMoKSkge1xuICAgICAgY29uc3QgYWx0ZXJGb3JlaWduS2V5ID0gYWx0ZXJUYWJsZURhdGEuZ2V0Rm9yZWlnbktleXMoKS5maW5kKChmb3JlaWduS2V5KSA9PiBmb3JlaWduS2V5LmdldE5hbWUoKSA9PSBjdXJyZW50Rm9yZWlnbktleS5nZXROYW1lKCkpXG4gICAgICBjb25zdCBmaW5hbEZvcmVpZ25LZXkgPSB0aGlzLl9yZW5hbWVGb3JlaWduS2V5Q29sdW1uKGFsdGVyRm9yZWlnbktleSB8fCBjdXJyZW50Rm9yZWlnbktleSwgY29sdW1uUmVuYW1lcylcblxuICAgICAgc2VlbkZvcmVpZ25LZXlOYW1lcy5hZGQoZmluYWxGb3JlaWduS2V5LmdldE5hbWUoKSlcbiAgICAgIHRhcmdldFRhYmxlRGF0YS5hZGRGb3JlaWduS2V5KGZpbmFsRm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFsdGVyRm9yZWlnbktleSBvZiBhbHRlclRhYmxlRGF0YS5nZXRGb3JlaWduS2V5cygpKSB7XG4gICAgICBpZiAoc2VlbkZvcmVpZ25LZXlOYW1lcy5oYXMoYWx0ZXJGb3JlaWduS2V5LmdldE5hbWUoKSkpIGNvbnRpbnVlXG5cbiAgICAgIHRhcmdldFRhYmxlRGF0YS5hZGRGb3JlaWduS2V5KHRoaXMuX3JlbmFtZUZvcmVpZ25LZXlDb2x1bW4oYWx0ZXJGb3JlaWduS2V5LCBjb2x1bW5SZW5hbWVzKSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGN1cnJlbnRJbmRleCBvZiBjdXJyZW50VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgcmVuYW1lZENvbHVtbnMgPSBjdXJyZW50SW5kZXguZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGNvbHVtbk5hbWUgIT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbHVtbk5hbWVcblxuICAgICAgICByZXR1cm4gY29sdW1uUmVuYW1lcy5nZXQoY29sdW1uTmFtZSkgfHwgY29sdW1uTmFtZVxuICAgICAgfSlcblxuICAgICAgdGFyZ2V0VGFibGVEYXRhLmFkZEluZGV4KG5ldyBUYWJsZUluZGV4KHJlbmFtZWRDb2x1bW5zLCB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRJbmRleC5nZXROYW1lKCksXG4gICAgICAgIHVuaXF1ZTogY3VycmVudEluZGV4LmdldFVuaXF1ZSgpXG4gICAgICB9KSlcbiAgICB9XG5cbiAgICByZXR1cm4ge3RhcmdldFRhYmxlRGF0YSwgY29sdW1uUGFpcnN9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZm9yZWlnbiBrZXkgd2l0aCBpdHMgY29sdW1uIG5hbWUgdXBkYXRlZCB3aGVuIHRoZSBjb2x1bW4gd2FzIHJlbmFtZWQgaW4gdGhlXG4gICAqIGFsdGVyIHJlcXVlc3QuIFNRTGl0ZSByZS1jcmVhdGVzIHRoZSBjb25zdHJhaW50IGluc2lkZSB0aGUgcmVidWlsdCBDUkVBVEUgVEFCTEUsIHNvIGFcbiAgICogc3RhbGUgY29sdW1uIG5hbWUgdGhlcmUgd291bGQgcmVmZXJlbmNlIGEgY29sdW1uIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICogQHBhcmFtIHtUYWJsZUZvcmVpZ25LZXl9IGZvcmVpZ25LZXkgLSBGb3JlaWduIGtleSB0byBldmFsdWF0ZS5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSBjb2x1bW5SZW5hbWVzIC0gTWFwIG9mIG9sZCDihpIgbmV3IGNvbHVtbiBuYW1lcyBmcm9tIHRoZSBhbHRlciByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7VGFibGVGb3JlaWduS2V5fSAtIFRoZSBvcmlnaW5hbCBmb3JlaWduIGtleSwgb3IgYSBmcmVzaCBpbnN0YW5jZSB3aXRoIHRoZSByZW5hbWVkIGNvbHVtbi5cbiAgICovXG4gIF9yZW5hbWVGb3JlaWduS2V5Q29sdW1uKGZvcmVpZ25LZXksIGNvbHVtblJlbmFtZXMpIHtcbiAgICBjb25zdCByZW5hbWVkID0gY29sdW1uUmVuYW1lcy5nZXQoZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkpXG5cbiAgICBpZiAoIXJlbmFtZWQpIHJldHVybiBmb3JlaWduS2V5XG5cbiAgICByZXR1cm4gbmV3IFRhYmxlRm9yZWlnbktleSh7XG4gICAgICBjb2x1bW5OYW1lOiByZW5hbWVkLFxuICAgICAgaXNOZXdGb3JlaWduS2V5OiBmb3JlaWduS2V5LmdldElzTmV3Rm9yZWlnbktleSgpLFxuICAgICAgbmFtZTogZm9yZWlnbktleS5nZXROYW1lKCksXG4gICAgICByZWZlcmVuY2VkQ29sdW1uTmFtZTogZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpLFxuICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkVGFibGVOYW1lKCksXG4gICAgICB0YWJsZU5hbWU6IGZvcmVpZ25LZXkuZ2V0VGFibGVOYW1lKClcbiAgICB9KVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emits the SQL sequence for SQLite's "rebuild" approach to schema changes.
|
|
3
|
+
*
|
|
4
|
+
* SQLite cannot add/drop foreign-key constraints, drop columns on older
|
|
5
|
+
* versions, change column types, or add CHECK constraints via ALTER TABLE.
|
|
6
|
+
* The standard workaround (https://sqlite.org/lang_altertable.html) is to
|
|
7
|
+
* create a new table with the desired schema, copy rows over, drop the
|
|
8
|
+
* original, and rename the replacement.
|
|
9
|
+
*
|
|
10
|
+
* Caller passes the desired final schema; this class handles the mechanical
|
|
11
|
+
* sequence (CREATE temp / INSERT...SELECT / DROP / RENAME / recreate
|
|
12
|
+
* indexes). Caller is responsible for any FK toggling or transaction setup
|
|
13
|
+
* around the returned SQL — `PRAGMA foreign_keys` is connection-scoped and
|
|
14
|
+
* cannot be flipped inside a transaction, so wrapping policy is left to the
|
|
15
|
+
* caller (see `sql/alter-table.js`).
|
|
16
|
+
*/
|
|
17
|
+
export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
18
|
+
/**
|
|
19
|
+
* @param {object} args - Options object.
|
|
20
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
21
|
+
* @param {string} args.originalTableName - Name of the existing table to rebuild.
|
|
22
|
+
* @param {TableData} args.targetTableData - Desired final schema (columns + foreign keys + indexes). The instance's name is overwritten internally during emission.
|
|
23
|
+
* @param {Array<[string, string]>} args.columnPairs - Pairs of [oldColumnName, newColumnName] describing how rows from the original table should populate the rebuilt table.
|
|
24
|
+
*/
|
|
25
|
+
constructor({ driver, originalTableName, targetTableData, columnPairs, ...restArgs }: {
|
|
26
|
+
driver: import("../base.js").default;
|
|
27
|
+
originalTableName: string;
|
|
28
|
+
targetTableData: TableData;
|
|
29
|
+
columnPairs: Array<[string, string]>;
|
|
30
|
+
});
|
|
31
|
+
driver: import("../base.js").default;
|
|
32
|
+
originalTableName: string;
|
|
33
|
+
targetTableData: TableData;
|
|
34
|
+
columnPairs: [string, string][];
|
|
35
|
+
/**
|
|
36
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements to execute in order.
|
|
37
|
+
*/
|
|
38
|
+
toSQLs(): Promise<string[]>;
|
|
39
|
+
}
|
|
40
|
+
import TableData from "../../table-data/index.js";
|
|
41
|
+
//# sourceMappingURL=table-rebuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-rebuilder.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/table-rebuilder.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;GAeG;AACH;IACE;;;;;;OAMG;IACH,sFALG;QAA2C,MAAM,EAAzC,OAAO,YAAY,EAAE,OAAO;QACf,iBAAiB,EAA9B,MAAM;QACU,eAAe,EAA/B,SAAS;QACqB,WAAW,EAAzC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,EAUA;IAJC,qCAAoB;IACpB,0BAA0C;IAC1C,2BAAsC;IACtC,gCAA8B;IAGhC;;OAEG;IACH,UAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAkD7B;CACF;sBAzFqB,2BAA2B"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import CreateIndexBase from "../../query/create-index-base.js";
|
|
3
|
+
import restArgsError from "../../../utils/rest-args-error.js";
|
|
4
|
+
import TableData from "../../table-data/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Emits the SQL sequence for SQLite's "rebuild" approach to schema changes.
|
|
7
|
+
*
|
|
8
|
+
* SQLite cannot add/drop foreign-key constraints, drop columns on older
|
|
9
|
+
* versions, change column types, or add CHECK constraints via ALTER TABLE.
|
|
10
|
+
* The standard workaround (https://sqlite.org/lang_altertable.html) is to
|
|
11
|
+
* create a new table with the desired schema, copy rows over, drop the
|
|
12
|
+
* original, and rename the replacement.
|
|
13
|
+
*
|
|
14
|
+
* Caller passes the desired final schema; this class handles the mechanical
|
|
15
|
+
* sequence (CREATE temp / INSERT...SELECT / DROP / RENAME / recreate
|
|
16
|
+
* indexes). Caller is responsible for any FK toggling or transaction setup
|
|
17
|
+
* around the returned SQL — `PRAGMA foreign_keys` is connection-scoped and
|
|
18
|
+
* cannot be flipped inside a transaction, so wrapping policy is left to the
|
|
19
|
+
* caller (see `sql/alter-table.js`).
|
|
20
|
+
*/
|
|
21
|
+
export default class VelociousDatabaseDriversSqliteTableRebuilder {
|
|
22
|
+
/**
|
|
23
|
+
* @param {object} args - Options object.
|
|
24
|
+
* @param {import("../base.js").default} args.driver - Database driver instance.
|
|
25
|
+
* @param {string} args.originalTableName - Name of the existing table to rebuild.
|
|
26
|
+
* @param {TableData} args.targetTableData - Desired final schema (columns + foreign keys + indexes). The instance's name is overwritten internally during emission.
|
|
27
|
+
* @param {Array<[string, string]>} args.columnPairs - Pairs of [oldColumnName, newColumnName] describing how rows from the original table should populate the rebuilt table.
|
|
28
|
+
*/
|
|
29
|
+
constructor({ driver, originalTableName, targetTableData, columnPairs, ...restArgs }) {
|
|
30
|
+
restArgsError(restArgs);
|
|
31
|
+
if (!(targetTableData instanceof TableData))
|
|
32
|
+
throw new Error("Invalid target table data was given");
|
|
33
|
+
this.driver = driver;
|
|
34
|
+
this.originalTableName = originalTableName;
|
|
35
|
+
this.targetTableData = targetTableData;
|
|
36
|
+
this.columnPairs = columnPairs;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @returns {Promise<string[]>} - Resolves with SQL statements to execute in order.
|
|
40
|
+
*/
|
|
41
|
+
async toSQLs() {
|
|
42
|
+
const driver = this.driver;
|
|
43
|
+
const options = driver.options();
|
|
44
|
+
const originalTableName = this.originalTableName;
|
|
45
|
+
const tempTableName = `${originalTableName}_velocious_rebuild`;
|
|
46
|
+
const targetTableData = this.targetTableData;
|
|
47
|
+
const previousTargetName = targetTableData.getName();
|
|
48
|
+
targetTableData.setName(tempTableName);
|
|
49
|
+
let createTableSQLs;
|
|
50
|
+
try {
|
|
51
|
+
createTableSQLs = await driver.createTableSql(targetTableData);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
targetTableData.setName(previousTargetName);
|
|
55
|
+
}
|
|
56
|
+
const newColumnsSQL = this.columnPairs.map(([, newName]) => options.quoteColumnName(newName)).join(", ");
|
|
57
|
+
const oldColumnsSQL = this.columnPairs.map(([oldName]) => options.quoteColumnName(oldName)).join(", ");
|
|
58
|
+
const sqls = [];
|
|
59
|
+
for (const sql of createTableSQLs)
|
|
60
|
+
sqls.push(sql);
|
|
61
|
+
if (this.columnPairs.length > 0) {
|
|
62
|
+
sqls.push(`INSERT INTO ${options.quoteTableName(tempTableName)} (${newColumnsSQL}) ` +
|
|
63
|
+
`SELECT ${oldColumnsSQL} FROM ${options.quoteTableName(originalTableName)}`);
|
|
64
|
+
}
|
|
65
|
+
sqls.push(`DROP TABLE ${options.quoteTableName(originalTableName)}`);
|
|
66
|
+
sqls.push(`ALTER TABLE ${options.quoteTableName(tempTableName)} RENAME TO ${options.quoteTableName(originalTableName)}`);
|
|
67
|
+
for (const tableDataIndex of targetTableData.getIndexes()) {
|
|
68
|
+
const createIndexSQLs = await new CreateIndexBase({
|
|
69
|
+
columns: tableDataIndex.getColumns(),
|
|
70
|
+
driver,
|
|
71
|
+
name: tableDataIndex.getName(),
|
|
72
|
+
tableName: originalTableName,
|
|
73
|
+
unique: tableDataIndex.getUnique()
|
|
74
|
+
}).toSQLs();
|
|
75
|
+
for (const sql of createIndexSQLs)
|
|
76
|
+
sqls.push(sql);
|
|
77
|
+
}
|
|
78
|
+
return sqls;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcmVidWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3RhYmxlLXJlYnVpbGRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxlQUFlLE1BQU0sa0NBQWtDLENBQUE7QUFDOUQsT0FBTyxhQUFhLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxTQUFTLE1BQU0sMkJBQTJCLENBQUE7QUFFakQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyw0Q0FBNEM7SUFDL0Q7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQ2hGLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsQ0FBQyxlQUFlLFlBQVksU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1FBRW5HLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtRQUMxQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQTtRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsTUFBTTtRQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFBO1FBQ2hELE1BQU0sYUFBYSxHQUFHLEdBQUcsaUJBQWlCLG9CQUFvQixDQUFBO1FBQzlELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUE7UUFDNUMsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFcEQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUV0QyxJQUFJLGVBQWUsQ0FBQTtRQUVuQixJQUFJLENBQUM7WUFDSCxlQUFlLEdBQUcsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7Z0JBQVMsQ0FBQztZQUNULGVBQWUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXRHLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUVmLEtBQUssTUFBTSxHQUFHLElBQUksZUFBZTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFakQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUNQLGVBQWUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxhQUFhLElBQUk7Z0JBQzFFLFVBQVUsYUFBYSxTQUFTLE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUM1RSxDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxPQUFPLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxjQUFjLE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFeEgsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUMxRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksZUFBZSxDQUFDO2dCQUNoRCxPQUFPLEVBQUUsY0FBYyxDQUFDLFVBQVUsRUFBRTtnQkFDcEMsTUFBTTtnQkFDTixJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRTtnQkFDOUIsU0FBUyxFQUFFLGlCQUFpQjtnQkFDNUIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxTQUFTLEVBQUU7YUFDbkMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO1lBRVgsS0FBSyxNQUFNLEdBQUcsSUFBSSxlQUFlO2dCQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDcmVhdGVJbmRleEJhc2UgZnJvbSBcIi4uLy4uL3F1ZXJ5L2NyZWF0ZS1pbmRleC1iYXNlLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5cbi8qKlxuICogRW1pdHMgdGhlIFNRTCBzZXF1ZW5jZSBmb3IgU1FMaXRlJ3MgXCJyZWJ1aWxkXCIgYXBwcm9hY2ggdG8gc2NoZW1hIGNoYW5nZXMuXG4gKlxuICogU1FMaXRlIGNhbm5vdCBhZGQvZHJvcCBmb3JlaWduLWtleSBjb25zdHJhaW50cywgZHJvcCBjb2x1bW5zIG9uIG9sZGVyXG4gKiB2ZXJzaW9ucywgY2hhbmdlIGNvbHVtbiB0eXBlcywgb3IgYWRkIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBBTFRFUiBUQUJMRS5cbiAqIFRoZSBzdGFuZGFyZCB3b3JrYXJvdW5kIChodHRwczovL3NxbGl0ZS5vcmcvbGFuZ19hbHRlcnRhYmxlLmh0bWwpIGlzIHRvXG4gKiBjcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUgZGVzaXJlZCBzY2hlbWEsIGNvcHkgcm93cyBvdmVyLCBkcm9wIHRoZVxuICogb3JpZ2luYWwsIGFuZCByZW5hbWUgdGhlIHJlcGxhY2VtZW50LlxuICpcbiAqIENhbGxlciBwYXNzZXMgdGhlIGRlc2lyZWQgZmluYWwgc2NoZW1hOyB0aGlzIGNsYXNzIGhhbmRsZXMgdGhlIG1lY2hhbmljYWxcbiAqIHNlcXVlbmNlIChDUkVBVEUgdGVtcCAvIElOU0VSVC4uLlNFTEVDVCAvIERST1AgLyBSRU5BTUUgLyByZWNyZWF0ZVxuICogaW5kZXhlcykuIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYW55IEZLIHRvZ2dsaW5nIG9yIHRyYW5zYWN0aW9uIHNldHVwXG4gKiBhcm91bmQgdGhlIHJldHVybmVkIFNRTCDigJQgYFBSQUdNQSBmb3JlaWduX2tleXNgIGlzIGNvbm5lY3Rpb24tc2NvcGVkIGFuZFxuICogY2Fubm90IGJlIGZsaXBwZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIHNvIHdyYXBwaW5nIHBvbGljeSBpcyBsZWZ0IHRvIHRoZVxuICogY2FsbGVyIChzZWUgYHNxbC9hbHRlci10YWJsZS5qc2ApLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZURyaXZlcnNTcWxpdGVUYWJsZVJlYnVpbGRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm9yaWdpbmFsVGFibGVOYW1lIC0gTmFtZSBvZiB0aGUgZXhpc3RpbmcgdGFibGUgdG8gcmVidWlsZC5cbiAgICogQHBhcmFtIHtUYWJsZURhdGF9IGFyZ3MudGFyZ2V0VGFibGVEYXRhIC0gRGVzaXJlZCBmaW5hbCBzY2hlbWEgKGNvbHVtbnMgKyBmb3JlaWduIGtleXMgKyBpbmRleGVzKS4gVGhlIGluc3RhbmNlJ3MgbmFtZSBpcyBvdmVyd3JpdHRlbiBpbnRlcm5hbGx5IGR1cmluZyBlbWlzc2lvbi5cbiAgICogQHBhcmFtIHtBcnJheTxbc3RyaW5nLCBzdHJpbmddPn0gYXJncy5jb2x1bW5QYWlycyAtIFBhaXJzIG9mIFtvbGRDb2x1bW5OYW1lLCBuZXdDb2x1bW5OYW1lXSBkZXNjcmliaW5nIGhvdyByb3dzIGZyb20gdGhlIG9yaWdpbmFsIHRhYmxlIHNob3VsZCBwb3B1bGF0ZSB0aGUgcmVidWlsdCB0YWJsZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkcml2ZXIsIG9yaWdpbmFsVGFibGVOYW1lLCB0YXJnZXRUYWJsZURhdGEsIGNvbHVtblBhaXJzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCEodGFyZ2V0VGFibGVEYXRhIGluc3RhbmNlb2YgVGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YXJnZXQgdGFibGUgZGF0YSB3YXMgZ2l2ZW5cIilcblxuICAgIHRoaXMuZHJpdmVyID0gZHJpdmVyXG4gICAgdGhpcy5vcmlnaW5hbFRhYmxlTmFtZSA9IG9yaWdpbmFsVGFibGVOYW1lXG4gICAgdGhpcy50YXJnZXRUYWJsZURhdGEgPSB0YXJnZXRUYWJsZURhdGFcbiAgICB0aGlzLmNvbHVtblBhaXJzID0gY29sdW1uUGFpcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCBTUUwgc3RhdGVtZW50cyB0byBleGVjdXRlIGluIG9yZGVyLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZHJpdmVyXG4gICAgY29uc3Qgb3B0aW9ucyA9IGRyaXZlci5vcHRpb25zKClcbiAgICBjb25zdCBvcmlnaW5hbFRhYmxlTmFtZSA9IHRoaXMub3JpZ2luYWxUYWJsZU5hbWVcbiAgICBjb25zdCB0ZW1wVGFibGVOYW1lID0gYCR7b3JpZ2luYWxUYWJsZU5hbWV9X3ZlbG9jaW91c19yZWJ1aWxkYFxuICAgIGNvbnN0IHRhcmdldFRhYmxlRGF0YSA9IHRoaXMudGFyZ2V0VGFibGVEYXRhXG4gICAgY29uc3QgcHJldmlvdXNUYXJnZXROYW1lID0gdGFyZ2V0VGFibGVEYXRhLmdldE5hbWUoKVxuXG4gICAgdGFyZ2V0VGFibGVEYXRhLnNldE5hbWUodGVtcFRhYmxlTmFtZSlcblxuICAgIGxldCBjcmVhdGVUYWJsZVNRTHNcblxuICAgIHRyeSB7XG4gICAgICBjcmVhdGVUYWJsZVNRTHMgPSBhd2FpdCBkcml2ZXIuY3JlYXRlVGFibGVTcWwodGFyZ2V0VGFibGVEYXRhKVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0YXJnZXRUYWJsZURhdGEuc2V0TmFtZShwcmV2aW91c1RhcmdldE5hbWUpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q29sdW1uc1NRTCA9IHRoaXMuY29sdW1uUGFpcnMubWFwKChbLCBuZXdOYW1lXSkgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUobmV3TmFtZSkpLmpvaW4oXCIsIFwiKVxuICAgIGNvbnN0IG9sZENvbHVtbnNTUUwgPSB0aGlzLmNvbHVtblBhaXJzLm1hcCgoW29sZE5hbWVdKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShvbGROYW1lKSkuam9pbihcIiwgXCIpXG5cbiAgICBjb25zdCBzcWxzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZVRhYmxlU1FMcykgc3Fscy5wdXNoKHNxbClcblxuICAgIGlmICh0aGlzLmNvbHVtblBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHNxbHMucHVzaChcbiAgICAgICAgYElOU0VSVCBJTlRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gKCR7bmV3Q29sdW1uc1NRTH0pIGAgK1xuICAgICAgICBgU0VMRUNUICR7b2xkQ29sdW1uc1NRTH0gRlJPTSAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUob3JpZ2luYWxUYWJsZU5hbWUpfWBcbiAgICAgIClcbiAgICB9XG5cbiAgICBzcWxzLnB1c2goYERST1AgVEFCTEUgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKG9yaWdpbmFsVGFibGVOYW1lKX1gKVxuICAgIHNxbHMucHVzaChgQUxURVIgVEFCTEUgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRlbXBUYWJsZU5hbWUpfSBSRU5BTUUgVE8gJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKG9yaWdpbmFsVGFibGVOYW1lKX1gKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFJbmRleCBvZiB0YXJnZXRUYWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICBjb25zdCBjcmVhdGVJbmRleFNRTHMgPSBhd2FpdCBuZXcgQ3JlYXRlSW5kZXhCYXNlKHtcbiAgICAgICAgY29sdW1uczogdGFibGVEYXRhSW5kZXguZ2V0Q29sdW1ucygpLFxuICAgICAgICBkcml2ZXIsXG4gICAgICAgIG5hbWU6IHRhYmxlRGF0YUluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgdGFibGVOYW1lOiBvcmlnaW5hbFRhYmxlTmFtZSxcbiAgICAgICAgdW5pcXVlOiB0YWJsZURhdGFJbmRleC5nZXRVbmlxdWUoKVxuICAgICAgfSkudG9TUUxzKClcblxuICAgICAgZm9yIChjb25zdCBzcWwgb2YgY3JlYXRlSW5kZXhTUUxzKSBzcWxzLnB1c2goc3FsKVxuICAgIH1cblxuICAgIHJldHVybiBzcWxzXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alter-table-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/alter-table-base.js"],"names":[],"mappings":"AAMA;IACE;;;;OAIG;IACH,gDAHG;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;QACpB,SAAS,EAAzB,SAAS;KACnB,EAQA;IADC,qBAA0B;
|
|
1
|
+
{"version":3,"file":"alter-table-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/alter-table-base.js"],"names":[],"mappings":"AAMA;IACE;;;;OAIG;IACH,gDAHG;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;QACpB,SAAS,EAAzB,SAAS;KACnB,EAQA;IADC,qBAA0B;CAmF7B;sBAnGqB,WAAW;sBAEX,wBAAwB"}
|
|
@@ -24,9 +24,9 @@ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
|
|
|
24
24
|
const { tableData } = this;
|
|
25
25
|
const options = this.getOptions();
|
|
26
26
|
let sql = `ALTER TABLE ${options.quoteTableName(tableData.getName())} `;
|
|
27
|
-
let
|
|
27
|
+
let actionCount = 0;
|
|
28
28
|
for (const column of tableData.getColumns()) {
|
|
29
|
-
if (
|
|
29
|
+
if (actionCount > 0)
|
|
30
30
|
sql += ", ";
|
|
31
31
|
if (column.isNewColumn()) {
|
|
32
32
|
sql += "ADD ";
|
|
@@ -50,9 +50,26 @@ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
|
|
|
50
50
|
}
|
|
51
51
|
sql += column.getSQL({ driver: this.getDriver(), forAlterTable: true });
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
actionCount++;
|
|
54
|
+
}
|
|
55
|
+
// SQLite's ALTER TABLE does not support adding constraints; the SQLite driver overrides
|
|
56
|
+
// alterTableSQLs entirely (via TableRebuilder) so this base path is never invoked there.
|
|
57
|
+
for (const foreignKey of tableData.getForeignKeys()) {
|
|
58
|
+
if (!foreignKey.getIsNewForeignKey())
|
|
59
|
+
continue;
|
|
60
|
+
if (actionCount > 0)
|
|
61
|
+
sql += ", ";
|
|
62
|
+
sql += "ADD";
|
|
63
|
+
if (foreignKey.getName()) {
|
|
64
|
+
sql += ` CONSTRAINT ${options.quoteIndexName(foreignKey.getName())}`;
|
|
65
|
+
}
|
|
66
|
+
sql += ` FOREIGN KEY (${options.quoteColumnName(foreignKey.getColumnName())})`;
|
|
67
|
+
sql += ` REFERENCES ${options.quoteTableName(foreignKey.getReferencedTableName())} (${options.quoteColumnName(foreignKey.getReferencedColumnName())})`;
|
|
68
|
+
actionCount++;
|
|
69
|
+
}
|
|
70
|
+
if (actionCount > 0) {
|
|
71
|
+
sqls.push(sql);
|
|
54
72
|
}
|
|
55
|
-
sqls.push(sql);
|
|
56
73
|
if (databaseType == "pgsql") {
|
|
57
74
|
for (const column of tableData.getColumns()) {
|
|
58
75
|
if (!column.isNewColumn() || column.getDropColumn())
|
|
@@ -67,4 +84,4 @@ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
|
|
|
67
84
|
return sqls;
|
|
68
85
|
}
|
|
69
86
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9hbHRlci10YWJsZS1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFFOUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQ0FBcUMsU0FBUSxTQUFTO0lBQ3pFOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDL0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFakMsSUFBSSxHQUFHLEdBQUcsZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7UUFDdkUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBRW5CLEtBQUssTUFBTSxNQUFN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LE1BQU0sQ0FBQyxhQUFhLEVBQUU7b0JBQUUsU0FBUTtnQkFFN0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFBO2dCQUN0RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUE7Z0JBRXpDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVO29CQUFFLFNBQVE7Z0JBRW5DLElBQUksQ0FBQyxJQUFJLENBQ1AscUJBQXFCLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3JJLENBQUE7WUFDRCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5QWx0ZXJUYWJsZUJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7VGFibGVEYXRhfSBhcmdzLnRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCB0YWJsZURhdGEsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VHlwZSgpXG4gICAgY29uc3Qgc3FscyA9IFtdXG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG5cbiAgICBsZXQgc3FsID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0gYFxuICAgIGxldCBhY3Rpb25Db3VudCA9IDBcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgIGlmIChhY3Rpb25Db3VudCA+IDApIHNxbCArPSBcIiwgXCJcblxuICAgICAgaWYgKGNvbHVtbi5pc05ld0NvbHVtbigpKSB7XG4gICAgICAgIHNxbCArPSBcIkFERCBcIlxuICAgICAgICBzcWwgKz0gY29sdW1uLmdldFNRTCh7ZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLCBmb3JBbHRlclRhYmxlOiBmYWxzZX0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5nZXROZXdOYW1lKCkpIHtcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uTmFtZSA9IGNvbHVtbi5nZXROZXdOYW1lKClcblxuICAgICAgICBpZiAoIW5ld0NvbHVtbk5hbWUpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbmV3IGNvbHVtbiBuYW1lIGZvciAke2NvbHVtbi5nZXROYW1lKCl9YClcblxuICAgICAgICBzcWwgKz0gYFJFTkFNRSBDT0xVTU4gJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW4uZ2V0TmFtZSgpKX0gVE8gJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShuZXdDb2x1bW5OYW1lKX1gXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5nZXREcm9wQ29sdW1uKCkpIHtcbiAgICAgICAgc3FsICs9IGBEUk9QIENPTFVNTiAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiIHx8IGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgICAgICBzcWwgKz0gXCJBTFRFUiBDT0xVTU4gXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gXCJNT0RJRlkgXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBjb2x1bW4uZ2V0U1FMKHtkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksIGZvckFsdGVyVGFibGU6IHRydWV9KVxuICAgICAgfVxuXG5cbiAgICAgIGFjdGlvbkNvdW50KytcbiAgICB9XG5cbiAgICAvLyBTUUxpdGUncyBBTFRFUiBUQUJMRSBkb2VzIG5vdCBzdXBwb3J0IGFkZGluZyBjb25zdHJhaW50czsgdGhlIFNRTGl0ZSBkcml2ZXIgb3ZlcnJpZGVzXG4gICAgLy8gYWx0ZXJUYWJsZVNRTHMgZW50aXJlbHkgKHZpYSBUYWJsZVJlYnVpbGRlcikgc28gdGhpcyBiYXNlIHBhdGggaXMgbmV2ZXIgaW52b2tlZCB0aGVyZS5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgdGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkpIHtcbiAgICAgIGlmICghZm9yZWlnbktleS5nZXRJc05ld0ZvcmVpZ25LZXkoKSkgY29udGludWVcblxuICAgICAgaWYgKGFjdGlvbkNvdW50ID4gMCkgc3FsICs9IFwiLCBcIlxuXG4gICAgICBzcWwgKz0gXCJBRERcIlxuXG4gICAgICBpZiAoZm9yZWlnbktleS5nZXROYW1lKCkpIHtcbiAgICAgICAgc3FsICs9IGAgQ09OU1RSQUlOVCAke29wdGlvbnMucXVvdGVJbmRleE5hbWUoZm9yZWlnbktleS5nZXROYW1lKCkpfWBcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAgRk9SRUlHTiBLRVkgKCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoZm9yZWlnbktleS5nZXRDb2x1bW5OYW1lKCkpfSlgXG4gICAgICBzcWwgKz0gYCBSRUZFUkVOQ0VTICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZShmb3JlaWduS2V5LmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKSl9ICgke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWUoKSl9KWBcblxuICAgICAgYWN0aW9uQ291bnQrK1xuICAgIH1cblxuICAgIGlmIChhY3Rpb25Db3VudCA+IDApIHtcbiAgICAgIHNxbHMucHVzaChzcWwpXG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgIGlmICghY29sdW1uLmlzTmV3Q29sdW1uKCkgfHwgY29sdW1uLmdldERyb3BDb2x1bW4oKSkgY29udGludWVcblxuICAgICAgY29uc3Qgbm90ZXMgPSBjb2x1bW4uZ2V0Tm90ZXNGb3JEYXRhYmFzZShkYXRhYmFzZVR5cGUpXG4gICAgICBjb25zdCBhY3R1YWxOYW1lID0gY29sdW1uLmdldEFjdHVhbE5hbWUoKVxuXG4gICAgICBpZiAoIW5vdGVzIHx8ICFhY3R1YWxOYW1lKSBjb250aW51ZVxuXG4gICAgICBzcWxzLnB1c2goXG4gICAgICAgIGBDT01NRU5UIE9OIENPTFVNTiAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9LiR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoYWN0dWFsTmFtZSl9IElTICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcWxzXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-table-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/create-table-base.js"],"names":[],"mappings":"AAQA;IACE;;;;;;OAMG;IACH,oEALG;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;QACrB,WAAW;QACX,kBAAkB;QACjB,SAAS,EAAzB,SAAS;KACnB,EAQA;IAHC,iCAA8B;IAC9B,4BAA4C;IAC5C,qBAA0B;IAG5B;;OAEG;IACH,SAFa,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"create-table-base.d.ts","sourceRoot":"","sources":["../../../../src/database/query/create-table-base.js"],"names":[],"mappings":"AAQA;IACE;;;;;;OAMG;IACH,oEALG;QAAmD,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;QACrB,WAAW;QACX,kBAAkB;QACjB,SAAS,EAAzB,SAAS;KACnB,EAQA;IAHC,iCAA8B;IAC9B,4BAA4C;IAC5C,qBAA0B;IAG5B;;OAEG;IACH,SAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CA+K7B;CACF;sBAvMqB,WAAW;sBAEX,wBAAwB"}
|
|
@@ -38,12 +38,21 @@ export default class VelociousDatabaseQueryCreateTableBase extends QueryBase {
|
|
|
38
38
|
if (databaseType != "mssql" && ifNotExists)
|
|
39
39
|
sql += " IF NOT EXISTS";
|
|
40
40
|
sql += ` ${options.quoteTableName(tableData.getName())} (`;
|
|
41
|
+
const tableLevelFKColumnNames = new Set(tableData.getForeignKeys().map((foreignKey) => foreignKey.getColumnName()));
|
|
41
42
|
let columnCount = 0;
|
|
42
43
|
for (const column of tableData.getColumns()) {
|
|
43
44
|
columnCount++;
|
|
44
45
|
if (columnCount > 1)
|
|
45
46
|
sql += ", ";
|
|
46
|
-
sql += column.getSQL({ driver, forAlterTable: false });
|
|
47
|
+
sql += column.getSQL({ driver, forAlterTable: false, skipForeignKey: tableLevelFKColumnNames.has(column.getActualName()) });
|
|
48
|
+
}
|
|
49
|
+
for (const foreignKey of tableData.getForeignKeys()) {
|
|
50
|
+
sql += ", ";
|
|
51
|
+
if (foreignKey.getName()) {
|
|
52
|
+
sql += `CONSTRAINT ${options.quoteIndexName(foreignKey.getName())} `;
|
|
53
|
+
}
|
|
54
|
+
sql += `FOREIGN KEY (${options.quoteColumnName(foreignKey.getColumnName())})`;
|
|
55
|
+
sql += ` REFERENCES ${options.quoteTableName(foreignKey.getReferencedTableName())} (${options.quoteColumnName(foreignKey.getReferencedColumnName())})`;
|
|
47
56
|
}
|
|
48
57
|
if (this.indexInCreateTable) {
|
|
49
58
|
for (const index of tableData.getIndexes()) {
|
|
@@ -149,4 +158,4 @@ export default class VelociousDatabaseQueryCreateTableBase extends QueryBase {
|
|
|
149
158
|
return sqls;
|
|
150
159
|
}
|
|
151
160
|
}
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhYmxlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLXRhYmxlLWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUMxRCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5QyxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQTtBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBQztRQUNyRSxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRXRGLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFB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YSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUU1QixJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUE7Z0JBRTNCLElBQUksWUFBWSxJQUFJLFFBQVE7b0JBQUUsU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUE7Z0JBRXBFLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBRTdCLE1BQU0sZUFBZSxHQUFHO29CQUN0QixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN4QixJQUFJLEVBQUUsU0FBUztvQkFDZixTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtvQkFDOUIsTUFBTTtpQkFDUCxDQUFBO2dCQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBRTNFLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDcmVhdGVJbmRleEJhc2UgZnJvbSBcIi4vY3JlYXRlLWluZGV4LWJhc2UuanNcIlxuaW1wb3J0IFF1ZXJ5QmFzZSBmcm9tIFwiLi9iYXNlLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVGFibGVDb2x1bW4gZnJvbSBcIi4uL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeUNyZWF0ZVRhYmxlQmFzZSBleHRlbmRzIFF1ZXJ5QmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmRyaXZlciAtIERhdGFiYXNlIGRyaXZlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5pZk5vdEV4aXN0c10gLSBXaGV0aGVyIGlmIG5vdCBleGlzdHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5kZXhJbkNyZWF0ZVRhYmxlXSAtIFdoZXRoZXIgaW5kZXggaW4gY3JlYXRlIHRhYmxlLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YX0gYXJncy50YWJsZURhdGEgLSBUYWJsZSBkYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RyaXZlciwgaWZOb3RFeGlzdHMsIGluZGV4SW5DcmVhdGVUYWJsZSA9IHRydWUsIHRhYmxlRGF0YX0pIHtcbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLmlmTm90RXhpc3RzID0gaWZOb3RFeGlzdHNcbiAgICB0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSA9IGluZGV4SW5DcmVhdGVUYWJsZVxuICAgIHRoaXMudGFibGVEYXRhID0gdGFibGVEYXRhXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyB0b1NxbCgpIHtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSB0aGlzLmdldERhdGFiYXNlVHlwZSgpXG4gICAgY29uc3QgZHJpdmVyID0gdGhpcy5nZXREcml2ZXIoKVxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKVxuICAgIGNvbnN0IHt0YWJsZURhdGF9ID0gdGhpc1xuICAgIGNvbnN0IHNxbHMgPSBbXVxuICAgIGNvbnN0IGlmTm90RXhpc3RzID0gdGhpcy5pZk5vdEV4aXN0cyB8fCB0YWJsZURhdGEuZ2V0SWZOb3RFeGlzdHMoKVxuICAgIGxldCBzcWwgPSBcIlwiXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIiAmJiBpZk5vdEV4aXN0cykge1xuICAgICAgc3FsICs9IGBJRiBOT1QgRVhJU1RTKFNFTEVDVCAqIEZST00gW3N5c29iamVjdHNdIFdIRVJFIFtuYW1lXSA9ICR7b3B0aW9ucy5xdW90ZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0gQU5EIFt4dHlwZV0gPSAnVScpIEJFR0lOIGBcbiAgICB9XG5cbiAgICBzcWwgKz0gXCJDUkVBVEUgVEFCTEVcIlxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSAhPSBcIm1zc3FsXCIgJiYgaWZOb3RFeGlzdHMpIHNxbCArPSBcIiBJRiBOT1QgRVhJU1RTXCJcblxuICAgIHNxbCArPSBgICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0gKGBcblxuICAgIGxldCBjb2x1bW5Db3VudCA9IDBcblxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgIGNvbHVtbkNvdW50KytcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMSkgc3FsICs9IFwiLCBcIlxuXG4gICAgICBzcWwgKz0gY29sdW1uLmdldFNRTCh7ZHJpdmVyLCBmb3JBbHRlclRhYmxlOiBmYWxzZX0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXhJbkNyZWF0ZVRhYmxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRhYmxlRGF0YS5nZXRJbmRleGVzKCkpIHtcbiAgICAgICAgc3FsICs9IFwiLFwiXG5cbiAgICAgICAgaWYgKGluZGV4LmdldFVuaXF1ZSgpKSB7XG4gICAgICAgICAgc3FsICs9IFwiIFVOSVFVRVwiXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gXCIgSU5ERVhcIlxuXG4gICAgICAgIGlmIChpbmRleC5nZXROYW1lKCkpIHtcbiAgICAgICAgICBjb25zdCBpbmRleE5hbWUgPSBpbmRleC5nZXROYW1lKClcblxuICAgICAgICAgIGlmICghaW5kZXhOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBpbmRleCBuYW1lXCIpXG5cbiAgICAgICAgICBzcWwgKz0gYCAke29wdGlvbnMucXVvdGVJbmRleE5hbWUoaW5kZXhOYW1lKX1gXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gXCIgKFwiXG5cbiAgICAgICAgaW5kZXguZ2V0Q29sdW1ucygpLmZvckVhY2goKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uSW5kZXggPiAwKSBzcWwgKz0gXCIsIFwiXG5cbiAgICAgICAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgVGFibGVDb2x1bW4pIHtcbiAgICAgICAgICAgIHNxbCArPSBkcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uLmdldE5hbWUoKSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2x1bW4gPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3FsICs9IGRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBjb2x1bW4gdHlwZTogJHt0eXBlb2YgY29sdW1ufWApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHNxbCArPSBcIilcIlxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgaW5kZXhlcyBmb3IgYWxsIGNvbHVtbnMgd2l0aCB0aGUgaW5kZXggYXJndW1lbnRcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgICAgaWYgKCFjb2x1bW4uZ2V0SW5kZXgoKSkgY29udGludWVcblxuICAgICAgICBsZXQgaW5kZXhOYW1lID0gYGluZGV4X29uX2BcblxuICAgICAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwic3FsaXRlXCIpIHNxbCArPSBgJHt0YWJsZURhdGEuZ2V0TmFtZSgpfV9gXG5cbiAgICAgICAgaW5kZXhOYW1lICs9IGNvbHVtbi5nZXROYW1lKClcblxuICAgICAgICBzcWwgKz0gXCIsXCJcblxuICAgICAgICBjb25zdCB7dW5pcXVlLCAuLi5yZXN0SW5kZXhBcmdzfSA9IGNvbHVtbi5nZXRJbmRleEFyZ3MoKVxuXG4gICAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEluZGV4QXJncylcblxuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgc3FsICs9IFwiIFVOSVFVRVwiXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gYCBJTkRFWCAke29wdGlvbnMucXVvdGVJbmRleE5hbWUoaW5kZXhOYW1lKX0gKCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoY29sdW1uLmdldE5hbWUoKSl9KWBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzcWwgKz0gXCIpXCJcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJteXNxbFwiKSB7XG4gICAgICBzcWwgKz0gXCIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQgQ09MTEFURT11dGY4bWI0X3VuaWNvZGVfY2lcIlxuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiICYmIGlmTm90RXhpc3RzKSB7XG4gICAgICBzcWwgKz0gXCIgRU5EXCJcbiAgICB9XG5cbiAgICBzcWxzLnB1c2goc3FsKVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkpIHtcbiAgICAgICAgY29uc3Qgbm90ZXMgPSBjb2x1bW4uZ2V0Tm90ZXNGb3JEYXRhYmFzZShkYXRhYmFzZVR5cGUpXG4gICAgICAgIGNvbnN0IGFjdHVhbE5hbWUgPSBjb2x1bW4uZ2V0QWN0dWFsTmFtZSgpXG5cbiAgICAgICAgaWYgKCFub3RlcyB8fCAhYWN0dWFsTmFtZSkgY29udGludWVcblxuICAgICAgICBzcWxzLnB1c2goXG4gICAgICAgICAgYENPTU1FTlQgT04gQ09MVU1OICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0uJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShhY3R1YWxOYW1lKX0gSVMgJHtvcHRpb25zLnF1b3RlKG5vdGVzKX1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5kZXhJbkNyZWF0ZVRhYmxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHRhYmxlRGF0YS5nZXRJbmRleGVzKCkpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmdldENvbHVtbnMoKSxcbiAgICAgICAgICBkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksXG4gICAgICAgICAgaWZOb3RFeGlzdHM6IHRydWUsXG4gICAgICAgICAgbmFtZTogaW5kZXguZ2V0TmFtZSgpLFxuICAgICAgICAgIHRhYmxlTmFtZTogdGFibGVEYXRhLmdldE5hbWUoKSxcbiAgICAgICAgICB1bmlxdWU6IGluZGV4LmdldFVuaXF1ZSgpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhTUUxzID0gYXdhaXQgbmV3IENyZWF0ZUluZGV4QmFzZShjcmVhdGVJbmRleEFyZ3MpLnRvU1FMcygpXG5cbiAgICAgICAgZm9yIChjb25zdCBjcmVhdGVJbmRleFNRTCBvZiBjcmVhdGVJbmRleFNRTHMpIHtcbiAgICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGluZGV4ZXMgZm9yIGFsbCBjb2x1bW5zIHdpdGggdGhlIGluZGV4IGFyZ3VtZW50XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGlmICghY29sdW1uLmdldEluZGV4KCkpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3Qge3VuaXF1ZSwgLi4ucmVzdEluZGV4QXJnc30gPSBjb2x1bW4uZ2V0SW5kZXhBcmdzKClcblxuICAgICAgICByZXN0QXJnc0Vycm9yKHJlc3RJbmRleEFyZ3MpXG5cbiAgICAgICAgbGV0IGluZGV4TmFtZSA9IGBpbmRleF9vbl9gXG5cbiAgICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInNxbGl0ZVwiKSBpbmRleE5hbWUgKz0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1fYFxuXG4gICAgICAgIGluZGV4TmFtZSArPSBjb2x1bW4uZ2V0TmFtZSgpXG5cbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW4uZ2V0TmFtZSgpXSxcbiAgICAgICAgICBkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksXG4gICAgICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogdGFibGVEYXRhLmdldE5hbWUoKSxcbiAgICAgICAgICB1bmlxdWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVJbmRleFNRTHMgPSBhd2FpdCBuZXcgQ3JlYXRlSW5kZXhCYXNlKGNyZWF0ZUluZGV4QXJncykudG9TUUxzKClcblxuICAgICAgICBmb3IgKGNvbnN0IGNyZWF0ZUluZGV4U1FMIG9mIGNyZWF0ZUluZGV4U1FMcykge1xuICAgICAgICAgIHNxbHMucHVzaChjcmVhdGVJbmRleFNRTClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcWxzXG4gIH1cbn1cbiJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRhYmxlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvY3JlYXRlLXRhYmxlLWJhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLGFBQWEsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUMxRCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM5QyxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQTtBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLHFDQUFzQyxTQUFRLFNBQVM7SUFDMUU7Ozs7OztPQU1HO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBQztRQUNyRSxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO1FBRXRGLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUE7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNqQyxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ2xFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUVaLElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMzQyxHQUFHLElBQUksMkRBQTJELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixDQUFBO1FBQ2xJLENBQUM7UUFFRCxHQUFHLElBQUksY0FBYyxDQUFBO1FBRXJCLElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxXQUFXO1lBQUUsR0FBRyxJQUFJLGdCQUFnQixDQUFBO1FBRW5FLEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQTtRQUUxRCxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFbkgsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBRW5CLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDNUMsV0FBVyxFQUFFLENBQUE7WUFFYixJQUFJLFdBQVcsR0FBRyxDQUFDO2dCQUFFLEdBQUcsSUFBSSxJQUFJLENBQUE7WUFFaEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsdUJBQXVCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUMzSCxDQUFDO1FBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxHQUFHLElBQUksSUFBSSxDQUFBO1lBRVgsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDekIsR0FBRyxJQUFJLGNBQWMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFBO1lBQ3RFLENBQUM7WUFFRCxHQUFHLElBQUksZ0JBQWdCLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQTtZQUM3RSxHQUFHLElBQUksZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxHQUFHLENBQUE7UUFDeEosQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsR0FBRyxJQUFJLEdBQUcsQ0FBQTtnQkFFVixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUN0QixHQUFHLElBQUksU0FBUyxDQUFBO2dCQUNsQixDQUFDO2dCQUVELEdBQUcsSUFBSSxRQUFRLENBQUE7Z0JBRWYsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO29CQUVqQyxJQUFJLENBQUMsU0FBUzt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7b0JBRXRELEdBQUcsSUFBSSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQTtnQkFDaEQsQ0FBQztnQkFFRCxHQUFHLElBQUksSUFBSSxDQUFBO2dCQUVYLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUU7b0JBQ2pELElBQUksV0FBVyxHQUFHLENBQUM7d0JBQUUsR0FBRyxJQUFJLElBQUksQ0FBQTtvQkFFaEMsSUFBSSxNQUFNLFlBQVksV0FBVyxFQUFFLENBQUM7d0JBQ2xDLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO29CQUM3QyxDQUFDO3lCQUFNLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ3JDLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUNuQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFBO29CQUMxRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLEdBQUcsSUFBSSxHQUFHLENBQUE7WUFDWixDQUFDO1lBRUQseURBQXlEO1lBQ3pELEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUFFLFNBQVE7Z0JBRWhDLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQTtnQkFFM0IsSUFBSSxZQUFZLElBQUksUUFBUTtvQkFBRSxHQUFHLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQTtnQkFFOUQsU0FBUyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFFN0IsR0FBRyxJQUFJLEdBQUcsQ0FBQTtnQkFFVixNQUFNLEVBQUMsTUFBTSxFQUFFLEdBQUcsYUFBYSxFQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO2dCQUV4RCxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7Z0JBRTVCLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsR0FBRyxJQUFJLFNBQVMsQ0FBQTtnQkFDbEIsQ0FBQztnQkFFRCxHQUFHLElBQUksVUFBVSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQTtZQUNyRyxDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsSUFBSSxHQUFHLENBQUE7UUFFVixJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixHQUFHLElBQUkscURBQXFELENBQUE7UUFDOUQsQ0FBQztRQUVELElBQUksWUFBWSxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMzQyxHQUFHLElBQUksTUFBTSxDQUFBO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFZCxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sTUFBTSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQ3RELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFFekMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVU7b0JBQUUsU0FBUTtnQkFFbkMsSUFBSSxDQUFDLElBQUksQ0FDUCxxQkFBcUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDckksQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sZUFBZSxHQUFHO29CQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ3hCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtvQkFDckIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFO2lCQUMxQixDQUFBO2dCQUNELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBRTNFLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQzNCLENBQUM7WUFDSCxDQUFDO1lBRUQseURBQXlEO1lBQ3pELEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO29CQUFFLFNBQVE7Z0JBRWhDLE1BQU0sRUFBQyxNQUFNLEVBQUUsR0FBRyxhQUFhLEVBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUE7Z0JBRXhELGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFFNUIsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFBO2dCQUUzQixJQUFJLFlBQVksSUFBSSxRQUFRO29CQUFFLFNBQVMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFBO2dCQUVwRSxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUU3QixNQUFNLGVBQWUsR0FBRztvQkFDdEIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDeEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE1BQU07aUJBQ1AsQ0FBQTtnQkFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO2dCQUUzRSxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQ3JlYXRlSW5kZXhCYXNlIGZyb20gXCIuL2NyZWF0ZS1pbmRleC1iYXNlLmpzXCJcbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlQ29sdW1uIGZyb20gXCIuLi90YWJsZS1kYXRhL3RhYmxlLWNvbHVtbi5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlDcmVhdGVUYWJsZUJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaWZOb3RFeGlzdHNdIC0gV2hldGhlciBpZiBub3QgZXhpc3RzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluZGV4SW5DcmVhdGVUYWJsZV0gLSBXaGV0aGVyIGluZGV4IGluIGNyZWF0ZSB0YWJsZS5cbiAgICogQHBhcmFtIHtUYWJsZURhdGF9IGFyZ3MudGFibGVEYXRhIC0gVGFibGUgZGF0YS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkcml2ZXIsIGlmTm90RXhpc3RzLCBpbmRleEluQ3JlYXRlVGFibGUgPSB0cnVlLCB0YWJsZURhdGF9KSB7XG4gICAgaWYgKCEodGFibGVEYXRhIGluc3RhbmNlb2YgVGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBkYXRhIHdhcyBnaXZlblwiKVxuXG4gICAgc3VwZXIoe2RyaXZlcn0pXG4gICAgdGhpcy5pZk5vdEV4aXN0cyA9IGlmTm90RXhpc3RzXG4gICAgdGhpcy5pbmRleEluQ3JlYXRlVGFibGUgPSBpbmRleEluQ3JlYXRlVGFibGVcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TcWwoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gdGhpcy5nZXREYXRhYmFzZVR5cGUoKVxuICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuZ2V0RHJpdmVyKClcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKClcbiAgICBjb25zdCB7dGFibGVEYXRhfSA9IHRoaXNcbiAgICBjb25zdCBzcWxzID0gW11cbiAgICBjb25zdCBpZk5vdEV4aXN0cyA9IHRoaXMuaWZOb3RFeGlzdHMgfHwgdGFibGVEYXRhLmdldElmTm90RXhpc3RzKClcbiAgICBsZXQgc3FsID0gXCJcIlxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIgJiYgaWZOb3RFeGlzdHMpIHtcbiAgICAgIHNxbCArPSBgSUYgTk9UIEVYSVNUUyhTRUxFQ1QgKiBGUk9NIFtzeXNvYmplY3RzXSBXSEVSRSBbbmFtZV0gPSAke29wdGlvbnMucXVvdGUodGFibGVEYXRhLmdldE5hbWUoKSl9IEFORCBbeHR5cGVdID0gJ1UnKSBCRUdJTiBgXG4gICAgfVxuXG4gICAgc3FsICs9IFwiQ1JFQVRFIFRBQkxFXCJcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgIT0gXCJtc3NxbFwiICYmIGlmTm90RXhpc3RzKSBzcWwgKz0gXCIgSUYgTk9UIEVYSVNUU1wiXG5cbiAgICBzcWwgKz0gYCAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9IChgXG5cbiAgICBjb25zdCB0YWJsZUxldmVsRktDb2x1bW5OYW1lcyA9IG5ldyBTZXQodGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkubWFwKChmb3JlaWduS2V5KSA9PiBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSkpXG5cbiAgICBsZXQgY29sdW1uQ291bnQgPSAwXG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBjb2x1bW5Db3VudCsrXG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDEpIHNxbCArPSBcIiwgXCJcblxuICAgICAgc3FsICs9IGNvbHVtbi5nZXRTUUwoe2RyaXZlciwgZm9yQWx0ZXJUYWJsZTogZmFsc2UsIHNraXBGb3JlaWduS2V5OiB0YWJsZUxldmVsRktDb2x1bW5OYW1lcy5oYXMoY29sdW1uLmdldEFjdHVhbE5hbWUoKSl9KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZm9yZWlnbktleSBvZiB0YWJsZURhdGEuZ2V0Rm9yZWlnbktleXMoKSkge1xuICAgICAgc3FsICs9IFwiLCBcIlxuXG4gICAgICBpZiAoZm9yZWlnbktleS5nZXROYW1lKCkpIHtcbiAgICAgICAgc3FsICs9IGBDT05TVFJBSU5UICR7b3B0aW9ucy5xdW90ZUluZGV4TmFtZShmb3JlaWduS2V5LmdldE5hbWUoKSl9IGBcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGBGT1JFSUdOIEtFWSAoJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSl9KWBcbiAgICAgIHNxbCArPSBgIFJFRkVSRU5DRVMgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpKX0gKCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpKX0pYFxuICAgIH1cblxuICAgIGlmICh0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB0YWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIHNxbCArPSBcIixcIlxuXG4gICAgICAgIGlmIChpbmRleC5nZXRVbmlxdWUoKSkge1xuICAgICAgICAgIHNxbCArPSBcIiBVTklRVUVcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IFwiIElOREVYXCJcblxuICAgICAgICBpZiAoaW5kZXguZ2V0TmFtZSgpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXhOYW1lID0gaW5kZXguZ2V0TmFtZSgpXG5cbiAgICAgICAgICBpZiAoIWluZGV4TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgaW5kZXggbmFtZVwiKVxuXG4gICAgICAgICAgc3FsICs9IGAgJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9YFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IFwiIChcIlxuXG4gICAgICAgIGluZGV4LmdldENvbHVtbnMoKS5mb3JFYWNoKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gMCkgc3FsICs9IFwiLCBcIlxuXG4gICAgICAgICAgaWYgKGNvbHVtbiBpbnN0YW5jZW9mIFRhYmxlQ29sdW1uKSB7XG4gICAgICAgICAgICBzcWwgKz0gZHJpdmVyLnF1b3RlQ29sdW1uKGNvbHVtbi5nZXROYW1lKCkpXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29sdW1uID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHNxbCArPSBkcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sdW1uIHR5cGU6ICR7dHlwZW9mIGNvbHVtbn1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBzcWwgKz0gXCIpXCJcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGluZGV4ZXMgZm9yIGFsbCBjb2x1bW5zIHdpdGggdGhlIGluZGV4IGFyZ3VtZW50XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGlmICghY29sdW1uLmdldEluZGV4KCkpIGNvbnRpbnVlXG5cbiAgICAgICAgbGV0IGluZGV4TmFtZSA9IGBpbmRleF9vbl9gXG5cbiAgICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInNxbGl0ZVwiKSBzcWwgKz0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1fYFxuXG4gICAgICAgIGluZGV4TmFtZSArPSBjb2x1bW4uZ2V0TmFtZSgpXG5cbiAgICAgICAgc3FsICs9IFwiLFwiXG5cbiAgICAgICAgY29uc3Qge3VuaXF1ZSwgLi4ucmVzdEluZGV4QXJnc30gPSBjb2x1bW4uZ2V0SW5kZXhBcmdzKClcblxuICAgICAgICByZXN0QXJnc0Vycm9yKHJlc3RJbmRleEFyZ3MpXG5cbiAgICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICAgIHNxbCArPSBcIiBVTklRVUVcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGAgSU5ERVggJHtvcHRpb25zLnF1b3RlSW5kZXhOYW1lKGluZGV4TmFtZSl9ICgke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfSlgXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3FsICs9IFwiKVwiXG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXlzcWxcIikge1xuICAgICAgc3FsICs9IFwiIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IENPTExBVEU9dXRmOG1iNF91bmljb2RlX2NpXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIiAmJiBpZk5vdEV4aXN0cykge1xuICAgICAgc3FsICs9IFwiIEVORFwiXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKHNxbClcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICAgIGNvbnN0IG5vdGVzID0gY29sdW1uLmdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKVxuICAgICAgICBjb25zdCBhY3R1YWxOYW1lID0gY29sdW1uLmdldEFjdHVhbE5hbWUoKVxuXG4gICAgICAgIGlmICghbm90ZXMgfHwgIWFjdHVhbE5hbWUpIGNvbnRpbnVlXG5cbiAgICAgICAgc3Fscy5wdXNoKFxuICAgICAgICAgIGBDT01NRU5UIE9OIENPTFVNTiAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVEYXRhLmdldE5hbWUoKSl9LiR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoYWN0dWFsTmFtZSl9IElTICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluZGV4SW5DcmVhdGVUYWJsZSkge1xuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiB0YWJsZURhdGEuZ2V0SW5kZXhlcygpKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBpbmRleC5nZXRDb2x1bW5zKCksXG4gICAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICAgIGlmTm90RXhpc3RzOiB0cnVlLFxuICAgICAgICAgIG5hbWU6IGluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlRGF0YS5nZXROYW1lKCksXG4gICAgICAgICAgdW5pcXVlOiBpbmRleC5nZXRVbmlxdWUoKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICAgIGZvciAoY29uc3QgY3JlYXRlSW5kZXhTUUwgb2YgY3JlYXRlSW5kZXhTUUxzKSB7XG4gICAgICAgICAgc3Fscy5wdXNoKGNyZWF0ZUluZGV4U1FMKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBpbmRleGVzIGZvciBhbGwgY29sdW1ucyB3aXRoIHRoZSBpbmRleCBhcmd1bWVudFxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgICBpZiAoIWNvbHVtbi5nZXRJbmRleCgpKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHt1bmlxdWUsIC4uLnJlc3RJbmRleEFyZ3N9ID0gY29sdW1uLmdldEluZGV4QXJncygpXG5cbiAgICAgICAgcmVzdEFyZ3NFcnJvcihyZXN0SW5kZXhBcmdzKVxuXG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBgaW5kZXhfb25fYFxuXG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJzcWxpdGVcIikgaW5kZXhOYW1lICs9IGAke3RhYmxlRGF0YS5nZXROYW1lKCl9X2BcblxuICAgICAgICBpbmRleE5hbWUgKz0gY29sdW1uLmdldE5hbWUoKVxuXG4gICAgICAgIGNvbnN0IGNyZWF0ZUluZGV4QXJncyA9IHtcbiAgICAgICAgICBjb2x1bW5zOiBbY29sdW1uLmdldE5hbWUoKV0sXG4gICAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICAgIG5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IHRhYmxlRGF0YS5nZXROYW1lKCksXG4gICAgICAgICAgdW5pcXVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3JlYXRlSW5kZXhTUUxzID0gYXdhaXQgbmV3IENyZWF0ZUluZGV4QmFzZShjcmVhdGVJbmRleEFyZ3MpLnRvU1FMcygpXG5cbiAgICAgICAgZm9yIChjb25zdCBjcmVhdGVJbmRleFNRTCBvZiBjcmVhdGVJbmRleFNRTHMpIHtcbiAgICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Fsc1xuICB9XG59XG4iXX0=
|
|
@@ -157,11 +157,13 @@ export default class TableColumn {
|
|
|
157
157
|
* @param {object} args - Options object.
|
|
158
158
|
* @param {boolean} args.forAlterTable - Whether for alter table.
|
|
159
159
|
* @param {import("../drivers/base.js").default} args.driver - Database driver instance.
|
|
160
|
+
* @param {boolean} [args.skipForeignKey] - Skip emitting the inline REFERENCES clause (the caller emits a table-level FOREIGN KEY constraint instead).
|
|
160
161
|
* @returns {string} - SQL string.
|
|
161
162
|
*/
|
|
162
|
-
getSQL({ forAlterTable, driver, ...restArgs }: {
|
|
163
|
+
getSQL({ forAlterTable, driver, skipForeignKey, ...restArgs }: {
|
|
163
164
|
forAlterTable: boolean;
|
|
164
165
|
driver: import("../drivers/base.js").default;
|
|
166
|
+
skipForeignKey?: boolean | undefined;
|
|
165
167
|
}): string;
|
|
166
168
|
}
|
|
167
169
|
export type IndexArgType = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-column.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/table-column.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;GAiBG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,mBAAmB,EAwB7B;IAFC,0BAAsB;IACtB,aAAgB;IAGlB;;OAEG;IACH,WAFa,MAAM,CAEW;IAE9B;;OAEG;IACH,cAFa,MAAM,GAAG,SAAS,CAEM;IAErC;;;OAGG;IACH,oBAHW,MAAM,GACJ,IAAI,CAE8B;IAAzB,6BAAuB;IAE7C;;OAEG;IACH,iBAFa,MAAM,CAE2C;IAE9D;;OAEG;IACH,oBAFa,OAAO,CAE2C;IAE/D;;;OAGG;IACH,mCAHW,OAAO,GACL,IAAI,CAEgE;IAEjF;;OAEG;IACH,cAFa,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAEI;IAE1C;;;OAGG;IACH,uBAHW,GAAG,GACD,IAAI,CAEwC;IAEzD;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;OAEG;IACH,iBAFa,OAAO,GAAG,MAAM,GAAG,SAAS,CAEO;IAEhD;;;OAGG;IACH,6BAHW,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1B,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,OAAO,GAAC,YAAY,CAEc;IAE/C;;OAEG;IACH,gBAFa,YAAY,CAQxB;IAED,0BAMC;IAED;;;OAGG;IACH,mBAHW,OAAO,GAAC,YAAY,GAClB,IAAI,CAEgC;IAEjD;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;;OAGG;IACH,2BAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgD;IAEjE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;;OAGG;IACH,mBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgC;IAEjD;;OAEG;IACH,WAFa,OAAO,GAAG,SAAS,CAEI;IAEpC;;;OAGG;IACH,kBAHW,OAAO,GACL,IAAI,CAE8B;IAE/C;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;;OAGG;IACH,6BAHW,OAAO,GACL,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;OAEG;IACH,WAFa,MAAM,GAAG,SAAS,CAEK;IAEpC;;;OAGG;IACH,iBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAE4B;IAE7C;;OAEG;IACH,oBAFa,MAAM,GAAG,SAAS,CAI9B;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;OAEG;IACH,eAFa,OAAO,CAEoC;IAExD
|
|
1
|
+
{"version":3,"file":"table-column.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/table-column.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;GAiBG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,mBAAmB,EAwB7B;IAFC,0BAAsB;IACtB,aAAgB;IAGlB;;OAEG;IACH,WAFa,MAAM,CAEW;IAE9B;;OAEG;IACH,cAFa,MAAM,GAAG,SAAS,CAEM;IAErC;;;OAGG;IACH,oBAHW,MAAM,GACJ,IAAI,CAE8B;IAAzB,6BAAuB;IAE7C;;OAEG;IACH,iBAFa,MAAM,CAE2C;IAE9D;;OAEG;IACH,oBAFa,OAAO,CAE2C;IAE/D;;;OAGG;IACH,mCAHW,OAAO,GACL,IAAI,CAEgE;IAEjF;;OAEG;IACH,cAFa,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAEI;IAE1C;;;OAGG;IACH,uBAHW,GAAG,GACD,IAAI,CAEwC;IAEzD;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;OAEG;IACH,iBAFa,OAAO,GAAG,MAAM,GAAG,SAAS,CAEO;IAEhD;;;OAGG;IACH,6BAHW,OAAO,GAAG,MAAM,GAAG,SAAS,GAC1B,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,OAAO,GAAC,YAAY,CAEc;IAE/C;;OAEG;IACH,gBAFa,YAAY,CAQxB;IAED,0BAMC;IAED;;;OAGG;IACH,mBAHW,OAAO,GAAC,YAAY,GAClB,IAAI,CAEgC;IAEjD;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;;OAGG;IACH,2BAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgD;IAEjE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;;OAGG;IACH,mBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAEgC;IAEjD;;OAEG;IACH,WAFa,OAAO,GAAG,SAAS,CAEI;IAEpC;;;OAGG;IACH,kBAHW,OAAO,GACL,IAAI,CAE8B;IAE/C;;OAEG;IACH,gBAFa,MAAM,GAAG,SAAS,CAEe;IAE9C;;OAEG;IACH,iBAFa,OAAO,CAEqC;IAEzD;;;OAGG;IACH,6BAHW,OAAO,GACL,IAAI,CAEoD;IAErE;;OAEG;IACH,YAFa,MAAM,GAAG,SAAS,CAEO;IAEtC;;OAEG;IACH,WAFa,MAAM,GAAG,SAAS,CAEK;IAEpC;;;OAGG;IACH,iBAHW,MAAM,GAAG,SAAS,GAChB,IAAI,CAE4B;IAE7C;;OAEG;IACH,oBAFa,MAAM,GAAG,SAAS,CAI9B;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAM9B;IAED;;OAEG;IACH,eAFa,OAAO,CAEoC;IAExD;;;;;;OAMG;IACH,+DALG;QAAsB,aAAa,EAA3B,OAAO;QACoC,MAAM,EAAjD,OAAO,oBAAoB,EAAE,OAAO;QACrB,cAAc;KACrC,GAAU,MAAM,CAuIlB;CACF;2BApXY;IAAC,MAAM,EAAE,OAAO,CAAA;CAAC;;;;;;;;;cAUhB,GAAG"}
|
|
@@ -197,9 +197,10 @@ export default class TableColumn {
|
|
|
197
197
|
* @param {object} args - Options object.
|
|
198
198
|
* @param {boolean} args.forAlterTable - Whether for alter table.
|
|
199
199
|
* @param {import("../drivers/base.js").default} args.driver - Database driver instance.
|
|
200
|
+
* @param {boolean} [args.skipForeignKey] - Skip emitting the inline REFERENCES clause (the caller emits a table-level FOREIGN KEY constraint instead).
|
|
200
201
|
* @returns {string} - SQL string.
|
|
201
202
|
*/
|
|
202
|
-
getSQL({ forAlterTable, driver, ...restArgs }) {
|
|
203
|
+
getSQL({ forAlterTable, driver, skipForeignKey, ...restArgs }) {
|
|
203
204
|
restArgsError(restArgs);
|
|
204
205
|
const databaseType = driver.getType();
|
|
205
206
|
const options = driver.options();
|
|
@@ -309,7 +310,7 @@ export default class TableColumn {
|
|
|
309
310
|
if (notes && databaseType == "mysql") {
|
|
310
311
|
sql += ` COMMENT ${options.quote(notes)}`;
|
|
311
312
|
}
|
|
312
|
-
const foreignKey = this.getForeignKey();
|
|
313
|
+
const foreignKey = skipForeignKey ? undefined : this.getForeignKey();
|
|
313
314
|
if (foreignKey) {
|
|
314
315
|
let foreignKeyTable, foreignKeyColumn;
|
|
315
316
|
if (foreignKey === true) {
|
|
@@ -328,4 +329,4 @@ export default class TableColumn {
|
|
|
328
329
|
return sql;
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sV0FBVztJQUM5Qjs7O09BR0c7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQSxDQUFDLHFDQUFxQztZQUU3TyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFDckMsQ0FBQztZQUVELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUV2QiwwREFBMEQ7WUFDMUQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJ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LGVBQWUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQTtRQUMvRyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7e3VuaXF1ZTogYm9vbGVhbn19IEluZGV4QXJnVHlwZVxuICovXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVGb3JlaWduS2V5IGZyb20gXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZUNvbHVtbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvSW5jcmVtZW50XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBhdXRvLWluY3JlbWVudHMuXG4gKiBAcHJvcGVydHkge2FueX0gW2RlZmF1bHRdIC0gRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Ryb3BDb2x1bW5dIC0gV2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBkcm9wcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufG9iamVjdH0gW2ZvcmVpZ25LZXldIC0gRm9yZWlnbiBrZXkgb3B0aW9ucyBvciBmbGFnLlxuICogQHByb3BlcnR5IHtib29sZWFufEluZGV4QXJnVHlwZX0gW2luZGV4XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgaW5kZXhlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTmV3Q29sdW1uXSAtIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgYmVpbmcgYWRkZWQgaW4gYSBtaWdyYXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbWl0XSAtIEFsaWFzIGZvciBtYXhMZW5ndGggKHZhcmNoYXIgbGVuZ3RoIGxpbWl0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4TGVuZ3RoXSAtIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgY29sdW1uIHZhbHVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub3Rlc10gLSBDb2x1bW4gbm90ZXMgb3IgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB0aGUgY29sdW1uIGFsbG93cyBudWxsIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3BvbHltb3JwaGljXSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBwb2x5bW9ycGhpYy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAtIE51bWVyaWMgcHJlY2lzaW9uICh0b3RhbCBkaWdpdHMpIGZvciBkZWNpbWFsL251bWVyaWMgdHlwZXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmltYXJ5S2V5XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBhIHByaW1hcnkga2V5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzY2FsZV0gLSBOdW1lcmljIHNjYWxlIChkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkgZm9yIGRlY2ltYWwvbnVtZXJpYyB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV0gLSBDb2x1bW4gZGF0YSB0eXBlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlQ29sdW1uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3Qge2F1dG9JbmNyZW1lbnQsIGRlZmF1bHQ6IGNvbHVtbkRlZmF1bHQsIGRyb3BDb2x1bW4sIGZvcmVpZ25LZXksIGluZGV4LCBpc05ld0NvbHVtbiwgbGltaXQsIG1heExlbmd0aCwgbm90ZXMsIG51bGw6IGFyZ3NOdWxsLCBwb2x5bW9ycGhpYywgcHJlY2lzaW9uLCBwcmltYXJ5S2V5LCBzY2FsZSwgdHlwZSwgLi4ucmVzdEFyZ3N9ID0gYXJncyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhcmdzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBhcmdzIGdpdmVuXCIpXG4gICAgICB9XG5cbiAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBsaW1pdCDihpIgbWF4TGVuZ3RoIGZvciBzdHJpbmctbGlrZSB0eXBlcyBvbmx5LlxuICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCJcblxuICAgICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09IFwic3RyaW5nXCIgfHwgbm9ybWFsaXplZFR5cGUgPT09IFwidGV4dFwiIHx8IG5vcm1hbGl6ZWRUeXBlID09PSBcInZhcmNoYXJcIiB8fCBub3JtYWxpemVkVHlwZSA9PT0gXCJudmFyY2hhclwiIHx8IG5vcm1hbGl6ZWRUeXBlID09PSBcImNoYXJcIikge1xuICAgICAgICAgIGFyZ3MubWF4TGVuZ3RoID0gbGltaXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwge31cbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZ2V0TmFtZSgpIHsgcmV0dXJuIHRoaXMubmFtZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIG5ldyBuYW1lLlxuICAgKi9cbiAgZ2V0TmV3TmFtZSgpIHsgcmV0dXJuIHRoaXMuX25ld05hbWUgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXROZXdOYW1lKG5ld05hbWUpIHsgdGhpcy5fbmV3TmFtZSA9IG5ld05hbWUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBhY3R1YWwgbmFtZS5cbiAgICovXG4gIGdldEFjdHVhbE5hbWUoKSB7IHJldHVybiB0aGlzLmdldE5ld05hbWUoKSB8fCB0aGlzLmdldE5hbWUoKSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYXV0byBpbmNyZW1lbnQuXG4gICAqL1xuICBnZXRBdXRvSW5jcmVtZW50KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5hdXRvSW5jcmVtZW50IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdBdXRvSW5jcmVtZW50IC0gTmV3IGF1dG8gaW5jcmVtZW50LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRBdXRvSW5jcmVtZW50KG5ld0F1dG9JbmNyZW1lbnQpIHsgdGhpcy5hcmdzLmF1dG9JbmNyZW1lbnQgPSBuZXdBdXRvSW5jcmVtZW50IH1cblxuICAvKipcbiAgICogQHJldHVybnMge3Vua25vd24gfCAoKCkgPT4gdW5rbm93bil9IC0gVGhlIGRlZmF1bHQgdmFsdWUgb3IgZmFjdG9yeS5cbiAgICovXG4gIGdldERlZmF1bHQoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmRlZmF1bHQgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gbmV3RGVmYXVsdCAtIE5ldyBkZWZhdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXREZWZhdWx0KG5ld0RlZmF1bHQpIHsgdGhpcy5hcmdzLmRlZmF1bHQgPSBuZXdEZWZhdWx0IH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBkcm9wIGNvbHVtbi5cbiAgICovXG4gIGdldERyb3BDb2x1bW4oKSB7IHJldHVybiB0aGlzLmFyZ3M/LmRyb3BDb2x1bW4gfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZH0gLSBXaGV0aGVyIGZvcmVpZ24ga2V5LlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHsgcmV0dXJuIHRoaXMuYXJncz8uZm9yZWlnbktleSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZH0gbmV3Rm9yZWlnbktleSAtIE5ldyBmb3JlaWduIGtleS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Rm9yZWlnbktleShuZXdGb3JlaWduS2V5KSB7IHRoaXMuYXJncy5mb3JlaWduS2V5ID0gbmV3Rm9yZWlnbktleSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufEluZGV4QXJnVHlwZX0gLSBXaGV0aGVyIGluZGV4LlxuICAgKi9cbiAgZ2V0SW5kZXgoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmluZGV4IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0luZGV4QXJnVHlwZX0gLSBUaGUgaW5kZXggYXJncy5cbiAgICovXG4gIGdldEluZGV4QXJncygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYXJncz8uaW5kZXggPT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYXJncy5pbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge3VuaXF1ZTogZmFsc2V9XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5kZXhVbmlxdWUoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmFyZ3M/LmluZGV4XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ID09IFwib2JqZWN0XCIgJiYgaW5kZXgudW5pcXVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufEluZGV4QXJnVHlwZX0gbmV3SW5kZXggLSBOZXcgaW5kZXguXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEluZGV4KG5ld0luZGV4KSB7IHRoaXMuYXJncy5pbmRleCA9IG5ld0luZGV4IH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH0gLSBUaGUgbWF4IGxlbmd0aC5cbiAgICovXG4gIGdldE1heExlbmd0aCgpIHsgcmV0dXJuIHRoaXMuYXJncz8ubWF4TGVuZ3RoIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IG5ld01heExlbmd0aCAtIE5ldyBtYXggbGVuZ3RoLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRNYXhMZW5ndGgobmV3TWF4TGVuZ3RoKSB7IHRoaXMuYXJncy5tYXhMZW5ndGggPSBuZXdNYXhMZW5ndGggfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBub3Rlcy5cbiAgICovXG4gIGdldE5vdGVzKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5ub3RlcyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuZXdOb3RlcyAtIE5ldyBub3Rlcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Tm90ZXMobmV3Tm90ZXMpIHsgdGhpcy5hcmdzLm5vdGVzID0gbmV3Tm90ZXMgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gLSBXaGV0aGVyIG51bGwuXG4gICAqL1xuICBnZXROdWxsKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5udWxsIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBudWxsYWJsZSAtIFdoZXRoZXIgbnVsbGFibGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE51bGwobnVsbGFibGUpIHsgdGhpcy5hcmdzLm51bGwgPSBudWxsYWJsZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gTnVtZXJpYyBwcmVjaXNpb24gKHRvdGFsIGRpZ2l0cykuXG4gICAqL1xuICBnZXRQcmVjaXNpb24oKSB7IHJldHVybiB0aGlzLmFyZ3M/LnByZWNpc2lvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgcHJpbWFyeSBrZXkuXG4gICAqL1xuICBnZXRQcmltYXJ5S2V5KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5wcmltYXJ5S2V5IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdQcmltYXJ5S2V5IC0gTmV3IHByaW1hcnkga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRQcmltYXJ5S2V5KG5ld1ByaW1hcnlLZXkpIHsgdGhpcy5hcmdzLnByaW1hcnlLZXkgPSBuZXdQcmltYXJ5S2V5IH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH0gLSBOdW1lcmljIHNjYWxlIChkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkuXG4gICAqL1xuICBnZXRTY2FsZSgpIHsgcmV0dXJuIHRoaXMuYXJncz8uc2NhbGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlLlxuICAgKi9cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuYXJncz8udHlwZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuZXdUeXBlIC0gTmV3IHR5cGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFR5cGUobmV3VHlwZSkgeyB0aGlzLmFyZ3MudHlwZSA9IG5ld1R5cGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlIGhpbnQgbm90ZXMuXG4gICAqL1xuICBnZXRUeXBlSGludE5vdGVzKCkge1xuICAgIGlmICh0aGlzLmdldFR5cGUoKT8udG9Mb3dlckNhc2UoKSA9PSBcImJvb2xlYW5cIikgcmV0dXJuIFwidmVsb2Npb3VzOnR5cGU9Ym9vbGVhblwiXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlVHlwZSAtIERhdGFiYXNlIHR5cGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gTm90ZXMgZm9yIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKSB7XG4gICAgaWYgKCFbXCJteXNxbFwiLCBcInBnc3FsXCJdLmluY2x1ZGVzKGRhdGFiYXNlVHlwZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm90ZXMoKSB8fCB0aGlzLmdldFR5cGVIaW50Tm90ZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgbmV3IGNvbHVtbi5cbiAgICovXG4gIGlzTmV3Q29sdW1uKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5pc05ld0NvbHVtbiB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5mb3JBbHRlclRhYmxlIC0gV2hldGhlciBmb3IgYWx0ZXIgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNRTCBzdHJpbmcuXG4gICAqL1xuICBnZXRTUUwoe2ZvckFsdGVyVGFibGUsIGRyaXZlciwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IGRyaXZlci5nZXRUeXBlKClcbiAgICBjb25zdCBvcHRpb25zID0gZHJpdmVyLm9wdGlvbnMoKVxuICAgIGxldCBtYXhsZW5ndGggPSB0aGlzLmdldE1heExlbmd0aCgpXG4gICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUoKT8udG9VcHBlckNhc2UoKVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgIGlmICh0eXBlID09IFwiREFURVRJTUVcIikge1xuICAgICAgICB0eXBlID0gXCJUSU1FU1RBTVBcIlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVElOWUlOVFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJCWVRFQVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IFwiU1RSSU5HXCIpIHtcbiAgICAgIHR5cGUgPSBkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiID8gXCJOVkFSQ0hBUlwiIDogXCJWQVJDSEFSXCJcbiAgICAgIG1heGxlbmd0aCB8fD0gMjU1XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIHR5cGUgPT0gXCJUSU5ZSU5UXCIpIHtcbiAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIikge1xuICAgICAgaWYgKHR5cGUgPT0gXCJCT09MRUFOXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiQklUXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIlVVSURcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJDSEFSXCJcbiAgICAgICAgbWF4bGVuZ3RoIHx8PSAzNlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiSlNPTlwiKSB7XG4gICAgICAgIHR5cGUgPSBcIk5WQVJDSEFSKE1BWClcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJCSU5BUlkoTUFYKVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVEVYVFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIk5WQVJDSEFSKE1BWClcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwic3FsaXRlXCIgJiYgdGhpcy5nZXRBdXRvSW5jcmVtZW50KCkgJiYgdGhpcy5nZXRQcmltYXJ5S2V5KCkpIHtcbiAgICAgIHR5cGUgPSBcIklOVEVHRVJcIlxuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIHRoaXMuZ2V0UHJpbWFyeUtleSgpKSB7XG4gICAgICB0eXBlID0gXCJTRVJJQUxcIlxuICAgIH1cblxuICAgIGxldCBzcWwgPSBgJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZSh0aGlzLmdldEFjdHVhbE5hbWUoKSl9IGBcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIGZvckFsdGVyVGFibGUpIHNxbCArPSBcIlRZUEUgXCJcbiAgICBpZiAodHlwZSkgc3FsICs9IHR5cGVcblxuICAgIGNvbnN0IHByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKClcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuZ2V0U2NhbGUoKVxuXG4gICAgaWYgKChzY2FsZSAhPT0gdW5kZWZpbmVkICYmIHNjYWxlICE9PSBudWxsKSAmJiAocHJlY2lzaW9uID09PSB1bmRlZmluZWQgfHwgcHJlY2lzaW9uID09PSBudWxsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJyR7dGhpcy5nZXRBY3R1YWxOYW1lKCl9Jzogc2NhbGUgcmVxdWlyZXMgcHJlY2lzaW9uIHRvIGJlIHNldGApXG4gICAgfVxuXG4gICAgaWYgKHByZWNpc2lvbiAhPT0gdW5kZWZpbmVkICYmIHByZWNpc2lvbiAhPT0gbnVsbCkge1xuICAgICAgc3FsICs9IHNjYWxlICE9PSB1bmRlZmluZWQgJiYgc2NhbGUgIT09IG51bGwgPyBgKCR7cHJlY2lzaW9ufSwgJHtzY2FsZX0pYCA6IGAoJHtwcmVjaXNpb259KWBcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgbWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgbWF4bGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICBzcWwgKz0gYCgke21heGxlbmd0aH0pYFxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSAmJiBkcml2ZXIuc2hvdWxkU2V0QXV0b0luY3JlbWVudFdoZW5QcmltYXJ5S2V5KCkpIHtcbiAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiKSB7XG4gICAgICAgIHNxbCArPSBcIiBJREVOVElUWVwiXG4gICAgICB9IGVsc2UgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIHRoaXMuZ2V0UHJpbWFyeUtleSgpKSB7XG4gICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBnc3FsIGF1dG8gaW5jcmVtZW50IG11c3QgYmUgcHJpbWFyeSBrZXlcIilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3FsICs9IFwiIEFVVE9fSU5DUkVNRU5UXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHQoKVxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBldmFsdWF0ZWREZWZhdWx0ID0gZGVmYXVsdFZhbHVlKClcblxuICAgICAgc3FsICs9IGAgREVGQVVMVCAoYFxuXG4gICAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIiAmJiBldmFsdWF0ZWREZWZhdWx0ID09IFwiVVVJRCgpXCIpIHtcbiAgICAgICAgc3FsICs9IFwiZ2VuX3JhbmRvbV91dWlkKClcIlxuICAgICAgfSBlbHNlIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiICYmIGV2YWx1YXRlZERlZmF1bHQgPT0gXCJVVUlEKClcIikge1xuICAgICAgICBzcWwgKz0gXCJORVdJRCgpXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNxbCArPSBldmFsdWF0ZWREZWZhdWx0XG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBcIilcIlxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBzcWwgKz0gYCBERUZBVUxUICR7b3B0aW9ucy5xdW90ZShkZWZhdWx0VmFsdWUpfWBcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRQcmltYXJ5S2V5KCkpIHNxbCArPSBcIiBQUklNQVJZIEtFWVwiXG4gICAgaWYgKHRoaXMuZ2V0TnVsbCgpID09PSBmYWxzZSkgc3FsICs9IFwiIE5PVCBOVUxMXCJcblxuICAgIGNvbnN0IG5vdGVzID0gdGhpcy5nZXROb3Rlc0ZvckRhdGFiYXNlKGRhdGFiYXNlVHlwZSlcblxuICAgIGlmIChub3RlcyAmJiBkYXRhYmFzZVR5cGUgPT0gXCJteXNxbFwiKSB7XG4gICAgICBzcWwgKz0gYCBDT01NRU5UICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuXG4gICAgaWYgKGZvcmVpZ25LZXkpIHtcbiAgICAgIGxldCBmb3JlaWduS2V5VGFibGUsIGZvcmVpZ25LZXlDb2x1bW5cblxuICAgICAgaWYgKGZvcmVpZ25LZXkgPT09IHRydWUpIHtcbiAgICAgICAgZm9yZWlnbktleUNvbHVtbiA9IFwiaWRcIlxuICAgICAgICBmb3JlaWduS2V5VGFibGUgPSBpbmZsZWN0aW9uLnBsdXJhbGl6ZSh0aGlzLmdldEFjdHVhbE5hbWUoKS5yZXBsYWNlKC9faWQkLywgXCJcIikpXG4gICAgICB9IGVsc2UgaWYgKGZvcmVpZ25LZXkgaW5zdGFuY2VvZiBUYWJsZUZvcmVpZ25LZXkpIHtcbiAgICAgICAgZm9yZWlnbktleUNvbHVtbiA9IGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZENvbHVtbk5hbWUoKVxuICAgICAgICBmb3JlaWduS2V5VGFibGUgPSBmb3JlaWduS2V5LmdldFJlZmVyZW5jZWRUYWJsZU5hbWUoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZvcmVpZ24ga2V5IHR5cGUgZ2l2ZW46ICR7Zm9yZWlnbktleX0gKCR7dHlwZW9mIGZvcmVpZ25LZXl9KWApXG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBgIFJFRkVSRU5DRVMgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKGZvcmVpZ25LZXlUYWJsZSl9KCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUoZm9yZWlnbktleUNvbHVtbil9KWBcbiAgICB9XG5cbiAgICByZXR1cm4gc3FsXG4gIH1cbn1cbiJdfQ==
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL3RhYmxlLWRhdGEvdGFibGUtY29sdW1uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7R0FFRztBQUVILE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sYUFBYSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFELE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sV0FBVztJQUM5Qjs7O09BR0c7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQSxDQUFDLHFDQUFxQztZQUU3TyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFDckMsQ0FBQztZQUVELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUV2QiwwREFBMEQ7WUFDMUQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJ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LE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQTtZQUN6RixDQUFDO1lBRUQsR0FBRyxJQUFJLGVBQWUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQTtRQUMvRyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7e3VuaXF1ZTogYm9vbGVhbn19IEluZGV4QXJnVHlwZVxuICovXG5cbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVGb3JlaWduS2V5IGZyb20gXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUYWJsZUNvbHVtbkFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvSW5jcmVtZW50XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBhdXRvLWluY3JlbWVudHMuXG4gKiBAcHJvcGVydHkge2FueX0gW2RlZmF1bHRdIC0gRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Ryb3BDb2x1bW5dIC0gV2hldGhlciB0aGUgY29sdW1uIHNob3VsZCBiZSBkcm9wcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufG9iamVjdH0gW2ZvcmVpZ25LZXldIC0gRm9yZWlnbiBrZXkgb3B0aW9ucyBvciBmbGFnLlxuICogQHByb3BlcnR5IHtib29sZWFufEluZGV4QXJnVHlwZX0gW2luZGV4XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgaW5kZXhlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2lzTmV3Q29sdW1uXSAtIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgYmVpbmcgYWRkZWQgaW4gYSBtaWdyYXRpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2xpbWl0XSAtIEFsaWFzIGZvciBtYXhMZW5ndGggKHZhcmNoYXIgbGVuZ3RoIGxpbWl0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbWF4TGVuZ3RoXSAtIE1heGltdW0gbGVuZ3RoIGZvciB0aGUgY29sdW1uIHZhbHVlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtub3Rlc10gLSBDb2x1bW4gbm90ZXMgb3IgY29tbWVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW251bGxdIC0gV2hldGhlciB0aGUgY29sdW1uIGFsbG93cyBudWxsIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3BvbHltb3JwaGljXSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBwb2x5bW9ycGhpYy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAtIE51bWVyaWMgcHJlY2lzaW9uICh0b3RhbCBkaWdpdHMpIGZvciBkZWNpbWFsL251bWVyaWMgdHlwZXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcmltYXJ5S2V5XSAtIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyBhIHByaW1hcnkga2V5LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzY2FsZV0gLSBOdW1lcmljIHNjYWxlIChkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkgZm9yIGRlY2ltYWwvbnVtZXJpYyB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdHlwZV0gLSBDb2x1bW4gZGF0YSB0eXBlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlQ29sdW1uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtUYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3Qge2F1dG9JbmNyZW1lbnQsIGRlZmF1bHQ6IGNvbHVtbkRlZmF1bHQsIGRyb3BDb2x1bW4sIGZvcmVpZ25LZXksIGluZGV4LCBpc05ld0NvbHVtbiwgbGltaXQsIG1heExlbmd0aCwgbm90ZXMsIG51bGw6IGFyZ3NOdWxsLCBwb2x5bW9ycGhpYywgcHJlY2lzaW9uLCBwcmltYXJ5S2V5LCBzY2FsZSwgdHlwZSwgLi4ucmVzdEFyZ3N9ID0gYXJncyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhcmdzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBhcmdzIGdpdmVuXCIpXG4gICAgICB9XG5cbiAgICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBsaW1pdCDihpIgbWF4TGVuZ3RoIGZvciBzdHJpbmctbGlrZSB0eXBlcyBvbmx5LlxuICAgICAgaWYgKGxpbWl0ICE9PSB1bmRlZmluZWQgJiYgbWF4TGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCJcblxuICAgICAgICBpZiAobm9ybWFsaXplZFR5cGUgPT09IFwic3RyaW5nXCIgfHwgbm9ybWFsaXplZFR5cGUgPT09IFwidGV4dFwiIHx8IG5vcm1hbGl6ZWRUeXBlID09PSBcInZhcmNoYXJcIiB8fCBub3JtYWxpemVkVHlwZSA9PT0gXCJudmFyY2hhclwiIHx8IG5vcm1hbGl6ZWRUeXBlID09PSBcImNoYXJcIikge1xuICAgICAgICAgIGFyZ3MubWF4TGVuZ3RoID0gbGltaXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwge31cbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZ2V0TmFtZSgpIHsgcmV0dXJuIHRoaXMubmFtZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIG5ldyBuYW1lLlxuICAgKi9cbiAgZ2V0TmV3TmFtZSgpIHsgcmV0dXJuIHRoaXMuX25ld05hbWUgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXROZXdOYW1lKG5ld05hbWUpIHsgdGhpcy5fbmV3TmFtZSA9IG5ld05hbWUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBhY3R1YWwgbmFtZS5cbiAgICovXG4gIGdldEFjdHVhbE5hbWUoKSB7IHJldHVybiB0aGlzLmdldE5ld05hbWUoKSB8fCB0aGlzLmdldE5hbWUoKSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgYXV0byBpbmNyZW1lbnQuXG4gICAqL1xuICBnZXRBdXRvSW5jcmVtZW50KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5hdXRvSW5jcmVtZW50IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdBdXRvSW5jcmVtZW50IC0gTmV3IGF1dG8gaW5jcmVtZW50LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRBdXRvSW5jcmVtZW50KG5ld0F1dG9JbmNyZW1lbnQpIHsgdGhpcy5hcmdzLmF1dG9JbmNyZW1lbnQgPSBuZXdBdXRvSW5jcmVtZW50IH1cblxuICAvKipcbiAgICogQHJldHVybnMge3Vua25vd24gfCAoKCkgPT4gdW5rbm93bil9IC0gVGhlIGRlZmF1bHQgdmFsdWUgb3IgZmFjdG9yeS5cbiAgICovXG4gIGdldERlZmF1bHQoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmRlZmF1bHQgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gbmV3RGVmYXVsdCAtIE5ldyBkZWZhdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXREZWZhdWx0KG5ld0RlZmF1bHQpIHsgdGhpcy5hcmdzLmRlZmF1bHQgPSBuZXdEZWZhdWx0IH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBkcm9wIGNvbHVtbi5cbiAgICovXG4gIGdldERyb3BDb2x1bW4oKSB7IHJldHVybiB0aGlzLmFyZ3M/LmRyb3BDb2x1bW4gfHwgZmFsc2UgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZH0gLSBXaGV0aGVyIGZvcmVpZ24ga2V5LlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHsgcmV0dXJuIHRoaXMuYXJncz8uZm9yZWlnbktleSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbiB8IG9iamVjdCB8IHVuZGVmaW5lZH0gbmV3Rm9yZWlnbktleSAtIE5ldyBmb3JlaWduIGtleS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Rm9yZWlnbktleShuZXdGb3JlaWduS2V5KSB7IHRoaXMuYXJncy5mb3JlaWduS2V5ID0gbmV3Rm9yZWlnbktleSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufEluZGV4QXJnVHlwZX0gLSBXaGV0aGVyIGluZGV4LlxuICAgKi9cbiAgZ2V0SW5kZXgoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmluZGV4IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0luZGV4QXJnVHlwZX0gLSBUaGUgaW5kZXggYXJncy5cbiAgICovXG4gIGdldEluZGV4QXJncygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYXJncz8uaW5kZXggPT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIHRoaXMuYXJncy5pbmRleFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge3VuaXF1ZTogZmFsc2V9XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5kZXhVbmlxdWUoKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmFyZ3M/LmluZGV4XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ID09IFwib2JqZWN0XCIgJiYgaW5kZXgudW5pcXVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufEluZGV4QXJnVHlwZX0gbmV3SW5kZXggLSBOZXcgaW5kZXguXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEluZGV4KG5ld0luZGV4KSB7IHRoaXMuYXJncy5pbmRleCA9IG5ld0luZGV4IH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH0gLSBUaGUgbWF4IGxlbmd0aC5cbiAgICovXG4gIGdldE1heExlbmd0aCgpIHsgcmV0dXJuIHRoaXMuYXJncz8ubWF4TGVuZ3RoIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IG5ld01heExlbmd0aCAtIE5ldyBtYXggbGVuZ3RoLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRNYXhMZW5ndGgobmV3TWF4TGVuZ3RoKSB7IHRoaXMuYXJncy5tYXhMZW5ndGggPSBuZXdNYXhMZW5ndGggfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBub3Rlcy5cbiAgICovXG4gIGdldE5vdGVzKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5ub3RlcyB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuZXdOb3RlcyAtIE5ldyBub3Rlcy5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Tm90ZXMobmV3Tm90ZXMpIHsgdGhpcy5hcmdzLm5vdGVzID0gbmV3Tm90ZXMgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gLSBXaGV0aGVyIG51bGwuXG4gICAqL1xuICBnZXROdWxsKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5udWxsIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBudWxsYWJsZSAtIFdoZXRoZXIgbnVsbGFibGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE51bGwobnVsbGFibGUpIHsgdGhpcy5hcmdzLm51bGwgPSBudWxsYWJsZSB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gTnVtZXJpYyBwcmVjaXNpb24gKHRvdGFsIGRpZ2l0cykuXG4gICAqL1xuICBnZXRQcmVjaXNpb24oKSB7IHJldHVybiB0aGlzLmFyZ3M/LnByZWNpc2lvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgcHJpbWFyeSBrZXkuXG4gICAqL1xuICBnZXRQcmltYXJ5S2V5KCkgeyByZXR1cm4gdGhpcy5hcmdzPy5wcmltYXJ5S2V5IHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtib29sZWFufSBuZXdQcmltYXJ5S2V5IC0gTmV3IHByaW1hcnkga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRQcmltYXJ5S2V5KG5ld1ByaW1hcnlLZXkpIHsgdGhpcy5hcmdzLnByaW1hcnlLZXkgPSBuZXdQcmltYXJ5S2V5IH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlciB8IHVuZGVmaW5lZH0gLSBOdW1lcmljIHNjYWxlIChkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludCkuXG4gICAqL1xuICBnZXRTY2FsZSgpIHsgcmV0dXJuIHRoaXMuYXJncz8uc2NhbGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlLlxuICAgKi9cbiAgZ2V0VHlwZSgpIHsgcmV0dXJuIHRoaXMuYXJncz8udHlwZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBuZXdUeXBlIC0gTmV3IHR5cGUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFR5cGUobmV3VHlwZSkgeyB0aGlzLmFyZ3MudHlwZSA9IG5ld1R5cGUgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSB0eXBlIGhpbnQgbm90ZXMuXG4gICAqL1xuICBnZXRUeXBlSGludE5vdGVzKCkge1xuICAgIGlmICh0aGlzLmdldFR5cGUoKT8udG9Mb3dlckNhc2UoKSA9PSBcImJvb2xlYW5cIikgcmV0dXJuIFwidmVsb2Npb3VzOnR5cGU9Ym9vbGVhblwiXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlVHlwZSAtIERhdGFiYXNlIHR5cGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gTm90ZXMgZm9yIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGdldE5vdGVzRm9yRGF0YWJhc2UoZGF0YWJhc2VUeXBlKSB7XG4gICAgaWYgKCFbXCJteXNxbFwiLCBcInBnc3FsXCJdLmluY2x1ZGVzKGRhdGFiYXNlVHlwZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm90ZXMoKSB8fCB0aGlzLmdldFR5cGVIaW50Tm90ZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgbmV3IGNvbHVtbi5cbiAgICovXG4gIGlzTmV3Q29sdW1uKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5pc05ld0NvbHVtbiB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXJncy5mb3JBbHRlclRhYmxlIC0gV2hldGhlciBmb3IgYWx0ZXIgdGFibGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnNraXBGb3JlaWduS2V5XSAtIFNraXAgZW1pdHRpbmcgdGhlIGlubGluZSBSRUZFUkVOQ0VTIGNsYXVzZSAodGhlIGNhbGxlciBlbWl0cyBhIHRhYmxlLWxldmVsIEZPUkVJR04gS0VZIGNvbnN0cmFpbnQgaW5zdGVhZCkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIGdldFNRTCh7Zm9yQWx0ZXJUYWJsZSwgZHJpdmVyLCBza2lwRm9yZWlnbktleSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IGRyaXZlci5nZXRUeXBlKClcbiAgICBjb25zdCBvcHRpb25zID0gZHJpdmVyLm9wdGlvbnMoKVxuICAgIGxldCBtYXhsZW5ndGggPSB0aGlzLmdldE1heExlbmd0aCgpXG4gICAgbGV0IHR5cGUgPSB0aGlzLmdldFR5cGUoKT8udG9VcHBlckNhc2UoKVxuXG4gICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgIGlmICh0eXBlID09IFwiREFURVRJTUVcIikge1xuICAgICAgICB0eXBlID0gXCJUSU1FU1RBTVBcIlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVElOWUlOVFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJCWVRFQVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09IFwiU1RSSU5HXCIpIHtcbiAgICAgIHR5cGUgPSBkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiID8gXCJOVkFSQ0hBUlwiIDogXCJWQVJDSEFSXCJcbiAgICAgIG1heGxlbmd0aCB8fD0gMjU1XG4gICAgfVxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIHR5cGUgPT0gXCJUSU5ZSU5UXCIpIHtcbiAgICAgIHR5cGUgPSBcIlNNQUxMSU5UXCJcbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwibXNzcWxcIikge1xuICAgICAgaWYgKHR5cGUgPT0gXCJCT09MRUFOXCIpIHtcbiAgICAgICAgdHlwZSA9IFwiQklUXCJcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIlVVSURcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJDSEFSXCJcbiAgICAgICAgbWF4bGVuZ3RoIHx8PSAzNlxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiSlNPTlwiKSB7XG4gICAgICAgIHR5cGUgPSBcIk5WQVJDSEFSKE1BWClcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIkJMT0JcIikge1xuICAgICAgICB0eXBlID0gXCJWQVJCSU5BUlkoTUFYKVwiXG4gICAgICAgIG1heGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiVEVYVFwiKSB7XG4gICAgICAgIHR5cGUgPSBcIk5WQVJDSEFSKE1BWClcIlxuICAgICAgICBtYXhsZW5ndGggPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwic3FsaXRlXCIgJiYgdGhpcy5nZXRBdXRvSW5jcmVtZW50KCkgJiYgdGhpcy5nZXRQcmltYXJ5S2V5KCkpIHtcbiAgICAgIHR5cGUgPSBcIklOVEVHRVJcIlxuICAgIH1cblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIHRoaXMuZ2V0UHJpbWFyeUtleSgpKSB7XG4gICAgICB0eXBlID0gXCJTRVJJQUxcIlxuICAgIH1cblxuICAgIGxldCBzcWwgPSBgJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZSh0aGlzLmdldEFjdHVhbE5hbWUoKSl9IGBcblxuICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJwZ3NxbFwiICYmIGZvckFsdGVyVGFibGUpIHNxbCArPSBcIlRZUEUgXCJcbiAgICBpZiAodHlwZSkgc3FsICs9IHR5cGVcblxuICAgIGNvbnN0IHByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKClcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuZ2V0U2NhbGUoKVxuXG4gICAgaWYgKChzY2FsZSAhPT0gdW5kZWZpbmVkICYmIHNjYWxlICE9PSBudWxsKSAmJiAocHJlY2lzaW9uID09PSB1bmRlZmluZWQgfHwgcHJlY2lzaW9uID09PSBudWxsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gJyR7dGhpcy5nZXRBY3R1YWxOYW1lKCl9Jzogc2NhbGUgcmVxdWlyZXMgcHJlY2lzaW9uIHRvIGJlIHNldGApXG4gICAgfVxuXG4gICAgaWYgKHByZWNpc2lvbiAhPT0gdW5kZWZpbmVkICYmIHByZWNpc2lvbiAhPT0gbnVsbCkge1xuICAgICAgc3FsICs9IHNjYWxlICE9PSB1bmRlZmluZWQgJiYgc2NhbGUgIT09IG51bGwgPyBgKCR7cHJlY2lzaW9ufSwgJHtzY2FsZX0pYCA6IGAoJHtwcmVjaXNpb259KWBcbiAgICB9IGVsc2UgaWYgKHR5cGUgJiYgbWF4bGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgbWF4bGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICBzcWwgKz0gYCgke21heGxlbmd0aH0pYFxuICAgIH1cblxuICAgIGlmICh0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSAmJiBkcml2ZXIuc2hvdWxkU2V0QXV0b0luY3JlbWVudFdoZW5QcmltYXJ5S2V5KCkpIHtcbiAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiKSB7XG4gICAgICAgIHNxbCArPSBcIiBJREVOVElUWVwiXG4gICAgICB9IGVsc2UgaWYgKGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QXV0b0luY3JlbWVudCgpICYmIHRoaXMuZ2V0UHJpbWFyeUtleSgpKSB7XG4gICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInBnc3FsIGF1dG8gaW5jcmVtZW50IG11c3QgYmUgcHJpbWFyeSBrZXlcIilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3FsICs9IFwiIEFVVE9fSU5DUkVNRU5UXCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHQoKVxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBldmFsdWF0ZWREZWZhdWx0ID0gZGVmYXVsdFZhbHVlKClcblxuICAgICAgc3FsICs9IGAgREVGQVVMVCAoYFxuXG4gICAgICBpZiAoZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIiAmJiBldmFsdWF0ZWREZWZhdWx0ID09IFwiVVVJRCgpXCIpIHtcbiAgICAgICAgc3FsICs9IFwiZ2VuX3JhbmRvbV91dWlkKClcIlxuICAgICAgfSBlbHNlIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiICYmIGV2YWx1YXRlZERlZmF1bHQgPT0gXCJVVUlEKClcIikge1xuICAgICAgICBzcWwgKz0gXCJORVdJRCgpXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNxbCArPSBldmFsdWF0ZWREZWZhdWx0XG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBcIilcIlxuICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBzcWwgKz0gYCBERUZBVUxUICR7b3B0aW9ucy5xdW90ZShkZWZhdWx0VmFsdWUpfWBcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRQcmltYXJ5S2V5KCkpIHNxbCArPSBcIiBQUklNQVJZIEtFWVwiXG4gICAgaWYgKHRoaXMuZ2V0TnVsbCgpID09PSBmYWxzZSkgc3FsICs9IFwiIE5PVCBOVUxMXCJcblxuICAgIGNvbnN0IG5vdGVzID0gdGhpcy5nZXROb3Rlc0ZvckRhdGFiYXNlKGRhdGFiYXNlVHlwZSlcblxuICAgIGlmIChub3RlcyAmJiBkYXRhYmFzZVR5cGUgPT0gXCJteXNxbFwiKSB7XG4gICAgICBzcWwgKz0gYCBDT01NRU5UICR7b3B0aW9ucy5xdW90ZShub3Rlcyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGZvcmVpZ25LZXkgPSBza2lwRm9yZWlnbktleSA/IHVuZGVmaW5lZCA6IHRoaXMuZ2V0Rm9yZWlnbktleSgpXG5cbiAgICBpZiAoZm9yZWlnbktleSkge1xuICAgICAgbGV0IGZvcmVpZ25LZXlUYWJsZSwgZm9yZWlnbktleUNvbHVtblxuXG4gICAgICBpZiAoZm9yZWlnbktleSA9PT0gdHJ1ZSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gXCJpZFwiXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKHRoaXMuZ2V0QWN0dWFsTmFtZSgpLnJlcGxhY2UoL19pZCQvLCBcIlwiKSlcbiAgICAgIH0gZWxzZSBpZiAoZm9yZWlnbktleSBpbnN0YW5jZW9mIFRhYmxlRm9yZWlnbktleSkge1xuICAgICAgICBmb3JlaWduS2V5Q29sdW1uID0gZm9yZWlnbktleS5nZXRSZWZlcmVuY2VkQ29sdW1uTmFtZSgpXG4gICAgICAgIGZvcmVpZ25LZXlUYWJsZSA9IGZvcmVpZ25LZXkuZ2V0UmVmZXJlbmNlZFRhYmxlTmFtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZm9yZWlnbiBrZXkgdHlwZSBnaXZlbjogJHtmb3JlaWduS2V5fSAoJHt0eXBlb2YgZm9yZWlnbktleX0pYClcbiAgICAgIH1cblxuICAgICAgc3FsICs9IGAgUkVGRVJFTkNFUyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUoZm9yZWlnbktleVRhYmxlKX0oJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShmb3JlaWduS2V5Q29sdW1uKX0pYFxuICAgIH1cblxuICAgIHJldHVybiBzcWxcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../index.js","../bin/velocious.js","../src/application.js","../src/configuration-resolver.js","../src/configuration-types.js","../src/configuration.js","../src/controller.js","../src/current.js","../src/error-logger.js","../src/frontend-model-controller.js","../src/initializer.js","../src/logger.js","../src/mailer.js","../src/velocious-error.js","../src/authorization/ability.js","../src/authorization/base-resource.js","../src/background-jobs/client.js","../src/background-jobs/cron-expression.js","../src/background-jobs/job-record.js","../src/background-jobs/job-registry.js","../src/background-jobs/job-runner.js","../src/background-jobs/job.js","../src/background-jobs/json-socket.js","../src/background-jobs/main.js","../src/background-jobs/scheduler.js","../src/background-jobs/status-reporter.js","../src/background-jobs/store.js","../src/background-jobs/types.js","../src/background-jobs/worker.js","../src/cli/base-command.js","../src/cli/browser-cli.js","../src/cli/index.js","../src/cli/use-browser-cli.js","../src/cli/commands/background-jobs-main.js","../src/cli/commands/background-jobs-runner.js","../src/cli/commands/background-jobs-worker.js","../src/cli/commands/console.js","../src/cli/commands/init.js","../src/cli/commands/routes.js","../src/cli/commands/run-script.js","../src/cli/commands/runner.js","../src/cli/commands/server.js","../src/cli/commands/test.js","../src/cli/commands/db/create.js","../src/cli/commands/db/drop.js","../src/cli/commands/db/migrate.js","../src/cli/commands/db/reset.js","../src/cli/commands/db/rollback.js","../src/cli/commands/db/seed.js","../src/cli/commands/db/schema/dump.js","../src/cli/commands/db/schema/load.js","../src/cli/commands/destroy/migration.js","../src/cli/commands/generate/base-models.js","../src/cli/commands/generate/frontend-models.js","../src/cli/commands/generate/migration.js","../src/cli/commands/generate/model.js","../src/database/handler.js","../src/database/initializer-from-require-context.js","../src/database/migrator.js","../src/database/use-database.js","../src/database/drivers/base-column.js","../src/database/drivers/base-columns-index.js","../src/database/drivers/base-foreign-key.js","../src/database/drivers/base-table.js","../src/database/drivers/base.js","../src/database/drivers/mssql/column.js","../src/database/drivers/mssql/columns-index.js","../src/database/drivers/mssql/connect-connection.js","../src/database/drivers/mssql/foreign-key.js","../src/database/drivers/mssql/index.js","../src/database/drivers/mssql/options.js","../src/database/drivers/mssql/query-parser.js","../src/database/drivers/mssql/structure-sql.js","../src/database/drivers/mssql/table.js","../src/database/drivers/mssql/sql/alter-table.js","../src/database/drivers/mssql/sql/create-database.js","../src/database/drivers/mssql/sql/create-index.js","../src/database/drivers/mssql/sql/create-table.js","../src/database/drivers/mssql/sql/delete.js","../src/database/drivers/mssql/sql/drop-database.js","../src/database/drivers/mssql/sql/drop-table.js","../src/database/drivers/mssql/sql/insert.js","../src/database/drivers/mssql/sql/update.js","../src/database/drivers/mssql/sql/upsert.js","../src/database/drivers/mysql/column.js","../src/database/drivers/mysql/columns-index.js","../src/database/drivers/mysql/foreign-key.js","../src/database/drivers/mysql/index.js","../src/database/drivers/mysql/options.js","../src/database/drivers/mysql/query-parser.js","../src/database/drivers/mysql/query.js","../src/database/drivers/mysql/structure-sql.js","../src/database/drivers/mysql/table.js","../src/database/drivers/mysql/sql/alter-table.js","../src/database/drivers/mysql/sql/create-database.js","../src/database/drivers/mysql/sql/create-index.js","../src/database/drivers/mysql/sql/create-table.js","../src/database/drivers/mysql/sql/delete.js","../src/database/drivers/mysql/sql/drop-database.js","../src/database/drivers/mysql/sql/drop-table.js","../src/database/drivers/mysql/sql/insert.js","../src/database/drivers/mysql/sql/update.js","../src/database/drivers/mysql/sql/upsert.js","../src/database/drivers/pgsql/column.js","../src/database/drivers/pgsql/columns-index.js","../src/database/drivers/pgsql/foreign-key.js","../src/database/drivers/pgsql/index.js","../src/database/drivers/pgsql/options.js","../src/database/drivers/pgsql/query-parser.js","../src/database/drivers/pgsql/structure-sql.js","../src/database/drivers/pgsql/table.js","../src/database/drivers/pgsql/sql/alter-table.js","../src/database/drivers/pgsql/sql/create-database.js","../src/database/drivers/pgsql/sql/create-index.js","../src/database/drivers/pgsql/sql/create-table.js","../src/database/drivers/pgsql/sql/delete.js","../src/database/drivers/pgsql/sql/drop-database.js","../src/database/drivers/pgsql/sql/drop-table.js","../src/database/drivers/pgsql/sql/insert.js","../src/database/drivers/pgsql/sql/update.js","../src/database/drivers/pgsql/sql/upsert.js","../src/database/drivers/sqlite/base.js","../src/database/drivers/sqlite/column.js","../src/database/drivers/sqlite/columns-index.js","../src/database/drivers/sqlite/connection-sql-js.js","../src/database/drivers/sqlite/foreign-key.js","../src/database/drivers/sqlite/index.js","../src/database/drivers/sqlite/index.native.js","../src/database/drivers/sqlite/index.web.js","../src/database/drivers/sqlite/options.js","../src/database/drivers/sqlite/query-parser.js","../src/database/drivers/sqlite/query.js","../src/database/drivers/sqlite/query.native.js","../src/database/drivers/sqlite/query.web.js","../src/database/drivers/sqlite/structure-sql.js","../src/database/drivers/sqlite/table.js","../src/database/drivers/sqlite/sql/alter-table.js","../src/database/drivers/sqlite/sql/create-index.js","../src/database/drivers/sqlite/sql/create-table.js","../src/database/drivers/sqlite/sql/delete.js","../src/database/drivers/sqlite/sql/drop-table.js","../src/database/drivers/sqlite/sql/insert.js","../src/database/drivers/sqlite/sql/update.js","../src/database/drivers/sqlite/sql/upsert.js","../src/database/drivers/structure-sql/utils.js","../src/database/migration/index.js","../src/database/migrator/files-finder.js","../src/database/migrator/types.js","../src/database/pool/async-tracked-multi-connection.js","../src/database/pool/base-methods-forward.js","../src/database/pool/base.js","../src/database/pool/single-multi-use.js","../src/database/query/alter-table-base.js","../src/database/query/base.js","../src/database/query/create-database-base.js","../src/database/query/create-index-base.js","../src/database/query/create-table-base.js","../src/database/query/delete-base.js","../src/database/query/drop-database-base.js","../src/database/query/drop-table-base.js","../src/database/query/from-base.js","../src/database/query/from-plain.js","../src/database/query/from-table.js","../src/database/query/index.js","../src/database/query/insert-base.js","../src/database/query/join-base.js","../src/database/query/join-object.js","../src/database/query/join-plain.js","../src/database/query/join-tracker.js","../src/database/query/model-class-query.js","../src/database/query/order-base.js","../src/database/query/order-plain.js","../src/database/query/preloader.js","../src/database/query/query-data.js","../src/database/query/select-base.js","../src/database/query/select-plain.js","../src/database/query/select-table-and-column.js","../src/database/query/update-base.js","../src/database/query/upsert-base.js","../src/database/query/where-base.js","../src/database/query/where-hash.js","../src/database/query/where-model-class-hash.js","../src/database/query/where-not.js","../src/database/query/where-plain.js","../src/database/query/with-count.js","../src/database/query/preloader/belongs-to.js","../src/database/query/preloader/has-many.js","../src/database/query/preloader/has-one.js","../src/database/query-parser/base-query-parser.js","../src/database/query-parser/from-parser.js","../src/database/query-parser/group-parser.js","../src/database/query-parser/joins-parser.js","../src/database/query-parser/limit-parser.js","../src/database/query-parser/options.js","../src/database/query-parser/order-parser.js","../src/database/query-parser/select-parser.js","../src/database/query-parser/where-parser.js","../src/database/record/index.js","../src/database/record/record-not-found-error.js","../src/database/record/state-machine.js","../src/database/record/user-module.js","../src/database/record/attachments/download.js","../src/database/record/attachments/handle.js","../src/database/record/attachments/normalize-input.js","../src/database/record/attachments/store.js","../src/database/record/attachments/storage-drivers/filesystem.js","../src/database/record/attachments/storage-drivers/native.js","../src/database/record/attachments/storage-drivers/s3.js","../src/database/record/instance-relationships/base.js","../src/database/record/instance-relationships/belongs-to.js","../src/database/record/instance-relationships/has-many.js","../src/database/record/instance-relationships/has-one.js","../src/database/record/relationships/base.js","../src/database/record/relationships/belongs-to.js","../src/database/record/relationships/has-many.js","../src/database/record/relationships/has-one.js","../src/database/record/validators/base.js","../src/database/record/validators/format.js","../src/database/record/validators/presence.js","../src/database/record/validators/uniqueness.js","../src/database/table-data/index.js","../src/database/table-data/table-column.js","../src/database/table-data/table-foreign-key.js","../src/database/table-data/table-index.js","../src/database/table-data/table-reference.js","../src/environment-handlers/base.js","../src/environment-handlers/browser.js","../src/environment-handlers/node.js","../src/environment-handlers/node/cli/commands/background-jobs-main.js","../src/environment-handlers/node/cli/commands/background-jobs-runner.js","../src/environment-handlers/node/cli/commands/background-jobs-worker.js","../src/environment-handlers/node/cli/commands/console.js","../src/environment-handlers/node/cli/commands/init.js","../src/environment-handlers/node/cli/commands/routes.js","../src/environment-handlers/node/cli/commands/run-script.js","../src/environment-handlers/node/cli/commands/runner.js","../src/environment-handlers/node/cli/commands/server.js","../src/environment-handlers/node/cli/commands/test.js","../src/environment-handlers/node/cli/commands/db/seed.js","../src/environment-handlers/node/cli/commands/db/schema/dump.js","../src/environment-handlers/node/cli/commands/db/schema/load.js","../src/environment-handlers/node/cli/commands/destroy/migration.js","../src/environment-handlers/node/cli/commands/generate/base-models.js","../src/environment-handlers/node/cli/commands/generate/frontend-models.js","../src/environment-handlers/node/cli/commands/generate/migration.js","../src/environment-handlers/node/cli/commands/generate/model.js","../src/frontend-model-resource/base-resource.js","../src/frontend-models/base.js","../src/frontend-models/model-registry.js","../src/frontend-models/outgoing-event-buffer.js","../src/frontend-models/query.js","../src/frontend-models/resource-config-validation.js","../src/frontend-models/resource-definition.js","../src/frontend-models/transport-serialization.js","../src/frontend-models/websocket-channel.js","../src/frontend-models/websocket-publishers.js","../src/http-client/header.js","../src/http-client/index.js","../src/http-client/request.js","../src/http-client/response.js","../src/http-client/websocket-channel.js","../src/http-client/websocket-client.js","../src/http-client/websocket-connection.js","../src/http-server/cookie.js","../src/http-server/development-reloader.js","../src/http-server/index.js","../src/http-server/server-client.js","../src/http-server/websocket-channel-subscribers.js","../src/http-server/websocket-channel.js","../src/http-server/websocket-connection.js","../src/http-server/websocket-event-log-store.js","../src/http-server/websocket-events-host.js","../src/http-server/websocket-events.js","../src/http-server/client/index.js","../src/http-server/client/params-to-object.js","../src/http-server/client/request-parser.js","../src/http-server/client/request-runner.js","../src/http-server/client/request.js","../src/http-server/client/response.js","../src/http-server/client/websocket-request.js","../src/http-server/client/websocket-session.js","../src/http-server/client/request-buffer/form-data-part.js","../src/http-server/client/request-buffer/header.js","../src/http-server/client/request-buffer/index.js","../src/http-server/client/uploaded-file/memory-uploaded-file.js","../src/http-server/client/uploaded-file/temporary-uploaded-file.js","../src/http-server/client/uploaded-file/uploaded-file.js","../src/http-server/worker-handler/in-process.js","../src/http-server/worker-handler/index.js","../src/http-server/worker-handler/worker-script.js","../src/http-server/worker-handler/worker-thread.js","../src/jobs/mail-delivery.js","../src/logger/base-logger.js","../src/logger/console-logger.js","../src/logger/file-logger.js","../src/logger/outputs/array-output.js","../src/logger/outputs/console-output.js","../src/logger/outputs/file-output.js","../src/logger/outputs/stdout-output.js","../src/mailer/base.js","../src/mailer/delivery.js","../src/mailer/index.js","../src/mailer/backends/smtp.js","../src/plugins/sqljs-wasm-route-controller.js","../src/plugins/sqljs-wasm-route.js","../src/routes/app-routes.js","../src/routes/base-route.js","../src/routes/basic-route.js","../src/routes/get-route.js","../src/routes/index.js","../src/routes/namespace-route.js","../src/routes/plugin-routes.js","../src/routes/post-route.js","../src/routes/resolver.js","../src/routes/resource-route.js","../src/routes/root-route.js","../src/routes/built-in/errors/controller.js","../src/routes/hooks/frontend-model-command-route-hook.js","../src/testing/base-expect.js","../src/testing/browser-test-app.js","../src/testing/expect-to-change.js","../src/testing/expect-utils.js","../src/testing/expect.js","../src/testing/request-client.js","../src/testing/test-files-finder.js","../src/testing/test-filter-parser.js","../src/testing/test-runner.js","../src/testing/test-suite-splitter.js","../src/testing/test.js","../src/types/external-modules.d.ts","../src/utils/backtrace-cleaner.js","../src/utils/ensure-error.js","../src/utils/event-emitter.js","../src/utils/file-exists.js","../src/utils/format-value.js","../src/utils/model-scope.js","../src/utils/nest-callbacks.js","../src/utils/ransack.js","../src/utils/rest-args-error.js","../src/utils/singularize-model-name.js","../src/utils/split-sql-statements.js","../src/utils/to-import-specifier.js","../src/utils/with-tracked-stack-async-hooks.js","../src/utils/with-tracked-stack.js"],"version":"6.0.3"}
|
|
1
|
+
{"root":["../index.js","../bin/velocious.js","../src/application.js","../src/configuration-resolver.js","../src/configuration-types.js","../src/configuration.js","../src/controller.js","../src/current.js","../src/error-logger.js","../src/frontend-model-controller.js","../src/initializer.js","../src/logger.js","../src/mailer.js","../src/velocious-error.js","../src/authorization/ability.js","../src/authorization/base-resource.js","../src/background-jobs/client.js","../src/background-jobs/cron-expression.js","../src/background-jobs/job-record.js","../src/background-jobs/job-registry.js","../src/background-jobs/job-runner.js","../src/background-jobs/job.js","../src/background-jobs/json-socket.js","../src/background-jobs/main.js","../src/background-jobs/scheduler.js","../src/background-jobs/status-reporter.js","../src/background-jobs/store.js","../src/background-jobs/types.js","../src/background-jobs/worker.js","../src/cli/base-command.js","../src/cli/browser-cli.js","../src/cli/index.js","../src/cli/use-browser-cli.js","../src/cli/commands/background-jobs-main.js","../src/cli/commands/background-jobs-runner.js","../src/cli/commands/background-jobs-worker.js","../src/cli/commands/console.js","../src/cli/commands/init.js","../src/cli/commands/routes.js","../src/cli/commands/run-script.js","../src/cli/commands/runner.js","../src/cli/commands/server.js","../src/cli/commands/test.js","../src/cli/commands/db/create.js","../src/cli/commands/db/drop.js","../src/cli/commands/db/migrate.js","../src/cli/commands/db/reset.js","../src/cli/commands/db/rollback.js","../src/cli/commands/db/seed.js","../src/cli/commands/db/schema/dump.js","../src/cli/commands/db/schema/load.js","../src/cli/commands/destroy/migration.js","../src/cli/commands/generate/base-models.js","../src/cli/commands/generate/frontend-models.js","../src/cli/commands/generate/migration.js","../src/cli/commands/generate/model.js","../src/database/handler.js","../src/database/initializer-from-require-context.js","../src/database/migrator.js","../src/database/use-database.js","../src/database/drivers/base-column.js","../src/database/drivers/base-columns-index.js","../src/database/drivers/base-foreign-key.js","../src/database/drivers/base-table.js","../src/database/drivers/base.js","../src/database/drivers/mssql/column.js","../src/database/drivers/mssql/columns-index.js","../src/database/drivers/mssql/connect-connection.js","../src/database/drivers/mssql/foreign-key.js","../src/database/drivers/mssql/index.js","../src/database/drivers/mssql/options.js","../src/database/drivers/mssql/query-parser.js","../src/database/drivers/mssql/structure-sql.js","../src/database/drivers/mssql/table.js","../src/database/drivers/mssql/sql/alter-table.js","../src/database/drivers/mssql/sql/create-database.js","../src/database/drivers/mssql/sql/create-index.js","../src/database/drivers/mssql/sql/create-table.js","../src/database/drivers/mssql/sql/delete.js","../src/database/drivers/mssql/sql/drop-database.js","../src/database/drivers/mssql/sql/drop-table.js","../src/database/drivers/mssql/sql/insert.js","../src/database/drivers/mssql/sql/update.js","../src/database/drivers/mssql/sql/upsert.js","../src/database/drivers/mysql/column.js","../src/database/drivers/mysql/columns-index.js","../src/database/drivers/mysql/foreign-key.js","../src/database/drivers/mysql/index.js","../src/database/drivers/mysql/options.js","../src/database/drivers/mysql/query-parser.js","../src/database/drivers/mysql/query.js","../src/database/drivers/mysql/structure-sql.js","../src/database/drivers/mysql/table.js","../src/database/drivers/mysql/sql/alter-table.js","../src/database/drivers/mysql/sql/create-database.js","../src/database/drivers/mysql/sql/create-index.js","../src/database/drivers/mysql/sql/create-table.js","../src/database/drivers/mysql/sql/delete.js","../src/database/drivers/mysql/sql/drop-database.js","../src/database/drivers/mysql/sql/drop-table.js","../src/database/drivers/mysql/sql/insert.js","../src/database/drivers/mysql/sql/update.js","../src/database/drivers/mysql/sql/upsert.js","../src/database/drivers/pgsql/column.js","../src/database/drivers/pgsql/columns-index.js","../src/database/drivers/pgsql/foreign-key.js","../src/database/drivers/pgsql/index.js","../src/database/drivers/pgsql/options.js","../src/database/drivers/pgsql/query-parser.js","../src/database/drivers/pgsql/structure-sql.js","../src/database/drivers/pgsql/table.js","../src/database/drivers/pgsql/sql/alter-table.js","../src/database/drivers/pgsql/sql/create-database.js","../src/database/drivers/pgsql/sql/create-index.js","../src/database/drivers/pgsql/sql/create-table.js","../src/database/drivers/pgsql/sql/delete.js","../src/database/drivers/pgsql/sql/drop-database.js","../src/database/drivers/pgsql/sql/drop-table.js","../src/database/drivers/pgsql/sql/insert.js","../src/database/drivers/pgsql/sql/update.js","../src/database/drivers/pgsql/sql/upsert.js","../src/database/drivers/sqlite/base.js","../src/database/drivers/sqlite/column.js","../src/database/drivers/sqlite/columns-index.js","../src/database/drivers/sqlite/connection-sql-js.js","../src/database/drivers/sqlite/foreign-key.js","../src/database/drivers/sqlite/index.js","../src/database/drivers/sqlite/index.native.js","../src/database/drivers/sqlite/index.web.js","../src/database/drivers/sqlite/options.js","../src/database/drivers/sqlite/query-parser.js","../src/database/drivers/sqlite/query.js","../src/database/drivers/sqlite/query.native.js","../src/database/drivers/sqlite/query.web.js","../src/database/drivers/sqlite/structure-sql.js","../src/database/drivers/sqlite/table-rebuilder.js","../src/database/drivers/sqlite/table.js","../src/database/drivers/sqlite/sql/alter-table.js","../src/database/drivers/sqlite/sql/create-index.js","../src/database/drivers/sqlite/sql/create-table.js","../src/database/drivers/sqlite/sql/delete.js","../src/database/drivers/sqlite/sql/drop-table.js","../src/database/drivers/sqlite/sql/insert.js","../src/database/drivers/sqlite/sql/update.js","../src/database/drivers/sqlite/sql/upsert.js","../src/database/drivers/structure-sql/utils.js","../src/database/migration/index.js","../src/database/migrator/files-finder.js","../src/database/migrator/types.js","../src/database/pool/async-tracked-multi-connection.js","../src/database/pool/base-methods-forward.js","../src/database/pool/base.js","../src/database/pool/single-multi-use.js","../src/database/query/alter-table-base.js","../src/database/query/base.js","../src/database/query/create-database-base.js","../src/database/query/create-index-base.js","../src/database/query/create-table-base.js","../src/database/query/delete-base.js","../src/database/query/drop-database-base.js","../src/database/query/drop-table-base.js","../src/database/query/from-base.js","../src/database/query/from-plain.js","../src/database/query/from-table.js","../src/database/query/index.js","../src/database/query/insert-base.js","../src/database/query/join-base.js","../src/database/query/join-object.js","../src/database/query/join-plain.js","../src/database/query/join-tracker.js","../src/database/query/model-class-query.js","../src/database/query/order-base.js","../src/database/query/order-plain.js","../src/database/query/preloader.js","../src/database/query/query-data.js","../src/database/query/select-base.js","../src/database/query/select-plain.js","../src/database/query/select-table-and-column.js","../src/database/query/update-base.js","../src/database/query/upsert-base.js","../src/database/query/where-base.js","../src/database/query/where-hash.js","../src/database/query/where-model-class-hash.js","../src/database/query/where-not.js","../src/database/query/where-plain.js","../src/database/query/with-count.js","../src/database/query/preloader/belongs-to.js","../src/database/query/preloader/has-many.js","../src/database/query/preloader/has-one.js","../src/database/query-parser/base-query-parser.js","../src/database/query-parser/from-parser.js","../src/database/query-parser/group-parser.js","../src/database/query-parser/joins-parser.js","../src/database/query-parser/limit-parser.js","../src/database/query-parser/options.js","../src/database/query-parser/order-parser.js","../src/database/query-parser/select-parser.js","../src/database/query-parser/where-parser.js","../src/database/record/index.js","../src/database/record/record-not-found-error.js","../src/database/record/state-machine.js","../src/database/record/user-module.js","../src/database/record/attachments/download.js","../src/database/record/attachments/handle.js","../src/database/record/attachments/normalize-input.js","../src/database/record/attachments/store.js","../src/database/record/attachments/storage-drivers/filesystem.js","../src/database/record/attachments/storage-drivers/native.js","../src/database/record/attachments/storage-drivers/s3.js","../src/database/record/instance-relationships/base.js","../src/database/record/instance-relationships/belongs-to.js","../src/database/record/instance-relationships/has-many.js","../src/database/record/instance-relationships/has-one.js","../src/database/record/relationships/base.js","../src/database/record/relationships/belongs-to.js","../src/database/record/relationships/has-many.js","../src/database/record/relationships/has-one.js","../src/database/record/validators/base.js","../src/database/record/validators/format.js","../src/database/record/validators/presence.js","../src/database/record/validators/uniqueness.js","../src/database/table-data/index.js","../src/database/table-data/table-column.js","../src/database/table-data/table-foreign-key.js","../src/database/table-data/table-index.js","../src/database/table-data/table-reference.js","../src/environment-handlers/base.js","../src/environment-handlers/browser.js","../src/environment-handlers/node.js","../src/environment-handlers/node/cli/commands/background-jobs-main.js","../src/environment-handlers/node/cli/commands/background-jobs-runner.js","../src/environment-handlers/node/cli/commands/background-jobs-worker.js","../src/environment-handlers/node/cli/commands/console.js","../src/environment-handlers/node/cli/commands/init.js","../src/environment-handlers/node/cli/commands/routes.js","../src/environment-handlers/node/cli/commands/run-script.js","../src/environment-handlers/node/cli/commands/runner.js","../src/environment-handlers/node/cli/commands/server.js","../src/environment-handlers/node/cli/commands/test.js","../src/environment-handlers/node/cli/commands/db/seed.js","../src/environment-handlers/node/cli/commands/db/schema/dump.js","../src/environment-handlers/node/cli/commands/db/schema/load.js","../src/environment-handlers/node/cli/commands/destroy/migration.js","../src/environment-handlers/node/cli/commands/generate/base-models.js","../src/environment-handlers/node/cli/commands/generate/frontend-models.js","../src/environment-handlers/node/cli/commands/generate/migration.js","../src/environment-handlers/node/cli/commands/generate/model.js","../src/frontend-model-resource/base-resource.js","../src/frontend-models/base.js","../src/frontend-models/model-registry.js","../src/frontend-models/outgoing-event-buffer.js","../src/frontend-models/query.js","../src/frontend-models/resource-config-validation.js","../src/frontend-models/resource-definition.js","../src/frontend-models/transport-serialization.js","../src/frontend-models/websocket-channel.js","../src/frontend-models/websocket-publishers.js","../src/http-client/header.js","../src/http-client/index.js","../src/http-client/request.js","../src/http-client/response.js","../src/http-client/websocket-channel.js","../src/http-client/websocket-client.js","../src/http-client/websocket-connection.js","../src/http-server/cookie.js","../src/http-server/development-reloader.js","../src/http-server/index.js","../src/http-server/server-client.js","../src/http-server/websocket-channel-subscribers.js","../src/http-server/websocket-channel.js","../src/http-server/websocket-connection.js","../src/http-server/websocket-event-log-store.js","../src/http-server/websocket-events-host.js","../src/http-server/websocket-events.js","../src/http-server/client/index.js","../src/http-server/client/params-to-object.js","../src/http-server/client/request-parser.js","../src/http-server/client/request-runner.js","../src/http-server/client/request.js","../src/http-server/client/response.js","../src/http-server/client/websocket-request.js","../src/http-server/client/websocket-session.js","../src/http-server/client/request-buffer/form-data-part.js","../src/http-server/client/request-buffer/header.js","../src/http-server/client/request-buffer/index.js","../src/http-server/client/uploaded-file/memory-uploaded-file.js","../src/http-server/client/uploaded-file/temporary-uploaded-file.js","../src/http-server/client/uploaded-file/uploaded-file.js","../src/http-server/worker-handler/in-process.js","../src/http-server/worker-handler/index.js","../src/http-server/worker-handler/worker-script.js","../src/http-server/worker-handler/worker-thread.js","../src/jobs/mail-delivery.js","../src/logger/base-logger.js","../src/logger/console-logger.js","../src/logger/file-logger.js","../src/logger/outputs/array-output.js","../src/logger/outputs/console-output.js","../src/logger/outputs/file-output.js","../src/logger/outputs/stdout-output.js","../src/mailer/base.js","../src/mailer/delivery.js","../src/mailer/index.js","../src/mailer/backends/smtp.js","../src/plugins/sqljs-wasm-route-controller.js","../src/plugins/sqljs-wasm-route.js","../src/routes/app-routes.js","../src/routes/base-route.js","../src/routes/basic-route.js","../src/routes/get-route.js","../src/routes/index.js","../src/routes/namespace-route.js","../src/routes/plugin-routes.js","../src/routes/post-route.js","../src/routes/resolver.js","../src/routes/resource-route.js","../src/routes/root-route.js","../src/routes/built-in/errors/controller.js","../src/routes/hooks/frontend-model-command-route-hook.js","../src/testing/base-expect.js","../src/testing/browser-test-app.js","../src/testing/expect-to-change.js","../src/testing/expect-utils.js","../src/testing/expect.js","../src/testing/request-client.js","../src/testing/test-files-finder.js","../src/testing/test-filter-parser.js","../src/testing/test-runner.js","../src/testing/test-suite-splitter.js","../src/testing/test.js","../src/types/external-modules.d.ts","../src/utils/backtrace-cleaner.js","../src/utils/ensure-error.js","../src/utils/event-emitter.js","../src/utils/file-exists.js","../src/utils/format-value.js","../src/utils/model-scope.js","../src/utils/nest-callbacks.js","../src/utils/ransack.js","../src/utils/rest-args-error.js","../src/utils/singularize-model-name.js","../src/utils/split-sql-statements.js","../src/utils/to-import-specifier.js","../src/utils/with-tracked-stack-async-hooks.js","../src/utils/with-tracked-stack.js"],"version":"6.0.3"}
|