@payloadcms/db-postgres 0.1.0-beta.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. package/README.md +32 -0
  2. package/dist/connect.d.ts.map +1 -1
  3. package/dist/connect.js +28 -19
  4. package/dist/createMigration.d.ts.map +1 -1
  5. package/dist/createMigration.js +29 -19
  6. package/dist/createVersion.js +2 -2
  7. package/dist/extendViteConfig.d.ts +4 -0
  8. package/dist/extendViteConfig.d.ts.map +1 -0
  9. package/dist/extendViteConfig.js +38 -0
  10. package/dist/extendWebpackConfig.d.ts +4 -0
  11. package/dist/extendWebpackConfig.d.ts.map +1 -0
  12. package/dist/extendWebpackConfig.js +45 -0
  13. package/dist/find/buildFindManyArgs.js +3 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +16 -5
  16. package/dist/init.d.ts.map +1 -1
  17. package/dist/init.js +2 -4
  18. package/dist/migrate.d.ts.map +1 -1
  19. package/dist/migrate.js +63 -39
  20. package/dist/migrateDown.d.ts +3 -0
  21. package/dist/migrateDown.d.ts.map +1 -0
  22. package/dist/migrateDown.js +71 -0
  23. package/dist/migrateFresh.d.ts +6 -0
  24. package/dist/migrateFresh.d.ts.map +1 -0
  25. package/dist/migrateFresh.js +81 -0
  26. package/dist/migrateRefresh.d.ts +6 -0
  27. package/dist/migrateRefresh.d.ts.map +1 -0
  28. package/dist/migrateRefresh.js +109 -0
  29. package/dist/migrateReset.d.ts +6 -0
  30. package/dist/migrateReset.d.ts.map +1 -0
  31. package/dist/migrateReset.js +89 -0
  32. package/dist/queries/getTableColumnFromPath.js +2 -2
  33. package/dist/schema/build.d.ts +2 -1
  34. package/dist/schema/build.d.ts.map +1 -1
  35. package/dist/schema/build.js +14 -11
  36. package/dist/schema/createIndex.d.ts +1 -1
  37. package/dist/schema/createIndex.d.ts.map +1 -1
  38. package/dist/schema/createIndex.js +12 -3
  39. package/dist/schema/traverseFields.d.ts.map +1 -1
  40. package/dist/schema/traverseFields.js +19 -14
  41. package/dist/transform/read/index.js +4 -4
  42. package/dist/types.d.ts +7 -4
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/update.d.ts.map +1 -1
  45. package/dist/update.js +51 -5
  46. package/dist/upsertRow/index.js +2 -2
  47. package/dist/utilities/createMigrationTable.d.ts.map +1 -1
  48. package/dist/utilities/createMigrationTable.js +1 -2
  49. package/dist/utilities/parseError.d.ts +5 -0
  50. package/dist/utilities/parseError.d.ts.map +1 -0
  51. package/dist/utilities/parseError.js +24 -0
  52. package/mock.js +1 -0
  53. package/package.json +5 -4
  54. package/src/index.ts +18 -5
  55. package/dist/mock.js +0 -13
  56. package/dist/webpack.d.ts +0 -3
  57. package/dist/webpack.d.ts.map +0 -1
  58. package/dist/webpack.js +0 -32
@@ -224,7 +224,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
224
224
  case 'upload':
225
225
  {
226
226
  let relationshipFields;
227
- const relationTableName = `${tableName}_relationships`;
227
+ const relationTableName = `${tableName}_rels`;
228
228
  const newCollectionPath = pathSegments.slice(1).join('.');
229
229
  const aliasRelationshipTableName = (0, _uuid.v4)();
230
230
  const aliasRelationshipTable = (0, _pgcore.alias)(adapter.tables[relationTableName], aliasRelationshipTableName);
@@ -330,4 +330,4 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
330
330
  throw new _errors.APIError(`Cannot find field for path at ${fieldPath}`);
331
331
  };
