velocious 1.0.156 → 1.0.157

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.
@@ -42,7 +42,10 @@ export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable exten
42
42
  tableData.setName(tempTableName);
43
43
  const newTableData = new TableData(tempTableName);
44
44
  for (const tableDataColumn of currentTableData.getColumns()) {
45
- const newTableDataColumn = tableData.getColumns().find((newTableDataColumn) => newTableDataColumn.getName() == tableDataColumn.getName());
45
+ let newTableDataColumn = tableData.getColumns().find((newTableDataColumn) => newTableDataColumn.getName() == tableDataColumn.getName());
46
+ if (newTableDataColumn && newTableDataColumn.isNewColumn()) {
47
+ newTableDataColumn = undefined;
48
+ }
46
49
  if (newTableDataColumn) {
47
50
  newTableDataColumn.setAutoIncrement(tableDataColumn.getAutoIncrement());
48
51
  newTableDataColumn.setDefault(tableDataColumn.getDefault());
@@ -54,9 +57,13 @@ export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable exten
54
57
  }
55
58
  newTableData.addColumn(newTableDataColumn || tableDataColumn);
56
59
  }
60
+ // SQLite rebuilds use existing columns plus new ones; avoid duplicating a column that already exists.
61
+ const existingColumnNames = new Set(currentTableData.getColumns().map((column) => column.getName()));
57
62
  for (const tableDataColumn of tableData.getColumns()) {
58
63
  if (!tableDataColumn.isNewColumn())
59
64
  continue;
65
+ if (existingColumnNames.has(tableDataColumn.getName()))
66
+ continue;
60
67
  newTableData.addColumn(tableDataColumn);
61
68
  }
62
69
  const foundForeignKeys = [];
@@ -120,4 +127,4 @@ export default class VelociousDatabaseConnectionDriversSqliteSqlAlterTable exten
120
127
  return sqls;
121
128
  }
