flexdataset 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -93,6 +93,26 @@ function normalizeSortOrder(value) {
93
93
  };
94
94
  });
95
95
  }
96
+ function normalizeIndexes(value) {
97
+ return asArray(value).map((raw) => {
98
+ const record = asRecord(raw);
99
+ return {
100
+ name: asString(record.name),
101
+ method: asString(record.method),
102
+ unique: asOptionalBoolean(record.unique),
103
+ columns: asArray(record.columns).map((rawColumn) => {
104
+ const columnRecord = asRecord(rawColumn);
105
+ return {
106
+ name: asString(columnRecord.name),
107
+ sort: asOptionalString(columnRecord.sort),
108
+ nulls: asOptionalString(columnRecord.nulls),
109
+ };
110
+ }),
111
+ include: asStringArray(record.include),
112
+ where: asOptionalString(record.where),
113
+ };
114
+ });
115
+ }
96
116
  function normalizeStringMap(value) {
97
117
  const record = asRecord(value);
98
118
  const result = {};
@@ -126,6 +146,7 @@ function normalizeTableDefinition(raw) {
126
146
  primaryKey: asStringArray(record.primaryKey),
127
147
  partitions: normalizePartitions(record.partitions),
128
148
  sortOrder: normalizeSortOrder(record.sortOrder),
149
+ indexes: normalizeIndexes(record.indexes),
129
150
  tableProperties: normalizeStringMap(record.tableProperties),
130
151
  dependsOn: asStringArray(record.dependsOn),
131
152
  foreignKeys: normalizeForeignKeys(record.foreignKeys),
@@ -270,4 +291,4 @@ function loadRoot(rootDir) {
270
291
  violations,
271
292
  };
272
293
  }
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1S0gsNEJBd0lDO0FBN1NELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFXN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxT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QUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztnQkFDdEMsT0FBTyxFQUFFLFdBQVcsVUFBVSxzQ0FBc0MsWUFBWSxHQUFHO2FBQ3RGLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPO1lBQ1AsV0FBVztZQUNYLE1BQU0sRUFBRSxZQUFZO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxFQUFFO1lBQ0gsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTztZQUNQLE1BQU07U0FDVDtRQUNELFVBQVU7S0FDYixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBsb2FkZXIuIFdhbGtzIGEgZGF0YXNldCByb290LCBwYXJzZXMgZWFjaCBKU09OIGZpbGUsIHJ1bnMgTGF5ZXIgMVxuICogc3RydWN0dXJhbCB2YWxpZGF0aW9uLCBhbmQgbm9ybWFsaXplcyBldmVyeXRoaW5nIGludG8gYSBgV29ybGRgIG9mXG4gKiBjb25jcmV0ZSBgVGFibGVUeXBlQmFzZWAgaW5zdGFuY2VzIHRoYXQgdGhlIHNlbWFudGljIHJ1bGVzIG9wZXJhdGUgb24uXG4gKlxuICogUGFyc2UgZXJyb3JzLCBzdHJ1Y3R1cmFsIGVycm9ycywgYW5kIGEgbWlzc2luZyBzY2hlbWEtZGVzY3JpcHRpb24gZmlsZSBhcmVcbiAqIHJlcG9ydGVkIGhlcmU7IGFsbCBjcm9zcy1maWVsZCAvIGNyb3NzLWZpbGUgbG9naWMgbGl2ZXMgaW4gdGhlIHRhYmxlLXR5cGVcbiAqIGNsYXNzZXMgKGAuL3RhYmxlLXR5cGUudHNgLCBgLi90YWJsZS10eXBlcy8qYCkuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgRm9yZWlnbktleSxcbiAgICBQYXJ0aXRpb24sXG4gICAgU2NoZW1hRGVzY3JpcHRpb24sXG4gICAgU29ydEZpZWxkLFxuICAgIFRhYmxlRGVmaW5pdGlvbixcbiAgICBWaW9sYXRpb24sXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZSxcbn0gZnJvbSAnLi9zdHJ1Y3R1cmFsJztcbmltcG9ydCB7XG4gICAgVGFibGVUeXBlQmFzZSxcbn0gZnJvbSAnLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgY3JlYXRlVGFibGVUeXBlLFxufSBmcm9tICcuL3RhYmxlLXR5cGVzL3JlZ2lzdHJ5JztcbmltcG9ydCB7XG4gICAgTG9hZGVkU2NoZW1hLFxuICAgIFdvcmxkLFxufSBmcm9tICcuL3dvcmxkJztcblxuLyoqIFJlc3VsdCBvZiBsb2FkaW5nIGEgcm9vdDogdGhlIG1vZGVsIHBsdXMgYW55IGxvYWQtdGltZSB2aW9sYXRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2FkT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBsb2FkZWQgbW9kZWwuICovXG4gICAgcmVhZG9ubHkgd29ybGQ6IFdvcmxkO1xuXG4gICAgLyoqIFBhcnNlLCBzdHJ1Y3R1cmFsLCBhbmQgbWlzc2luZy1kZXNjcmlwdGlvbiB2aW9sYXRpb25zLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuXG5mdW5jdGlvbiBhc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IDoge307XG59XG5cbmZ1bmN0aW9uIGFzQXJyYXkodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG59XG5cbmZ1bmN0aW9uIGFzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyA/IHZhbHVlIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzT3B0aW9uYWxTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFzU3RyaW5nQXJyYXkodmFsdWU6IHVua25vd24pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbnModmFsdWU6IHVua25vd24pOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQubnVsbGFibGUpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJ0aXRpb25zKHZhbHVlOiB1bmtub3duKTogUGFydGl0aW9uW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYXNTdHJpbmcocmVjb3JkLm5hbWUpLFxuICAgICAgICAgICAgdHlwZTogYXNTdHJpbmcocmVjb3JkLnR5cGUpLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNvcnRPcmRlcih2YWx1ZTogdW5rbm93bik6IFNvcnRGaWVsZFtdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbjogYXNTdHJpbmcocmVjb3JkLmNvbHVtbiksXG4gICAgICAgICAgICB0cmFuc2Zvcm06IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLnRyYW5zZm9ybSksXG4gICAgICAgICAgICBkaXJlY3Rpb246IGFzU3RyaW5nKHJlY29yZC5kaXJlY3Rpb24pLFxuICAgICAgICAgICAgbnVsbE9yZGVyOiBhc1N0cmluZyhyZWNvcmQubnVsbE9yZGVyKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW1xuICAgICAgICBrZXksXG4gICAgICAgIHJhdyxcbiAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJhdztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgZm9ybWF0VmVyc2lvbjogYXNPcHRpb25hbE51bWJlcihyZWNvcmQuZm9ybWF0VmVyc2lvbiksXG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZUNvbHVtbnMocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBwcmltYXJ5S2V5OiBhc1N0cmluZ0FycmF5KHJlY29yZC5wcmltYXJ5S2V5KSxcbiAgICAgICAgcGFydGl0aW9uczogbm9ybWFsaXplUGFydGl0aW9ucyhyZWNvcmQucGFydGl0aW9ucyksXG4gICAgICAgIHNvcnRPcmRlcjogbm9ybWFsaXplU29ydE9yZGVyKHJlY29yZC5zb3J0T3JkZXIpLFxuICAgICAgICB0YWJsZVByb3BlcnRpZXM6IG5vcm1hbGl6ZVN0cmluZ01hcChyZWNvcmQudGFibGVQcm9wZXJ0aWVzKSxcbiAgICAgICAgZGVwZW5kc09uOiBhc1N0cmluZ0FycmF5KHJlY29yZC5kZXBlbmRzT24pLFxuICAgICAgICBmb3JlaWduS2V5czogbm9ybWFsaXplRm9yZWlnbktleXMocmVjb3JkLmZvcmVpZ25LZXlzKSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWFEZXNjcmlwdGlvbihyYXc6IHVua25vd24pOiBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzcGVjVmVyc2lvbjogYXNTdHJpbmcocmVjb3JkLnNwZWNWZXJzaW9uKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGFzU3RyaW5nKHJlY29yZC5kZXNjcmlwdGlvbiksXG4gICAgfTtcbn1cblxuLy8vIFNjaGVtYSBhbmQgdGFibGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkXG4vLy8gZnJvbSBgZGVwZW5kc09uYCBhbmQgZm9yZWlnbiBrZXlzLCB3aG9zZSBwYXR0ZXJucyByZXF1aXJlIHRoZSBzYW1lIHNoYXBlLlxuY29uc3QgTkFNRV9SRSA9IC9eW2EtejAtOV9dKyQvO1xuXG4vKipcbiAqIExvYWQgYSBkYXRhc2V0IHJvb3QgaW50byBhIGBXb3JsZGAuXG4gKlxuICogQHBhcmFtIHJvb3REaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGF0YXNldCByb290LlxuICogQHJldHVybnMgVGhlIGxvYWRlZCB3b3JsZCBwbHVzIGxvYWQtdGltZSB2aW9sYXRpb25zLlxuICogQHRocm93cyBFcnJvciBXaGVuIGByb290RGlyYCBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJvb3Qocm9vdERpcjogc3RyaW5nKTogTG9hZE91dGNvbWUge1xuICAgIGNvbnN0IGFic29sdXRlUm9vdCA9IHBhdGgucmVzb2x2ZShyb290RGlyKTtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoYWJzb2x1dGVSb290KSB8fCAhZnMuc3RhdFN5bmMoYWJzb2x1dGVSb290KS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZGF0YXNldCByb290IGlzIG5vdCBhIGRpcmVjdG9yeTogJHthYnNvbHV0ZVJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIExvYWRlZFNjaGVtYT4oKTtcbiAgICBjb25zdCB0YWJsZXMgPSBuZXcgTWFwPHN0cmluZywgVGFibGVUeXBlQmFzZT4oKTtcblxuICAgIGNvbnN0IHNjaGVtYURpcnMgPSBmcy5yZWFkZGlyU3luYyhhYnNvbHV0ZVJvb3QsIHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmICFlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuXG4gICAgZm9yIChjb25zdCBzY2hlbWFEaXIgb2Ygc2NoZW1hRGlycykge1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gc2NoZW1hRGlyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmpvaW4oYWJzb2x1dGVSb290LCBzY2hlbWFOYW1lKTtcblxuICAgICAgICBpZiAoIU5BTUVfUkUudGVzdChzY2hlbWFOYW1lKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBkaXJQYXRoLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBzY2hlbWEgbmFtZSBcIiR7c2NoZW1hTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2NGaWxlTmFtZSA9IGAke3NjaGVtYU5hbWV9Lmpzb25gO1xuICAgICAgICBjb25zdCBqc29uRmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICAgICAgLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aCgnLmpzb24nKSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbjogU2NoZW1hRGVzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgICAgICAgY29uc3QgbG9hZGVkVGFibGVzOiBUYWJsZVR5cGVCYXNlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YganNvbkZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkaXJQYXRoLCBmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuXG4gICAgICAgICAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ0ZJTEVfUEFSU0VfRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW52YWxpZCBKU09OOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSA9PT0gZGVzY0ZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCdzY2hlbWEnLCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3RydWN0dXJhbEVycm9yIG9mIHN0cnVjdHVyYWwuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfVkFMSURBVElPTicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gZmlsZS5zbGljZSgwLCAtJy5qc29uJy5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgcXVhbGlmaWVkTmFtZSA9IGAke3NjaGVtYU5hbWV9LiR7dGFibGVOYW1lfWA7XG5cbiAgICAgICAgICAgIGlmICghTkFNRV9SRS50ZXN0KHRhYmxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1RBQkxFX05BTUVfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgdGFibGUgbmFtZSBcIiR7dGFibGVOYW1lfVwiIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2UgKG1hdGNoaW5nICR7TkFNRV9SRX0pYCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RydWN0dXJhbCA9IHZhbGlkYXRlU3RydWN0dXJlKCd0YWJsZScsIHBhcnNlZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzdHJ1Y3R1cmFsRXJyb3IuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdHJ1Y3R1cmFsRXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkVGFibGUgPSBjcmVhdGVUYWJsZVR5cGUoe1xuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmFsbHlWYWxpZDogc3RydWN0dXJhbC52YWxpZCxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uOiBub3JtYWxpemVUYWJsZURlZmluaXRpb24ocGFyc2VkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9hZGVkVGFibGVzLnB1c2gobG9hZGVkVGFibGUpO1xuICAgICAgICAgICAgdGFibGVzLnNldChxdWFsaWZpZWROYW1lLCBsb2FkZWRUYWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9ERVNDX1BSRVNFTlQnLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hTmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4oZGlyUGF0aCwgZGVzY0ZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIFwiJHtzY2hlbWFOYW1lfVwiIGlzIG1pc3NpbmcgaXRzIGRlc2NyaXB0aW9uIGZpbGUgXCIke2Rlc2NGaWxlTmFtZX1cImAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVtYXMuc2V0KHNjaGVtYU5hbWUsIHtcbiAgICAgICAgICAgIG5hbWU6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICBkaXJQYXRoLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0YWJsZXM6IGxvYWRlZFRhYmxlcyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd29ybGQ6IHtcbiAgICAgICAgICAgIHJvb3REaXI6IGFic29sdXRlUm9vdCxcbiAgICAgICAgICAgIHNjaGVtYXMsXG4gICAgICAgICAgICB0YWJsZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHZpb2xhdGlvbnMsXG4gICAgfTtcbn1cbiJdfQ==
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4TEgsNEJBd0lDO0FBcFVELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFZN0IsNkNBRXNCO0FBSXRCLHFEQUVnQztBQWVoQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMvRixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzVCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUNyQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxT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QkFBcUI7Z0JBQzNCLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsV0FBVyxVQUFVLHNDQUFzQyxZQUFZLEdBQUc7YUFDdEYsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU87WUFDUCxXQUFXO1lBQ1gsTUFBTSxFQUFFLFlBQVk7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxLQUFLLEVBQUU7WUFDSCxPQUFPLEVBQUUsWUFBWTtZQUNyQixPQUFPO1lBQ1AsTUFBTTtTQUNUO1FBQ0QsVUFBVTtLQUNiLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaWxlc3lzdGVtIGxvYWRlci4gV2Fsa3MgYSBkYXRhc2V0IHJvb3QsIHBhcnNlcyBlYWNoIEpTT04gZmlsZSwgcnVucyBMYXllciAxXG4gKiBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24sIGFuZCBub3JtYWxpemVzIGV2ZXJ5dGhpbmcgaW50byBhIGBXb3JsZGAgb2ZcbiAqIGNvbmNyZXRlIGBUYWJsZVR5cGVCYXNlYCBpbnN0YW5jZXMgdGhhdCB0aGUgc2VtYW50aWMgcnVsZXMgb3BlcmF0ZSBvbi5cbiAqXG4gKiBQYXJzZSBlcnJvcnMsIHN0cnVjdHVyYWwgZXJyb3JzLCBhbmQgYSBtaXNzaW5nIHNjaGVtYS1kZXNjcmlwdGlvbiBmaWxlIGFyZVxuICogcmVwb3J0ZWQgaGVyZTsgYWxsIGNyb3NzLWZpZWxkIC8gY3Jvc3MtZmlsZSBsb2dpYyBsaXZlcyBpbiB0aGUgdGFibGUtdHlwZVxuICogY2xhc3NlcyAoYC4vdGFibGUtdHlwZS50c2AsIGAuL3RhYmxlLXR5cGVzLypgKS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge1xuICAgIENvbHVtbixcbiAgICBGb3JlaWduS2V5LFxuICAgIEluZGV4LFxuICAgIFBhcnRpdGlvbixcbiAgICBTY2hlbWFEZXNjcmlwdGlvbixcbiAgICBTb3J0RmllbGQsXG4gICAgVGFibGVEZWZpbml0aW9uLFxuICAgIFZpb2xhdGlvbixcbn0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlU3RydWN0dXJlLFxufSBmcm9tICcuL3N0cnVjdHVyYWwnO1xuaW1wb3J0IHtcbiAgICBUYWJsZVR5cGVCYXNlLFxufSBmcm9tICcuL3RhYmxlLXR5cGUnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVUYWJsZVR5cGUsXG59IGZyb20gJy4vdGFibGUtdHlwZXMvcmVnaXN0cnknO1xuaW1wb3J0IHtcbiAgICBMb2FkZWRTY2hlbWEsXG4gICAgV29ybGQsXG59IGZyb20gJy4vd29ybGQnO1xuXG4vKiogUmVzdWx0IG9mIGxvYWRpbmcgYSByb290OiB0aGUgbW9kZWwgcGx1cyBhbnkgbG9hZC10aW1lIHZpb2xhdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRPdXRjb21lIHtcbiAgICAvKiogVGhlIGxvYWRlZCBtb2RlbC4gKi9cbiAgICByZWFkb25seSB3b3JsZDogV29ybGQ7XG5cbiAgICAvKiogUGFyc2UsIHN0cnVjdHVyYWwsIGFuZCBtaXNzaW5nLWRlc2NyaXB0aW9uIHZpb2xhdGlvbnMuICovXG4gICAgcmVhZG9ubHkgdmlvbGF0aW9uczogVmlvbGF0aW9uW107XG59XG5cbmZ1bmN0aW9uIGFzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gOiB7fTtcbn1cblxuZnVuY3Rpb24gYXNBcnJheSh2YWx1ZTogdW5rbm93bik6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbn1cblxuZnVuY3Rpb24gYXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gdmFsdWUgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbEJvb2xlYW4odmFsdWU6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbE51bWJlcih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNPcHRpb25hbFN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYXNTdHJpbmdBcnJheSh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29sdW1ucyh2YWx1ZTogdW5rbm93bik6IENvbHVtbltdIHtcbiAgICByZXR1cm4gYXNBcnJheSh2YWx1ZSkubWFwKChyYXcpID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQocmF3KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGFzU3RyaW5nKHJlY29yZC5uYW1lKSxcbiAgICAgICAgICAgIHR5cGU6IGFzU3RyaW5nKHJlY29yZC50eXBlKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICAgICAgbnVsbGFibGU6IGFzT3B0aW9uYWxCb29sZWFuKHJlY29yZC5udWxsYWJsZSksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcnRpdGlvbnModmFsdWU6IHVua25vd24pOiBQYXJ0aXRpb25bXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICB0eXBlOiBhc1N0cmluZyhyZWNvcmQudHlwZSksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXNTdHJpbmcocmVjb3JkLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU29ydE9yZGVyKHZhbHVlOiB1bmtub3duKTogU29ydEZpZWxkW10ge1xuICAgIHJldHVybiBhc0FycmF5KHZhbHVlKS5tYXAoKHJhdykgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhc1JlY29yZChyYXcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uOiBhc1N0cmluZyhyZWNvcmQuY29sdW1uKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogYXNPcHRpb25hbFN0cmluZyhyZWNvcmQudHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogYXNTdHJpbmcocmVjb3JkLmRpcmVjdGlvbiksXG4gICAgICAgICAgICBudWxsT3JkZXI6IGFzU3RyaW5nKHJlY29yZC5udWxsT3JkZXIpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVJbmRleGVzKHZhbHVlOiB1bmtub3duKTogSW5kZXhbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhyZWNvcmQubmFtZSksXG4gICAgICAgICAgICBtZXRob2Q6IGFzU3RyaW5nKHJlY29yZC5tZXRob2QpLFxuICAgICAgICAgICAgdW5pcXVlOiBhc09wdGlvbmFsQm9vbGVhbihyZWNvcmQudW5pcXVlKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGFzQXJyYXkocmVjb3JkLmNvbHVtbnMpLm1hcCgocmF3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uUmVjb3JkID0gYXNSZWNvcmQocmF3Q29sdW1uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc1N0cmluZyhjb2x1bW5SZWNvcmQubmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnQ6IGFzT3B0aW9uYWxTdHJpbmcoY29sdW1uUmVjb3JkLnNvcnQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsczogYXNPcHRpb25hbFN0cmluZyhjb2x1bW5SZWNvcmQubnVsbHMpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluY2x1ZGU6IGFzU3RyaW5nQXJyYXkocmVjb3JkLmluY2x1ZGUpLFxuICAgICAgICAgICAgd2hlcmU6IGFzT3B0aW9uYWxTdHJpbmcocmVjb3JkLndoZXJlKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nTWFwKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgcmVjb3JkID0gYXNSZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW1xuICAgICAgICBrZXksXG4gICAgICAgIHJhdyxcbiAgICBdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJhdztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVGb3JlaWduS2V5cyh2YWx1ZTogdW5rbm93bik6IEZvcmVpZ25LZXlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLm1hcCgocmF3KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUYWJsZTogYXNTdHJpbmcocmVjb3JkLnNvdXJjZVRhYmxlKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbHVtbjogYXNTdHJpbmcocmVjb3JkLnNvdXJjZUNvbHVtbiksXG4gICAgICAgICAgICBsb2NhbENvbHVtbjogYXNTdHJpbmcocmVjb3JkLmxvY2FsQ29sdW1uKSxcbiAgICAgICAgICAgIGFsbG93TnVsbHM6IGFzQm9vbGVhbihyZWNvcmQuYWxsb3dOdWxscyksXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhYmxlRGVmaW5pdGlvbihyYXc6IHVua25vd24pOiBUYWJsZURlZmluaXRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgICAgICB0YWJsZVR5cGU6IGFzU3RyaW5nKHJlY29yZC50YWJsZVR5cGUpLFxuICAgICAgICBpc1Jhd0RhdGE6IGFzQm9vbGVhbihyZWNvcmQuaXNSYXdEYXRhKSxcbiAgICAgICAgZm9ybWF0VmVyc2lvbjogYXNPcHRpb25hbE51bWJlcihyZWNvcmQuZm9ybWF0VmVyc2lvbiksXG4gICAgICAgIGNvbHVtbnM6IG5vcm1hbGl6ZUNvbHVtbnMocmVjb3JkLmNvbHVtbnMpLFxuICAgICAgICBwcmltYXJ5S2V5OiBhc1N0cmluZ0FycmF5KHJlY29yZC5wcmltYXJ5S2V5KSxcbiAgICAgICAgcGFydGl0aW9uczogbm9ybWFsaXplUGFydGl0aW9ucyhyZWNvcmQucGFydGl0aW9ucyksXG4gICAgICAgIHNvcnRPcmRlcjogbm9ybWFsaXplU29ydE9yZGVyKHJlY29yZC5zb3J0T3JkZXIpLFxuICAgICAgICBpbmRleGVzOiBub3JtYWxpemVJbmRleGVzKHJlY29yZC5pbmRleGVzKSxcbiAgICAgICAgdGFibGVQcm9wZXJ0aWVzOiBub3JtYWxpemVTdHJpbmdNYXAocmVjb3JkLnRhYmxlUHJvcGVydGllcyksXG4gICAgICAgIGRlcGVuZHNPbjogYXNTdHJpbmdBcnJheShyZWNvcmQuZGVwZW5kc09uKSxcbiAgICAgICAgZm9yZWlnbktleXM6IG5vcm1hbGl6ZUZvcmVpZ25LZXlzKHJlY29yZC5mb3JlaWduS2V5cyksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NoZW1hRGVzY3JpcHRpb24ocmF3OiB1bmtub3duKTogU2NoZW1hRGVzY3JpcHRpb24ge1xuICAgIGNvbnN0IHJlY29yZCA9IGFzUmVjb3JkKHJhdyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3BlY1ZlcnNpb246IGFzU3RyaW5nKHJlY29yZC5zcGVjVmVyc2lvbiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBhc1N0cmluZyhyZWNvcmQuZGVzY3JpcHRpb24pLFxuICAgIH07XG59XG5cbi8vLyBTY2hlbWEgYW5kIHRhYmxlIG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIHNuYWtlX2Nhc2Ugc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZFxuLy8vIGZyb20gYGRlcGVuZHNPbmAgYW5kIGZvcmVpZ24ga2V5cywgd2hvc2UgcGF0dGVybnMgcmVxdWlyZSB0aGUgc2FtZSBzaGFwZS5cbmNvbnN0IE5BTUVfUkUgPSAvXlthLXowLTlfXSskLztcblxuLyoqXG4gKiBMb2FkIGEgZGF0YXNldCByb290IGludG8gYSBgV29ybGRgLlxuICpcbiAqIEBwYXJhbSByb290RGlyIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gdGhlIGRhdGFzZXQgcm9vdC5cbiAqIEByZXR1cm5zIFRoZSBsb2FkZWQgd29ybGQgcGx1cyBsb2FkLXRpbWUgdmlvbGF0aW9ucy5cbiAqIEB0aHJvd3MgRXJyb3IgV2hlbiBgcm9vdERpcmAgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRSb290KHJvb3REaXI6IHN0cmluZyk6IExvYWRPdXRjb21lIHtcbiAgICBjb25zdCBhYnNvbHV0ZVJvb3QgPSBwYXRoLnJlc29sdmUocm9vdERpcik7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGFic29sdXRlUm9vdCkgfHwgIWZzLnN0YXRTeW5jKGFic29sdXRlUm9vdCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGFzZXQgcm9vdCBpcyBub3QgYSBkaXJlY3Rvcnk6ICR7YWJzb2x1dGVSb290fWApO1xuICAgIH1cblxuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBMb2FkZWRTY2hlbWE+KCk7XG4gICAgY29uc3QgdGFibGVzID0gbmV3IE1hcDxzdHJpbmcsIFRhYmxlVHlwZUJhc2U+KCk7XG5cbiAgICBjb25zdCBzY2hlbWFEaXJzID0gZnMucmVhZGRpclN5bmMoYWJzb2x1dGVSb290LCB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuaXNEaXJlY3RvcnkoKSAmJiAhZW50cnkubmFtZS5zdGFydHNXaXRoKCcuJykpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcblxuICAgIGZvciAoY29uc3Qgc2NoZW1hRGlyIG9mIHNjaGVtYURpcnMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IHNjaGVtYURpci5uYW1lO1xuICAgICAgICBjb25zdCBkaXJQYXRoID0gcGF0aC5qb2luKGFic29sdXRlUm9vdCwgc2NoZW1hTmFtZSk7XG5cbiAgICAgICAgaWYgKCFOQU1FX1JFLnRlc3Qoc2NoZW1hTmFtZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogZGlyUGF0aCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgc2NoZW1hIG5hbWUgXCIke3NjaGVtYU5hbWV9XCIgbXVzdCBiZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSAobWF0Y2hpbmcgJHtOQU1FX1JFfSlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXNjRmlsZU5hbWUgPSBgJHtzY2hlbWFOYW1lfS5qc29uYDtcbiAgICAgICAgY29uc3QganNvbkZpbGVzID0gZnMucmVhZGRpclN5bmMoZGlyUGF0aClcbiAgICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoJy5qc29uJykpXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgICAgICBsZXQgZGVzY3JpcHRpb246IFNjaGVtYURlc2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlczogVGFibGVUeXBlQmFzZVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGpzb25GaWxlcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZmlsZSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcblxuICAgICAgICAgICAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdGSUxFX1BBUlNFX0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGludmFsaWQgSlNPTjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGUgPT09IGRlc2NGaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgnc2NoZW1hJywgcGFyc2VkKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0cnVjdHVyYWxFcnJvciBvZiBzdHJ1Y3R1cmFsLmVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnU0NIRU1BX1ZBTElEQVRJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHN0cnVjdHVyYWxFcnJvci5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IG5vcm1hbGl6ZVNjaGVtYURlc2NyaXB0aW9uKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IGZpbGUuc2xpY2UoMCwgLScuanNvbicubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZE5hbWUgPSBgJHtzY2hlbWFOYW1lfS4ke3RhYmxlTmFtZX1gO1xuXG4gICAgICAgICAgICBpZiAoIU5BTUVfUkUudGVzdCh0YWJsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdUQUJMRV9OQU1FX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHRhYmxlIG5hbWUgXCIke3RhYmxlTmFtZX1cIiBtdXN0IGJlIGxvd2VyY2FzZSBzbmFrZV9jYXNlIChtYXRjaGluZyAke05BTUVfUkV9KWAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0cnVjdHVyYWwgPSB2YWxpZGF0ZVN0cnVjdHVyZSgndGFibGUnLCBwYXJzZWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdHJ1Y3R1cmFsRXJyb3Igb2Ygc3RydWN0dXJhbC5lcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1NDSEVNQV9WQUxJREFUSU9OJyxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogc3RydWN0dXJhbEVycm9yLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RydWN0dXJhbEVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxvYWRlZFRhYmxlID0gY3JlYXRlVGFibGVUeXBlKHtcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIHF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgc3RydWN0dXJhbGx5VmFsaWQ6IHN0cnVjdHVyYWwudmFsaWQsXG4gICAgICAgICAgICAgICAgZGVmaW5pdGlvbjogbm9ybWFsaXplVGFibGVEZWZpbml0aW9uKHBhcnNlZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvYWRlZFRhYmxlcy5wdXNoKGxvYWRlZFRhYmxlKTtcbiAgICAgICAgICAgIHRhYmxlcy5zZXQocXVhbGlmaWVkTmFtZSwgbG9hZGVkVGFibGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdTQ0hFTUFfREVTQ19QUkVTRU5UJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHNjaGVtYU5hbWUsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKGRpclBhdGgsIGRlc2NGaWxlTmFtZSksXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYHNjaGVtYSBcIiR7c2NoZW1hTmFtZX1cIiBpcyBtaXNzaW5nIGl0cyBkZXNjcmlwdGlvbiBmaWxlIFwiJHtkZXNjRmlsZU5hbWV9XCJgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzY2hlbWFzLnNldChzY2hlbWFOYW1lLCB7XG4gICAgICAgICAgICBuYW1lOiBzY2hlbWFOYW1lLFxuICAgICAgICAgICAgZGlyUGF0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdGFibGVzOiBsb2FkZWRUYWJsZXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHdvcmxkOiB7XG4gICAgICAgICAgICByb290RGlyOiBhYnNvbHV0ZVJvb3QsXG4gICAgICAgICAgICBzY2hlbWFzLFxuICAgICAgICAgICAgdGFibGVzLFxuICAgICAgICB9LFxuICAgICAgICB2aW9sYXRpb25zLFxuICAgIH07XG59XG4iXX0=
@@ -60,6 +60,33 @@ export interface SortField {
60
60
  /** Null ordering (`nulls-first` or `nulls-last`). */
61
61
  readonly nullOrder: string;
62
62
  }
63
+ /** A single key column within an index, with optional ordering modifiers. */
64
+ export interface IndexColumn {
65
+ /** Indexed column name. */
66
+ readonly name: string;
67
+ /** Optional sort order (`asc` or `desc`). */
68
+ readonly sort?: string;
69
+ /** Optional null ordering (`first` or `last`). */
70
+ readonly nulls?: string;
71
+ }
72
+ /**
73
+ * A secondary index (e.g. Postgres). `columns` are the key columns; `include`
74
+ * are non-key covering columns; `where` is an opaque partial-index predicate.
75
+ */
76
+ export interface Index {
77
+ /** Index name (unique within the table). */
78
+ readonly name: string;
79
+ /** Access method (e.g. `btree`, `hash`, `gin`). */
80
+ readonly method: string;
81
+ /** Whether the index enforces uniqueness. */
82
+ readonly unique?: boolean;
83
+ /** Key columns. */
84
+ readonly columns: IndexColumn[];
85
+ /** Non-key covering columns. */
86
+ readonly include: string[];
87
+ /** Optional partial-index predicate (opaque). */
88
+ readonly where?: string;
89
+ }
63
90
  /** A foreign-key reference to a column in another table. */
64
91
  export interface ForeignKey {
65
92
  /** Referenced table in `schema.table` format. */
@@ -94,6 +121,8 @@ export interface TableDefinition {
94
121
  readonly partitions: Partition[];
95
122
  /** Iceberg sort order (ordered sort fields). Optional; other engines ignore it. */
96
123
  readonly sortOrder: SortField[];
124
+ /** Secondary indexes (Postgres). Optional; other engines ignore them. */
125
+ readonly indexes: Index[];
97
126
  /**
98
127
  * Engine table properties as a string→string map (e.g. Iceberg
99
128
  * `write.target-file-size-bytes`, Hive `parquet.compression`). Optional.
package/dist/src/model.js CHANGED
@@ -23,4 +23,4 @@ exports.TABLE_TYPES = [
23
23
  TableType.ICEBERG_PARQUET,
24
24
  TableType.POSTGRES_18,
25
25
  ];
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgZm9yZWlnbi1rZXkgcmVmZXJlbmNlIHRvIGEgY29sdW1uIGluIGFub3RoZXIgdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXkge1xuICAgIC8qKiBSZWZlcmVuY2VkIHRhYmxlIGluIGBzY2hlbWEudGFibGVgIGZvcm1hdC4gKi9cbiAgICByZWFkb25seSBzb3VyY2VUYWJsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZWQgY29sdW1uIGluIHRoZSBzb3VyY2UgdGFibGUuICovXG4gICAgcmVhZG9ubHkgc291cmNlQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogTG9jYWwgY29sdW1uIHRoYXQgaG9sZHMgdGhlIHJlZmVyZW5jZS4gKi9cbiAgICByZWFkb25seSBsb2NhbENvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGNvbHVtbiBtYXkgYmUgbnVsbC4gKi9cbiAgICByZWFkb25seSBhbGxvd051bGxzOiBib29sZWFuO1xufVxuXG4vKiogTm9ybWFsaXplZCB0YWJsZSBkZWZpbml0aW9uIChvcHRpb25hbCBhcnJheXMgZGVmYXVsdGVkIHRvIGVtcHR5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVEZWZpbml0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUuIE1heSBiZSBhbiB1bmtub3duIHN0cmluZyBpZiB0aGUgZmlsZSBmYWlsZWQgc3RydWN0dXJhbCBjaGVja3MuICovXG4gICAgcmVhZG9ubHkgdGFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIHRhYmxlIGlzIHRoZSB0b3Agb2YgdGhlIHBpcGVsaW5lLiAqL1xuICAgIHJlYWRvbmx5IGlzUmF3RGF0YTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEljZWJlcmcgdGFibGUgZm9ybWF0IHZlcnNpb24gKDEsIDIsIG9yIDMpLiBPcHRpb25hbCBhbmQgZW5naW5lLXNwZWNpZmljOlxuICAgICAqIG9ubHkgdGhlIEljZWJlcmcgZW5naW5lIHZhbGlkYXRlcyBpdC4gT3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZm9ybWF0VmVyc2lvbj86IG51bWJlcjtcblxuICAgIC8qKiBEYXRhIGNvbHVtbnMuICovXG4gICAgcmVhZG9ubHkgY29sdW1uczogQ29sdW1uW107XG5cbiAgICAvKiogUHJpbWFyeS1rZXkgY29sdW1uIG5hbWVzLiAqL1xuICAgIHJlYWRvbmx5IHByaW1hcnlLZXk6IHN0cmluZ1tdO1xuXG4gICAgLyoqIFBhcnRpdGlvbiBlbnRyaWVzIChlbmdpbmUtc3BlY2lmaWMgc2VtYW50aWNzKS4gKi9cbiAgICByZWFkb25seSBwYXJ0aXRpb25zOiBQYXJ0aXRpb25bXTtcblxuICAgIC8qKiBJY2ViZXJnIHNvcnQgb3JkZXIgKG9yZGVyZWQgc29ydCBmaWVsZHMpLiBPcHRpb25hbDsgb3RoZXIgZW5naW5lcyBpZ25vcmUgaXQuICovXG4gICAgcmVhZG9ubHkgc29ydE9yZGVyOiBTb3J0RmllbGRbXTtcblxuICAgIC8qKlxuICAgICAqIEVuZ2luZSB0YWJsZSBwcm9wZXJ0aWVzIGFzIGEgc3RyaW5n4oaSc3RyaW5nIG1hcCAoZS5nLiBJY2ViZXJnXG4gICAgICogYHdyaXRlLnRhcmdldC1maWxlLXNpemUtYnl0ZXNgLCBIaXZlIGBwYXJxdWV0LmNvbXByZXNzaW9uYCkuIE9wdGlvbmFsLlxuICAgICAqIE9ubHkga2V5cyB3aXRoIGEga25vd24sIGNsb3NlZCBsZWdhbCBkb21haW4gYXJlIHZhbGlkYXRlZCBwZXIgZW5naW5lO1xuICAgICAqIHVua25vd24ga2V5cyBwYXNzIHRocm91Z2ggdW52YWxpZGF0ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgdGFibGVQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgLyoqIFVwc3RyZWFtIHRhYmxlcyBpbiBgc2NoZW1hLnRhYmxlYCBmb3JtYXQuICovXG4gICAgcmVhZG9ubHkgZGVwZW5kc09uOiBzdHJpbmdbXTtcblxuICAgIC8qKiBGb3JlaWduIGtleXMuICovXG4gICAgcmVhZG9ubHkgZm9yZWlnbktleXM6IEZvcmVpZ25LZXlbXTtcbn1cblxuLyoqIEEgc2NoZW1hLWRlc2NyaXB0aW9uIGZpbGUncyBub3JtYWxpemVkIGNvbnRlbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYURlc2NyaXB0aW9uIHtcbiAgICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAqL1xuICAgIHJlYWRvbmx5IHNwZWNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAvKiogSHVtYW4gZGVzY3JpcHRpb24uICovXG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqIFNldmVyaXR5IG9mIGEgdmlvbGF0aW9uLiAqL1xuZXhwb3J0IHR5cGUgVmlvbGF0aW9uTGV2ZWwgPSAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuXG4vKiogQSBzaW5nbGUgdmFsaWRhdGlvbiBmaW5kaW5nLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaW9sYXRpb24ge1xuICAgIC8qKiBTZXZlcml0eS4gYGVycm9yYCBmYWlscyB2YWxpZGF0aW9uOyBgd2FybmluZ2AgZG9lcyBub3QuICovXG4gICAgcmVhZG9ubHkgbGV2ZWw6IFZpb2xhdGlvbkxldmVsO1xuXG4gICAgLyoqIFN0YWJsZSBtYWNoaW5lLXJlYWRhYmxlIHJ1bGUgY29kZSAoZS5nLiBgUEtfQ09MVU1OU19FWElTVGApLiAqL1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAgIC8qKiBPd25pbmcgc2NoZW1hLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHNjaGVtYT86IHN0cmluZztcblxuICAgIC8qKiBPd25pbmcgdGFibGUsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgdGFibGU/OiBzdHJpbmc7XG5cbiAgICAvKiogRmllbGQgcGF0aCB3aXRoaW4gdGhlIGZpbGUsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgZmllbGQ/OiBzdHJpbmc7XG5cbiAgICAvKiogU291cmNlIGZpbGUgcGF0aCwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UuICovXG4gICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogVGhlIGFnZ3JlZ2F0ZSByZXN1bHQgb2YgdmFsaWRhdGluZyBhIHJvb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SZXN1bHQge1xuICAgIC8qKiBUcnVlIHdoZW4gdGhlcmUgYXJlIG5vIGBlcnJvcmAtbGV2ZWwgdmlvbGF0aW9ucy4gKi9cbiAgICByZWFkb25seSBvazogYm9vbGVhbjtcblxuICAgIC8qKiBBbGwgZmluZGluZ3MsIGVycm9ycyBhbmQgd2FybmluZ3MuICovXG4gICAgcmVhZG9ubHkgdmlvbGF0aW9uczogVmlvbGF0aW9uW107XG59XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7OztHQVFHOzs7QUFFSCx3RUFBd0U7QUFDeEUsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDBDQUE2QixDQUFBO0lBQzdCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFKVyxTQUFTLHlCQUFULFNBQVMsUUFJcEI7QUFFRCw2REFBNkQ7QUFDaEQsUUFBQSxXQUFXLEdBQXNCO0lBQzFDLFNBQVMsQ0FBQyxZQUFZO0lBQ3RCLFNBQVMsQ0FBQyxlQUFlO0lBQ3pCLFNBQVMsQ0FBQyxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcmUgZGF0YSBtb2RlbCBmb3IgdGhlIEZsZXhpYmxlIERhdGFzZXQgRGVmaW5pdGlvbiAoRkREKSBzdGFuZGFyZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlc2NyaWJlIHRoZSAqcHVyZSBkYXRhKiBzaGFwZSBvZiBhIGRhdGFzZXQ6IGNvbHVtbnMsXG4gKiBwYXJ0aXRpb25zLCBmb3JlaWduIGtleXMsIHRhYmxlIGRlZmluaXRpb25zLCBhbmQgdGhlIHZpb2xhdGlvbnMgdGhlXG4gKiB2YWxpZGF0b3IgZW1pdHMuIFRoZSBsb2FkZWQgd29ybGQgKHNjaGVtYXMgKyB0YWJsZSBpbnN0YW5jZXMpIGFuZCB0aGVcbiAqIGFic3RyYWN0IHRhYmxlIGJhc2UgY2xhc3MgbGl2ZSBpbiBgLi93b3JsZGAgYW5kIGAuL3RhYmxlLXR5cGVgIHNvIHRoaXNcbiAqIG1vZHVsZSBzdGF5cyBhIGxlYWYgd2l0aCBubyBiZWhhdmlvci5cbiAqL1xuXG4vKiogVGFibGUgZW5naW5lLiBFYWNoIHZhbHVlIHVubG9ja3MgZW5naW5lLXNwZWNpZmljIHNlbWFudGljIGNoZWNrcy4gKi9cbmV4cG9ydCBlbnVtIFRhYmxlVHlwZSB7XG4gICAgSElWRV9QQVJRVUVUID0gJ2hpdmVfcGFycXVldCcsXG4gICAgSUNFQkVSR19QQVJRVUVUID0gJ2ljZWJlcmdfcGFycXVldCcsXG4gICAgUE9TVEdSRVNfMTggPSAncG9zdGdyZXNfMTgnLFxufVxuXG4vKiogRXZlcnkga25vd24gYHRhYmxlVHlwZWAgc3RyaW5nLCBmb3IgbWVtYmVyc2hpcCBjaGVja3MuICovXG5leHBvcnQgY29uc3QgVEFCTEVfVFlQRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgIFRhYmxlVHlwZS5ISVZFX1BBUlFVRVQsXG4gICAgVGFibGVUeXBlLklDRUJFUkdfUEFSUVVFVCxcbiAgICBUYWJsZVR5cGUuUE9TVEdSRVNfMTgsXG5dO1xuXG4vKiogQSBzaW5nbGUgZGF0YSBjb2x1bW4uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gICAgLyoqIENvbHVtbiBuYW1lICh1bmlxdWUgd2l0aGluIGEgdGFibGUpLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBFbmdpbmUtc3BlY2lmaWMgdHlwZSBzdHJpbmcgKGUuZy4gYGxvbmdgLCBgdmFyY2hhcigyNTUpYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gbWF5IGhvbGQgbnVsbC4gT3B0aW9uYWw6IHdoZW4gb21pdHRlZCwgbnVsbGFiaWxpdHkgaXNcbiAgICAgKiB1bnNwZWNpZmllZCBhbmQgdGhlIG51bGxhYmlsaXR5IGNyb3NzLWNoZWNrcyBkbyBub3QgZmlyZS4gYGZhbHNlYCBtYXJrcyBhXG4gICAgICogTk9UIE5VTEwgY29sdW1uIChJY2ViZXJnIGByZXF1aXJlZGApOyBgdHJ1ZWAgbWFya3MgYW4gZXhwbGljaXRseSBudWxsYWJsZVxuICAgICAqIGNvbHVtbi5cbiAgICAgKi9cbiAgICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBwYXJ0aXRpb24gZW50cnkuIFRoZSBtZWFuaW5nIG9mIGBuYW1lYCBhbmQgYHR5cGVgIGlzIGVuZ2luZS1zcGVjaWZpYzogZm9yXG4gKiBIaXZlLCBgbmFtZWAgaXMgYSBuZXcgcGFydGl0aW9uIGNvbHVtbiBhbmQgYHR5cGVgIGlzIGEgbm9ybWFsIHR5cGU7IGZvclxuICogSWNlYmVyZywgYG5hbWVgIGlzIGEgc291cmNlIGRhdGEgY29sdW1uIGFuZCBgdHlwZWAgaXMgYSB0cmFuc2Zvcm07IGZvclxuICogUG9zdGdyZXMsIGBuYW1lYCBpcyBhbiBleGlzdGluZyBrZXkgY29sdW1uIGFuZCBgdHlwZWAgaXMgdGhlIHN0cmF0ZWd5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpdGlvbiB7XG4gICAgLyoqIEhpdmU6IG5ldyBwYXJ0aXRpb24gY29sdW1uIG5hbWUuIEljZWJlcmcgLyBQb3N0Z3JlczogZXhpc3RpbmcgZGF0YS9rZXkgY29sdW1uIG5hbWUuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEhpdmU6IGEgbm9ybWFsIHR5cGUuIEljZWJlcmc6IGEgdHJhbnNmb3JtIChlLmcuIGBkYXlgLCBgYnVja2V0WzE2XWApLiBQb3N0Z3JlczogYSBzdHJhdGVneSAoYHJhbmdlYCAvIGBsaXN0YCAvIGBoYXNoYCkuICovXG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgc29ydCBmaWVsZCBpbiBhbiBJY2ViZXJnIHRhYmxlJ3Mgc29ydCBvcmRlci4gYGNvbHVtbmAgaXMgYSBkYXRhXG4gKiBjb2x1bW47IGB0cmFuc2Zvcm1gIGlzIGFuIG9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmdcbiAqIChkZWZhdWx0cyB0byBpZGVudGl0eSk7IGBkaXJlY3Rpb25gIGFuZCBgbnVsbE9yZGVyYCBzZXQgdGhlIG9yZGVyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRGaWVsZCB7XG4gICAgLyoqIFNvdXJjZSBkYXRhIGNvbHVtbiB0byBzb3J0IGJ5LiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXG4gICAgLyoqIE9wdGlvbmFsIEljZWJlcmcgdHJhbnNmb3JtIGFwcGxpZWQgYmVmb3JlIHNvcnRpbmcgKGUuZy4gYGRheWAsIGBidWNrZXRbMTZdYCkuICovXG4gICAgcmVhZG9ubHkgdHJhbnNmb3JtPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvcnQgZGlyZWN0aW9uIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IGRpcmVjdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgb3JkZXJpbmcgKGBudWxscy1maXJzdGAgb3IgYG51bGxzLWxhc3RgKS4gKi9cbiAgICByZWFkb25seSBudWxsT3JkZXI6IHN0cmluZztcbn1cblxuLyoqIEEgc2luZ2xlIGtleSBjb2x1bW4gd2l0aGluIGFuIGluZGV4LCB3aXRoIG9wdGlvbmFsIG9yZGVyaW5nIG1vZGlmaWVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhDb2x1bW4ge1xuICAgIC8qKiBJbmRleGVkIGNvbHVtbiBuYW1lLiAqL1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAgIC8qKiBPcHRpb25hbCBzb3J0IG9yZGVyIChgYXNjYCBvciBgZGVzY2ApLiAqL1xuICAgIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgICAvKiogT3B0aW9uYWwgbnVsbCBvcmRlcmluZyAoYGZpcnN0YCBvciBgbGFzdGApLiAqL1xuICAgIHJlYWRvbmx5IG51bGxzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2Vjb25kYXJ5IGluZGV4IChlLmcuIFBvc3RncmVzKS4gYGNvbHVtbnNgIGFyZSB0aGUga2V5IGNvbHVtbnM7IGBpbmNsdWRlYFxuICogYXJlIG5vbi1rZXkgY292ZXJpbmcgY29sdW1uczsgYHdoZXJlYCBpcyBhbiBvcGFxdWUgcGFydGlhbC1pbmRleCBwcmVkaWNhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXgge1xuICAgIC8qKiBJbmRleCBuYW1lICh1bmlxdWUgd2l0aGluIHRoZSB0YWJsZSkuICovXG4gICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqIEFjY2VzcyBtZXRob2QgKGUuZy4gYGJ0cmVlYCwgYGhhc2hgLCBgZ2luYCkuICovXG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgaW5kZXggZW5mb3JjZXMgdW5pcXVlbmVzcy4gKi9cbiAgICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuXG4gICAgLyoqIEtleSBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGNvbHVtbnM6IEluZGV4Q29sdW1uW107XG5cbiAgICAvKiogTm9uLWtleSBjb3ZlcmluZyBjb2x1bW5zLiAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuXG4gICAgLyoqIE9wdGlvbmFsIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIChvcGFxdWUpLiAqL1xuICAgIHJlYWRvbmx5IHdoZXJlPzogc3RyaW5nO1xufVxuXG4vKiogQSBmb3JlaWduLWtleSByZWZlcmVuY2UgdG8gYSBjb2x1bW4gaW4gYW5vdGhlciB0YWJsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZWlnbktleSB7XG4gICAgLyoqIFJlZmVyZW5jZWQgdGFibGUgaW4gYHNjaGVtYS50YWJsZWAgZm9ybWF0LiAqL1xuICAgIHJlYWRvbmx5IHNvdXJjZVRhYmxlOiBzdHJpbmc7XG5cbiAgICAvKiogUmVmZXJlbmNlZCBjb2x1bW4gaW4gdGhlIHNvdXJjZSB0YWJsZS4gKi9cbiAgICByZWFkb25seSBzb3VyY2VDb2x1bW46IHN0cmluZztcblxuICAgIC8qKiBMb2NhbCBjb2x1bW4gdGhhdCBob2xkcyB0aGUgcmVmZXJlbmNlLiAqL1xuICAgIHJlYWRvbmx5IGxvY2FsQ29sdW1uOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbG9jYWwgY29sdW1uIG1heSBiZSBudWxsLiAqL1xuICAgIHJlYWRvbmx5IGFsbG93TnVsbHM6IGJvb2xlYW47XG59XG5cbi8qKiBOb3JtYWxpemVkIHRhYmxlIGRlZmluaXRpb24gKG9wdGlvbmFsIGFycmF5cyBkZWZhdWx0ZWQgdG8gZW1wdHkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZURlZmluaXRpb24ge1xuICAgIC8qKiBTcGVjIHZlcnNpb24gb2YgdGhlIGZpbGUuICovXG4gICAgcmVhZG9ubHkgc3BlY1ZlcnNpb246IHN0cmluZztcblxuICAgIC8qKiBIdW1hbiBkZXNjcmlwdGlvbi4gKi9cbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqIEVuZ2luZS4gTWF5IGJlIGFuIHVua25vd24gc3RyaW5nIGlmIHRoZSBmaWxlIGZhaWxlZCBzdHJ1Y3R1cmFsIGNoZWNrcy4gKi9cbiAgICByZWFkb25seSB0YWJsZVR5cGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoaXMgdGFibGUgaXMgdGhlIHRvcCBvZiB0aGUgcGlwZWxpbmUuICovXG4gICAgcmVhZG9ubHkgaXNSYXdEYXRhOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWNlYmVyZyB0YWJsZSBmb3JtYXQgdmVyc2lvbiAoMSwgMiwgb3IgMykuIE9wdGlvbmFsIGFuZCBlbmdpbmUtc3BlY2lmaWM6XG4gICAgICogb25seSB0aGUgSWNlYmVyZyBlbmdpbmUgdmFsaWRhdGVzIGl0LiBPdGhlciBlbmdpbmVzIGlnbm9yZSBpdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBmb3JtYXRWZXJzaW9uPzogbnVtYmVyO1xuXG4gICAgLyoqIERhdGEgY29sdW1ucy4gKi9cbiAgICByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAgIC8qKiBQcmltYXJ5LWtleSBjb2x1bW4gbmFtZXMuICovXG4gICAgcmVhZG9ubHkgcHJpbWFyeUtleTogc3RyaW5nW107XG5cbiAgICAvKiogUGFydGl0aW9uIGVudHJpZXMgKGVuZ2luZS1zcGVjaWZpYyBzZW1hbnRpY3MpLiAqL1xuICAgIHJlYWRvbmx5IHBhcnRpdGlvbnM6IFBhcnRpdGlvbltdO1xuXG4gICAgLyoqIEljZWJlcmcgc29ydCBvcmRlciAob3JkZXJlZCBzb3J0IGZpZWxkcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSBpdC4gKi9cbiAgICByZWFkb25seSBzb3J0T3JkZXI6IFNvcnRGaWVsZFtdO1xuXG4gICAgLyoqIFNlY29uZGFyeSBpbmRleGVzIChQb3N0Z3JlcykuIE9wdGlvbmFsOyBvdGhlciBlbmdpbmVzIGlnbm9yZSB0aGVtLiAqL1xuICAgIHJlYWRvbmx5IGluZGV4ZXM6IEluZGV4W107XG5cbiAgICAvKipcbiAgICAgKiBFbmdpbmUgdGFibGUgcHJvcGVydGllcyBhcyBhIHN0cmluZ+KGknN0cmluZyBtYXAgKGUuZy4gSWNlYmVyZ1xuICAgICAqIGB3cml0ZS50YXJnZXQtZmlsZS1zaXplLWJ5dGVzYCwgSGl2ZSBgcGFycXVldC5jb21wcmVzc2lvbmApLiBPcHRpb25hbC5cbiAgICAgKiBPbmx5IGtleXMgd2l0aCBhIGtub3duLCBjbG9zZWQgbGVnYWwgZG9tYWluIGFyZSB2YWxpZGF0ZWQgcGVyIGVuZ2luZTtcbiAgICAgKiB1bmtub3duIGtleXMgcGFzcyB0aHJvdWdoIHVudmFsaWRhdGVkLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHRhYmxlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAgIC8qKiBVcHN0cmVhbSB0YWJsZXMgaW4gYHNjaGVtYS50YWJsZWAgZm9ybWF0LiAqL1xuICAgIHJlYWRvbmx5IGRlcGVuZHNPbjogc3RyaW5nW107XG5cbiAgICAvKiogRm9yZWlnbiBrZXlzLiAqL1xuICAgIHJlYWRvbmx5IGZvcmVpZ25LZXlzOiBGb3JlaWduS2V5W107XG59XG5cbi8qKiBBIHNjaGVtYS1kZXNjcmlwdGlvbiBmaWxlJ3Mgbm9ybWFsaXplZCBjb250ZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFEZXNjcmlwdGlvbiB7XG4gICAgLyoqIFNwZWMgdmVyc2lvbiBvZiB0aGUgZmlsZS4gKi9cbiAgICByZWFkb25seSBzcGVjVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgLyoqIEh1bWFuIGRlc2NyaXB0aW9uLiAqL1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbi8qKiBTZXZlcml0eSBvZiBhIHZpb2xhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIFZpb2xhdGlvbkxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcblxuLyoqIEEgc2luZ2xlIHZhbGlkYXRpb24gZmluZGluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlvbGF0aW9uIHtcbiAgICAvKiogU2V2ZXJpdHkuIGBlcnJvcmAgZmFpbHMgdmFsaWRhdGlvbjsgYHdhcm5pbmdgIGRvZXMgbm90LiAqL1xuICAgIHJlYWRvbmx5IGxldmVsOiBWaW9sYXRpb25MZXZlbDtcblxuICAgIC8qKiBTdGFibGUgbWFjaGluZS1yZWFkYWJsZSBydWxlIGNvZGUgKGUuZy4gYFBLX0NPTFVNTlNfRVhJU1RgKS4gKi9cbiAgICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG5cbiAgICAvKiogT3duaW5nIHNjaGVtYSwgaWYgYXBwbGljYWJsZS4gKi9cbiAgICByZWFkb25seSBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgICAvKiogT3duaW5nIHRhYmxlLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlPzogc3RyaW5nO1xuXG4gICAgLyoqIEZpZWxkIHBhdGggd2l0aGluIHRoZSBmaWxlLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nO1xuXG4gICAgLyoqIFNvdXJjZSBmaWxlIHBhdGgsIGlmIGFwcGxpY2FibGUuICovXG4gICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAgIC8qKiBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlLiAqL1xuICAgIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0IG9mIHZhbGlkYXRpbmcgYSByb290LiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICAvKiogVHJ1ZSB3aGVuIHRoZXJlIGFyZSBubyBgZXJyb3JgLWxldmVsIHZpb2xhdGlvbnMuICovXG4gICAgcmVhZG9ubHkgb2s6IGJvb2xlYW47XG5cbiAgICAvKiogQWxsIGZpbmRpbmdzLCBlcnJvcnMgYW5kIHdhcm5pbmdzLiAqL1xuICAgIHJlYWRvbmx5IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdO1xufVxuIl19
@@ -68,6 +68,12 @@
68
68
  "$ref": "#/definitions/sortField"
69
69
  }
70
70
  },
71
+ "indexes": {
72
+ "type": "array",
73
+ "items": {
74
+ "$ref": "#/definitions/index"
75
+ }
76
+ },
71
77
  "tableProperties": {
72
78
  "type": "object",
73
79
  "additionalProperties": {
@@ -115,6 +121,67 @@
115
121
  }
116
122
  }
117
123
  },
124
+ "index": {
125
+ "type": "object",
126
+ "required": [
127
+ "name",
128
+ "method",
129
+ "columns"
130
+ ],
131
+ "additionalProperties": false,
132
+ "properties": {
133
+ "name": {
134
+ "type": "string",
135
+ "minLength": 1
136
+ },
137
+ "method": {
138
+ "type": "string",
139
+ "minLength": 1
140
+ },
141
+ "unique": {
142
+ "type": "boolean"
143
+ },
144
+ "columns": {
145
+ "type": "array",
146
+ "minItems": 1,
147
+ "items": {
148
+ "$ref": "#/definitions/indexColumn"
149
+ }
150
+ },
151
+ "include": {
152
+ "type": "array",
153
+ "items": {
154
+ "type": "string",
155
+ "minLength": 1
156
+ }
157
+ },
158
+ "where": {
159
+ "type": "string",
160
+ "minLength": 1
161
+ }
162
+ }
163
+ },
164
+ "indexColumn": {
165
+ "type": "object",
166
+ "required": [
167
+ "name"
168
+ ],
169
+ "additionalProperties": false,
170
+ "properties": {
171
+ "name": {
172
+ "type": "string",
173
+ "minLength": 1
174
+ },
175
+ "sort": {
176
+ "type": "string",
177
+ "minLength": 1
178
+ },
179
+ "nulls": {
180
+ "type": "string",
181
+ "minLength": 1
182
+ }
183
+ }
184
+ },
118
185
  "sortField": {
119
186
  "type": "object",
120
187
  "required": [
@@ -29,4 +29,22 @@ export declare class Postgres18Table extends TableTypeBase {
29
29
  * @returns Every partition-related violation.
30
30
  */
31
31
  partitionViolations(): Violation[];
32
+ /**
33
+ * Postgres engine-specific rules: index validation.
34
+ *
35
+ * @returns Every engine-specific violation.
36
+ */
37
+ engineSpecificViolations(): Violation[];
38
+ /**
39
+ * Validate secondary indexes.
40
+ *
41
+ * Emits `POSTGRES_INDEX_NAME_UNIQUE`, `POSTGRES_INDEX_METHOD_VALID`,
42
+ * `POSTGRES_INDEX_COLUMN_EXISTS`, `POSTGRES_INDEX_NO_DUPLICATE_COLUMNS`,
43
+ * `POSTGRES_INDEX_UNIQUE_BTREE_ONLY`, `POSTGRES_INDEX_SORT_VALID`, and
44
+ * `POSTGRES_INDEX_NULLS_VALID`.
45
+ *
46
+ * @returns Every index-related violation.
47
+ */
48
+ private indexViolations;
49
+ private singleIndexViolations;
32
50
  }
@@ -16,6 +16,22 @@ const STRATEGIES = new Set([
16
16
  'list',
17
17
  'hash',
18
18
  ]);
19
+ const INDEX_METHODS = new Set([
20
+ 'btree',
21
+ 'hash',
22
+ 'gist',
23
+ 'spgist',
24
+ 'gin',
25
+ 'brin',
26
+ ]);
27
+ const INDEX_SORTS = new Set([
28
+ 'asc',
29
+ 'desc',
30
+ ]);
31
+ const INDEX_NULLS = new Set([
32
+ 'first',
33
+ 'last',
34
+ ]);
19
35
  /** Postgres 18 table. */
20
36
  class Postgres18Table extends table_type_1.TableTypeBase {
21
37
  /**
@@ -84,6 +100,127 @@ class Postgres18Table extends table_type_1.TableTypeBase {
84
100
  }
85
101
  return violations;
86
102
  }
103
+ /**
104
+ * Postgres engine-specific rules: index validation.
105
+ *
106
+ * @returns Every engine-specific violation.
107
+ */
108
+ engineSpecificViolations() {
109
+ return this.indexViolations();
110
+ }
111
+ /**
112
+ * Validate secondary indexes.
113
+ *
114
+ * Emits `POSTGRES_INDEX_NAME_UNIQUE`, `POSTGRES_INDEX_METHOD_VALID`,
115
+ * `POSTGRES_INDEX_COLUMN_EXISTS`, `POSTGRES_INDEX_NO_DUPLICATE_COLUMNS`,
116
+ * `POSTGRES_INDEX_UNIQUE_BTREE_ONLY`, `POSTGRES_INDEX_SORT_VALID`, and
117
+ * `POSTGRES_INDEX_NULLS_VALID`.
118
+ *
119
+ * @returns Every index-related violation.
120
+ */
121
+ indexViolations() {
122
+ const violations = [];
123
+ const { indexes, } = this.definition;
124
+ for (const duplicate of this.findDuplicates(indexes.map((index) => index.name))) {
125
+ violations.push(this.violation({
126
+ level: 'error',
127
+ code: 'POSTGRES_INDEX_NAME_UNIQUE',
128
+ field: 'indexes',
129
+ message: `duplicate index name "${duplicate}"`,
130
+ }));
131
+ }
132
+ indexes.forEach((index, position) => {
133
+ violations.push(...this.singleIndexViolations(index, position));
134
+ });
135
+ return violations;
136
+ }
137
+ /// Checks for one index entry.
138
+ singleIndexViolations(index, position) {
139
+ const violations = [];
140
+ const field = `indexes[${position}]`;
141
+ if (!INDEX_METHODS.has(index.method)) {
142
+ violations.push(this.violation({
143
+ level: 'error',
144
+ code: 'POSTGRES_INDEX_METHOD_VALID',
145
+ field: `${field}.method`,
146
+ message: `index method "${index.method}" must be one of: ${[
147
+ ...INDEX_METHODS,
148
+ ].join(', ')}`,
149
+ }));
150
+ }
151
+ if (index.unique === true && index.method !== 'btree') {
152
+ violations.push(this.violation({
153
+ level: 'error',
154
+ code: 'POSTGRES_INDEX_UNIQUE_BTREE_ONLY',
155
+ field: `${field}.unique`,
156
+ message: `a unique index must use the btree method, not "${index.method}"`,
157
+ }));
158
+ }
159
+ const keyNames = index.columns.map((column) => column.name);
160
+ for (const duplicate of this.findDuplicates(keyNames)) {
161
+ violations.push(this.violation({
162
+ level: 'error',
163
+ code: 'POSTGRES_INDEX_NO_DUPLICATE_COLUMNS',
164
+ field: `${field}.columns`,
165
+ message: `index "${index.name}" lists key column "${duplicate}" more than once`,
166
+ }));
167
+ }
168
+ for (const duplicate of this.findDuplicates(index.include)) {
169
+ violations.push(this.violation({
170
+ level: 'error',
171
+ code: 'POSTGRES_INDEX_NO_DUPLICATE_COLUMNS',
172
+ field: `${field}.include`,
173
+ message: `index "${index.name}" lists include column "${duplicate}" more than once`,
174
+ }));
175
+ }
176
+ for (const included of index.include) {
177
+ if (keyNames.includes(included)) {
178
+ violations.push(this.violation({
179
+ level: 'error',
180
+ code: 'POSTGRES_INDEX_NO_DUPLICATE_COLUMNS',
181
+ field: `${field}.include`,
182
+ message: `index "${index.name}" include column "${included}" is also a key column`,
183
+ }));
184
+ }
185
+ }
186
+ index.columns.forEach((column, columnIndex) => {
187
+ if (!this.hasColumn(column.name)) {
188
+ violations.push(this.violation({
189
+ level: 'error',
190
+ code: 'POSTGRES_INDEX_COLUMN_EXISTS',
191
+ field: `${field}.columns[${columnIndex}].name`,
192
+ message: `index key column "${column.name}" is not defined in columns`,
193
+ }));
194
+ }
195
+ if (column.sort !== undefined && !INDEX_SORTS.has(column.sort)) {
196
+ violations.push(this.violation({
197
+ level: 'error',
198
+ code: 'POSTGRES_INDEX_SORT_VALID',
199
+ field: `${field}.columns[${columnIndex}].sort`,
200
+ message: `index sort "${column.sort}" must be "asc" or "desc"`,
201
+ }));
202
+ }
203
+ if (column.nulls !== undefined && !INDEX_NULLS.has(column.nulls)) {
204
+ violations.push(this.violation({
205
+ level: 'error',
206
+ code: 'POSTGRES_INDEX_NULLS_VALID',
207
+ field: `${field}.columns[${columnIndex}].nulls`,
208
+ message: `index nulls "${column.nulls}" must be "first" or "last"`,
209
+ }));
210
+ }
211
+ });
212
+ index.include.forEach((included, includeIndex) => {
213
+ if (!this.hasColumn(included)) {
214
+ violations.push(this.violation({
215
+ level: 'error',
216
+ code: 'POSTGRES_INDEX_COLUMN_EXISTS',
217
+ field: `${field}.include[${includeIndex}]`,
218
+ message: `index include column "${included}" is not defined in columns`,
219
+ }));
220
+ }
221
+ });
222
+ return violations;
223
+ }
87
224
  }
88
225
  exports.Postgres18Table = Postgres18Table;
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtMTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQU1ILDhDQUV1QjtBQUN2QixvQ0FFa0I7QUFFbEIsTUFBTSxVQUFVLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQzVDLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILHlCQUF5QjtBQUN6QixNQUFhLGVBQWdCLFNBQVEsMEJBQWE7SUFDOUM7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ2pDLE9BQU8sSUFBQSwyQkFBbUIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG1CQUFtQjtRQUN0QixNQUFNLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sRUFDRixVQUFVLEdBQ2IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXBCLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLHlCQUF5QjtnQkFDL0IsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLE9BQU8sRUFBRSxtQ0FBbUMsU0FBUyxHQUFHO2FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDckMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQW9CLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLGtDQUFrQztvQkFDeEMsS0FBSyxFQUFFLGNBQWMsS0FBSyxRQUFRO29CQUNsQyxPQUFPLEVBQUUseUJBQXlCLFNBQVMsQ0FBQyxJQUFJLDZCQUE2QjtpQkFDaEYsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyRCxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUMzQixLQUFLLEVBQUUsT0FBTztvQkFDZCxJQUFJLEVBQUUsbUNBQW1DO29CQUN6QyxLQUFLLEVBQUUsY0FBYyxLQUFLLFFBQVE7b0JBQ2xDLE9BQU8sRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLGtFQUFrRTtpQkFDaEcsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsT0FBTyxFQUFFLGdEQUFnRDtvQkFDckQsR0FBRyxVQUFVO2lCQUNoQixDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTthQUN4QixDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUExRUQsMENBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3N0Z3JlcyAxOCB0YWJsZSB0eXBlLlxuICpcbiAqIFBvc3RncmVzIHVzZXMgZGVjbGFyYXRpdmUgcGFydGl0aW9uaW5nOiBhIHRhYmxlIGlzIHBhcnRpdGlvbmVkIGJ5IG9uZSBzdHJhdGVneVxuICogKGByYW5nZWAsIGBsaXN0YCwgb3IgYGhhc2hgKSBvdmVyIG9uZSBvciBtb3JlIGV4aXN0aW5nIGtleSBjb2x1bW5zLiBFYWNoXG4gKiBwYXJ0aXRpb24gZW50cnkgbmFtZXMgYSBrZXkgY29sdW1uIChgbmFtZWApIGFuZCB0aGUgc3RyYXRlZ3kgKGB0eXBlYCk7IGFsbFxuICogZW50cmllcyBvbiBhIHRhYmxlIG11c3Qgc2hhcmUgb25lIHN0cmF0ZWd5LlxuICovXG5cbmltcG9ydCB7XG4gICAgUGFydGl0aW9uLFxuICAgIFZpb2xhdGlvbixcbn0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICBUYWJsZVR5cGVCYXNlLFxufSBmcm9tICcuLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgaXNWYWxpZFBvc3RncmVzVHlwZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBTVFJBVEVHSUVTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ3JhbmdlJyxcbiAgICAnbGlzdCcsXG4gICAgJ2hhc2gnLFxuXSk7XG5cbi8qKiBQb3N0Z3JlcyAxOCB0YWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBQb3N0Z3JlczE4VGFibGUgZXh0ZW5kcyBUYWJsZVR5cGVCYXNlIHtcbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSBhIGNvbHVtbiB0eXBlIGFnYWluc3QgdGhlIFBvc3RncmVzIHR5cGUgcmVnaXN0cnkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUeXBlIHN0cmluZyBmcm9tIGEgY29sdW1uIGRlZmluaXRpb24uXG4gICAgICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB0eXBlIGlzIGEgdmFsaWQgUG9zdGdyZXMgMTggdHlwZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNWYWxpZENvbHVtblR5cGUodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkUG9zdGdyZXNUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBvc3RncmVzIHBhcnRpdGlvbiBydWxlcy5cbiAgICAgKlxuICAgICAqIEVtaXRzOiBgTk9fRFVQTElDQVRFX1BBUlRJVElPTlNgIChhIGtleSBjb2x1bW4gbGlzdGVkIHR3aWNlKSxcbiAgICAgKiBgUE9TVEdSRVNfUEFSVElUSU9OX0NPTFVNTl9FWElTVFNgICh0aGUga2V5IGNvbHVtbiBtdXN0IGJlIGEgZGF0YSBjb2x1bW4pLFxuICAgICAqIGBQT1NUR1JFU19QQVJUSVRJT05fU1RSQVRFR1lfVkFMSURgICh0aGUgc3RyYXRlZ3kgbXVzdCBiZSByYW5nZSAvIGxpc3QgL1xuICAgICAqIGhhc2gpLCBhbmQgYFBPU1RHUkVTX1BBUlRJVElPTl9TSU5HTEVfU1RSQVRFR1lgIChhIHRhYmxlIHBhcnRpdGlvbnMgYnkgb25lXG4gICAgICogc3RyYXRlZ3kgb25seSkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBFdmVyeSBwYXJ0aXRpb24tcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHBhcnRpdGlvblZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJ0aXRpb25zLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMocGFydGl0aW9ucy5tYXAoKHBhcnRpdGlvbikgPT4gcGFydGl0aW9uLm5hbWUpKSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnTk9fRFVQTElDQVRFX1BBUlRJVElPTlMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncGFydGl0aW9ucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGR1cGxpY2F0ZSBwYXJ0aXRpb24ga2V5IGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0cmF0ZWdpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgcGFydGl0aW9ucy5mb3JFYWNoKChwYXJ0aXRpb246IFBhcnRpdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0NvbHVtbihwYXJ0aXRpb24ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1BBUlRJVElPTl9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYHBhcnRpdGlvbiBrZXkgY29sdW1uIFwiJHtwYXJ0aXRpb24ubmFtZX1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gcGFydGl0aW9uLnR5cGUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoU1RSQVRFR0lFUy5oYXMoc3RyYXRlZ3kpKSB7XG4gICAgICAgICAgICAgICAgc3RyYXRlZ2llcy5hZGQoc3RyYXRlZ3kpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1BBUlRJVElPTl9TVFJBVEVHWV9WQUxJRCcsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgcGFydGl0aW9uc1ske2luZGV4fV0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBcIiR7cGFydGl0aW9uLnR5cGV9XCIgaXMgbm90IGEgdmFsaWQgUG9zdGdyZXMgcGFydGl0aW9uIHN0cmF0ZWd5IChyYW5nZSwgbGlzdCwgaGFzaClgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0cmF0ZWdpZXMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX1BBUlRJVElPTl9TSU5HTEVfU1RSQVRFR1knLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncGFydGl0aW9ucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYGEgcGFydGl0aW9uZWQgdGFibGUgdXNlcyBvbmUgc3RyYXRlZ3k7IGZvdW5kICR7W1xuICAgICAgICAgICAgICAgICAgICAuLi5zdHJhdGVnaWVzLFxuICAgICAgICAgICAgICAgIF0uc29ydCgpLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMtMTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGFibGUtdHlwZXMvcG9zdGdyZXMtMTgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7OztBQU9ILDhDQUV1QjtBQUN2QixvQ0FFa0I7QUFFbEIsTUFBTSxVQUFVLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQzVDLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtDQUNULENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUMvQyxPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixRQUFRO0lBQ1IsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsS0FBSztJQUNMLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCxNQUFNLFdBQVcsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDN0MsT0FBTztJQUNQLE1BQU07Q0FDVCxDQUFDLENBQUM7QUFFSCx5QkFBeUI7QUFDekIsTUFBYSxlQUFnQixTQUFRLDBCQUFhO0lBQzlDOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUEsMkJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxtQkFBbUI7UUFDdEIsTUFBTSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQ0YsVUFBVSxHQUNiLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVwQixLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RixVQUFVLENBQUMs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LE9BQU8sRUFBRSxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssNkJBQTZCO2lCQUNyRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLDhCQUE4QjtvQkFDcEMsS0FBSyxFQUFFLEdBQUcsS0FBSyxZQUFZLFlBQVksR0FBRztvQkFDMUMsT0FBTyxFQUFFLHlCQUF5QixRQUFRLDZCQUE2QjtpQkFDMUUsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFuTkQsMENBbU5DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb3N0Z3JlcyAxOCB0YWJsZSB0eXBlLlxuICpcbiAqIFBvc3RncmVzIHVzZXMgZGVjbGFyYXRpdmUgcGFydGl0aW9uaW5nOiBhIHRhYmxlIGlzIHBhcnRpdGlvbmVkIGJ5IG9uZSBzdHJhdGVneVxuICogKGByYW5nZWAsIGBsaXN0YCwgb3IgYGhhc2hgKSBvdmVyIG9uZSBvciBtb3JlIGV4aXN0aW5nIGtleSBjb2x1bW5zLiBFYWNoXG4gKiBwYXJ0aXRpb24gZW50cnkgbmFtZXMgYSBrZXkgY29sdW1uIChgbmFtZWApIGFuZCB0aGUgc3RyYXRlZ3kgKGB0eXBlYCk7IGFsbFxuICogZW50cmllcyBvbiBhIHRhYmxlIG11c3Qgc2hhcmUgb25lIHN0cmF0ZWd5LlxuICovXG5cbmltcG9ydCB7XG4gICAgSW5kZXgsXG4gICAgUGFydGl0aW9uLFxuICAgIFZpb2xhdGlvbixcbn0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgICBUYWJsZVR5cGVCYXNlLFxufSBmcm9tICcuLi90YWJsZS10eXBlJztcbmltcG9ydCB7XG4gICAgaXNWYWxpZFBvc3RncmVzVHlwZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBTVFJBVEVHSUVTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ3JhbmdlJyxcbiAgICAnbGlzdCcsXG4gICAgJ2hhc2gnLFxuXSk7XG5cbmNvbnN0IElOREVYX01FVEhPRFM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgICAnYnRyZWUnLFxuICAgICdoYXNoJyxcbiAgICAnZ2lzdCcsXG4gICAgJ3NwZ2lzdCcsXG4gICAgJ2dpbicsXG4gICAgJ2JyaW4nLFxuXSk7XG5cbmNvbnN0IElOREVYX1NPUlRTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2FzYycsXG4gICAgJ2Rlc2MnLFxuXSk7XG5cbmNvbnN0IElOREVYX05VTExTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICAgJ2ZpcnN0JyxcbiAgICAnbGFzdCcsXG5dKTtcblxuLyoqIFBvc3RncmVzIDE4IHRhYmxlLiAqL1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzMThUYWJsZSBleHRlbmRzIFRhYmxlVHlwZUJhc2Uge1xuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlIGEgY29sdW1uIHR5cGUgYWdhaW5zdCB0aGUgUG9zdGdyZXMgdHlwZSByZWdpc3RyeS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIFR5cGUgc3RyaW5nIGZyb20gYSBjb2x1bW4gZGVmaW5pdGlvbi5cbiAgICAgKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHR5cGUgaXMgYSB2YWxpZCBQb3N0Z3JlcyAxOCB0eXBlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1ZhbGlkQ29sdW1uVHlwZSh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRQb3N0Z3Jlc1R5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9zdGdyZXMgcGFydGl0aW9uIHJ1bGVzLlxuICAgICAqXG4gICAgICogRW1pdHM6IGBOT19EVVBMSUNBVEVfUEFSVElUSU9OU2AgKGEga2V5IGNvbHVtbiBsaXN0ZWQgdHdpY2UpLFxuICAgICAqIGBQT1NUR1JFU19QQVJUSVRJT05fQ09MVU1OX0VYSVNUU2AgKHRoZSBrZXkgY29sdW1uIG11c3QgYmUgYSBkYXRhIGNvbHVtbiksXG4gICAgICogYFBPU1RHUkVTX1BBUlRJVElPTl9TVFJBVEVHWV9WQUxJRGAgKHRoZSBzdHJhdGVneSBtdXN0IGJlIHJhbmdlIC8gbGlzdCAvXG4gICAgICogaGFzaCksIGFuZCBgUE9TVEdSRVNfUEFSVElUSU9OX1NJTkdMRV9TVFJBVEVHWWAgKGEgdGFibGUgcGFydGl0aW9ucyBieSBvbmVcbiAgICAgKiBzdHJhdGVneSBvbmx5KS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEV2ZXJ5IHBhcnRpdGlvbi1yZWxhdGVkIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFydGl0aW9uVmlvbGF0aW9ucygpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcnRpdGlvbnMsXG4gICAgICAgIH0gPSB0aGlzLmRlZmluaXRpb247XG5cbiAgICAgICAgZm9yIChjb25zdCBkdXBsaWNhdGUgb2YgdGhpcy5maW5kRHVwbGljYXRlcyhwYXJ0aXRpb25zLm1hcCgocGFydGl0aW9uKSA9PiBwYXJ0aXRpb24ubmFtZSkpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdOT19EVVBMSUNBVEVfUEFSVElUSU9OUycsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJ0aXRpb25zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgZHVwbGljYXRlIHBhcnRpdGlvbiBrZXkgY29sdW1uIFwiJHtkdXBsaWNhdGV9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyYXRlZ2llcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBwYXJ0aXRpb25zLmZvckVhY2goKHBhcnRpdGlvbjogUGFydGl0aW9uLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKHBhcnRpdGlvbi5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX0NPTFVNTl9FWElTVFMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYHBhcnRpdGlvbnNbJHtpbmRleH1dLm5hbWVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgcGFydGl0aW9uIGtleSBjb2x1bW4gXCIke3BhcnRpdGlvbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBwYXJ0aXRpb24udHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChTVFJBVEVHSUVTLmhhcyhzdHJhdGVneSkpIHtcbiAgICAgICAgICAgICAgICBzdHJhdGVnaWVzLmFkZChzdHJhdGVneSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX1NUUkFURUdZX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGBwYXJ0aXRpb25zWyR7aW5kZXh9XS50eXBlYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFwiJHtwYXJ0aXRpb24udHlwZX1cIiBpcyBub3QgYSB2YWxpZCBQb3N0Z3JlcyBwYXJ0aXRpb24gc3RyYXRlZ3kgKHJhbmdlLCBsaXN0LCBoYXNoKWAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3RyYXRlZ2llcy5zaXplID4gMSkge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfUEFSVElUSU9OX1NJTkdMRV9TVFJBVEVHWScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwYXJ0aXRpb25zJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYSBwYXJ0aXRpb25lZCB0YWJsZSB1c2VzIG9uZSBzdHJhdGVneTsgZm91bmQgJHtbXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0cmF0ZWdpZXMsXG4gICAgICAgICAgICAgICAgXS5zb3J0KCkuam9pbignLCAnKX1gLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9zdGdyZXMgZW5naW5lLXNwZWNpZmljIHJ1bGVzOiBpbmRleCB2YWxpZGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgZW5naW5lLXNwZWNpZmljIHZpb2xhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZW5naW5lU3BlY2lmaWNWaW9sYXRpb25zKCk6IFZpb2xhdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhWaW9sYXRpb25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGUgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBFbWl0cyBgUE9TVEdSRVNfSU5ERVhfTkFNRV9VTklRVUVgLCBgUE9TVEdSRVNfSU5ERVhfTUVUSE9EX1ZBTElEYCxcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUU2AsIGBQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OU2AsXG4gICAgICogYFBPU1RHUkVTX0lOREVYX1VOSVFVRV9CVFJFRV9PTkxZYCwgYFBPU1RHUkVTX0lOREVYX1NPUlRfVkFMSURgLCBhbmRcbiAgICAgKiBgUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSURgLlxuICAgICAqXG4gICAgICogQHJldHVybnMgRXZlcnkgaW5kZXgtcmVsYXRlZCB2aW9sYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbmRleFZpb2xhdGlvbnMoKTogVmlvbGF0aW9uW10ge1xuICAgICAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpbmRleGVzLFxuICAgICAgICB9ID0gdGhpcy5kZWZpbml0aW9uO1xuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBpbmRleC5uYW1lKSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05BTUVfVU5JUVVFJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2luZGV4ZXMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBkdXBsaWNhdGUgaW5kZXggbmFtZSBcIiR7ZHVwbGljYXRlfVwiYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgsIHBvc2l0aW9uKSA9PiB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2goLi4udGhpcy5zaW5nbGVJbmRleFZpb2xhdGlvbnMoaW5kZXgsIHBvc2l0aW9uKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cblxuICAgIC8vLyBDaGVja3MgZm9yIG9uZSBpbmRleCBlbnRyeS5cbiAgICBwcml2YXRlIHNpbmdsZUluZGV4VmlvbGF0aW9ucyhpbmRleDogSW5kZXgsIHBvc2l0aW9uOiBudW1iZXIpOiBWaW9sYXRpb25bXSB7XG4gICAgICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkID0gYGluZGV4ZXNbJHtwb3NpdGlvbn1dYDtcblxuICAgICAgICBpZiAoIUlOREVYX01FVEhPRFMuaGFzKGluZGV4Lm1ldGhvZCkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX01FVEhPRF9WQUxJRCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5tZXRob2RgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBtZXRob2QgXCIke2luZGV4Lm1ldGhvZH1cIiBtdXN0IGJlIG9uZSBvZjogJHtbXG4gICAgICAgICAgICAgICAgICAgIC4uLklOREVYX01FVEhPRFMsXG4gICAgICAgICAgICAgICAgXS5qb2luKCcsICcpfWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXgudW5pcXVlID09PSB0cnVlICYmIGluZGV4Lm1ldGhvZCAhPT0gJ2J0cmVlJykge1xuICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfVU5JUVVFX0JUUkVFX09OTFknLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0udW5pcXVlYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgYSB1bmlxdWUgaW5kZXggbXVzdCB1c2UgdGhlIGJ0cmVlIG1ldGhvZCwgbm90IFwiJHtpbmRleC5tZXRob2R9XCJgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5TmFtZXMgPSBpbmRleC5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoa2V5TmFtZXMpKSB7XG4gICAgICAgICAgICB2aW9sYXRpb25zLnB1c2godGhpcy52aW9sYXRpb24oe1xuICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9OT19EVVBMSUNBVEVfQ09MVU1OUycsXG4gICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zYCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgbGlzdHMga2V5IGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZHVwbGljYXRlIG9mIHRoaXMuZmluZER1cGxpY2F0ZXMoaW5kZXguaW5jbHVkZSkpIHtcbiAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgY29kZTogJ1BPU1RHUkVTX0lOREVYX05PX0RVUExJQ0FURV9DT0xVTU5TJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBpbmRleCBcIiR7aW5kZXgubmFtZX1cIiBsaXN0cyBpbmNsdWRlIGNvbHVtbiBcIiR7ZHVwbGljYXRlfVwiIG1vcmUgdGhhbiBvbmNlYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZWQgb2YgaW5kZXguaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKGtleU5hbWVzLmluY2x1ZGVzKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTk9fRFVQTElDQVRFX0NPTFVNTlMnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmluY2x1ZGVgLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgaW5kZXggXCIke2luZGV4Lm5hbWV9XCIgaW5jbHVkZSBjb2x1bW4gXCIke2luY2x1ZGVkfVwiIGlzIGFsc28gYSBrZXkgY29sdW1uYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNDb2x1bW4oY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9DT0xVTU5fRVhJU1RTJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5uYW1lYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGtleSBjb2x1bW4gXCIke2NvbHVtbi5uYW1lfVwiIGlzIG5vdCBkZWZpbmVkIGluIGNvbHVtbnNgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW4uc29ydCAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9TT1JUUy5oYXMoY29sdW1uLnNvcnQpKSB7XG4gICAgICAgICAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHRoaXMudmlvbGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdQT1NUR1JFU19JTkRFWF9TT1JUX1ZBTElEJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGAke2ZpZWxkfS5jb2x1bW5zWyR7Y29sdW1uSW5kZXh9XS5zb3J0YCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IHNvcnQgXCIke2NvbHVtbi5zb3J0fVwiIG11c3QgYmUgXCJhc2NcIiBvciBcImRlc2NcImAsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbi5udWxscyAhPT0gdW5kZWZpbmVkICYmICFJTkRFWF9OVUxMUy5oYXMoY29sdW1uLm51bGxzKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfTlVMTFNfVkFMSUQnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogYCR7ZmllbGR9LmNvbHVtbnNbJHtjb2x1bW5JbmRleH1dLm51bGxzYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IG51bGxzIFwiJHtjb2x1bW4ubnVsbHN9XCIgbXVzdCBiZSBcImZpcnN0XCIgb3IgXCJsYXN0XCJgLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5kZXguaW5jbHVkZS5mb3JFYWNoKChpbmNsdWRlZCwgaW5jbHVkZUluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ29sdW1uKGluY2x1ZGVkKSkge1xuICAgICAgICAgICAgICAgIHZpb2xhdGlvbnMucHVzaCh0aGlzLnZpb2xhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnUE9TVEdSRVNfSU5ERVhfQ09MVU1OX0VYSVNUUycsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBgJHtmaWVsZH0uaW5jbHVkZVske2luY2x1ZGVJbmRleH1dYCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYGluZGV4IGluY2x1ZGUgY29sdW1uIFwiJHtpbmNsdWRlZH1cIiBpcyBub3QgZGVmaW5lZCBpbiBjb2x1bW5zYCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2aW9sYXRpb25zO1xuICAgIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flexdataset",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Flexible Dataset Definition (FDD) — validator and tooling for the FDD dataset standard.",
6
6
  "author": "Rodrigo Carvajal",