332
332
 
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxuICB2YWx1ZTogdW5rbm93blxufVxuXG50eXBlIFRhYmxlQ29sdW1uID0ge1xuICBjb2x1bW5OYW1lPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W11cbiAgZmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YVxuICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZT86ICh2YWw6IHVua25vd24pID0+IHN0cmluZ1xuICBwYXRoU2VnbWVudHM/OiBzdHJpbmdbXVxuICByYXdDb2x1bW4/OiBTUUxcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxufVxuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBhbGlhc1RhYmxlPzogR2VuZXJpY1RhYmxlXG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgc2VsZWN0RmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBHZW5lcmljQ29sdW1uPlxuICB0YWJsZU5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggdG8gdGFibGUgYW5kIGNvbHVtbiBuYW1lXG4gKiBBZGRzIHRhYmxlcyB0byBgam9pbmBcbiAqIEByZXR1cm5zIFRhYmxlQ29sdW1uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYWJsZUNvbHVtbkZyb21QYXRoID0gKHtcbiAgYWRhcHRlcixcbiAgYWxpYXNUYWJsZSxcbiAgY29sbGVjdGlvblBhdGgsXG4gIGNvbHVtblByZWZpeCA9ICcnLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbn06IEFyZ3MpOiBUYWJsZUNvbHVtbiA9PiB7XG4gIGNvbnN0IGZpZWxkUGF0aCA9IGluY29taW5nU2VnbWVudHNbMF1cbiAgbGV0IGxvY2FsZSA9IGluY29taW5nTG9jYWxlXG4gIGNvbnN0IGZpZWxkID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcyBhcyBGaWVsZFtdKS5maW5kKFxuICAgIChmaWVsZFRvRmluZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZFRvRmluZCkgJiYgZmllbGRUb0ZpbmQubmFtZSA9PT0gZmllbGRQYXRoLFxuICApIGFzIEZpZWxkIHwgVGFiQXNGaWVsZFxuICBsZXQgbmV3VGFibGVOYW1lID0gdGFibGVOYW1lXG5cbiAgaWYgKCFmaWVsZCAmJiBmaWVsZFBhdGggPT09ICdpZCcpIHtcbiAgICBzZWxlY3RGaWVsZHMuaWQgPSBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLmlkXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6ICdpZCcsXG4gICAgICBjb25zdHJhaW50cyxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgfSxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgIGpvaW5zW3RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXg6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9X2AsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX2xvY2FsZSwgbG9jYWxlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgICAgICAgY29uc3QgaGFzQmxvY2tGaWVsZCA9IGZpZWxkLmJsb2Nrcy5zb21lKChibG9jaykgPT4ge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICBjb25zdCBibG9ja0NvbnN0cmFpbnRzID0gW11cbiAgICAgICAgICBjb25zdCBibG9ja1NlbGVjdEZpZWxkcyA9IHt9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBmaW5lLCBub3QgZXZlcnkgYmxvY2sgd2lsbCBoYXZlIHRoZSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGJsb2NrVGFibGVDb2x1bW4gPSByZXN1bHRcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLmNvbmNhdChibG9ja0NvbnN0cmFpbnRzKVxuICAgICAgICAgIHNlbGVjdEZpZWxkcyA9IHsgLi4uc2VsZWN0RmllbGRzLCAuLi5ibG9ja1NlbGVjdEZpZWxkcyB9XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICAgIGlmIChoYXNCbG9ja0ZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGJsb2NrVGFibGVDb2x1bW4uY29sdW1uTmFtZSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQ6IGJsb2NrVGFibGVDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICAgIHJhd0NvbHVtbjogYmxvY2tUYWJsZUNvbHVtbi5yYXdDb2x1bW4sXG4gICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgbGV0IHJlbGF0aW9uc2hpcEZpZWxkc1xuICAgICAgICBjb25zdCByZWxhdGlvblRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fcmVsYXRpb25zaGlwc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG5cbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUgPSB1dWlkKClcbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSA9IGFsaWFzKFxuICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3JlbGF0aW9uVGFibGVOYW1lXSxcbiAgICAgICAgICBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEpvaW4gaW4gdGhlIHJlbGF0aW9uc2hpcHMgdGFibGVcbiAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgY29uZGl0aW9uOiBlcShcbiAgICAgICAgICAgIChhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0pLmlkLFxuICAgICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZS5wYXJlbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgfSlcblxuICAgICAgICBzZWxlY3RGaWVsZHNbYCR7cmVsYXRpb25UYWJsZU5hbWV9LnBhdGhgXSA9IGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aFxuXG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdwYXRoJyxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIC8vIElmIGxvY2FsaXplZCwgd2UgZ28gdG8gbG9jYWxpemVkIHRhYmxlIGFuZCBzZXQgYWxpYXNUYWJsZSB0byB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIHNvIGl0IGlzIG5vdCBwaWNrZWQgdXAgYmVsb3cgdG8gYmUgdXNlZCBhcyB0YXJnZXRUYWJsZVxuICAgICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXVxuXG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEocGFyZW50VGFibGUuaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKVxuXG4gICAgICAgICAgICBhbGlhc1RhYmxlID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRhcmdldFRhYmxlID0gYWxpYXNUYWJsZSB8fCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdXG5cbiAgICAgICAgICBzZWxlY3RGaWVsZHNbYCR7bmV3VGFibGVOYW1lfS4ke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF0gPVxuICAgICAgICAgICAgdGFyZ2V0VGFibGVbYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1gXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgIHRhYmxlOiB0YXJnZXRUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgQVBJRXJyb3IoYENhbm5vdCBmaW5kIGZpZWxkIGZvciBwYXRoIGF0ICR7ZmllbGRQYXRofWApXG59XG4iXSwibmFtZXMiOlsiZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCIsImFkYXB0ZXIiLCJhbGlhc1RhYmxlIiwiY29sbGVjdGlvblBhdGgiLCJjb2x1bW5QcmVmaXgiLCJjb25zdHJhaW50cyIsImZpZWxkcyIsImpvaW5BbGlhc2VzIiwiam9pbnMiLCJsb2NhbGUiLCJpbmNvbWluZ0xvY2FsZSIsInBhdGhTZWdtZW50cyIsImluY29taW5nU2VnbWVudHMiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJmaWVsZFBhdGgiLCJmaWVsZCIsImZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyIsImZpbmQiLCJmaWVsZFRvRmluZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsInRhYkhhc05hbWUiLCJlcSIsIl9wYXJlbnRJRCIsInB1c2giLCJ2YWx1ZSIsInRvU25ha2VDYXNlIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJoYXNCbG9ja0ZpZWxkIiwiYmxvY2tzIiwic29tZSIsImJsb2NrIiwic2x1ZyIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsInV1aWQiLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlIiwiYWxpYXMiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwic3FsIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtEdkJBOzs7ZUFBQUE7Ozs0QkE5Q2dCO3dCQUNQO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBd0NwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxjQUFjLEVBQUUsRUFDaEJDLE1BQU0sRUFDTkMsV0FBVyxFQUNYQyxLQUFLLEVBQ0xDLFFBQVFDLGNBQWMsRUFDdEJDLGNBQWNDLGdCQUFnQixFQUM5QkMsWUFBWSxFQUNaQyxTQUFTLEVBQ0o7SUFDTCxNQUFNQyxZQUFZSCxnQkFBZ0Is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
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxuICB2YWx1ZTogdW5rbm93blxufVxuXG50eXBlIFRhYmxlQ29sdW1uID0ge1xuICBjb2x1bW5OYW1lPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzOiBDb25zdHJhaW50W11cbiAgZmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YVxuICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZT86ICh2YWw6IHVua25vd24pID0+IHN0cmluZ1xuICBwYXRoU2VnbWVudHM/OiBzdHJpbmdbXVxuICByYXdDb2x1bW4/OiBTUUxcbiAgdGFibGU6IEdlbmVyaWNUYWJsZVxufVxuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBhbGlhc1RhYmxlPzogR2VuZXJpY1RhYmxlXG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgc2VsZWN0RmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBHZW5lcmljQ29sdW1uPlxuICB0YWJsZU5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUcmFuc2Zvcm1zIHBhdGggdG8gdGFibGUgYW5kIGNvbHVtbiBuYW1lXG4gKiBBZGRzIHRhYmxlcyB0byBgam9pbmBcbiAqIEByZXR1cm5zIFRhYmxlQ29sdW1uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRUYWJsZUNvbHVtbkZyb21QYXRoID0gKHtcbiAgYWRhcHRlcixcbiAgYWxpYXNUYWJsZSxcbiAgY29sbGVjdGlvblBhdGgsXG4gIGNvbHVtblByZWZpeCA9ICcnLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbn06IEFyZ3MpOiBUYWJsZUNvbHVtbiA9PiB7XG4gIGNvbnN0IGZpZWxkUGF0aCA9IGluY29taW5nU2VnbWVudHNbMF1cbiAgbGV0IGxvY2FsZSA9IGluY29taW5nTG9jYWxlXG4gIGNvbnN0IGZpZWxkID0gZmxhdHRlblRvcExldmVsRmllbGRzKGZpZWxkcyBhcyBGaWVsZFtdKS5maW5kKFxuICAgIChmaWVsZFRvRmluZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZFRvRmluZCkgJiYgZmllbGRUb0ZpbmQubmFtZSA9PT0gZmllbGRQYXRoLFxuICApIGFzIEZpZWxkIHwgVGFiQXNGaWVsZFxuICBsZXQgbmV3VGFibGVOYW1lID0gdGFibGVOYW1lXG5cbiAgaWYgKCFmaWVsZCAmJiBmaWVsZFBhdGggPT09ICdpZCcpIHtcbiAgICBzZWxlY3RGaWVsZHMuaWQgPSBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLmlkXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbHVtbk5hbWU6ICdpZCcsXG4gICAgICBjb25zdHJhaW50cyxcbiAgICAgIGZpZWxkOiB7XG4gICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgfSxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRUYWJsZUNvbHVtbkZyb21QYXRoKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICBzZWxlY3RGaWVsZHMsXG4gICAgICAgICAgdGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgIGpvaW5zW3RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXg6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9X2AsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX2xvY2FsZSwgbG9jYWxlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKGxvY2FsZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgICAgICAgY29uc3QgaGFzQmxvY2tGaWVsZCA9IGZpZWxkLmJsb2Nrcy5zb21lKChibG9jaykgPT4ge1xuICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICBjb25zdCBibG9ja0NvbnN0cmFpbnRzID0gW11cbiAgICAgICAgICBjb25zdCBibG9ja1NlbGVjdEZpZWxkcyA9IHt9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBmaW5lLCBub3QgZXZlcnkgYmxvY2sgd2lsbCBoYXZlIHRoZSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGJsb2NrVGFibGVDb2x1bW4gPSByZXN1bHRcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzLmNvbmNhdChibG9ja0NvbnN0cmFpbnRzKVxuICAgICAgICAgIHNlbGVjdEZpZWxkcyA9IHsgLi4uc2VsZWN0RmllbGRzLCAuLi5ibG9ja1NlbGVjdEZpZWxkcyB9XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGFuZChcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEoXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0pXG4gICAgICAgIGlmIChoYXNCbG9ja0ZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGJsb2NrVGFibGVDb2x1bW4uY29sdW1uTmFtZSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQ6IGJsb2NrVGFibGVDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICAgIHJhd0NvbHVtbjogYmxvY2tUYWJsZUNvbHVtbi5yYXdDb2x1bW4sXG4gICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgbGV0IHJlbGF0aW9uc2hpcEZpZWxkc1xuICAgICAgICBjb25zdCByZWxhdGlvblRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG5cbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUgPSB1dWlkKClcbiAgICAgICAgY29uc3QgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSA9IGFsaWFzKFxuICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3JlbGF0aW9uVGFibGVOYW1lXSxcbiAgICAgICAgICBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSxcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEpvaW4gaW4gdGhlIHJlbGF0aW9uc2hpcHMgdGFibGVcbiAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgY29uZGl0aW9uOiBlcShcbiAgICAgICAgICAgIChhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0pLmlkLFxuICAgICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZS5wYXJlbnQsXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgfSlcblxuICAgICAgICBzZWxlY3RGaWVsZHNbYCR7cmVsYXRpb25UYWJsZU5hbWV9LnBhdGhgXSA9IGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aFxuXG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIGNvbHVtbk5hbWU6ICdwYXRoJyxcbiAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB2YWx1ZTogZmllbGQubmFtZSxcbiAgICAgICAgfSlcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIC8vIElmIGxvY2FsaXplZCwgd2UgZ28gdG8gbG9jYWxpemVkIHRhYmxlIGFuZCBzZXQgYWxpYXNUYWJsZSB0byB1bmRlZmluZWRcbiAgICAgICAgICAgIC8vIHNvIGl0IGlzIG5vdCBwaWNrZWQgdXAgYmVsb3cgdG8gYmUgdXNlZCBhcyB0YXJnZXRUYWJsZVxuICAgICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXVxuXG4gICAgICAgICAgICBqb2luc1tuZXdUYWJsZU5hbWVdID0gZXEocGFyZW50VGFibGUuaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKVxuXG4gICAgICAgICAgICBhbGlhc1RhYmxlID0gdW5kZWZpbmVkXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbG9jYWxlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHRhcmdldFRhYmxlID0gYWxpYXNUYWJsZSB8fCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdXG5cbiAgICAgICAgICBzZWxlY3RGaWVsZHNbYCR7bmV3VGFibGVOYW1lfS4ke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF0gPVxuICAgICAgICAgICAgdGFyZ2V0VGFibGVbYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1gXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWU6IGAke2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cyxcbiAgICAgICAgICAgIHRhYmxlOiB0YXJnZXRUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgQVBJRXJyb3IoYENhbm5vdCBmaW5kIGZpZWxkIGZvciBwYXRoIGF0ICR7ZmllbGRQYXRofWApXG59XG4iXSwibmFtZXMiOlsiZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCIsImFkYXB0ZXIiLCJhbGlhc1RhYmxlIiwiY29sbGVjdGlvblBhdGgiLCJjb2x1bW5QcmVmaXgiLCJjb25zdHJhaW50cyIsImZpZWxkcyIsImpvaW5BbGlhc2VzIiwiam9pbnMiLCJsb2NhbGUiLCJpbmNvbWluZ0xvY2FsZSIsInBhdGhTZWdtZW50cyIsImluY29taW5nU2VnbWVudHMiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJmaWVsZFBhdGgiLCJmaWVsZCIsImZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyIsImZpbmQiLCJmaWVsZFRvRmluZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsInRhYkhhc05hbWUiLCJlcSIsIl9wYXJlbnRJRCIsInB1c2giLCJ2YWx1ZSIsInRvU25ha2VDYXNlIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJoYXNCbG9ja0ZpZWxkIiwiYmxvY2tzIiwic29tZSIsImJsb2NrIiwic2x1ZyIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsInV1aWQiLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlIiwiYWxpYXMiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwic3FsIiwicmF3IiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtEdkJBOzs7ZUFBQUE7Ozs0QkE5Q2dCO3dCQUNQO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBd0NwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxjQUFjLEVBQUUsRUFDaEJDLE1BQU0sRUFDTkMsV0FBVyxFQUNYQyxLQUFLLEVBQ0xDLFFBQVFDLGNBQWMsRUFDdEJDLGNBQWNDLGdCQUFnQixFQUM5QkMsWUFBWSxFQUNaQyxTQUFTLEVBQ0o7SUFDTCxNQUFNQyxZQUFZSCxnQkFBZ0IsQ0FBQyxFQUFF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
@@ -9,6 +9,7 @@ type Args = {
9
9
  disableUnique: boolean;
10
10
  fields: Field[];
11
11
  rootRelationsToBuild?: Map<string, string>;
12
+ rootRelationships?: Set<string>;
12
13
  rootTableIDColType?: string;
13
14
  rootTableName?: string;
14
15
  tableName: string;
@@ -17,6 +18,6 @@ type Args = {
17
18
  type Result = {
18
19
  relationsToBuild: Map<string, string>;
19
20
  };
20
- export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, buildRelationships, disableUnique, fields, rootRelationsToBuild, rootTableIDColType, rootTableName, tableName, timestamps, }: Args) => Result;
21
+ export declare const buildTable: ({ adapter, baseColumns, baseExtraConfig, buildRelationships, disableUnique, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName, tableName, timestamps, }: Args) => Result;
21
22
  export {};