122
129
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvc3FsL2FsdGVyLXRhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGNBQWMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMvRCxPQUFPLGVBQWUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNqRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxhQUFhLE1BQU0sc0NBQXNDLENBQUE7QUFDaEUsT0FBTyxTQUFTLE1BQU0sOEJBQThCLENBQUE7QUFFcEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxxREFBc0QsU0FBUSxjQUFjO0lBQy9GOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLEtBQUs7WUFB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QUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQTtnQkFFeEcsT0FBTyxjQUFjLEVBQUUsVUFBVSxFQUFFLElBQUksY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLFVBQVUsQ0FBQTtZQUNoRixDQUFDLENBQUMsQ0FBQTtZQUVGLE1BQU0sZUFBZSxHQUFHO2dCQUN0QixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hDLFNBQVM7Z0JBQ1QsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsRUFBRTthQUNyQyxDQUFBO1lBQ0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUUzRSxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEFsdGVyVGFibGVCYXNlIGZyb20gXCIuLi8uLi8uLi9xdWVyeS9hbHRlci10YWJsZS1iYXNlLmpzXCJcbmltcG9ydCBDcmVhdGVJbmRleEJhc2UgZnJvbSBcIi4uLy4uLy4uL3F1ZXJ5L2NyZWF0ZS1pbmRleC1iYXNlLmpzXCJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vLi4vLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vLi4vLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlQ29ubmVjdGlvbkRyaXZlcnNTcWxpdGVTcWxBbHRlclRhYmxlIGV4dGVuZHMgQWx0ZXJUYWJsZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuZHJpdmVyIC0gRGF0YWJhc2UgZHJpdmVyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uL3RhYmxlLWRhdGEvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy50YWJsZURhdGEgLSBUYWJsZSBkYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RyaXZlciwgdGFibGVEYXRhLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCEodGFibGVEYXRhIGluc3RhbmNlb2YgVGFibGVEYXRhKSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBkYXRhIHdhcyBnaXZlblwiKVxuXG4gICAgc3VwZXIoe2RyaXZlciwgdGFibGVEYXRhfSlcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IHt0YWJsZURhdGF9ID0gdGhpc1xuICAgIGNvbnN0IHRhYmxlID0gYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5nZXRUYWJsZUJ5TmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKVxuXG4gICAgaWYgKCF0YWJsZSkgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSAke3RhYmxlRGF0YS5nZXROYW1lKCl9IGRvZXMgbm90IGV4aXN0YClcblxuICAgIGNvbnN0IGN1cnJlbnRUYWJsZURhdGEgPSBhd2FpdCB0YWJsZS5nZXRUYWJsZURhdGEoKVxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKVxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlRGF0YS5nZXROYW1lKClcbiAgICBjb25zdCB0ZW1wVGFibGVOYW1lID0gYCR7dGFibGVEYXRhLmdldE5hbWUoKX1BbHRlclRhYmxlVGVtcGBcbiAgICBjb25zdCBuZXdDb2x1bW5OYW1lcyA9IGN1cnJlbnRUYWJsZURhdGEuZ2V0Q29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNOZXdDb2x1bW4oKSlcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBuZXdUYWJsZUNvbHVtbiA9IHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkuZmluZCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLmdldE5hbWUoKSA9PSBjb2x1bW4uZ2V0TmFtZSgpKVxuXG4gICAgICAgIHJldHVybiBuZXdUYWJsZUNvbHVtbj8uZ2V0TmV3TmFtZSgpIHx8IG5ld1RhYmxlQ29sdW1uPy5nZXROYW1lKCkgfHwgY29sdW1uLmdldE5ld05hbWUoKSB8fCBjb2x1bW4uZ2V0TmFtZSgpXG4gICAgICB9KVxuICAgIGNvbnN0IG9sZENvbHVtbk5hbWVzID0gY3VycmVudFRhYmxlRGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNOZXdDb2x1bW4oKSkubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXROYW1lKCkpXG4gICAgY29uc3QgbmV3Q29sdW1uc1NRTCA9IG5ld0NvbHVtbk5hbWVzLm1hcCgobmFtZSkgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUobmFtZSkpLmpvaW4oXCIsIFwiKVxuICAgIGNvbnN0IG9sZENvbHVtbnNTUUwgPSBvbGRDb2x1bW5OYW1lcy5tYXAoKG5hbWUpID0+IG9wdGlvbnMucXVvdGVDb2x1bW5OYW1lKG5hbWUpKS5qb2luKFwiLCBcIilcblxuICAgIHRhYmxlRGF0YS5zZXROYW1lKHRlbXBUYWJsZU5hbWUpXG5cbiAgICBjb25zdCBuZXdUYWJsZURhdGEgPSBuZXcgVGFibGVEYXRhKHRlbXBUYWJsZU5hbWUpXG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlRGF0YUNvbHVtbiBvZiBjdXJyZW50VGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgY29uc3QgbmV3VGFibGVEYXRhQ29sdW1uID0gdGFibGVEYXRhLmdldENvbHVtbnMoKS5maW5kKChuZXdUYWJsZURhdGFDb2x1bW4pID0+IG5ld1RhYmxlRGF0YUNvbHVtbi5nZXROYW1lKCkgPT0gdGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSlcblxuICAgICAgaWYgKG5ld1RhYmxlRGF0YUNvbHVtbikge1xuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0QXV0b0luY3JlbWVudCh0YWJsZURhdGFDb2x1bW4uZ2V0QXV0b0luY3JlbWVudCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0RGVmYXVsdCh0YWJsZURhdGFDb2x1bW4uZ2V0RGVmYXVsdCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0SW5kZXgodGFibGVEYXRhQ29sdW1uLmdldEluZGV4KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRGb3JlaWduS2V5KHRhYmxlRGF0YUNvbHVtbi5nZXRGb3JlaWduS2V5KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRNYXhMZW5ndGgodGFibGVEYXRhQ29sdW1uLmdldE1heExlbmd0aCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0UHJpbWFyeUtleSh0YWJsZURhdGFDb2x1bW4uZ2V0UHJpbWFyeUtleSgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0VHlwZSh0YWJsZURhdGFDb2x1bW4uZ2V0VHlwZSgpKVxuICAgICAgfVxuXG4gICAgICBuZXdUYWJsZURhdGEuYWRkQ29sdW1uKG5ld1RhYmxlRGF0YUNvbHVtbiB8fCB0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFDb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4uaXNOZXdDb2x1bW4oKSkgY29udGludWVcblxuICAgICAgbmV3VGFibGVEYXRhLmFkZENvbHVtbih0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRGb3JlaWduS2V5cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlRGF0YUZvcmVpZ25LZXkgb2YgY3VycmVudFRhYmxlRGF0YS5nZXRGb3JlaWduS2V5cygpKSB7XG4gICAgICBjb25zdCBuZXdUYWJsZURhdGFGb3JlaWduS2V5ID0gbmV3VGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkuZmluZCgobmV3VGFibGVEYXRhRm9yZWlnbktleSkgPT4gbmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkgPT0gdGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGlmIChuZXdUYWJsZURhdGFGb3JlaWduS2V5KSBmb3VuZEZvcmVpZ25LZXlzLnB1c2gobmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGNvbnN0IGFjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkgPSBuZXdUYWJsZURhdGFGb3JlaWduS2V5IHx8IHRhYmxlRGF0YUZvcmVpZ25LZXlcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2FjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoYWN0dWFsVGFibGVEYXRhRm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgdGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkpIHtcbiAgICAgIGlmIChmb3VuZEZvcmVpZ25LZXlzLmluY2x1ZGVzKGZvcmVpZ25LZXkuZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShmb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2ZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoZm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVOZXdUYWJsZVNRTCA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlVGFibGVTcWwobmV3VGFibGVEYXRhKVxuICAgIGNvbnN0IGluc2VydFNRTCA9IGBJTlNFUlQgSU5UTyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGVtcFRhYmxlTmFtZSl9ICgke25ld0NvbHVtbnNTUUx9KSBTRUxFQ1QgJHtvbGRDb2x1bW5zU1FMfSBGUk9NICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBkcm9wVGFibGVTUUxzID0gYERST1AgVEFCTEUgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSl9YFxuICAgIGNvbnN0IHJlbmFtZVRhYmxlU1FMID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gUkVOQU1FIFRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBzcWxzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZU5ld1RhYmxlU1FMKSB7XG4gICAgICBzcWxzLnB1c2goc3FsKVxuICAgIH1cblxuICAgIHNxbHMucHVzaChpbnNlcnRTUUwpXG4gICAgc3Fscy5wdXNoKGRyb3BUYWJsZVNRTHMpXG4gICAgc3Fscy5wdXNoKHJlbmFtZVRhYmxlU1FMKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFJbmRleCBvZiBjdXJyZW50VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgbmV3VGFibGVEYXRhSW5kZXggPSBuZXdUYWJsZURhdGEuZ2V0SW5kZXhlcygpLmZpbmQoKG5ld1RhYmxlRGF0YUluZGV4KSA9PiBuZXdUYWJsZURhdGFJbmRleC5nZXROYW1lKCkgPT0gdGFibGVEYXRhSW5kZXguZ2V0TmFtZSgpKVxuICAgICAgY29uc3QgYWN0dWFsVGFibGVJbmRleCA9IG5ld1RhYmxlRGF0YUluZGV4IHx8IHRhYmxlRGF0YUluZGV4XG5cbiAgICAgIG5ld1RhYmxlRGF0YS5hZGRJbmRleChhY3R1YWxUYWJsZUluZGV4KVxuXG4gICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGFjdHVhbFRhYmxlSW5kZXguZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdUYWJsZUNvbHVtbiA9IHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkuZmluZCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLmdldE5hbWUoKSA9PSBjb2x1bW5OYW1lKVxuXG4gICAgICAgIHJldHVybiBuZXdUYWJsZUNvbHVtbj8uZ2V0TmV3TmFtZSgpIHx8IG5ld1RhYmxlQ29sdW1uPy5nZXROYW1lKCkgfHwgY29sdW1uTmFtZVxuICAgICAgfSlcblxuICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5OYW1lcyxcbiAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICBuYW1lOiBhY3R1YWxUYWJsZUluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICB1bmlxdWU6IGFjdHVhbFRhYmxlSW5kZXguZ2V0VW5pcXVlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICBmb3IgKGNvbnN0IGNyZWF0ZUluZGV4U1FMIG9mIGNyZWF0ZUluZGV4U1FMcykge1xuICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbHNcbiAgfVxufVxuIl19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvZHJpdmVycy9zcWxpdGUvc3FsL2FsdGVyLXRhYmxlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGNBQWMsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMvRCxPQUFPLGVBQWUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNqRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sdUJBQXVCLENBQUE7QUFDNUMsT0FBTyxhQUFhLE1BQU0sc0NBQXNDLENBQUE7QUFDaEUsT0FBTyxTQUFTLE1BQU0sOEJBQThCLENBQUE7QUFFcEQsTUFBTSxDQUFDLE9BQU8sT0FBTyxxREFBc0QsU0FBUSxjQUFjO0lBQy9GOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQTtRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFeEUsSUFBSSxDQUFDLEtBQUs7WUFB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cnQgQWx0ZXJUYWJsZUJhc2UgZnJvbSBcIi4uLy4uLy4uL3F1ZXJ5L2FsdGVyLXRhYmxlLWJhc2UuanNcIlxuaW1wb3J0IENyZWF0ZUluZGV4QmFzZSBmcm9tIFwiLi4vLi4vLi4vcXVlcnkvY3JlYXRlLWluZGV4LWJhc2UuanNcIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi8uLi8uLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgVGFibGVEYXRhIGZyb20gXCIuLi8uLi8uLi90YWJsZS1kYXRhL2luZGV4LmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VDb25uZWN0aW9uRHJpdmVyc1NxbGl0ZVNxbEFsdGVyVGFibGUgZXh0ZW5kcyBBbHRlclRhYmxlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vLi4vdGFibGUtZGF0YS9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCB0YWJsZURhdGEsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyLCB0YWJsZURhdGF9KVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMudGFibGVEYXRhID0gdGFibGVEYXRhXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggU1FMIHN0YXRlbWVudHMuXG4gICAqL1xuICBhc3luYyB0b1NRTHMoKSB7XG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3QgdGFibGUgPSBhd2FpdCB0aGlzLmdldERyaXZlcigpLmdldFRhYmxlQnlOYW1lKHRhYmxlRGF0YS5nZXROYW1lKCkpXG5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlICR7dGFibGVEYXRhLmdldE5hbWUoKX0gZG9lcyBub3QgZXhpc3RgKVxuXG4gICAgY29uc3QgY3VycmVudFRhYmxlRGF0YSA9IGF3YWl0IHRhYmxlLmdldFRhYmxlRGF0YSgpXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVEYXRhLmdldE5hbWUoKVxuICAgIGNvbnN0IHRlbXBUYWJsZU5hbWUgPSBgJHt0YWJsZURhdGEuZ2V0TmFtZSgpfUFsdGVyVGFibGVUZW1wYFxuICAgIGNvbnN0IG5ld0NvbHVtbk5hbWVzID0gY3VycmVudFRhYmxlRGF0YS5nZXRDb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc05ld0NvbHVtbigpKVxuICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uID0gdGFibGVEYXRhLmdldENvbHVtbnMoKS5maW5kKCh0YWJsZUNvbHVtbikgPT4gdGFibGVDb2x1bW4uZ2V0TmFtZSgpID09IGNvbHVtbi5nZXROYW1lKCkpXG5cbiAgICAgICAgcmV0dXJuIG5ld1RhYmxlQ29sdW1uPy5nZXROZXdOYW1lKCkgfHwgbmV3VGFibGVDb2x1bW4/LmdldE5hbWUoKSB8fCBjb2x1bW4uZ2V0TmV3TmFtZSgpIHx8IGNvbHVtbi5nZXROYW1lKClcbiAgICAgIH0pXG4gICAgY29uc3Qgb2xkQ29sdW1uTmFtZXMgPSBjdXJyZW50VGFibGVEYXRhLmdldENvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc05ld0NvbHVtbigpKS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmdldE5hbWUoKSlcbiAgICBjb25zdCBuZXdDb2x1bW5zU1FMID0gbmV3Q29sdW1uTmFtZXMubWFwKChuYW1lKSA9PiBvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShuYW1lKSkuam9pbihcIiwgXCIpXG4gICAgY29uc3Qgb2xkQ29sdW1uc1NRTCA9IG9sZENvbHVtbk5hbWVzLm1hcCgobmFtZSkgPT4gb3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUobmFtZSkpLmpvaW4oXCIsIFwiKVxuXG4gICAgdGFibGVEYXRhLnNldE5hbWUodGVtcFRhYmxlTmFtZSlcblxuICAgIGNvbnN0IG5ld1RhYmxlRGF0YSA9IG5ldyBUYWJsZURhdGEodGVtcFRhYmxlTmFtZSlcblxuICAgIGZvciAoY29uc3QgdGFibGVEYXRhQ29sdW1uIG9mIGN1cnJlbnRUYWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBsZXQgbmV3VGFibGVEYXRhQ29sdW1uID0gdGFibGVEYXRhLmdldENvbHVtbnMoKS5maW5kKChuZXdUYWJsZURhdGFDb2x1bW4pID0+IG5ld1RhYmxlRGF0YUNvbHVtbi5nZXROYW1lKCkgPT0gdGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSlcblxuICAgICAgaWYgKG5ld1RhYmxlRGF0YUNvbHVtbiAmJiBuZXdUYWJsZURhdGFDb2x1bW4uaXNOZXdDb2x1bW4oKSkge1xuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4gPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1RhYmxlRGF0YUNvbHVtbikge1xuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0QXV0b0luY3JlbWVudCh0YWJsZURhdGFDb2x1bW4uZ2V0QXV0b0luY3JlbWVudCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0RGVmYXVsdCh0YWJsZURhdGFDb2x1bW4uZ2V0RGVmYXVsdCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0SW5kZXgodGFibGVEYXRhQ29sdW1uLmdldEluZGV4KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRGb3JlaWduS2V5KHRhYmxlRGF0YUNvbHVtbi5nZXRGb3JlaWduS2V5KCkpXG4gICAgICAgIG5ld1RhYmxlRGF0YUNvbHVtbi5zZXRNYXhMZW5ndGgodGFibGVEYXRhQ29sdW1uLmdldE1heExlbmd0aCgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0UHJpbWFyeUtleSh0YWJsZURhdGFDb2x1bW4uZ2V0UHJpbWFyeUtleSgpKVxuICAgICAgICBuZXdUYWJsZURhdGFDb2x1bW4uc2V0VHlwZSh0YWJsZURhdGFDb2x1bW4uZ2V0VHlwZSgpKVxuICAgICAgfVxuXG4gICAgICBuZXdUYWJsZURhdGEuYWRkQ29sdW1uKG5ld1RhYmxlRGF0YUNvbHVtbiB8fCB0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgLy8gU1FMaXRlIHJlYnVpbGRzIHVzZSBleGlzdGluZyBjb2x1bW5zIHBsdXMgbmV3IG9uZXM7IGF2b2lkIGR1cGxpY2F0aW5nIGEgY29sdW1uIHRoYXQgYWxyZWFkeSBleGlzdHMuXG4gICAgY29uc3QgZXhpc3RpbmdDb2x1bW5OYW1lcyA9IG5ldyBTZXQoY3VycmVudFRhYmxlRGF0YS5nZXRDb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IGNvbHVtbi5nZXROYW1lKCkpKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFDb2x1bW4gb2YgdGFibGVEYXRhLmdldENvbHVtbnMoKSkge1xuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4uaXNOZXdDb2x1bW4oKSkgY29udGludWVcbiAgICAgIGlmIChleGlzdGluZ0NvbHVtbk5hbWVzLmhhcyh0YWJsZURhdGFDb2x1bW4uZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgbmV3VGFibGVEYXRhLmFkZENvbHVtbih0YWJsZURhdGFDb2x1bW4pXG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRGb3JlaWduS2V5cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlRGF0YUZvcmVpZ25LZXkgb2YgY3VycmVudFRhYmxlRGF0YS5nZXRGb3JlaWduS2V5cygpKSB7XG4gICAgICBjb25zdCBuZXdUYWJsZURhdGFGb3JlaWduS2V5ID0gbmV3VGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkuZmluZCgobmV3VGFibGVEYXRhRm9yZWlnbktleSkgPT4gbmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkgPT0gdGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGlmIChuZXdUYWJsZURhdGFGb3JlaWduS2V5KSBmb3VuZEZvcmVpZ25LZXlzLnB1c2gobmV3VGFibGVEYXRhRm9yZWlnbktleS5nZXROYW1lKCkpXG5cbiAgICAgIGNvbnN0IGFjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkgPSBuZXdUYWJsZURhdGFGb3JlaWduS2V5IHx8IHRhYmxlRGF0YUZvcmVpZ25LZXlcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBhY3R1YWxUYWJsZURhdGFGb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2FjdHVhbFRhYmxlRGF0YUZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoYWN0dWFsVGFibGVEYXRhRm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZvcmVpZ25LZXkgb2YgdGFibGVEYXRhLmdldEZvcmVpZ25LZXlzKCkpIHtcbiAgICAgIGlmIChmb3VuZEZvcmVpZ25LZXlzLmluY2x1ZGVzKGZvcmVpZ25LZXkuZ2V0TmFtZSgpKSkgY29udGludWVcblxuICAgICAgLy8gUmVnaXN0ZXIgZm9yZWlnbiBrZXkgb24gdGhlIHRhYmxlXG4gICAgICBuZXdUYWJsZURhdGEuYWRkRm9yZWlnbktleShmb3JlaWduS2V5KVxuXG4gICAgICAvLyBSZWdpc3RlciBmb3JlaWduIGtleSBvbiB0aGUgY29sdW1uXG4gICAgICBjb25zdCB0YWJsZURhdGFDb2x1bW4gPSBuZXdUYWJsZURhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKG5ld1RhYmxlRGF0YUNvbHVtbikgPT4gbmV3VGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKSA9PSBmb3JlaWduS2V5LmdldENvbHVtbk5hbWUoKSlcblxuICAgICAgaWYgKCF0YWJsZURhdGFDb2x1bW4pIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCBjb2x1bW4gZm9yIGZvcmVpZ24ga2V5OiAke2ZvcmVpZ25LZXkuZ2V0TmFtZSgpfWApXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNldHRpbmcgZm9yZWlnbiBrZXkgb24gY29sdW1uICR7dGFibGVEYXRhQ29sdW1uLmdldE5hbWUoKX1gKVxuICAgICAgdGFibGVEYXRhQ29sdW1uLnNldEZvcmVpZ25LZXkoZm9yZWlnbktleSlcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVOZXdUYWJsZVNRTCA9IGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuY3JlYXRlVGFibGVTcWwobmV3VGFibGVEYXRhKVxuICAgIGNvbnN0IGluc2VydFNRTCA9IGBJTlNFUlQgSU5UTyAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGVtcFRhYmxlTmFtZSl9ICgke25ld0NvbHVtbnNTUUx9KSBTRUxFQ1QgJHtvbGRDb2x1bW5zU1FMfSBGUk9NICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBkcm9wVGFibGVTUUxzID0gYERST1AgVEFCTEUgJHtvcHRpb25zLnF1b3RlVGFibGVOYW1lKHRhYmxlTmFtZSl9YFxuICAgIGNvbnN0IHJlbmFtZVRhYmxlU1FMID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0ZW1wVGFibGVOYW1lKX0gUkVOQU1FIFRPICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfWBcbiAgICBjb25zdCBzcWxzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3FsIG9mIGNyZWF0ZU5ld1RhYmxlU1FMKSB7XG4gICAgICBzcWxzLnB1c2goc3FsKVxuICAgIH1cblxuICAgIHNxbHMucHVzaChpbnNlcnRTUUwpXG4gICAgc3Fscy5wdXNoKGRyb3BUYWJsZVNRTHMpXG4gICAgc3Fscy5wdXNoKHJlbmFtZVRhYmxlU1FMKVxuXG4gICAgZm9yIChjb25zdCB0YWJsZURhdGFJbmRleCBvZiBjdXJyZW50VGFibGVEYXRhLmdldEluZGV4ZXMoKSkge1xuICAgICAgY29uc3QgbmV3VGFibGVEYXRhSW5kZXggPSBuZXdUYWJsZURhdGEuZ2V0SW5kZXhlcygpLmZpbmQoKG5ld1RhYmxlRGF0YUluZGV4KSA9PiBuZXdUYWJsZURhdGFJbmRleC5nZXROYW1lKCkgPT0gdGFibGVEYXRhSW5kZXguZ2V0TmFtZSgpKVxuICAgICAgY29uc3QgYWN0dWFsVGFibGVJbmRleCA9IG5ld1RhYmxlRGF0YUluZGV4IHx8IHRhYmxlRGF0YUluZGV4XG5cbiAgICAgIG5ld1RhYmxlRGF0YS5hZGRJbmRleChhY3R1YWxUYWJsZUluZGV4KVxuXG4gICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IGFjdHVhbFRhYmxlSW5kZXguZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXdUYWJsZUNvbHVtbiA9IHRhYmxlRGF0YS5nZXRDb2x1bW5zKCkuZmluZCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLmdldE5hbWUoKSA9PSBjb2x1bW5OYW1lKVxuXG4gICAgICAgIHJldHVybiBuZXdUYWJsZUNvbHVtbj8uZ2V0TmV3TmFtZSgpIHx8IG5ld1RhYmxlQ29sdW1uPy5nZXROYW1lKCkgfHwgY29sdW1uTmFtZVxuICAgICAgfSlcblxuICAgICAgY29uc3QgY3JlYXRlSW5kZXhBcmdzID0ge1xuICAgICAgICBjb2x1bW5zOiBjb2x1bW5OYW1lcyxcbiAgICAgICAgZHJpdmVyOiB0aGlzLmdldERyaXZlcigpLFxuICAgICAgICBuYW1lOiBhY3R1YWxUYWJsZUluZGV4LmdldE5hbWUoKSxcbiAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICB1bmlxdWU6IGFjdHVhbFRhYmxlSW5kZXguZ2V0VW5pcXVlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZUluZGV4U1FMcyA9IGF3YWl0IG5ldyBDcmVhdGVJbmRleEJhc2UoY3JlYXRlSW5kZXhBcmdzKS50b1NRTHMoKVxuXG4gICAgICBmb3IgKGNvbnN0IGNyZWF0ZUluZGV4U1FMIG9mIGNyZWF0ZUluZGV4U1FMcykge1xuICAgICAgICBzcWxzLnB1c2goY3JlYXRlSW5kZXhTUUwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbHNcbiAgfVxufVxuIl19
@@ -30,13 +30,13 @@ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
30
30
  sql += ", ";