22
23
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAgB1C,OAAO,KAAK,EAAE,cAAc,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAK7E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,GAAG,uBAAuB,CAAC,CAAA;IAClG,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,UAAU,0KAYpB,IAAI,KAAG,MA+QT,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schema/build.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAgB1C,OAAO,KAAK,EAAE,cAAc,EAAgB,eAAe,EAAE,MAAM,UAAU,CAAA;AAK7E,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,GAAG,uBAAuB,CAAC,CAAA;IAClG,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,UAAU,6LAapB,IAAI,KAAG,MA+QT,CAAA"}
@@ -19,7 +19,7 @@ function _interop_require_default(obj) {
19
19
  default: obj
20
20
  };
21
21
  }
22
- const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRelationships, disableUnique = false, fields, rootRelationsToBuild, rootTableIDColType, rootTableName, tableName, timestamps })=>{
22
+ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRelationships, disableUnique = false, fields, rootRelationsToBuild, rootRelationships, rootTableIDColType, rootTableName, tableName, timestamps })=>{
23
23
  const columns = baseColumns;
24
24
  const indexes = {};
25
25
  let hasLocalizedField = false;
@@ -30,8 +30,10 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRela
30
30
  const localesIndexes = {};
31
31
  let localesTable;
32
32
  let numbersTable;
33
- const relationships = new Set();
33
+ // Relationships to the base collection
34
+ const relationships = rootRelationships || new Set();
34
35
  let relationshipsTable;
36
+ // Drizzle relations
35
37
  const relationsToBuild = new Map();
36
38
  const idField = fields.find((field)=>(0, _types.fieldAffectsData)(field) && field.name === 'id');
37
39
  let idColType = 'integer';
@@ -177,14 +179,15 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRela
177
179
  onDelete: 'cascade'
178
180
  });
179
181
  });
180
- const relationshipsTableName = `${tableName}_relationships`;
182
+ const relationshipsTableName = `${tableName}_rels`;
181
183
  relationshipsTable = (0, _pgcore.pgTable)(relationshipsTableName, relationshipColumns, (cols)=>{
182
- const result = {};
184
+ const result = {
185
+ order: (0, _pgcore.index)('order_idx').on(cols.order),
186
+ parentIdx: (0, _pgcore.index)('parent_idx').on(cols.parent),
187
+ pathIdx: (0, _pgcore.index)('path_idx').on(cols.path)
188
+ };
183
189
  if (hasLocalizedRelationshipField) {
184
190
  result.localeIdx = (0, _pgcore.index)('locale_idx').on(cols.locale);
185
- result.parentPathOrderLocale = (0, _pgcore.unique)(`${relationshipsTableName}_parent_id_path_order_locale_unique`).on(cols.parent, cols.path, cols.order, cols.locale);
186
- } else {
187
- result.parentPathOrder = (0, _pgcore.unique)(`${relationshipsTableName}_parent_id_path_order_unique`).on(cols.parent, cols.path, cols.order);
188
191
  }
189
192
  return result;
190
193
  });
@@ -198,7 +201,7 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRela
198
201
  references: [
199
202
  table.id
200
203
  ],
201
- relationName: '_relationships'
204
+ relationName: '_rels'
202
205
  })
203
206
  };
204
207
  relationships.forEach((relationTo)=>{
@@ -230,8 +233,8 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRela
230
233
  result._numbers = many(numbersTable);
231
234
  }
232
235
  if (relationships.size && relationshipsTable) {
233
- result._relationships = many(relationshipsTable, {
234
- relationName: '_relationships'
236
+ result._rels = many(relationshipsTable, {
237
+ relationName: '_rels'
235
238
  });
236
239
  }
237
240
  return result;
@@ -242,4 +245,4 @@ const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, buildRela
242
245
  };
243
246
  };
244
247
 
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBudW1lcmljLFxuICBwZ1RhYmxlLFxuICBzZXJpYWwsXG4gIHRpbWVzdGFtcCxcbiAgdW5pcXVlLFxuICB2YXJjaGFyLFxufSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgdG9TbmFrZUNhc2UgZnJvbSAndG8tc25ha2UtY2FzZSdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1ucywgR2VuZXJpY1RhYmxlLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgcGFyZW50SURDb2x1bW5NYXAgfSBmcm9tICcuL3BhcmVudElEQ29sdW1uTWFwJ1xuaW1wb3J0IHsgdHJhdmVyc2VGaWVsZHMgfSBmcm9tICcuL3RyYXZlcnNlRmllbGRzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBiYXNlQ29sdW1ucz86IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgYmFzZUV4dHJhQ29uZmlnPzogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlcj5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlPzogc3RyaW5nXG4gIHJvb3RUYWJsZU5hbWU/OiBzdHJpbmdcbiAgdGFibGVOYW1lOiBzdHJpbmdcbiAgdGltZXN0YW1wcz86IGJvb2xlYW5cbn1cblxudHlwZSBSZXN1bHQgPSB7XG4gIHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz5cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkVGFibGUgPSAoe1xuICBhZGFwdGVyLFxuICBiYXNlQ29sdW1ucyA9IHt9LFxuICBiYXNlRXh0cmFDb25maWcgPSB7fSxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkcyxcbiAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgcm9vdFRhYmxlTmFtZSxcbiAgdGFibGVOYW1lLFxuICB0aW1lc3RhbXBzLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSBiYXNlQ29sdW1uc1xuICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj4gPSB7fVxuXG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlXG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG4gIGxldCByZWxhdGlvbnNoaXBzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIGNvbnN0IHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKClcblxuICBjb25zdCBpZEZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnKVxuICBsZXQgaWRDb2xUeXBlID0gJ2ludGVnZXInXG5cbiAgaWYgKGlkRmllbGQpIHtcbiAgICBpZiAoaWRGaWVsZC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWRDb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICBjb2x1bW5zLmlkID0gbnVtZXJpYygnaWQnKS5wcmltYXJ5S2V5KClcbiAgICB9XG5cbiAgICBpZiAoaWRGaWVsZC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIGlkQ29sVHlwZSA9ICd2YXJjaGFyJ1xuICAgICAgY29sdW1ucy5pZCA9IHZhcmNoYXIoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbHVtbnMuaWQgPSBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpXG4gIH1cblxuICA7KHtcbiAgICBoYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWU6IHJvb3RUYWJsZU5hbWUgfHwgdGFibGVOYW1lLFxuICB9KSlcblxuICBpZiAodGltZXN0YW1wcykge1xuICAgIGNvbHVtbnMuY3JlYXRlZEF0ID0gdGltZXN0YW1wKCdjcmVhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgICBjb2x1bW5zLnVwZGF0ZWRBdCA9IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHtcbiAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgd2l0aFRpbWV6b25lOiB0cnVlLFxuICAgIH0pXG4gICAgICAuZGVmYXVsdE5vdygpXG4gICAgICAubm90TnVsbCgpXG4gIH1cblxuICBjb25zdCB0YWJsZSA9IHBnVGFibGUodGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnID0gT2JqZWN0LmVudHJpZXMoYmFzZUV4dHJhQ29uZmlnKS5yZWR1Y2UoKGNvbmZpZywgW2tleSwgZnVuY10pID0+IHtcbiAgICAgIGNvbmZpZ1trZXldID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIH0sIHt9KVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGluZGV4ZXMpLnJlZHVjZSgoYWNjLCBbY29sTmFtZSwgZnVuY10pID0+IHtcbiAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBleHRyYUNvbmZpZylcbiAgfSlcblxuICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdID0gdGFibGVcblxuICBpZiAoaGFzTG9jYWxpemVkRmllbGQpIHtcbiAgICBjb25zdCBsb2NhbGVUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2xvY2FsZXNgXG4gICAgbG9jYWxlc0NvbHVtbnMuaWQgPSBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgIGxvY2FsZXNDb2x1bW5zLl9wYXJlbnRJRCA9IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgLm5vdE51bGwoKVxuXG4gICAgbG9jYWxlc1RhYmxlID0gcGdUYWJsZShsb2NhbGVUYWJsZU5hbWUsIGxvY2FsZXNDb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGxvY2FsZXNJbmRleGVzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbG9jYWxlUGFyZW50OiB1bmlxdWUoYCR7bG9jYWxlVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50X2lkX3VuaXF1ZWApLm9uKFxuICAgICAgICAgICAgY29scy5fbG9jYWxlLFxuICAgICAgICAgICAgY29scy5fcGFyZW50SUQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbG9jYWxlVGFibGVOYW1lXSA9IGxvY2FsZXNUYWJsZVxuXG4gICAgY29uc3QgbG9jYWxlc1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGxvY2FsZXNUYWJsZSwgKHsgb25lIH0pID0+ICh7XG4gICAgICBfcGFyZW50SUQ6IG9uZSh0YWJsZSwge1xuICAgICAgICBmaWVsZHM6IFtsb2NhbGVzVGFibGUuX3BhcmVudElEXSxcbiAgICAgICAgcmVmZXJlbmNlczogW3RhYmxlLmlkXSxcbiAgICAgIH0pLFxuICAgIH0pKVxuXG4gICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2xvY2FsZVRhYmxlTmFtZX1gXSA9IGxvY2FsZXNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X251bWJlcnNgXG4gICAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgbnVtYmVyOiBudW1lcmljKCdudW1iZXInKSxcbiAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAubm90TnVsbCgpLFxuICAgICAgcGF0aDogdmFyY2hhcigncGF0aCcpLm5vdE51bGwoKSxcbiAgICB9XG5cbiAgICBpZiAoaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSB7XG4gICAgICBjb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICB9XG5cbiAgICBudW1iZXJzVGFibGUgPSBwZ1RhYmxlKG51bWJlcnNUYWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBJbmRleEJ1aWxkZXI+ID0ge1xuICAgICAgICBvcmRlclBhcmVudElkeDogaW5kZXgoJ29yZGVyX3BhcmVudF9pZHgnKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleCgnbnVtYmVyX2lkeCcpLm9uKGNvbHMubnVtYmVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgIGluZGV4ZXMubG9jYWxlUGFyZW50ID0gaW5kZXgoJ2xvY2FsZV9wYXJlbnQnKS5vbihjb2xzLmxvY2FsZSwgY29scy5wYXJlbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleGVzXG4gICAgfSlcblxuICAgIGFkYXB0ZXIudGFibGVzW251bWJlcnNUYWJsZU5hbWVdID0gbnVtYmVyc1RhYmxlXG5cbiAgICBjb25zdCBudW1iZXJzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobnVtYmVyc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW251bWJlcnNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bnVtYmVyc1RhYmxlTmFtZX1gXSA9IG51bWJlcnNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGJ1aWxkUmVsYXRpb25zaGlwcykge1xuICAgIGlmIChyZWxhdGlvbnNoaXBzLnNpemUpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKSxcbiAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtpZENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICBwYXRoOiB2YXJjaGFyKCdwYXRoJykubm90TnVsbCgpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQ29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgICB9XG5cbiAgICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocmVsYXRpb25UbykgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRSZWxhdGlvblRvID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgbGV0IGNvbFR5cGUgPSAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbGF0aW9uc2hpcHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IHBnVGFibGUocmVsYXRpb25zaGlwc1RhYmxlTmFtZSwgcmVsYXRpb25zaGlwQ29sdW1ucywgKGNvbHMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG5cbiAgICAgICAgaWYgKGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSB7XG4gICAgICAgICAgcmVzdWx0LmxvY2FsZUlkeCA9IGluZGV4KCdsb2NhbGVfaWR4Jykub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgcmVzdWx0LnBhcmVudFBhdGhPcmRlckxvY2FsZSA9IHVuaXF1ZShcbiAgICAgICAgICAgIGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhcmVudF9pZF9wYXRoX29yZGVyX2xvY2FsZV91bmlxdWVgLFxuICAgICAgICAgICkub24oY29scy5wYXJlbnQsIGNvbHMucGF0aCwgY29scy5vcmRlciwgY29scy5sb2NhbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnBhcmVudFBhdGhPcmRlciA9IHVuaXF1ZShcbiAgICAgICAgICAgIGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhcmVudF9pZF9wYXRoX29yZGVyX3VuaXF1ZWAsXG4gICAgICAgICAgKS5vbihjb2xzLnBhcmVudCwgY29scy5wYXRoLCBjb2xzLm9yZGVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci50YWJsZXNbcmVsYXRpb25zaGlwc1RhYmxlTmFtZV0gPSByZWxhdGlvbnNoaXBzVGFibGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwc1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHJlbGF0aW9uc2hpcHNUYWJsZSwgKHsgb25lIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG9uZSh0YWJsZSwge1xuICAgICAgICAgICAgZmllbGRzOiBbcmVsYXRpb25zaGlwc1RhYmxlLnBhcmVudF0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgICAgICAgcmVsYXRpb25OYW1lOiAnX3JlbGF0aW9uc2hpcHMnLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVsYXRlZFRhYmxlTmFtZSA9IHRvU25ha2VDYXNlKHJlbGF0aW9uVG8pXG4gICAgICAgICAgY29uc3QgaWRDb2x1bW5OYW1lID0gYCR7cmVsYXRpb25Ub31JRGBcbiAgICAgICAgICByZXN1bHRbaWRDb2x1bW5OYW1lXSA9IG9uZShhZGFwdGVyLnRhYmxlc1tyZWxhdGVkVGFibGVOYW1lXSwge1xuICAgICAgICAgICAgZmllbGRzOiBbcmVsYXRpb25zaGlwc1RhYmxlW2lkQ29sdW1uTmFtZV1dLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0pXG5cbiAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfWBdID0gcmVsYXRpb25zaGlwc1RhYmxlUmVsYXRpb25zXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnModGFibGUsICh7IG1hbnkgfSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7fVxuXG4gICAgcmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgfSlcblxuICAgIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShsb2NhbGVzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVsYXRpb25zaGlwcyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxhdGlvbnNoaXBzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IHJlbGF0aW9uc1RvQnVpbGQgfVxufVxuIl0sIm5hbWVzIjpbImJ1aWxkVGFibGUiLCJhZGFwdGVyIiwiYmFzZUNvbHVtbnMiLCJiYXNlRXh0cmFDb25maWciLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJkaXNhYmxlVW5pcXVlIiwiZmllbGRzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwidGFibGVOYW1lIiwidGltZXN0YW1wcyIsImNvbHVtbnMiLCJpbmRleGVzIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlOdW1iZXJGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJsb2NhbGVzVGFibGUiLCJudW1iZXJzVGFibGUiLCJyZWxhdGlvbnNoaXBzIiwiU2V0IiwicmVsYXRpb25zaGlwc1RhYmxlIiwicmVsYXRpb25zVG9CdWlsZCIsIk1hcCIsImlkRmllbGQiLCJmaW5kIiwiZmllbGQiLCJmaWVsZEFmZmVjdHNEYXRhIiwibmFtZSIsImlkQ29sVHlwZSIsInR5cGUiLCJpZCIsIm51bWVyaWMiLCJwcmltYXJ5S2V5IiwidmFyY2hhciIsInNlcmlhbCIsInRyYXZlcnNlRmllbGRzIiwibmV3VGFibGVOYW1lIiwicGFyZW50VGFibGVOYW1lIiwiY3JlYXRlZEF0IiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImRlZmF1bHROb3ciLCJub3ROdWxsIiwidXBkYXRlZEF0IiwidGFibGUiLCJwZ1RhYmxlIiwiY29scyIsImV4dHJhQ29uZmlnIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsImNvbmZpZyIsImtleSIsImZ1bmMiLCJhY2MiLCJjb2xOYW1lIiwidGFibGVzIiwibG9jYWxlVGFibGVOYW1lIiwiX2xvY2FsZSIsImVudW1zIiwiZW51bV9fbG9jYWxlcyIsIl9wYXJlbnRJRCIsInBhcmVudElEQ29sdW1uTWFwIiwicmVmZXJlbmNlcyIsIm9uRGVsZXRlIiwiX2xvY2FsZVBhcmVudCIsInVuaXF1ZSIsIm9uIiwibG9jYWxlc1RhYmxlUmVsYXRpb25zIiwicmVsYXRpb25zIiwib25lIiwibnVtYmVyc1RhYmxlTmFtZSIsIm51bWJlciIsIm9yZGVyIiwiaW50ZWdlciIsInBhcmVudCIsInBhdGgiLCJsb2NhbGUiLCJvcmRlclBhcmVudElkeCIsImluZGV4IiwibnVtYmVySWR4IiwibG9jYWxlUGFyZW50IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJ0b1NuYWtlQ2FzZSIsImNvbFR5cGUiLCJyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEIiwicGF5bG9hZCIsImNvbGxlY3Rpb25zIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsImxvY2FsZUlkeCIsInBhcmVudFBhdGhPcmRlckxvY2FsZSIsInBhcmVudFBhdGhPcmRlciIsInJlbGF0aW9uc2hpcHNUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9uTmFtZSIsInJlbGF0ZWRUYWJsZU5hbWUiLCJpZENvbHVtbk5hbWUiLCJ0YWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJ2YWwiLCJfbG9jYWxlcyIsIl9udW1iZXJzIiwiX3JlbGF0aW9uc2hpcHMiXSwibWFwcGluZ3MiOiJBQUFB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
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBudW1lcmljLFxuICBwZ1RhYmxlLFxuICBzZXJpYWwsXG4gIHRpbWVzdGFtcCxcbiAgdW5pcXVlLFxuICB2YXJjaGFyLFxufSBmcm9tICdkcml6emxlLW9ybS9wZy1jb3JlJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5pbXBvcnQgdG9TbmFrZUNhc2UgZnJvbSAndG8tc25ha2UtY2FzZSdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1ucywgR2VuZXJpY1RhYmxlLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgcGFyZW50SURDb2x1bW5NYXAgfSBmcm9tICcuL3BhcmVudElEQ29sdW1uTWFwJ1xuaW1wb3J0IHsgdHJhdmVyc2VGaWVsZHMgfSBmcm9tICcuL3RyYXZlcnNlRmllbGRzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBiYXNlQ29sdW1ucz86IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgYmFzZUV4dHJhQ29uZmlnPzogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlcj5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc2hpcHM/OiBTZXQ8c3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU/OiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICB0aW1lc3RhbXBzPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRUYWJsZSA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJhc2VDb2x1bW5zID0ge30sXG4gIGJhc2VFeHRyYUNvbmZpZyA9IHt9LFxuICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gIGRpc2FibGVVbmlxdWUgPSBmYWxzZSxcbiAgZmllbGRzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFJlbGF0aW9uc2hpcHMsXG4gIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgcm9vdFRhYmxlTmFtZSxcbiAgdGFibGVOYW1lLFxuICB0aW1lc3RhbXBzLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSBiYXNlQ29sdW1uc1xuICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj4gPSB7fVxuXG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlXG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIC8vIFJlbGF0aW9uc2hpcHMgdG8gdGhlIGJhc2UgY29sbGVjdGlvblxuICBjb25zdCByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPiA9IHJvb3RSZWxhdGlvbnNoaXBzIHx8IG5ldyBTZXQoKVxuXG4gIGxldCByZWxhdGlvbnNoaXBzVGFibGU6IEdlbmVyaWNUYWJsZVxuXG4gIC8vIERyaXp6bGUgcmVsYXRpb25zXG4gIGNvbnN0IHJlbGF0aW9uc1RvQnVpbGQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKClcblxuICBjb25zdCBpZEZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnKVxuICBsZXQgaWRDb2xUeXBlID0gJ2ludGVnZXInXG5cbiAgaWYgKGlkRmllbGQpIHtcbiAgICBpZiAoaWRGaWVsZC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWRDb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICBjb2x1bW5zLmlkID0gbnVtZXJpYygnaWQnKS5wcmltYXJ5S2V5KClcbiAgICB9XG5cbiAgICBpZiAoaWRGaWVsZC50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIGlkQ29sVHlwZSA9ICd2YXJjaGFyJ1xuICAgICAgY29sdW1ucy5pZCA9IHZhcmNoYXIoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbHVtbnMuaWQgPSBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpXG4gIH1cblxuICA7KHtcbiAgICBoYXNMb2NhbGl6ZWRGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWU6IHJvb3RUYWJsZU5hbWUgfHwgdGFibGVOYW1lLFxuICB9KSlcblxuICBpZiAodGltZXN0YW1wcykge1xuICAgIGNvbHVtbnMuY3JlYXRlZEF0ID0gdGltZXN0YW1wKCdjcmVhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgICBjb2x1bW5zLnVwZGF0ZWRBdCA9IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHtcbiAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgd2l0aFRpbWV6b25lOiB0cnVlLFxuICAgIH0pXG4gICAgICAuZGVmYXVsdE5vdygpXG4gICAgICAubm90TnVsbCgpXG4gIH1cblxuICBjb25zdCB0YWJsZSA9IHBnVGFibGUodGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgIGNvbnN0IGV4dHJhQ29uZmlnID0gT2JqZWN0LmVudHJpZXMoYmFzZUV4dHJhQ29uZmlnKS5yZWR1Y2UoKGNvbmZpZywgW2tleSwgZnVuY10pID0+IHtcbiAgICAgIGNvbmZpZ1trZXldID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGNvbmZpZ1xuICAgIH0sIHt9KVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGluZGV4ZXMpLnJlZHVjZSgoYWNjLCBbY29sTmFtZSwgZnVuY10pID0+IHtcbiAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCBleHRyYUNvbmZpZylcbiAgfSlcblxuICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdID0gdGFibGVcblxuICBpZiAoaGFzTG9jYWxpemVkRmllbGQpIHtcbiAgICBjb25zdCBsb2NhbGVUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2xvY2FsZXNgXG4gICAgbG9jYWxlc0NvbHVtbnMuaWQgPSBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgIGxvY2FsZXNDb2x1bW5zLl9wYXJlbnRJRCA9IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgLm5vdE51bGwoKVxuXG4gICAgbG9jYWxlc1RhYmxlID0gcGdUYWJsZShsb2NhbGVUYWJsZU5hbWUsIGxvY2FsZXNDb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGxvY2FsZXNJbmRleGVzKS5yZWR1Y2UoXG4gICAgICAgIChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgICAgIGFjY1tjb2xOYW1lXSA9IGZ1bmMoY29scylcbiAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbG9jYWxlUGFyZW50OiB1bmlxdWUoYCR7bG9jYWxlVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50X2lkX3VuaXF1ZWApLm9uKFxuICAgICAgICAgICAgY29scy5fbG9jYWxlLFxuICAgICAgICAgICAgY29scy5fcGFyZW50SUQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbG9jYWxlVGFibGVOYW1lXSA9IGxvY2FsZXNUYWJsZVxuXG4gICAgY29uc3QgbG9jYWxlc1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGxvY2FsZXNUYWJsZSwgKHsgb25lIH0pID0+ICh7XG4gICAgICBfcGFyZW50SUQ6IG9uZSh0YWJsZSwge1xuICAgICAgICBmaWVsZHM6IFtsb2NhbGVzVGFibGUuX3BhcmVudElEXSxcbiAgICAgICAgcmVmZXJlbmNlczogW3RhYmxlLmlkXSxcbiAgICAgIH0pLFxuICAgIH0pKVxuXG4gICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke2xvY2FsZVRhYmxlTmFtZX1gXSA9IGxvY2FsZXNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X251bWJlcnNgXG4gICAgY29uc3QgY29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgbnVtYmVyOiBudW1lcmljKCdudW1iZXInKSxcbiAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAubm90TnVsbCgpLFxuICAgICAgcGF0aDogdmFyY2hhcigncGF0aCcpLm5vdE51bGwoKSxcbiAgICB9XG5cbiAgICBpZiAoaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSB7XG4gICAgICBjb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICB9XG5cbiAgICBudW1iZXJzVGFibGUgPSBwZ1RhYmxlKG51bWJlcnNUYWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBJbmRleEJ1aWxkZXI+ID0ge1xuICAgICAgICBvcmRlclBhcmVudElkeDogaW5kZXgoJ29yZGVyX3BhcmVudF9pZHgnKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleCgnbnVtYmVyX2lkeCcpLm9uKGNvbHMubnVtYmVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgIGluZGV4ZXMubG9jYWxlUGFyZW50ID0gaW5kZXgoJ2xvY2FsZV9wYXJlbnQnKS5vbihjb2xzLmxvY2FsZSwgY29scy5wYXJlbnQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleGVzXG4gICAgfSlcblxuICAgIGFkYXB0ZXIudGFibGVzW251bWJlcnNUYWJsZU5hbWVdID0gbnVtYmVyc1RhYmxlXG5cbiAgICBjb25zdCBudW1iZXJzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobnVtYmVyc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW251bWJlcnNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bnVtYmVyc1RhYmxlTmFtZX1gXSA9IG51bWJlcnNUYWJsZVJlbGF0aW9uc1xuICB9XG5cbiAgaWYgKGJ1aWxkUmVsYXRpb25zaGlwcykge1xuICAgIGlmIChyZWxhdGlvbnNoaXBzLnNpemUpIHtcbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcENvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgIGlkOiBzZXJpYWwoJ2lkJykucHJpbWFyeUtleSgpLFxuICAgICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKSxcbiAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtpZENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICBwYXRoOiB2YXJjaGFyKCdwYXRoJykubm90TnVsbCgpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgcmVsYXRpb25zaGlwQ29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgICB9XG5cbiAgICAgIHJlbGF0aW9uc2hpcHMuZm9yRWFjaCgocmVsYXRpb25UbykgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRSZWxhdGlvblRvID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgbGV0IGNvbFR5cGUgPSAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IHBnVGFibGUocmVsYXRpb25zaGlwc1RhYmxlTmFtZSwgcmVsYXRpb25zaGlwQ29sdW1ucywgKGNvbHMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICBvcmRlcjogaW5kZXgoJ29yZGVyX2lkeCcpLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgIHBhcmVudElkeDogaW5kZXgoJ3BhcmVudF9pZHgnKS5vbihjb2xzLnBhcmVudCksXG4gICAgICAgICAgcGF0aElkeDogaW5kZXgoJ3BhdGhfaWR4Jykub24oY29scy5wYXRoKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleCgnbG9jYWxlX2lkeCcpLm9uKGNvbHMubG9jYWxlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci50YWJsZXNbcmVsYXRpb25zaGlwc1RhYmxlTmFtZV0gPSByZWxhdGlvbnNoaXBzVGFibGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwc1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHJlbGF0aW9uc2hpcHNUYWJsZSwgKHsgb25lIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG9uZSh0YWJsZSwge1xuICAgICAgICAgICAgZmllbGRzOiBbcmVsYXRpb25zaGlwc1RhYmxlLnBhcmVudF0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgICAgICAgcmVsYXRpb25OYW1lOiAnX3JlbHMnLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVsYXRlZFRhYmxlTmFtZSA9IHRvU25ha2VDYXNlKHJlbGF0aW9uVG8pXG4gICAgICAgICAgY29uc3QgaWRDb2x1bW5OYW1lID0gYCR7cmVsYXRpb25Ub31JRGBcbiAgICAgICAgICByZXN1bHRbaWRDb2x1bW5OYW1lXSA9IG9uZShhZGFwdGVyLnRhYmxlc1tyZWxhdGVkVGFibGVOYW1lXSwge1xuICAgICAgICAgICAgZmllbGRzOiBbcmVsYXRpb25zaGlwc1RhYmxlW2lkQ29sdW1uTmFtZV1dLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0pXG5cbiAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfWBdID0gcmVsYXRpb25zaGlwc1RhYmxlUmVsYXRpb25zXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnModGFibGUsICh7IG1hbnkgfSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7fVxuXG4gICAgcmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgfSlcblxuICAgIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShsb2NhbGVzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IHJlbGF0aW9uc1RvQnVpbGQgfVxufVxuIl0sIm5hbWVzIjpbImJ1aWxkVGFibGUiLCJhZGFwdGVyIiwiYmFzZUNvbHVtbnMiLCJiYXNlRXh0cmFDb25maWciLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJkaXNhYmxlVW5pcXVlIiwiZmllbGRzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290UmVsYXRpb25zaGlwcyIsInJvb3RUYWJsZUlEQ29sVHlwZSIsInJvb3RUYWJsZU5hbWUiLCJ0YWJsZU5hbWUiLCJ0aW1lc3RhbXBzIiwiY29sdW1ucyIsImluZGV4ZXMiLCJoYXNMb2NhbGl6ZWRGaWVsZCIsImhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsImxvY2FsZXNUYWJsZSIsIm51bWJlcnNUYWJsZSIsInJlbGF0aW9uc2hpcHMiLCJTZXQiLCJyZWxhdGlvbnNoaXBzVGFibGUiLCJyZWxhdGlvbnNUb0J1aWxkIiwiTWFwIiwiaWRGaWVsZCIsImZpbmQiLCJmaWVsZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJuYW1lIiwiaWRDb2xUeXBlIiwidHlwZSIsImlkIiwibnVtZXJpYyIsInByaW1hcnlLZXkiLCJ2YXJjaGFyIiwic2VyaWFsIiwidHJhdmVyc2VGaWVsZHMiLCJuZXdUYWJsZU5hbWUiLCJwYXJlbnRUYWJsZU5hbWUiLCJjcmVhdGVkQXQiLCJ0aW1lc3RhbXAiLCJtb2RlIiwicHJlY2lzaW9uIiwid2l0aFRpbWV6b25lIiwiZGVmYXVsdE5vdyIsIm5vdE51bGwiLCJ1cGRhdGVkQXQiLCJ0YWJsZSIsInBnVGFibGUiLCJjb2xzIiwiZXh0cmFDb25maWciLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiY29uZmlnIiwia2V5IiwiZnVuYyIsImFjYyIsImNvbE5hbWUiLCJ0YWJsZXMiLCJsb2NhbGVUYWJsZU5hbWUiLCJfbG9jYWxlIiwiZW51bXMiLCJlbnVtX19sb2NhbGVzIiwiX3BhcmVudElEIiwicGFyZW50SURDb2x1bW5NYXAiLCJyZWZlcmVuY2VzIiwib25EZWxldGUiLCJfbG9jYWxlUGFyZW50IiwidW5pcXVlIiwib24iLCJsb2NhbGVzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbnMiLCJvbmUiLCJudW1iZXJzVGFibGVOYW1lIiwibnVtYmVyIiwib3JkZXIiLCJpbnRlZ2VyIiwicGFyZW50IiwicGF0aCIsImxvY2FsZSIsIm9yZGVyUGFyZW50SWR4IiwiaW5kZXgiLCJudW1iZXJJZHgiLCJsb2NhbGVQYXJlbnQiLCJudW1iZXJzVGFibGVSZWxhdGlvbnMiLCJzaXplIiwicmVsYXRpb25zaGlwQ29sdW1ucyIsImZvckVhY2giLCJyZWxhdGlvblRvIiwiZm9ybWF0dGVkUmVsYXRpb25UbyIsInRvU25ha2VDYXNlIiwiY29sVHlwZSIsInJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQiLCJwYXlsb2FkIiwiY29sbGVjdGlvbnMiLCJyZWxhdGlvbnNoaXBzVGFibGVOYW1lIiwicmVzdWx0IiwicGFyZW50SWR4IiwicGF0aElkeCIsImxvY2FsZUlkeCIsInJlbGF0aW9uc2hpcHNUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9uTmFtZSIsInJlbGF0ZWRUYWJsZU5hbWUiLCJpZENvbHVtbk5hbWUiLCJ0YWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJ2YWwiLCJfbG9jYWxlcyIsIl9udW1iZXJzIiwiX3JlbHMiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkEyQ3ZCQTs7O2VBQUFBOzs7NEJBdENhO3dCQVVuQjt1QkFDMEI7b0VBQ1Q7bUNBSVU7Z0NBQ0g7Ozs7OztBQXFCeEIsTUFBTUEsYUFBYSxDQUFDLEVB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
@@ -1,7 +1,7 @@
1
1
  import type { GenericColumn } from '../types';
2
2
  type CreateIndexArgs = {
3
3
  columnName: string;
4
- name: string;
4
+ name: string | string[];
5
5
  unique?: boolean;
6
6
  };
7
7
  export declare const createIndex: ({ name, columnName, unique }: CreateIndexArgs) => (table: {
@@ -1 +1 @@
1
- {"version":3,"file":"createIndex.d.ts","sourceRoot":"","sources":["../../src/schema/createIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,iCAAkC,eAAe;;gDAKxE,CAAA"}
1
+ {"version":3,"file":"createIndex.d.ts","sourceRoot":"","sources":["../../src/schema/createIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,iCAAkC,eAAe;;gDAcxE,CAAA"}
@@ -11,9 +11,18 @@ Object.defineProperty(exports, "createIndex", {
11
11
  const _pgcore = require("drizzle-orm/pg-core");
12
12
  const createIndex = ({ name, columnName, unique })=>{
13
13
  return (table)=>{
14
- if (unique) return (0, _pgcore.uniqueIndex)(`${columnName}_idx`).on(table[name]);
15
- return (0, _pgcore.index)(`${columnName}_idx`).on(table[name]);
14
+ let columns;
15
+ if (Array.isArray(name)) {
16
+ columns = name.map((columnName)=>table[columnName])// exclude fields were included in compound indexes but do not exist on the table
17
+ .filter((col)=>typeof col !== 'undefined');
18
+ } else {
19
+ columns = [
20
+ table[name]
21
+ ];
22
+ }
23
+ if (unique) return (0, _pgcore.uniqueIndex)(`${columnName}_idx`).on(columns[0], ...columns.slice(1));
24
+ return (0, _pgcore.index)(`${columnName}_idx`).on(columns[0], ...columns.slice(1));
16
25
  };
17
26
  };
18
27
 
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvY3JlYXRlSW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbiB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIENyZWF0ZUluZGV4QXJncyA9IHtcbiAgY29sdW1uTmFtZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICB1bmlxdWU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbmRleCA9ICh7IG5hbWUsIGNvbHVtbk5hbWUsIHVuaXF1ZSB9OiBDcmVhdGVJbmRleEFyZ3MpID0+IHtcbiAgcmV0dXJuICh0YWJsZTogeyBbeDogc3RyaW5nXTogR2VuZXJpY0NvbHVtbiB9KSA9PiB7XG4gICAgaWYgKHVuaXF1ZSkgcmV0dXJuIHVuaXF1ZUluZGV4KGAke2NvbHVtbk5hbWV9X2lkeGApLm9uKHRhYmxlW25hbWVdKVxuICAgIHJldHVybiBpbmRleChgJHtjb2x1bW5OYW1lfV9pZHhgKS5vbih0YWJsZVtuYW1lXSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUluZGV4IiwibmFtZSIsImNvbHVtbk5hbWUiLCJ1bmlxdWUiLCJ0YWJsZSIsInVuaXF1ZUluZGV4Iiwib24iLCJpbmRleCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQVd2QkE7OztlQUFBQTs7O3dCQVZzQjtBQVU1QixNQUFNQSxjQUFjLENBQUMsRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLE1BQU0sRUFBbUI7SUFDdkUsT0FBTyxDQUFDQztRQUNOLElBQUlELFFBQVEsT0FBT0UsSUFBQUEsbUJBQVcsRUFBQyxDQUFDLEVBQUVILFdBQVcsSUFBSSxDQUFDLEVBQUVJLEVBQUUsQ0FBQ0YsS0FBSyxDQUFDSCxLQUFLO1FBQ2xFLE9BQU9NLElBQUFBLGFBQUssRUFBQyxDQUFDLEVBQUVMLFdBQVcsSUFBSSxDQUFDLEVBQUVJLEVBQUUsQ0FBQ0YsS0FBSyxDQUFDSCxLQUFLO0lBQ2xEO0FBQ0YifQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvY3JlYXRlSW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB7IGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbiB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIENyZWF0ZUluZGV4QXJncyA9IHtcbiAgY29sdW1uTmFtZTogc3RyaW5nXG4gIG5hbWU6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHVuaXF1ZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUluZGV4ID0gKHsgbmFtZSwgY29sdW1uTmFtZSwgdW5pcXVlIH06IENyZWF0ZUluZGV4QXJncykgPT4ge1xuICByZXR1cm4gKHRhYmxlOiB7IFt4OiBzdHJpbmddOiBHZW5lcmljQ29sdW1uIH0pID0+IHtcbiAgICBsZXQgY29sdW1uc1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICBjb2x1bW5zID0gbmFtZVxuICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiB0YWJsZVtjb2x1bW5OYW1lXSlcbiAgICAgICAgLy8gZXhjbHVkZSBmaWVsZHMgd2VyZSBpbmNsdWRlZCBpbiBjb21wb3VuZCBpbmRleGVzIGJ1dCBkbyBub3QgZXhpc3Qgb24gdGhlIHRhYmxlXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gdHlwZW9mIGNvbCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbnMgPSBbdGFibGVbbmFtZV1dXG4gICAgfVxuICAgIGlmICh1bmlxdWUpIHJldHVybiB1bmlxdWVJbmRleChgJHtjb2x1bW5OYW1lfV9pZHhgKS5vbihjb2x1bW5zWzBdLCAuLi5jb2x1bW5zLnNsaWNlKDEpKVxuICAgIHJldHVybiBpbmRleChgJHtjb2x1bW5OYW1lfV9pZHhgKS5vbihjb2x1bW5zWzBdLCAuLi5jb2x1bW5zLnNsaWNlKDEpKVxuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlSW5kZXgiLCJuYW1lIiwiY29sdW1uTmFtZSIsInVuaXF1ZSIsInRhYmxlIiwiY29sdW1ucyIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImZpbHRlciIsImNvbCIsInVuaXF1ZUluZGV4Iiwib24iLCJzbGljZSIsImluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBV3ZCQTs7O2VBQUFBOzs7d0JBVnNCO0FBVTVCLE1BQU1BLGNBQWMsQ0FBQyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsTUFBTSxFQUFtQjtJQUN2RSxPQUFPLENBQUNDO1FBQ04sSUFBSUM7UUFDSixJQUFJQyxNQUFNQyxPQUFPLENBQUNOLE9BQU87WUFDdkJJLFVBQVVKLEtBQ1BPLEdBQUcsQ0FBQyxDQUFDTixhQUFlRSxLQUFLLENBQUNGLFdBQVcsQ0FDdEMsaUZBQWlGO2FBQ2hGTyxNQUFNLENBQUMsQ0FBQ0MsTUFBUSxPQUFPQSxRQUFRO1FBQ3BDLE9BQU87WUFDTEwsVUFBVTtnQkFBQ0QsS0FBSyxDQUFDSCxLQUFLO2FBQUM7UUFDekI7UUFDQSxJQUFJRSxRQUFRLE9BQU9RLElBQUFBLG1CQUFXLEVBQUMsQ0FBQyxFQUFFVCxXQUFXLElBQUksQ0FBQyxFQUFFVSxFQUFFLENBQUNQLE9BQU8sQ0FBQyxFQUFFLEtBQUtBLFFBQVFRLEtBQUssQ0FBQztRQUNwRixPQUFPQyxJQUFBQSxhQUFLLEVBQUMsQ0FBQyxFQUFFWixXQUFXLElBQUksQ0FBQyxFQUFFVSxFQUFFLENBQUNQLE9BQU8sQ0FBQyxFQUFFLEtBQUtBLFFBQVFRLEtBQUssQ0FBQztJQUNwRTtBQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAqBtD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAQ/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,cAAc,kRAmBxB,IAAI,KAAG,MAgfT,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../src/schema/traverseFields.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAA2B,MAAM,qBAAqB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoBtD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAQ/D,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IAC/D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAAC,CAAA;IACtE,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,iBAAiB,EAAE,OAAO,CAAA;IAC1B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B,EAAE,OAAO,CAAA;IACtC,kBAAkB,EAAE,OAAO,GAAG,OAAO,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,cAAc,kRAmBxB,IAAI,KAAG,MA+dT,CAAA"}