31
31
  if (column.isNewColumn()) {
32
32
  sql += "ADD ";
33
- sql += column.getSQL({ driver: this.getDriver(), forAlterTable: true });
33
+ sql += column.getSQL({ driver: this.getDriver(), forAlterTable: false });
34
34
  }
35
35
  else if (column.getNewName()) {
36
36
  sql += `RENAME COLUMN ${options.quoteColumnName(column.getName())} TO ${options.quoteColumnName(column.getNewName())}`;
37
37
  }
38
38
  else if (column.getDropColumn()) {
39
- sql += `DROP COLUMN ${options.quoteColumnName}`;
39
+ sql += `DROP COLUMN ${options.quoteColumnName(column.getName())}`;
40
40
  }
41
41
  else {
42
42
  if (databaseType == "mssql" || databaseType == "pgsql") {
@@ -53,4 +53,4 @@ export default class VelociousDatabaseQueryAlterTableBase extends QueryBase {
53
53
  return sqls;
54
54
  }
55
55
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9hbHRlci10YWJsZS1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFFOUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQ0FBcUMsU0FBUSxTQUFTO0lBQ3pFOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDL0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFakMsSUFBSSxHQUFHLEdBQUcsZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7UUFDdkUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBRXBCLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxZQUFZLEdBQUcsQ0FBQztnQkFBRSxHQUFHLElBQUksSUFBSSxDQUFBO1lBRWpDLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsSUFBSSxNQUFNLENBQUE7Z0JBQ2IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxJQUFJLGlCQUFpQixPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtZQUN4SCxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLEdBQUcsSUFBSSxlQUFlLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQTtZQUNqRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDdkQsR0FBRyxJQUFJLGVBQWUsQ0FBQTtnQkFDeEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsSUFBSSxTQUFTLENBQUE7Z0JBQ2xCLENBQUM7Z0JBRUQsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7WUFHRCxZQUFZLEVBQUUsQ0FBQTtRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVkLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5QWx0ZXJUYWJsZUJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7VGFibGVEYXRhfSBhcmdzLnRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCB0YWJsZURhdGEsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VHlwZSgpXG4gICAgY29uc3Qgc3FscyA9IFtdXG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG5cbiAgICBsZXQgc3FsID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0gYFxuICAgIGxldCBjb2x1bW5zQ291bnQgPSAwXG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBpZiAoY29sdW1uc0NvdW50ID4gMCkgc3FsICs9IFwiLCBcIlxuXG4gICAgICBpZiAoY29sdW1uLmlzTmV3Q29sdW1uKCkpIHtcbiAgICAgICAgc3FsICs9IFwiQUREIFwiXG4gICAgICAgIHNxbCArPSBjb2x1bW4uZ2V0U1FMKHtkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksIGZvckFsdGVyVGFibGU6IHRydWV9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZ2V0TmV3TmFtZSgpKSB7XG4gICAgICAgIHNxbCArPSBgUkVOQU1FIENPTFVNTiAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfSBUTyAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROZXdOYW1lKCkpfWBcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmdldERyb3BDb2x1bW4oKSkge1xuICAgICAgICBzcWwgKz0gYERST1AgQ09MVU1OICR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRhdGFiYXNlVHlwZSA9PSBcIm1zc3FsXCIgfHwgZGF0YWJhc2VUeXBlID09IFwicGdzcWxcIikge1xuICAgICAgICAgIHNxbCArPSBcIkFMVEVSIENPTFVNTiBcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBcIk1PRElGWSBcIlxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGNvbHVtbi5nZXRTUUwoe2RyaXZlcjogdGhpcy5nZXREcml2ZXIoKSwgZm9yQWx0ZXJUYWJsZTogdHJ1ZX0pXG4gICAgICB9XG5cblxuICAgICAgY29sdW1uc0NvdW50KytcbiAgICB9XG5cbiAgICBzcWxzLnB1c2goc3FsKVxuXG4gICAgcmV0dXJuIHNxbHNcbiAgfVxufVxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0ZXItdGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS9hbHRlci10YWJsZS1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxhQUFhLE1BQU0sZ0NBQWdDLENBQUE7QUFDMUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUE7QUFFOUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxvQ0FBcUMsU0FBUSxTQUFTO0lBQ3pFOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUV0RixLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDL0MsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFakMsSUFBSSxHQUFHLEdBQUcsZUFBZSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUE7UUFDdkUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBRXBCLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDNUMsSUFBSSxZQUFZLEdBQUcsQ0FBQztnQkFBRSxHQUFHLElBQUksSUFBSSxDQUFBO1lBRWpDLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsSUFBSSxNQUFNLENBQUE7Z0JBQ2IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1lBQ3hFLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxJQUFJLGlCQUFpQixPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtZQUN4SCxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLEdBQUcsSUFBSSxlQUFlLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQTtZQUNuRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDdkQsR0FBRyxJQUFJLGVBQWUsQ0FBQTtnQkFDeEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsSUFBSSxTQUFTLENBQUE7Z0JBQ2xCLENBQUM7Z0JBRUQsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7WUFHRCxZQUFZLEVBQUUsQ0FBQTtRQUNoQixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVkLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBRdWVyeUJhc2UgZnJvbSBcIi4vYmFzZS5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBUYWJsZURhdGEgZnJvbSBcIi4uL3RhYmxlLWRhdGEvaW5kZXguanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5QWx0ZXJUYWJsZUJhc2UgZXh0ZW5kcyBRdWVyeUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5kcml2ZXIgLSBEYXRhYmFzZSBkcml2ZXIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7VGFibGVEYXRhfSBhcmdzLnRhYmxlRGF0YSAtIFRhYmxlIGRhdGEuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZHJpdmVyLCB0YWJsZURhdGEsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoISh0YWJsZURhdGEgaW5zdGFuY2VvZiBUYWJsZURhdGEpKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIGRhdGEgd2FzIGdpdmVuXCIpXG5cbiAgICBzdXBlcih7ZHJpdmVyfSlcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn0gLSBSZXNvbHZlcyB3aXRoIFNRTCBzdGF0ZW1lbnRzLlxuICAgKi9cbiAgYXN5bmMgdG9TUUxzKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlVHlwZSA9IHRoaXMuZ2V0RHJpdmVyKCkuZ2V0VHlwZSgpXG4gICAgY29uc3Qgc3FscyA9IFtdXG4gICAgY29uc3Qge3RhYmxlRGF0YX0gPSB0aGlzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG5cbiAgICBsZXQgc3FsID0gYEFMVEVSIFRBQkxFICR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZURhdGEuZ2V0TmFtZSgpKX0gYFxuICAgIGxldCBjb2x1bW5zQ291bnQgPSAwXG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZURhdGEuZ2V0Q29sdW1ucygpKSB7XG4gICAgICBpZiAoY29sdW1uc0NvdW50ID4gMCkgc3FsICs9IFwiLCBcIlxuXG4gICAgICBpZiAoY29sdW1uLmlzTmV3Q29sdW1uKCkpIHtcbiAgICAgICAgc3FsICs9IFwiQUREIFwiXG4gICAgICAgIHNxbCArPSBjb2x1bW4uZ2V0U1FMKHtkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksIGZvckFsdGVyVGFibGU6IGZhbHNlfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmdldE5ld05hbWUoKSkge1xuICAgICAgICBzcWwgKz0gYFJFTkFNRSBDT0xVTU4gJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW4uZ2V0TmFtZSgpKX0gVE8gJHtvcHRpb25zLnF1b3RlQ29sdW1uTmFtZShjb2x1bW4uZ2V0TmV3TmFtZSgpKX1gXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5nZXREcm9wQ29sdW1uKCkpIHtcbiAgICAgICAgc3FsICs9IGBEUk9QIENPTFVNTiAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKGNvbHVtbi5nZXROYW1lKCkpfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkYXRhYmFzZVR5cGUgPT0gXCJtc3NxbFwiIHx8IGRhdGFiYXNlVHlwZSA9PSBcInBnc3FsXCIpIHtcbiAgICAgICAgICBzcWwgKz0gXCJBTFRFUiBDT0xVTU4gXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcWwgKz0gXCJNT0RJRlkgXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHNxbCArPSBjb2x1bW4uZ2V0U1FMKHtkcml2ZXI6IHRoaXMuZ2V0RHJpdmVyKCksIGZvckFsdGVyVGFibGU6IHRydWV9KVxuICAgICAgfVxuXG5cbiAgICAgIGNvbHVtbnNDb3VudCsrXG4gICAgfVxuXG4gICAgc3Fscy5wdXNoKHNxbClcblxuICAgIHJldHVybiBzcWxzXG4gIH1cbn1cbiJdfQ==
@@ -75,6 +75,11 @@ export default class VelociousDatabaseQueryModelClassQuery<MC extends typeof imp
75
75
  * @returns {Promise<any[]>} - Resolves with the pluck.
76
76
  */
77
77
  pluck(...columns: (string | string[])[]): Promise<any[]>;
78
+ /**
79
+ * @param {import("./index.js").WhereArgumentType} where - Where.
80
+ * @returns {this} This query instance
81
+ */
82
+ where(where: import("./index.js").WhereArgumentType): this;
78
83
  }
79
84
  export type ModelClassQueryArgsType<MC extends typeof import("../record/index.js").default> = import("./index.js").QueryArgsType & {
80
85
  modelClass: MC;
@@ -1 +1 @@
1
- {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"AASA;;GAEG;AACH;;;GAGG;AAEH;;;GAGG;AACH,2DAX2D,EAAE,SAAhD,cAAe,oBAAoB,EAAE,OAAQ;IAYxD,+EAA+E;IAC/E,kBADY,uBAAuB,CAAC,EAAE,CAAC,EAWtC;IAFC,iBAAiB;IACjB,YADW,EAAE,CACe;IAG9B,oCAAoC;IACpC,SADc,IAAI,CAsBjB;IAED,6DAA6D;IAC7D,SADc,OAAO,CAAC,MAAM,CAAC,CAsC5B;IAED,wCAAwC;IACxC,iBADc,EAAE,CAKf;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED;;;OAGG;IACH,eAHW,MAAM,GAAC,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAmBrC;IAED;;;OAGG;IACH,mBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAiB5C;IAED;;;;OAIG;IACH,2BAJW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,aAChC,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAUrC;IAED;;;OAGG;IACH,yBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAuBrC;IAED;;;;OAIG;IACH,+BAJW,MAAM,aACN,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAerC;IAED,mFAAmF;IACnF,SADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAMlD;IAED,kFAAkF;IAClF,QADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAOlD;IAED;;;OAGG;IACH,cAHW,OAAO,YAAY,EAAE,mBAAmB,GACtC,IAAI,CAKhB;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAyB5C;IAED;;;;OAIG;IACH,kBAHW,CAAG,MAAM,GAAC,MAAM,EAAE,GAAA,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CA+B1B;CACF;oCA1S0D,EAAE,SAAhD,cAAe,oBAAoB,EAAE,OAAQ,IAC7C,OAAO,YAAY,EAAE,aAAa,GAAG;IAAC,UAAU,EAAE,EAAE,CAAA;CAAC;0BARxC,YAAY"}
1
+ {"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"AAWA;;GAEG;AACH;;;GAGG;AAEH;;;GAGG;AACH,2DAX2D,EAAE,SAAhD,cAAe,oBAAoB,EAAE,OAAQ;IAYxD,+EAA+E;IAC/E,kBADY,uBAAuB,CAAC,EAAE,CAAC,EAWtC;IAFC,iBAAiB;IACjB,YADW,EAAE,CACe;IAG9B,oCAAoC;IACpC,SADc,IAAI,CAsBjB;IAED,6DAA6D;IAC7D,SADc,OAAO,CAAC,MAAM,CAAC,CAsC5B;IAED,wCAAwC;IACxC,iBADc,EAAE,CAKf;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED;;;OAGG;IACH,eAHW,MAAM,GAAC,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAmBrC;IAED;;;OAGG;IACH,mBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAiB5C;IAED;;;;OAIG;IACH,2BAJW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,aAChC,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAUrC;IAED;;;OAGG;IACH,yBAHW;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;KAAC,GAC9B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAuBrC;IAED;;;;OAIG;IACH,+BAJW,MAAM,aACN,CAAS,IAAgB,EAAhB,YAAY,CAAC,EAAE,CAAC,KAAI,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAerC;IAED,mFAAmF;IACnF,SADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAMlD;IAED,kFAAkF;IAClF,QADc,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAOlD;IAED;;;OAGG;IACH,cAHW,OAAO,YAAY,EAAE,mBAAmB,GACtC,IAAI,CAKhB;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAyB5C;IAED;;;;OAIG;IACH,kBAHW,CAAG,MAAM,GAAC,MAAM,EAAE,GAAA,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CA+B1B;IAED;;;OAGG;IACH,aAHW,OAAO,YAAY,EAAE,iBAAiB,GACpC,IAAI,CAiChB;CACF;oCA/U0D,EAAE,SAAhD,cAAe,oBAAoB,EAAE,OAAQ,IAC7C,OAAO,YAAY,EAAE,aAAa,GAAG;IAAC,UAAU,EAAE,EAAE,CAAA;CAAC;0BATxC,YAAY"}
@@ -1,10 +1,12 @@
1
1
  // @ts-check
2
2
  import { incorporate } from "incorporator";
3
3
  import * as inflection from "inflection";
4
+ import { isPlainObject } from "is-plain-object";
4
5
  import { Logger } from "../../logger.js";
5
6
  import Preloader from "./preloader.js";
6
7
  import DatabaseQuery from "./index.js";
7
8
  import RecordNotFoundError from "../record/record-not-found-error.js";
9
+ import WhereModelClassHash from "./where-model-class-hash.js";
8
10
  /**
9
11
  * @template {typeof import("../record/index.js").default} MC
10
12
  */
@@ -240,5 +242,124 @@ export default class VelociousDatabaseQueryModelClassQuery extends DatabaseQuery
240
242
  }
241
243
  return rows.map((row) => columnNames.map((columnName) => row[columnName]));
242
244
  }
245
+ /**
246
+ * @param {import("./index.js").WhereArgumentType} where - Where.
247
+ * @returns {this} This query instance
248
+ */
249
+ where(where) {
250
+ if (typeof where == "string") {
251
+ return super.where(where);
252
+ }
253
+ if (isPlainObject(where)) {
254
+ const { resolvedHash, fallbackHash } = splitWhereHash({ hash: where, modelClass: this.getModelClass() });
255
+ const joinObject = buildJoinObjectFromWhereHash({ hash: where, modelClass: this.getModelClass() });
256
+ if (Object.keys(joinObject).length > 0) {
257
+ this.joins(joinObject);
258
+ }
259
+ if (Object.keys(resolvedHash).length > 0) {
260
+ const qualifyBaseTable = Object.keys(joinObject).length > 0;
261
+ this._wheres.push(new WhereModelClassHash({
262
+ hash: resolvedHash,
263
+ modelClass: this.getModelClass(),
264
+ qualifyBaseTable,
265
+ query: this
266
+ }));
267
+ }
268
+ if (Object.keys(fallbackHash).length > 0) {
269
+ super.where(fallbackHash);
270
+ }
271
+ return this;
272
+ }
273
+ throw new Error(`Invalid type of where: ${typeof where} (${where.constructor.name})`);
274
+ }
275
+ }
276
+ /**
277
+ * @param {typeof import("../record/index.js").default} modelClass - Model class.
278
+ * @param {string} relationshipName - Relationship name.
279
+ * @returns {import("../record/relationships/base.js").default | undefined} - The relationship.
280
+ */
281
+ function getRelationshipByName(modelClass, relationshipName) {
282
+ return modelClass.getRelationshipsMap()[relationshipName];
283
+ }
284
+ /**
285
+ * @param {typeof import("../record/index.js").default} modelClass - Model class.
286
+ * @param {string} key - Attribute or column name.
287
+ * @returns {string | undefined} - The resolved column name.
288
+ */
289
+ function resolveColumnName(modelClass, key) {
290
+ const attributeMap = modelClass.getAttributeNameToColumnNameMap();
291
+ const columnName = attributeMap[key];
292
+ if (columnName)
293
+ return columnName;
294
+ return undefined;
295
+ }
296
+ /**
297
+ * @param {object} args - Options.
298
+ * @param {Record<string, any>} args.hash - Where hash.
299
+ * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
300
+ * @returns {{resolvedHash: Record<string, any>, fallbackHash: Record<string, any>}} - Split hashes.
301
+ */
302
+ function splitWhereHash({ hash, modelClass }) {
303
+ /** @type {Record<string, any>} */
304
+ const resolvedHash = {};
305
+ /** @type {Record<string, any>} */
306
+ const fallbackHash = {};
307
+ for (const key in hash) {
308
+ const value = hash[key];
309
+ const isNested = isPlainObject(value);
310
+ if (isNested) {
311
+ const relationship = getRelationshipByName(modelClass, key);
312
+ if (relationship) {
313
+ const targetModelClass = relationship.getTargetModelClass();
314
+ const nestedResult = splitWhereHash({ hash: value, modelClass: targetModelClass });
315
+ const nestedResolvedKeys = Object.keys(nestedResult.resolvedHash);
316
+ const nestedFallbackKeys = Object.keys(nestedResult.fallbackHash);
317
+ if (nestedResolvedKeys.length > 0) {
318
+ resolvedHash[key] = nestedResult.resolvedHash;
319
+ }
320
+ if (nestedFallbackKeys.length > 0) {
321
+ const tableName = targetModelClass.tableName();
322
+ if (!fallbackHash[tableName])
323
+ fallbackHash[tableName] = {};
324
+ Object.assign(fallbackHash[tableName], nestedResult.fallbackHash);
325
+ }
326
+ }
327
+ else {
328
+ fallbackHash[key] = value;
329
+ }
330
+ }
331
+ else {
332
+ const columnName = resolveColumnName(modelClass, key);
333
+ if (columnName) {
334
+ resolvedHash[key] = value;
335
+ }
336
+ else {
337
+ fallbackHash[key] = value;
338
+ }
339
+ }
340
+ }
341
+ return { resolvedHash, fallbackHash };
342
+ }
343
+ /**
344
+ * @param {object} args - Options.
345
+ * @param {Record<string, any>} args.hash - Where hash.
346
+ * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
347
+ * @returns {Record<string, any>} - Join object.
348
+ */
349
+ function buildJoinObjectFromWhereHash({ hash, modelClass }) {
350
+ /** @type {Record<string, any>} */
351
+ const joinObject = {};
352
+ for (const key in hash) {
353
+ const value = hash[key];
354
+ if (!isPlainObject(value))
355
+ continue;
356
+ const relationship = getRelationshipByName(modelClass, key);
357
+ if (!relationship)
358
+ continue;
359
+ const targetModelClass = relationship.getTargetModelClass();
360
+ const nestedJoinObject = buildJoinObjectFromWhereHash({ hash: value, modelClass: targetModelClass });
361
+ joinObject[key] = Object.keys(nestedJoinObject).length > 0 ? nestedJoinObject : true;
362
+ }
363
+ return joinObject;
243
364
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sU0FBUyxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sYUFBYSxNQUFNLFlBQVksQ0FBQTtBQUN0QyxPQUFPLG1CQUFtQixNQUFNLHFDQUFxQyxDQUFBO0FBRXJFOztHQUVHO0FBQ0g7OztHQUdHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBc0MsU0FBUSxhQUFhO0lBQzlFLCtFQUErRTtJQUMvRSxZQUFZLElBQUk7UUFDZCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpCLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBQzlCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSztRQUNILE1BQU0sUUFBUSxHQUFHLHdEQUF3RCxDQUFDLENBQUMsSUFBSSxxQ0FBcUMsQ0FBQztZQUNuSCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7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LENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1lBRS9GLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUV4QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtZQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge0xvZ2dlcn0gZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUHJlbG9hZGVyIGZyb20gXCIuL3ByZWxvYWRlci5qc1wiXG5pbXBvcnQgRGF0YWJhc2VRdWVyeSBmcm9tIFwiLi9pbmRleC5qc1wiXG5pbXBvcnQgUmVjb3JkTm90Rm91bmRFcnJvciBmcm9tIFwiLi4vcmVjb3JkL3JlY29yZC1ub3QtZm91bmQtZXJyb3IuanNcIlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge2ltcG9ydChcIi4vaW5kZXguanNcIikuUXVlcnlBcmdzVHlwZSAmIHttb2RlbENsYXNzOiBNQ319IE1vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSBleHRlbmRzIERhdGFiYXNlUXVlcnkge1xuICAvKiogQHBhcmFtIHtNb2RlbENsYXNzUXVlcnlBcmdzVHlwZTxNQz59IGFyZ3MgLSBRdWVyeSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSBhcmdzXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzcyBnaXZlbiBpbiAke09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgc3VwZXIoYXJncylcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcblxuICAgIC8qKiBAdHlwZSB7TUN9ICovXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBjbG9uZS4gICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5KHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdXG4gICAgfSkpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb3VudC4gICovXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIC8vIEdlbmVyYXRlIGNvdW50IFNRTFxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbih0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCkpfWBcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IHRoaXMuX2Rpc3RpbmN0ID8gXCJESVNUSU5DVCBcIiA6IFwiXCJcbiAgICBsZXQgc3FsID0gYENPVU5UKCR7ZGlzdGluY3RQcmVmaXh9JHtwcmltYXJ5S2V5fSlgXG5cbiAgICBpZiAodGhpcy5kcml2ZXIuZ2V0VHlwZSgpID09IFwicGdzcWxcIikgc3FsICs9IFwiOjppbnRcIlxuXG4gICAgc3FsICs9IFwiIEFTIGNvdW50XCJcblxuXG4gICAgLy8gQ2xvbmUgcXVlcnkgYW5kIGV4ZWN1dGUgY291bnRcbiAgICBjb25zdCBjb3VudFF1ZXJ5ID0gdGhpcy5jbG9uZSgpXG5cbiAgICBjb3VudFF1ZXJ5Ll9kaXN0aW5jdCA9IGZhbHNlXG4gICAgY291bnRRdWVyeS5fc2VsZWN0cyA9IFtdXG4gICAgY291bnRRdWVyeS5zZWxlY3Qoc3FsKVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IC8qKiBAdHlwZSB7e2NvdW50OiBudW1iZXJ9W119ICovIChhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKSlcblxuICAgIC8vIFRoZSBxdWVyeSBpc24ndCBncm91cGVkIGFuZCBhIHNpbmdsZSByZXN1bHQgaGFzIGJlZW4gZ2l2ZW5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNbMF0uY291bnRcbiAgICB9XG5cbiAgICAvLyBUaGUgcXVlcnkgbWF5IGJlIGdyb3VwZWQgYW5kIGEgbG90IG9mIGRpZmZlcmVudCBjb3VudHMgYSBnaXZlblxuICAgIGxldCBjb3VudFJlc3VsdCA9IDBcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmICghKFwiY291bnRcIiBpbiByZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY291bnQgcmVzdWx0XCIpXG4gICAgICB9XG5cbiAgICAgIGNvdW50UmVzdWx0ICs9IHJlc3VsdC5jb3VudFxuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNQ30gLSBUaGUgbW9kZWwgY2xhc3MuICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgZGVzdHJveUFsbCgpIHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZWNvcmRJZCAtIFJlY29yZCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZmluZC5cbiAgICovXG4gIGFzeW5jIGZpbmQocmVjb3JkSWQpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7fVxuXG4gICAgY29uZGl0aW9uc1t0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCldID0gcmVjb3JkSWRcblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKGNvbmRpdGlvbnMpXG5cbiAgICBjb25zdCByZWNvcmQgPSAoYXdhaXQgbmV3UXVlcnkuZmlyc3QoKSlcblxuICAgIGlmICghcmVjb3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFcnJvcihgQ291bGRuJ3QgZmluZCAke3RoaXMuZ2V0TW9kZWxDbGFzcygpLm5hbWV9IHdpdGggJyR7dGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpfSc9JHtyZWNvcmRJZH1gKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXJ9fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucyBoYXNoIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgbnVsbD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkuXG4gICAqL1xuICBhc3luYyBmaW5kQnkoY29uZGl0aW9ucykge1xuICAgIC8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZ319ICovXG4gICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25kaXRpb25zKSB7XG4gICAgICBjb25zdCBrZXlVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgICAgbmV3Q29uZGl0aW9uc1trZXlVbmRlcnNjb3JlXSA9IGNvbmRpdGlvbnNba2V5XVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKG5ld0NvbmRpdGlvbnMpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn19IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGhhc2gga2V5ZWQgYnkgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSW5zdGFuY2VUeXBlPE1DPikgOiB2b2lkfSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG9yIGNyZWF0ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kT3JJbml0aWFsaXplQnkoY29uZGl0aW9ucywgY2FsbGJhY2spXG5cbiAgICBpZiAocmVjb3JkLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaGFzaCBrZXllZCBieSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkgb3IgZmFpbC5cbiAgICovXG4gIGFzeW5jIGZpbmRCeU9yRmFpbChjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVjb3JkIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihJbnN0YW5jZVR5cGU8TUM+KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgb3IgaW5pdGlhbGl6ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckluaXRpYWxpemVCeShjb25kaXRpb25zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZmluZEJ5KGNvbmRpdGlvbnMpXG5cbiAgICBpZiAocmVjb3JkKSByZXR1cm4gcmVjb3JkXG5cbiAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCBuZXdSZWNvcmQgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxNQz59ICovIChuZXcgTW9kZWxDbGFzcyhjb25kaXRpb25zKSlcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobmV3UmVjb3JkKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWNvcmRcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBmaXJzdC4gICovXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gdGhpcy5jbG9uZSgpLmxpbWl0KDEpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0aGlzLmdldE1vZGVsQ2xhc3MoKS50YWJsZU5hbWUoKSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4odGhpcy5nZXRNb2RlbENsYXNzKCkub3JkZXJhYmxlQ29sdW1uKCkpfWApXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG5ld1F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgcmV0dXJuIHJlc3VsdHNbMF1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBsYXN0LiAgKi9cbiAgYXN5bmMgbGFzdCgpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jbG9uZSgpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHByaW1hcnlLZXkpfSBERVNDYCkubGltaXQoMSkudG9BcnJheSgpXG5cbiAgICByZXR1cm4gcmVzdWx0c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcHJlbG9hZC5cbiAgICovXG4gIHByZWxvYWQoZGF0YSkge1xuICAgIGluY29ycG9yYXRlKHRoaXMuX3ByZWxvYWQsIGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBxdWVyeSByZXN1bHRzIHRvIGFycmF5IG9mIG1vZGVsIGluc3RhbmNlc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxJbnN0YW5jZVR5cGU8TUM+Pj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYXJyYXkuXG4gICAqL1xuICBhc3luYyB0b0FycmF5KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IFtdXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucmVzdWx0cygpXG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICAgIGNvbnN0IG1vZGVsID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8TUM+fSAqLyAobmV3IE1vZGVsQ2xhc3MoKSlcblxuICAgICAgbW9kZWwubG9hZEV4aXN0aW5nUmVjb3JkKHJlc3VsdClcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wcmVsb2FkKS5sZW5ndGggPiAwICYmIG1vZGVscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgUHJlbG9hZGVyKHtcbiAgICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgICBtb2RlbHMsXG4gICAgICAgIHByZWxvYWQ6IHRoaXMuX3ByZWxvYWRcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVja3Mgb25lIG9yIG1vcmUgY29sdW1ucyBkaXJlY3RseSBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0IGluc3RhbnRpYXRpbmcgbW9kZWxzLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xzdHJpbmdbXX0gY29sdW1ucyAtIENvbHVtbiBuYW1lcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55W10+fSAtIFJlc29sdmVzIHdpdGggdGhlIHBsdWNrLlxuICAgKi9cbiAgYXN5bmMgcGx1Y2soLi4uY29sdW1ucykge1xuICAgIGNvbnN0IGZsYXRDb2x1bW5zID0gY29sdW1ucy5mbGF0KClcblxuICAgIGlmIChmbGF0Q29sdW1ucy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbHVtbnMgZ2l2ZW4gdG8gcGx1Y2tcIilcblxuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IG1vZGVsQ2xhc3MudGFibGVOYW1lKClcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSBtb2RlbENsYXNzLmdldEF0dHJpYnV0ZU5hbWVUb0NvbHVtbk5hbWVNYXAoKVxuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gZmxhdENvbHVtbnMubWFwKChjb2x1bW4pID0+IGF0dHJpYnV0ZU1hcFtjb2x1bW5dIHx8IGNvbHVtbilcblxuICAgIGNvbnN0IHF1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIHF1ZXJ5Ll9wcmVsb2FkID0ge31cbiAgICBxdWVyeS5fc2VsZWN0cyA9IFtdXG5cbiAgICBjb2x1bW5OYW1lcy5mb3JFYWNoKChjb2x1bW5OYW1lKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RTcWwgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uTmFtZSl9YFxuXG4gICAgICBxdWVyeS5zZWxlY3Qoc2VsZWN0U3FsKVxuICAgIH0pXG5cbiAgICBjb25zdCByb3dzID0gYXdhaXQgcXVlcnkuX2V4ZWN1dGVRdWVyeSgpXG5cbiAgICBpZiAoY29sdW1uTmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBbY29sdW1uTmFtZV0gPSBjb2x1bW5OYW1lc1xuICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHJvd1tjb2x1bW5OYW1lXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gY29sdW1uTmFtZXMubWFwKChjb2x1bW5OYW1lKSA9PiByb3dbY29sdW1uTmFtZV0pKVxuICB9XG59XG5cbiJdfQ==
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2xhc3MtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDeEMsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN0QyxPQUFPLGFBQWEsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxtQkFBbUIsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLG1CQUFtQixNQUFNLDZCQUE2QixDQUFBO0FBRTdEOztHQUVHO0FBQ0g7OztHQUdHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxxQ0FBc0MsU0FBUSxhQUFhO0lBQzlFLCtFQUErRTtJQUMvRSxZQUFZLElBQUk7UUFDZCxNQUFNLEVBQUMsVUFBVSxFQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpCLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBRTFGLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO0lBQzlCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsS0FBSztRQUNILE1B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LE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUFFLFNBQVE7UUFFbkMsTUFBTSxZQUFZLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTNELElBQUksQ0FBQyxZQUFZO1lBQUUsU0FBUTtRQUUzQixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsNEJBQTRCLENBQUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxDQUFDLENBQUE7UUFFbEcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3RGLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aW5jb3Jwb3JhdGV9IGZyb20gXCJpbmNvcnBvcmF0b3JcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5pbXBvcnQge2lzUGxhaW5PYmplY3R9IGZyb20gXCJpcy1wbGFpbi1vYmplY3RcIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IFByZWxvYWRlciBmcm9tIFwiLi9wcmVsb2FkZXIuanNcIlxuaW1wb3J0IERhdGFiYXNlUXVlcnkgZnJvbSBcIi4vaW5kZXguanNcIlxuaW1wb3J0IFJlY29yZE5vdEZvdW5kRXJyb3IgZnJvbSBcIi4uL3JlY29yZC9yZWNvcmQtbm90LWZvdW5kLWVycm9yLmpzXCJcbmltcG9ydCBXaGVyZU1vZGVsQ2xhc3NIYXNoIGZyb20gXCIuL3doZXJlLW1vZGVsLWNsYXNzLWhhc2guanNcIlxuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICovXG4vKipcbiAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICogQHR5cGVkZWYge2ltcG9ydChcIi4vaW5kZXguanNcIikuUXVlcnlBcmdzVHlwZSAmIHttb2RlbENsYXNzOiBNQ319IE1vZGVsQ2xhc3NRdWVyeUFyZ3NUeXBlXG4gKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgcXVlcnkgb3ZlciBzb21lIG1vZGVsIHR5cGUuXG4gKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeSBleHRlbmRzIERhdGFiYXNlUXVlcnkge1xuICAvKiogQHBhcmFtIHtNb2RlbENsYXNzUXVlcnlBcmdzVHlwZTxNQz59IGFyZ3MgLSBRdWVyeSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuICovXG4gIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSBhcmdzXG5cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihgTm8gbW9kZWxDbGFzcyBnaXZlbiBpbiAke09iamVjdC5rZXlzKGFyZ3MpLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgc3VwZXIoYXJncylcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcblxuICAgIC8qKiBAdHlwZSB7TUN9ICovXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBjbG9uZS4gICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKG5ldyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5KHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdXG4gICAgfSkpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjb3VudC4gICovXG4gIGFzeW5jIGNvdW50KCkge1xuICAgIC8vIEdlbmVyYXRlIGNvdW50IFNRTFxuICAgIGNvbnN0IHByaW1hcnlLZXkgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRoaXMuZ2V0TW9kZWxDbGFzcygpLnRhYmxlTmFtZSgpKX0uJHt0aGlzLmRyaXZlci5xdW90ZUNvbHVtbih0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCkpfWBcbiAgICBjb25zdCBkaXN0aW5jdFByZWZpeCA9IHRoaXMuX2Rpc3RpbmN0ID8gXCJESVNUSU5DVCBcIiA6IFwiXCJcbiAgICBsZXQgc3FsID0gYENPVU5UKCR7ZGlzdGluY3RQcmVmaXh9JHtwcmltYXJ5S2V5fSlgXG5cbiAgICBpZiAodGhpcy5kcml2ZXIuZ2V0VHlwZSgpID09IFwicGdzcWxcIikgc3FsICs9IFwiOjppbnRcIlxuXG4gICAgc3FsICs9IFwiIEFTIGNvdW50XCJcblxuXG4gICAgLy8gQ2xvbmUgcXVlcnkgYW5kIGV4ZWN1dGUgY291bnRcbiAgICBjb25zdCBjb3VudFF1ZXJ5ID0gdGhpcy5jbG9uZSgpXG5cbiAgICBjb3VudFF1ZXJ5Ll9kaXN0aW5jdCA9IGZhbHNlXG4gICAgY291bnRRdWVyeS5fc2VsZWN0cyA9IFtdXG4gICAgY291bnRRdWVyeS5zZWxlY3Qoc3FsKVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IC8qKiBAdHlwZSB7e2NvdW50OiBudW1iZXJ9W119ICovIChhd2FpdCBjb3VudFF1ZXJ5Ll9leGVjdXRlUXVlcnkoKSlcblxuICAgIC8vIFRoZSBxdWVyeSBpc24ndCBncm91cGVkIGFuZCBhIHNpbmdsZSByZXN1bHQgaGFzIGJlZW4gZ2l2ZW5cbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHNbMF0uY291bnRcbiAgICB9XG5cbiAgICAvLyBUaGUgcXVlcnkgbWF5IGJlIGdyb3VwZWQgYW5kIGEgbG90IG9mIGRpZmZlcmVudCBjb3VudHMgYSBnaXZlblxuICAgIGxldCBjb3VudFJlc3VsdCA9IDBcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmICghKFwiY291bnRcIiBpbiByZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY291bnQgcmVzdWx0XCIpXG4gICAgICB9XG5cbiAgICAgIGNvdW50UmVzdWx0ICs9IHJlc3VsdC5jb3VudFxuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtNQ30gLSBUaGUgbW9kZWwgY2xhc3MuICAqL1xuICBnZXRNb2RlbENsYXNzKCkge1xuICAgIGlmICghdGhpcy5tb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJtb2RlbENsYXNzIG5vdCBzZXRcIilcblxuICAgIHJldHVybiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgYXN5bmMgZGVzdHJveUFsbCgpIHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy50b0FycmF5KClcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSByZWNvcmRJZCAtIFJlY29yZCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgZmluZC5cbiAgICovXG4gIGFzeW5jIGZpbmQocmVjb3JkSWQpIHtcbiAgICAvKiogQHR5cGUge3tba2V5OiBzdHJpbmddOiBudW1iZXIgfCBzdHJpbmd9fSAqL1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7fVxuXG4gICAgY29uZGl0aW9uc1t0aGlzLmdldE1vZGVsQ2xhc3MoKS5wcmltYXJ5S2V5KCldID0gcmVjb3JkSWRcblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKGNvbmRpdGlvbnMpXG5cbiAgICBjb25zdCByZWNvcmQgPSAoYXdhaXQgbmV3UXVlcnkuZmlyc3QoKSlcblxuICAgIGlmICghcmVjb3JkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVjb3JkTm90Rm91bmRFcnJvcihgQ291bGRuJ3QgZmluZCAke3RoaXMuZ2V0TW9kZWxDbGFzcygpLm5hbWV9IHdpdGggJyR7dGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpfSc9JHtyZWNvcmRJZH1gKVxuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXJ9fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucyBoYXNoIGtleWVkIGJ5IGF0dHJpYnV0ZSBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgbnVsbD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkuXG4gICAqL1xuICBhc3luYyBmaW5kQnkoY29uZGl0aW9ucykge1xuICAgIC8qKiBAdHlwZSB7e1trZXk6IHN0cmluZ106IG51bWJlciB8IHN0cmluZ319ICovXG4gICAgY29uc3QgbmV3Q29uZGl0aW9ucyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjb25kaXRpb25zKSB7XG4gICAgICBjb25zdCBrZXlVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGtleSlcblxuICAgICAgbmV3Q29uZGl0aW9uc1trZXlVbmRlcnNjb3JlXSA9IGNvbmRpdGlvbnNba2V5XVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIG5ld1F1ZXJ5LndoZXJlKG5ld0NvbmRpdGlvbnMpXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn19IGNvbmRpdGlvbnMgLSBDb25kaXRpb25zIGhhc2gga2V5ZWQgYnkgYXR0cmlidXRlIG5hbWUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oSW5zdGFuY2VUeXBlPE1DPikgOiB2b2lkfSBbY2FsbGJhY2tdIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEluc3RhbmNlVHlwZTxNQz4+fSAtIFJlc29sdmVzIHdpdGggdGhlIG9yIGNyZWF0ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZUJ5KGNvbmRpdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5maW5kT3JJbml0aWFsaXplQnkoY29uZGl0aW9ucywgY2FsbGJhY2spXG5cbiAgICBpZiAocmVjb3JkLmlzTmV3UmVjb3JkKCkpIHtcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfX0gY29uZGl0aW9ucyAtIENvbmRpdGlvbnMgaGFzaCBrZXllZCBieSBhdHRyaWJ1dGUgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYnkgb3IgZmFpbC5cbiAgICovXG4gIGFzeW5jIGZpbmRCeU9yRmFpbChjb25kaXRpb25zKSB7XG4gICAgLyoqIEB0eXBlIHt7W2tleTogc3RyaW5nXTogbnVtYmVyIHwgc3RyaW5nfX0gKi9cbiAgICBjb25zdCBuZXdDb25kaXRpb25zID0ge31cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoa2V5KVxuXG4gICAgICBuZXdDb25kaXRpb25zW2tleVVuZGVyc2NvcmVdID0gY29uZGl0aW9uc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgbmV3UXVlcnkgPSAvKiogQHR5cGUge1ZlbG9jaW91c0RhdGFiYXNlUXVlcnlNb2RlbENsYXNzUXVlcnk8TUM+fSAqLyAodGhpcy5jbG9uZSgpKVxuXG4gICAgbmV3UXVlcnkud2hlcmUobmV3Q29uZGl0aW9ucylcblxuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgbmV3UXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVjb3JkIG5vdCBmb3VuZFwiKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zIC0gQ29uZGl0aW9ucy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihJbnN0YW5jZVR5cGU8TUM+KSA6IHZvaWR9IFtjYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8SW5zdGFuY2VUeXBlPE1DPj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgb3IgaW5pdGlhbGl6ZSBieS5cbiAgICovXG4gIGFzeW5jIGZpbmRPckluaXRpYWxpemVCeShjb25kaXRpb25zLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuZmluZEJ5KGNvbmRpdGlvbnMpXG5cbiAgICBpZiAocmVjb3JkKSByZXR1cm4gcmVjb3JkXG5cbiAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICBjb25zdCBuZXdSZWNvcmQgPSAvKiogQHR5cGUge0luc3RhbmNlVHlwZTxNQz59ICovIChuZXcgTW9kZWxDbGFzcyhjb25kaXRpb25zKSlcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobmV3UmVjb3JkKVxuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWNvcmRcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBmaXJzdC4gICovXG4gIGFzeW5jIGZpcnN0KCkge1xuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gdGhpcy5jbG9uZSgpLmxpbWl0KDEpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0aGlzLmdldE1vZGVsQ2xhc3MoKS50YWJsZU5hbWUoKSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4odGhpcy5nZXRNb2RlbENsYXNzKCkub3JkZXJhYmxlQ29sdW1uKCkpfWApXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG5ld1F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgcmV0dXJuIHJlc3VsdHNbMF1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTxJbnN0YW5jZVR5cGU8TUM+IHwgdW5kZWZpbmVkPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBsYXN0LiAgKi9cbiAgYXN5bmMgbGFzdCgpIHtcbiAgICBjb25zdCBwcmltYXJ5S2V5ID0gdGhpcy5nZXRNb2RlbENsYXNzKCkucHJpbWFyeUtleSgpXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5nZXRNb2RlbENsYXNzKCkudGFibGVOYW1lKClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5jbG9uZSgpLnJlb3JkZXIoYCR7dGhpcy5kcml2ZXIucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke3RoaXMuZHJpdmVyLnF1b3RlQ29sdW1uKHByaW1hcnlLZXkpfSBERVNDYCkubGltaXQoMSkudG9BcnJheSgpXG5cbiAgICByZXR1cm4gcmVzdWx0c1swXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5OZXN0ZWRQcmVsb2FkUmVjb3JkfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcHJlbG9hZC5cbiAgICovXG4gIHByZWxvYWQoZGF0YSkge1xuICAgIGluY29ycG9yYXRlKHRoaXMuX3ByZWxvYWQsIGRhdGEpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBxdWVyeSByZXN1bHRzIHRvIGFycmF5IG9mIG1vZGVsIGluc3RhbmNlc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxJbnN0YW5jZVR5cGU8TUM+Pj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYXJyYXkuXG4gICAqL1xuICBhc3luYyB0b0FycmF5KCkge1xuICAgIGNvbnN0IG1vZGVscyA9IFtdXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucmVzdWx0cygpXG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBNb2RlbENsYXNzID0gdGhpcy5nZXRNb2RlbENsYXNzKClcbiAgICAgIGNvbnN0IG1vZGVsID0gLyoqIEB0eXBlIHtJbnN0YW5jZVR5cGU8TUM+fSAqLyAobmV3IE1vZGVsQ2xhc3MoKSlcblxuICAgICAgbW9kZWwubG9hZEV4aXN0aW5nUmVjb3JkKHJlc3VsdClcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9wcmVsb2FkKS5sZW5ndGggPiAwICYmIG1vZGVscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmVsb2FkZXIgPSBuZXcgUHJlbG9hZGVyKHtcbiAgICAgICAgbW9kZWxDbGFzczogdGhpcy5tb2RlbENsYXNzLFxuICAgICAgICBtb2RlbHMsXG4gICAgICAgIHByZWxvYWQ6IHRoaXMuX3ByZWxvYWRcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHByZWxvYWRlci5ydW4oKVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBQbHVja3Mgb25lIG9yIG1vcmUgY29sdW1ucyBkaXJlY3RseSBmcm9tIHRoZSBkYXRhYmFzZSB3aXRob3V0IGluc3RhbnRpYXRpbmcgbW9kZWxzLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ3xzdHJpbmdbXX0gY29sdW1ucyAtIENvbHVtbiBuYW1lcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55W10+fSAtIFJlc29sdmVzIHdpdGggdGhlIHBsdWNrLlxuICAgKi9cbiAgYXN5bmMgcGx1Y2soLi4uY29sdW1ucykge1xuICAgIGNvbnN0IGZsYXRDb2x1bW5zID0gY29sdW1ucy5mbGF0KClcblxuICAgIGlmIChmbGF0Q29sdW1ucy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbHVtbnMgZ2l2ZW4gdG8gcGx1Y2tcIilcblxuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSB0aGlzLmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IG1vZGVsQ2xhc3MudGFibGVOYW1lKClcbiAgICBjb25zdCBhdHRyaWJ1dGVNYXAgPSBtb2RlbENsYXNzLmdldEF0dHJpYnV0ZU5hbWVUb0NvbHVtbk5hbWVNYXAoKVxuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gZmxhdENvbHVtbnMubWFwKChjb2x1bW4pID0+IGF0dHJpYnV0ZU1hcFtjb2x1bW5dIHx8IGNvbHVtbilcblxuICAgIGNvbnN0IHF1ZXJ5ID0gLyoqIEB0eXBlIHtWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5TW9kZWxDbGFzc1F1ZXJ5PE1DPn0gKi8gKHRoaXMuY2xvbmUoKSlcblxuICAgIHF1ZXJ5Ll9wcmVsb2FkID0ge31cbiAgICBxdWVyeS5fc2VsZWN0cyA9IFtdXG5cbiAgICBjb2x1bW5OYW1lcy5mb3JFYWNoKChjb2x1bW5OYW1lKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RTcWwgPSBgJHt0aGlzLmRyaXZlci5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9LiR7dGhpcy5kcml2ZXIucXVvdGVDb2x1bW4oY29sdW1uTmFtZSl9YFxuXG4gICAgICBxdWVyeS5zZWxlY3Qoc2VsZWN0U3FsKVxuICAgIH0pXG5cbiAgICBjb25zdCByb3dzID0gYXdhaXQgcXVlcnkuX2V4ZWN1dGVRdWVyeSgpXG5cbiAgICBpZiAoY29sdW1uTmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBbY29sdW1uTmFtZV0gPSBjb2x1bW5OYW1lc1xuICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHJvd1tjb2x1bW5OYW1lXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gY29sdW1uTmFtZXMubWFwKChjb2x1bW5OYW1lKSA9PiByb3dbY29sdW1uTmFtZV0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5XaGVyZUFyZ3VtZW50VHlwZX0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHJldHVybnMge3RoaXN9IFRoaXMgcXVlcnkgaW5zdGFuY2VcbiAgICovXG4gIHdoZXJlKHdoZXJlKSB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc3VwZXIud2hlcmUod2hlcmUpXG4gICAgfVxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3Qod2hlcmUpKSB7XG4gICAgICBjb25zdCB7cmVzb2x2ZWRIYXNoLCBmYWxsYmFja0hhc2h9ID0gc3BsaXRXaGVyZUhhc2goe2hhc2g6IHdoZXJlLCBtb2RlbENsYXNzOiB0aGlzLmdldE1vZGVsQ2xhc3MoKX0pXG4gICAgICBjb25zdCBqb2luT2JqZWN0ID0gYnVpbGRKb2luT2JqZWN0RnJvbVdoZXJlSGFzaCh7aGFzaDogd2hlcmUsIG1vZGVsQ2xhc3M6IHRoaXMuZ2V0TW9kZWxDbGFzcygpfSlcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGpvaW5PYmplY3QpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5qb2lucyhqb2luT2JqZWN0KVxuICAgICAgfVxuXG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVzb2x2ZWRIYXNoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpZnlCYXNlVGFibGUgPSBPYmplY3Qua2V5cyhqb2luT2JqZWN0KS5sZW5ndGggPiAwXG4gICAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZU1vZGVsQ2xhc3NIYXNoKHtcbiAgICAgICAgICBoYXNoOiByZXNvbHZlZEhhc2gsXG4gICAgICAgICAgbW9kZWxDbGFzczogdGhpcy5nZXRNb2RlbENsYXNzKCksXG4gICAgICAgICAgcXVhbGlmeUJhc2VUYWJsZSxcbiAgICAgICAgICBxdWVyeTogdGhpc1xuICAgICAgICB9KSlcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhbGxiYWNrSGFzaCkubGVuZ3RoID4gMCkge1xuICAgICAgICBzdXBlci53aGVyZShmYWxsYmFja0hhc2gpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgb2Ygd2hlcmU6ICR7dHlwZW9mIHdoZXJlfSAoJHt3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lfSlgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGlvbnNoaXBOYW1lIC0gUmVsYXRpb25zaGlwIG5hbWUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vcmVjb3JkL3JlbGF0aW9uc2hpcHMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIFRoZSByZWxhdGlvbnNoaXAuXG4gKi9cbmZ1bmN0aW9uIGdldFJlbGF0aW9uc2hpcEJ5TmFtZShtb2RlbENsYXNzLCByZWxhdGlvbnNoaXBOYW1lKSB7XG4gIHJldHVybiBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcHNNYXAoKVtyZWxhdGlvbnNoaXBOYW1lXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gQXR0cmlidXRlIG9yIGNvbHVtbiBuYW1lLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgcmVzb2x2ZWQgY29sdW1uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDb2x1bW5OYW1lKG1vZGVsQ2xhc3MsIGtleSkge1xuICBjb25zdCBhdHRyaWJ1dGVNYXAgPSBtb2RlbENsYXNzLmdldEF0dHJpYnV0ZU5hbWVUb0NvbHVtbk5hbWVNYXAoKVxuICBjb25zdCBjb2x1bW5OYW1lID0gYXR0cmlidXRlTWFwW2tleV1cblxuICBpZiAoY29sdW1uTmFtZSkgcmV0dXJuIGNvbHVtbk5hbWVcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBhcmdzLmhhc2ggLSBXaGVyZSBoYXNoLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICogQHJldHVybnMge3tyZXNvbHZlZEhhc2g6IFJlY29yZDxzdHJpbmcsIGFueT4sIGZhbGxiYWNrSGFzaDogUmVjb3JkPHN0cmluZywgYW55Pn19IC0gU3BsaXQgaGFzaGVzLlxuICovXG5mdW5jdGlvbiBzcGxpdFdoZXJlSGFzaCh7aGFzaCwgbW9kZWxDbGFzc30pIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICBjb25zdCByZXNvbHZlZEhhc2ggPSB7fVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueT59ICovXG4gIGNvbnN0IGZhbGxiYWNrSGFzaCA9IHt9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gaGFzaCkge1xuICAgIGNvbnN0IHZhbHVlID0gaGFzaFtrZXldXG4gICAgY29uc3QgaXNOZXN0ZWQgPSBpc1BsYWluT2JqZWN0KHZhbHVlKVxuXG4gICAgaWYgKGlzTmVzdGVkKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBnZXRSZWxhdGlvbnNoaXBCeU5hbWUobW9kZWxDbGFzcywga2V5KVxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldE1vZGVsQ2xhc3MgPSByZWxhdGlvbnNoaXAuZ2V0VGFyZ2V0TW9kZWxDbGFzcygpXG4gICAgICAgIGNvbnN0IG5lc3RlZFJlc3VsdCA9IHNwbGl0V2hlcmVIYXNoKHtoYXNoOiB2YWx1ZSwgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzc30pXG4gICAgICAgIGNvbnN0IG5lc3RlZFJlc29sdmVkS2V5cyA9IE9iamVjdC5rZXlzKG5lc3RlZFJlc3VsdC5yZXNvbHZlZEhhc2gpXG4gICAgICAgIGNvbnN0IG5lc3RlZEZhbGxiYWNrS2V5cyA9IE9iamVjdC5rZXlzKG5lc3RlZFJlc3VsdC5mYWxsYmFja0hhc2gpXG5cbiAgICAgICAgaWYgKG5lc3RlZFJlc29sdmVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzb2x2ZWRIYXNoW2tleV0gPSBuZXN0ZWRSZXN1bHQucmVzb2x2ZWRIYXNoXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmVzdGVkRmFsbGJhY2tLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSB0YXJnZXRNb2RlbENsYXNzLnRhYmxlTmFtZSgpXG5cbiAgICAgICAgICBpZiAoIWZhbGxiYWNrSGFzaFt0YWJsZU5hbWVdKSBmYWxsYmFja0hhc2hbdGFibGVOYW1lXSA9IHt9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihmYWxsYmFja0hhc2hbdGFibGVOYW1lXSwgbmVzdGVkUmVzdWx0LmZhbGxiYWNrSGFzaClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFsbGJhY2tIYXNoW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gcmVzb2x2ZUNvbHVtbk5hbWUobW9kZWxDbGFzcywga2V5KVxuXG4gICAgICBpZiAoY29sdW1uTmFtZSkge1xuICAgICAgICByZXNvbHZlZEhhc2hba2V5XSA9IHZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWxsYmFja0hhc2hba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtyZXNvbHZlZEhhc2gsIGZhbGxiYWNrSGFzaH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MuaGFzaCAtIFdoZXJlIGhhc2guXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBKb2luIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRKb2luT2JqZWN0RnJvbVdoZXJlSGFzaCh7aGFzaCwgbW9kZWxDbGFzc30pIHtcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICBjb25zdCBqb2luT2JqZWN0ID0ge31cblxuICBmb3IgKGNvbnN0IGtleSBpbiBoYXNoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBoYXNoW2tleV1cblxuICAgIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIGNvbnRpbnVlXG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBnZXRSZWxhdGlvbnNoaXBCeU5hbWUobW9kZWxDbGFzcywga2V5KVxuXG4gICAgaWYgKCFyZWxhdGlvbnNoaXApIGNvbnRpbnVlXG5cbiAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IG5lc3RlZEpvaW5PYmplY3QgPSBidWlsZEpvaW5PYmplY3RGcm9tV2hlcmVIYXNoKHtoYXNoOiB2YWx1ZSwgbW9kZWxDbGFzczogdGFyZ2V0TW9kZWxDbGFzc30pXG5cbiAgICBqb2luT2JqZWN0W2tleV0gPSBPYmplY3Qua2V5cyhuZXN0ZWRKb2luT2JqZWN0KS5sZW5ndGggPiAwID8gbmVzdGVkSm9pbk9iamVjdCA6IHRydWVcbiAgfVxuXG4gIHJldHVybiBqb2luT2JqZWN0XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"where-hash.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-hash.js"],"names":[],"mappings":"AAIA;;GAEG;AAEH;IACE;;;OAGG;IACH,mBAHW,OAAO,YAAY,EAAE,OAAO,QAC5B,SAAS,EAMnB;IAFC,gBAAgB;IAgBlB;;;;;OAKG;IACH,wBALW,SAAS,cACT,MAAM,UACN,MAAM,GACJ,MAAM,CAiClB;CACF;wBAhEY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;CAAC;sBAH9F,iBAAiB"}
1
+ {"version":3,"file":"where-hash.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-hash.js"],"names":[],"mappings":"AAIA;;GAEG;AAEH;IACE;;;OAGG;IACH,mBAHW,OAAO,YAAY,EAAE,OAAO,QAC5B,SAAS,EAMnB;IAFC,gBAAgB;IAgBlB;;;;;OAKG;IACH,wBALW,SAAS,cACT,MAAM,UACN,MAAM,GACJ,MAAM,CAoClB;CACF;wBAnEY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;CAAC;sBAH9F,iBAAiB"}
@@ -33,7 +33,12 @@ export default class VelociousDatabaseQueryWhereHash extends WhereBase {
33
33
  let sql = "";
34
34
  for (const whereKey in hash) {
35
35
  const whereValue = hash[whereKey];
36
- if (!Array.isArray(whereValue) && whereValue !== null && typeof whereValue == "object") {
36
+ if (Array.isArray(whereValue) && whereValue.length === 0) {
37
+ if (index > 0)
38
+ sql += " AND ";
39
+ sql += "1=0";
40
+ }
41
+ else if (!Array.isArray(whereValue) && whereValue !== null && typeof whereValue == "object") {
37
42
  sql += this._whereSQLFromHash(whereValue, whereKey, index);
38
43
  }
39
44
  else {
@@ -58,4 +63,4 @@ export default class VelociousDatabaseQueryWhereHash extends WhereBase {
58
63
  return sql;
59
64
  }
60
65
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUV2Qzs7R0FFRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEsU0FBUztJQUNwRTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxJQUFJO1FBQ3JCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUViLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLEdBQUcsSUFBSSxHQUFHLENBQUE7UUFFVixPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUVaLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRWpDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3ZGLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxLQUFLLEdBQUcsQ0FBQztvQkFBRSxHQUFHLElBQUksT0FBTyxDQUFBO2dCQUU3QixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtnQkFDaEQsQ0FBQztnQkFFRCxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7Z0JBRTdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixHQUFHLElBQUksUUFBUSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7Z0JBQzlFLENBQUM7cUJBQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQy9CLEdBQUcsSUFBSSxVQUFVLENBQUE7Z0JBQ25CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLElBQUksTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUE7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO1lBRUQsS0FBSyxFQUFFLENBQUE7UUFDVCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFdoZXJlQmFzZSBmcm9tIFwiLi93aGVyZS1iYXNlLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+IHwgV2hlcmVIYXNofX0gV2hlcmVIYXNoXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVdoZXJlSGFzaCBleHRlbmRzIFdoZXJlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gcXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtXaGVyZUhhc2h9IGhhc2ggLSBIYXNoLlxuICAgKi9cbiAgY29uc3RydWN0b3IocXVlcnksIGhhc2gpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMucXVlcnkgPSBxdWVyeVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIHRvU3FsKCkge1xuICAgIGxldCBzcWwgPSBcIihcIlxuXG4gICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2godGhpcy5oYXNoKVxuICAgIHNxbCArPSBcIilcIlxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7V2hlcmVIYXNofSBoYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWJsZU5hbWVdIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIF93aGVyZVNRTEZyb21IYXNoKGhhc2gsIHRhYmxlTmFtZSwgaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGZvciAoY29uc3Qgd2hlcmVLZXkgaW4gaGFzaCkge1xuICAgICAgY29uc3Qgd2hlcmVWYWx1ZSA9IGhhc2hbd2hlcmVLZXldXG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh3aGVyZVZhbHVlKSAmJiB3aGVyZVZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB3aGVyZVZhbHVlID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2god2hlcmVWYWx1ZSwgd2hlcmVLZXksIGluZGV4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgc3FsICs9IFwiIEFORCBcIlxuXG4gICAgICAgIGlmICh0YWJsZU5hbWUpIHtcbiAgICAgICAgICBzcWwgKz0gYCR7b3B0aW9ucy5xdW90ZVRhYmxlTmFtZSh0YWJsZU5hbWUpfS5gXG4gICAgICAgIH1cblxuICAgICAgICBzcWwgKz0gYCR7b3B0aW9ucy5xdW90ZUNvbHVtbk5hbWUod2hlcmVLZXkpfWBcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3aGVyZVZhbHVlKSkge1xuICAgICAgICAgIHNxbCArPSBgIElOICgke3doZXJlVmFsdWUubWFwKCh2YWx1ZSkgPT4gb3B0aW9ucy5xdW90ZSh2YWx1ZSkpLmpvaW4oXCIsIFwiKX0pYFxuICAgICAgICB9IGVsc2UgaWYgKHdoZXJlVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzcWwgKz0gXCIgSVMgTlVMTFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IGAgPSAke29wdGlvbnMucXVvdGUod2hlcmVWYWx1ZSl9YFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluZGV4KytcbiAgICB9XG5cbiAgICByZXR1cm4gc3FsXG4gIH1cbn1cbiJdfQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hlcmUtaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9xdWVyeS93aGVyZS1oYXNoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUV2Qzs7R0FFRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sK0JBQWdDLFNBQVEsU0FBUztJQUNwRTs7O09BR0c7SUFDSCxZQUFZLEtBQUssRUFBRSxJQUFJO1FBQ3JCLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUViLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLEdBQUcsSUFBSSxHQUFHLENBQUE7UUFFVixPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQ2pDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUVaLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRWpDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDO29CQUFFLEdBQUcsSUFBSSxPQUFPLENBQUE7Z0JBQzdCLEdBQUcsSUFBSSxLQUFLLENBQUE7WUFDZCxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzlGLEdBQUcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxLQUFLLEdBQUcsQ0FBQztvQkFBRSxHQUFHLElBQUksT0FBTyxDQUFBO2dCQUU3QixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQTtnQkFDaEQsQ0FBQztnQkFFRCxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUE7Z0JBRTdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixHQUFHLElBQUksUUFBUSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUE7Z0JBQzlFLENBQUM7cUJBQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQy9CLEdBQUcsSUFBSSxVQUFVLENBQUE7Z0JBQ25CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLElBQUksTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUE7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO1lBRUQsS0FBSyxFQUFFLENBQUE7UUFDVCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFdoZXJlQmFzZSBmcm9tIFwiLi93aGVyZS1iYXNlLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw+IHwgV2hlcmVIYXNofX0gV2hlcmVIYXNoXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VRdWVyeVdoZXJlSGFzaCBleHRlbmRzIFdoZXJlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gcXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtXaGVyZUhhc2h9IGhhc2ggLSBIYXNoLlxuICAgKi9cbiAgY29uc3RydWN0b3IocXVlcnksIGhhc2gpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5oYXNoID0gaGFzaFxuICAgIHRoaXMucXVlcnkgPSBxdWVyeVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIHRvU3FsKCkge1xuICAgIGxldCBzcWwgPSBcIihcIlxuXG4gICAgc3FsICs9IHRoaXMuX3doZXJlU1FMRnJvbUhhc2godGhpcy5oYXNoKVxuICAgIHNxbCArPSBcIilcIlxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7V2hlcmVIYXNofSBoYXNoIC0gSGFzaC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFt0YWJsZU5hbWVdIC0gVGFibGUgbmFtZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU1FMIHN0cmluZy5cbiAgICovXG4gIF93aGVyZVNRTEZyb21IYXNoKGhhc2gsIHRhYmxlTmFtZSwgaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpXG4gICAgbGV0IHNxbCA9IFwiXCJcblxuICAgIGZvciAoY29uc3Qgd2hlcmVLZXkgaW4gaGFzaCkge1xuICAgICAgY29uc3Qgd2hlcmVWYWx1ZSA9IGhhc2hbd2hlcmVLZXldXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdoZXJlVmFsdWUpICYmIHdoZXJlVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcbiAgICAgICAgc3FsICs9IFwiMT0wXCJcbiAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkod2hlcmVWYWx1ZSkgJiYgd2hlcmVWYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2hlcmVWYWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHNxbCArPSB0aGlzLl93aGVyZVNRTEZyb21IYXNoKHdoZXJlVmFsdWUsIHdoZXJlS2V5LCBpbmRleClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHNxbCArPSBcIiBBTkQgXCJcblxuICAgICAgICBpZiAodGFibGVOYW1lKSB7XG4gICAgICAgICAgc3FsICs9IGAke29wdGlvbnMucXVvdGVUYWJsZU5hbWUodGFibGVOYW1lKX0uYFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGAke29wdGlvbnMucXVvdGVDb2x1bW5OYW1lKHdoZXJlS2V5KX1gXG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkod2hlcmVWYWx1ZSkpIHtcbiAgICAgICAgICBzcWwgKz0gYCBJTiAoJHt3aGVyZVZhbHVlLm1hcCgodmFsdWUpID0+IG9wdGlvbnMucXVvdGUodmFsdWUpKS5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgfSBlbHNlIGlmICh3aGVyZVZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgc3FsICs9IFwiIElTIE5VTExcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBgID0gJHtvcHRpb25zLnF1b3RlKHdoZXJlVmFsdWUpfWBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbmRleCsrXG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG59XG4iXX0=
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @typedef {{[key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, any>}} WhereHash
3
+ */
4
+ export default class VelociousDatabaseQueryWhereModelClassHash extends WhereBase {
5
+ /**
6
+ * @param {object} args - Options object.
7
+ * @param {import("./index.js").default} args.query - Query instance.
8
+ * @param {WhereHash} args.hash - Hash.
9
+ * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
10
+ * @param {boolean} [args.qualifyBaseTable] - Whether to qualify base table columns.
11
+ */
12
+ constructor({ query, hash, modelClass, qualifyBaseTable }: {
13
+ query: import("./index.js").default;
14
+ hash: WhereHash;
15
+ modelClass: typeof import("../record/index.js").default;
16
+ qualifyBaseTable?: boolean;
17
+ });
18
+ hash: WhereHash;
19
+ modelClass: typeof import("../record/index.js").default;
20
+ qualifyBaseTable: boolean;
21
+ /**
22
+ * @returns {typeof import("../record/index.js").default} - The model class.
23
+ */
24
+ getModelClass(): typeof import("../record/index.js").default;
25
+ /**
26
+ * @param {typeof import("../record/index.js").default} modelClass - Model class.
27
+ * @param {string} key - Attribute or column name.
28
+ * @returns {string | undefined} - The resolved column name.
29
+ */
30
+ _resolveColumnName(modelClass: typeof import("../record/index.js").default, key: string): string | undefined;
31
+ /**
32
+ * @param {typeof import("../record/index.js").default} modelClass - Model class.
33
+ * @param {string} relationshipName - Relationship name.
34
+ * @returns {import("../record/relationships/base.js").default | undefined} - The relationship.
35
+ */
36
+ _getRelationship(modelClass: typeof import("../record/index.js").default, relationshipName: string): import("../record/relationships/base.js").default | undefined;
37
+ /**
38
+ * @param {object} args - Options object.
39
+ * @param {typeof import("../record/index.js").default} args.modelClass - Model class.
40
+ * @param {string} args.columnName - Column name.
41
+ * @param {any} args.value - Value to normalize.
42
+ * @returns {any} - Normalized value.
43
+ */
44
+ _normalizeSqliteBooleanValue({ modelClass, columnName, value }: {
45
+ modelClass: typeof import("../record/index.js").default;
46
+ columnName: string;
47
+ value: any;
48
+ }): any;
49
+ /**
50
+ * @param {WhereHash} hash - Hash.
51
+ * @param {typeof import("../record/index.js").default} modelClass - Model class.
52
+ * @param {string} [tableName] - Table name.
53
+ * @param {number} index - Index value.
54
+ * @returns {string} - SQL string.
55
+ */
56
+ _whereSQLFromHash(hash: WhereHash, modelClass: typeof import("../record/index.js").default, tableName?: string, index?: number): string;
57
+ }
58
+ export type WhereHash = {
59
+ [key: string]: string | number | boolean | null | Array<string | number | boolean | null> | Record<string, any>;
60
+ };
61
+ import WhereBase from "./where-base.js";
62
+ //# sourceMappingURL=where-model-class-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-model-class-hash.d.ts","sourceRoot":"","sources":["../../../../src/database/query/where-model-class-hash.js"],"names":[],"mappings":"AAKA;;GAEG;AAEH;IACE;;;;;;OAMG;IACH,2DALG;QAA2C,KAAK,EAAxC,OAAO,YAAY,EAAE,OAAO;QACZ,IAAI,EAApB,SAAS;QACyC,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC5B,gBAAgB,GAA/B,OAAO;KACjB,EAOA;IAJC,gBAAgB;IAChB,wDAA4B;IAC5B,0BAAwC;IAI1C;;OAEG;IACH,iBAFa,cAAc,oBAAoB,EAAE,OAAO,CAMvD;IAgBD;;;;OAIG;IACH,+BAJW,cAAc,oBAAoB,EAAE,OAAO,OAC3C,MAAM,GACJ,MAAM,GAAG,SAAS,CAS9B;IAED;;;;OAIG;IACH,6BAJW,cAAc,oBAAoB,EAAE,OAAO,oBAC3C,MAAM,GACJ,OAAO,iCAAiC,EAAE,OAAO,GAAG,SAAS,CAIzE;IAED;;;;;;OAMG;IACH,gEALG;QAA0D,UAAU,EAA5D,cAAc,oBAAoB,EAAE,OAAO;QAC9B,UAAU,EAAvB,MAAM;QACI,KAAK,EAAf,GAAG;KACX,GAAU,GAAG,CAqBf;IAED;;;;;;OAMG;IACH,wBANW,SAAS,cACT,cAAc,oBAAoB,EAAE,OAAO,cAC3C,MAAM,UACN,MAAM,GACJ,MAAM,CAgElB;CACF;wBAnKY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAC;sBAHxG,iBAAiB"}