dbctx 1.4.6 → 2.0.1

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.
Files changed (164) hide show
  1. package/dist/app/assemble.d.mts +2 -2
  2. package/dist/app/assemble.d.mts.map +1 -1
  3. package/dist/app/assemble.mjs +37 -16
  4. package/dist/app/db.d.mts.map +1 -1
  5. package/dist/app/db.mjs +3 -2
  6. package/dist/app/detect.d.mts +1 -0
  7. package/dist/app/detect.d.mts.map +1 -1
  8. package/dist/app/detect.mjs +3 -2
  9. package/dist/app/list.d.mts +4 -0
  10. package/dist/app/list.d.mts.map +1 -0
  11. package/dist/app/list.mjs +93 -0
  12. package/dist/app/load-introspection.d.mts +26 -0
  13. package/dist/app/load-introspection.d.mts.map +1 -0
  14. package/dist/app/load-introspection.mjs +89 -0
  15. package/dist/app/login.d.mts +2 -0
  16. package/dist/app/login.d.mts.map +1 -0
  17. package/dist/app/login.mjs +69 -0
  18. package/dist/app/open-url.d.mts +2 -0
  19. package/dist/app/open-url.d.mts.map +1 -1
  20. package/dist/app/open-url.mjs +8 -3
  21. package/dist/app/sample.d.mts +24 -0
  22. package/dist/app/sample.d.mts.map +1 -0
  23. package/dist/app/sample.mjs +257 -0
  24. package/dist/app/session.d.mts +3 -2
  25. package/dist/app/session.d.mts.map +1 -1
  26. package/dist/app/session.mjs +46 -6
  27. package/dist/app/ssh.d.mts.map +1 -1
  28. package/dist/app/ssh.mjs +12 -1
  29. package/dist/app/tail.d.mts +13 -0
  30. package/dist/app/tail.d.mts.map +1 -0
  31. package/dist/app/tail.mjs +168 -0
  32. package/dist/db/check-constraints.d.mts +9 -0
  33. package/dist/db/check-constraints.d.mts.map +1 -0
  34. package/dist/db/check-constraints.mjs +17 -0
  35. package/dist/db/custom-types.d.mts +26 -0
  36. package/dist/db/custom-types.d.mts.map +1 -0
  37. package/dist/db/custom-types.mjs +61 -0
  38. package/dist/db/extensions.d.mts +8 -0
  39. package/dist/db/extensions.d.mts.map +1 -0
  40. package/dist/db/extensions.mjs +14 -0
  41. package/dist/db/foreign-keys.mjs +3 -3
  42. package/dist/db/functions.d.mts +11 -0
  43. package/dist/db/functions.d.mts.map +1 -0
  44. package/dist/db/functions.mjs +23 -0
  45. package/dist/db/index.d.mts +10 -1
  46. package/dist/db/index.d.mts.map +1 -1
  47. package/dist/db/index.mjs +11 -2
  48. package/dist/db/planner-stats.d.mts +33 -0
  49. package/dist/db/planner-stats.d.mts.map +1 -0
  50. package/dist/db/planner-stats.mjs +103 -0
  51. package/dist/db/relations.d.mts +1 -0
  52. package/dist/db/relations.d.mts.map +1 -1
  53. package/dist/db/relations.mjs +10 -1
  54. package/dist/db/rls.d.mts +21 -0
  55. package/dist/db/rls.d.mts.map +1 -0
  56. package/dist/db/rls.mjs +48 -0
  57. package/dist/db/sample.d.mts +16 -0
  58. package/dist/db/sample.d.mts.map +1 -0
  59. package/dist/db/sample.mjs +73 -0
  60. package/dist/db/sequences.d.mts +15 -0
  61. package/dist/db/sequences.d.mts.map +1 -0
  62. package/dist/db/sequences.mjs +31 -0
  63. package/dist/db/stats.mjs +3 -3
  64. package/dist/db/triggers.d.mts +11 -0
  65. package/dist/db/triggers.d.mts.map +1 -0
  66. package/dist/db/triggers.mjs +21 -0
  67. package/dist/flow/events.d.mts +115 -0
  68. package/dist/flow/events.d.mts.map +1 -0
  69. package/dist/flow/events.mjs +2 -0
  70. package/dist/flow/interpreter.d.mts +21 -0
  71. package/dist/flow/interpreter.d.mts.map +1 -0
  72. package/dist/flow/interpreter.mjs +605 -0
  73. package/dist/flow/projection.d.mts +17 -0
  74. package/dist/flow/projection.d.mts.map +1 -0
  75. package/dist/flow/projection.mjs +83 -0
  76. package/dist/flow/projection.test.d.mts +2 -0
  77. package/dist/flow/projection.test.d.mts.map +1 -0
  78. package/dist/flow/projection.test.mjs +162 -0
  79. package/dist/flow/reducer.d.mts +5 -0
  80. package/dist/flow/reducer.d.mts.map +1 -0
  81. package/dist/flow/reducer.mjs +306 -0
  82. package/dist/flow/reducer.test.d.mts +2 -0
  83. package/dist/flow/reducer.test.d.mts.map +1 -0
  84. package/dist/flow/reducer.test.mjs +479 -0
  85. package/dist/flow/run.d.mts +3 -0
  86. package/dist/flow/run.d.mts.map +1 -0
  87. package/dist/flow/run.mjs +89 -0
  88. package/dist/flow/states.d.mts +54 -0
  89. package/dist/flow/states.d.mts.map +1 -0
  90. package/dist/flow/states.mjs +39 -0
  91. package/dist/index.d.mts +11 -0
  92. package/dist/index.d.mts.map +1 -1
  93. package/dist/index.mjs +135 -12
  94. package/dist/lib/atomic-write.d.mts +4 -0
  95. package/dist/lib/atomic-write.d.mts.map +1 -0
  96. package/dist/lib/atomic-write.mjs +75 -0
  97. package/dist/lib/stream-job.d.mts +19 -0
  98. package/dist/lib/stream-job.d.mts.map +1 -0
  99. package/dist/lib/stream-job.mjs +55 -0
  100. package/dist/lib/trpc-url.mjs +2 -2
  101. package/dist/lib/trpc.mjs +2 -2
  102. package/dist/logger.d.mts.map +1 -1
  103. package/dist/logger.mjs +6 -3
  104. package/dist/providers/TrpcProvider.js +3 -3
  105. package/dist/store.d.mts +113 -1
  106. package/dist/store.d.mts.map +1 -1
  107. package/dist/store.mjs +81 -2
  108. package/dist/ui/App.d.ts +1 -1
  109. package/dist/ui/App.d.ts.map +1 -1
  110. package/dist/ui/App.js +32 -4
  111. package/dist/ui/components/Analyze.d.ts +10 -0
  112. package/dist/ui/components/Analyze.d.ts.map +1 -0
  113. package/dist/ui/components/Analyze.js +54 -0
  114. package/dist/ui/components/Billing.d.ts +10 -0
  115. package/dist/ui/components/Billing.d.ts.map +1 -0
  116. package/dist/ui/components/Billing.js +40 -0
  117. package/dist/ui/components/DB.d.ts.map +1 -1
  118. package/dist/ui/components/DB.js +2 -2
  119. package/dist/ui/components/DatabasePicker.d.ts +13 -0
  120. package/dist/ui/components/DatabasePicker.d.ts.map +1 -0
  121. package/dist/ui/components/DatabasePicker.js +79 -0
  122. package/dist/ui/components/Enrich.d.ts +10 -0
  123. package/dist/ui/components/Enrich.d.ts.map +1 -0
  124. package/dist/ui/components/Enrich.js +41 -0
  125. package/dist/ui/components/Gate.js +2 -2
  126. package/dist/ui/components/Introspect.d.ts.map +1 -1
  127. package/dist/ui/components/Introspect.js +2 -2
  128. package/dist/ui/components/IntrospectionUpload.d.ts +10 -0
  129. package/dist/ui/components/IntrospectionUpload.d.ts.map +1 -0
  130. package/dist/ui/components/IntrospectionUpload.js +30 -0
  131. package/dist/ui/components/Login.d.ts +19 -0
  132. package/dist/ui/components/Login.d.ts.map +1 -0
  133. package/dist/ui/components/Login.js +38 -0
  134. package/dist/ui/components/OutputJson.d.ts +10 -0
  135. package/dist/ui/components/OutputJson.d.ts.map +1 -0
  136. package/dist/ui/components/OutputJson.js +18 -0
  137. package/dist/ui/components/SSH.d.ts.map +1 -1
  138. package/dist/ui/components/SSH.js +2 -2
  139. package/dist/ui/components/SamplesUpload.d.ts +10 -0
  140. package/dist/ui/components/SamplesUpload.d.ts.map +1 -0
  141. package/dist/ui/components/SamplesUpload.js +24 -0
  142. package/dist/ui/components/Sampling.d.ts +10 -0
  143. package/dist/ui/components/Sampling.d.ts.map +1 -0
  144. package/dist/ui/components/Sampling.js +58 -0
  145. package/dist/ui/components/Session.d.ts.map +1 -1
  146. package/dist/ui/components/Session.js +4 -4
  147. package/dist/ui/components/Spinner.d.ts.map +1 -1
  148. package/dist/ui/components/Spinner.js +17 -5
  149. package/dist/ui/components/TextInput.d.ts +11 -0
  150. package/dist/ui/components/TextInput.d.ts.map +1 -0
  151. package/dist/ui/components/TextInput.js +286 -0
  152. package/dist/ui/components/UserExplanation.d.ts +10 -0
  153. package/dist/ui/components/UserExplanation.d.ts.map +1 -0
  154. package/dist/ui/components/UserExplanation.js +34 -0
  155. package/dist/validatePaths.d.mts +2 -1
  156. package/dist/validatePaths.d.mts.map +1 -1
  157. package/dist/validatePaths.mjs +6 -2
  158. package/package.json +7 -7
  159. package/dist/app/index.d.mts +0 -3
  160. package/dist/app/index.d.mts.map +0 -1
  161. package/dist/app/index.mjs +0 -82
  162. package/dist/schemas/index.d.mts +0 -107
  163. package/dist/schemas/index.d.mts.map +0 -1
  164. package/dist/schemas/index.mjs +0 -116
@@ -1,5 +1,5 @@
1
1
  import type { Pool } from 'pg';
2
2
  import type { TStore } from '../store.mjs';
3
- import type { TDatabase } from '../schemas/index.mjs';
4
- export declare const assembleDatabase: (pool: Pool, store: TStore) => Promise<TDatabase>;
3
+ import type { TDatabaseIntrospection } from '@dbctx/core';
4
+ export declare const assembleDatabase: (pool: Pool, store: TStore) => Promise<TDatabaseIntrospection>;
5
5
  //# sourceMappingURL=assemble.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.mts","sourceRoot":"./src/","sources":["app/assemble.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAI7B,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AA2FpD,eAAO,MAAM,gBAAgB,GACzB,MAAM,IAAI,EACV,OAAO,MAAM,KACd,OAAO,CAAC,SAAS,CA4HnB,CAAC"}
1
+ {"version":3,"file":"assemble.d.mts","sourceRoot":"./src/","sources":["app/assemble.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAI7B,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAmGxD,eAAO,MAAM,gBAAgB,GACzB,MAAM,IAAI,EACV,OAAO,MAAM,KACd,OAAO,CAAC,sBAAsB,CAuKhC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import PQueue from 'p-queue';
2
2
  import { runInAction } from 'mobx';
3
- import { fetchDatabaseIdentifier, fetchDatabaseComment, fetchPublicRelations, fetchPublicEnums, fetchRelationAttributes, fetchRelationIndexes, fetchRelationForeignKeys, analyzeRelation, fetchRelationStats, } from '../db/index.mjs';
3
+ import { fetchDatabaseIdentifier, fetchDatabaseComment, fetchPublicRelations, fetchPublicEnums, fetchRelationAttributes, fetchRelationIndexes, fetchRelationForeignKeys, fetchViewDefinition, analyzeRelation, fetchRelationStats, fetchPublicCheckConstraints, fetchInstalledExtensions, fetchPublicSequences, fetchPublicTriggers, fetchPublicFunctions, fetchPublicCustomTypes, fetchPublicRLS, } from '../db/index.mjs';
4
4
  const toRecord = (items, key) => Object.fromEntries(items.map((item) => [key(item), item]));
5
5
  const transformAttribute = (attr) => {
6
6
  const base = {
@@ -73,9 +73,16 @@ export const assembleDatabase = async (pool, store) => {
73
73
  queue.add(() => fetchDatabaseIdentifier(pool)),
74
74
  queue.add(() => fetchDatabaseComment(pool)),
75
75
  ]);
76
- const [grouped, enums] = await Promise.all([
76
+ const [grouped, enums, checkConstraints, extensions, sequences, triggers, functions, customTypes, rls,] = await Promise.all([
77
77
  queue.add(() => fetchPublicRelations(pool)),
78
78
  queue.add(() => fetchPublicEnums(pool)),
79
+ queue.add(() => fetchPublicCheckConstraints(pool)),
80
+ queue.add(() => fetchInstalledExtensions(pool)),
81
+ queue.add(() => fetchPublicSequences(pool)),
82
+ queue.add(() => fetchPublicTriggers(pool)),
83
+ queue.add(() => fetchPublicFunctions(pool)),
84
+ queue.add(() => fetchPublicCustomTypes(pool)),
85
+ queue.add(() => fetchPublicRLS(pool)),
79
86
  ]);
80
87
  const typedGrouped = grouped;
81
88
  const typedEnums = enums;
@@ -94,18 +101,23 @@ export const assembleDatabase = async (pool, store) => {
94
101
  ...(typedGrouped.view ?? []),
95
102
  ...(typedGrouped.materialized_view ?? []),
96
103
  ];
104
+ const isViewKind = (type) => type === 'view' || type === 'materialized_view';
105
+ const skipAnalyze = store.outputOptions.skipAnalyze;
97
106
  const relationEntries = await Promise.all(allRelations.map(async (rel) => {
98
- if (rel.type !== 'view') {
107
+ if (rel.type !== 'view' && !skipAnalyze) {
99
108
  await queue.add(() => analyzeRelation(pool, rel.name));
100
109
  runInAction(() => {
101
110
  counts.analyzed += 1;
102
111
  });
103
112
  }
104
- const [attributes, indexes, foreignKeys, stats] = await Promise.all([
113
+ const [attributes, indexes, foreignKeys, stats, viewDefinition] = await Promise.all([
105
114
  queue.add(() => fetchRelationAttributes(pool, rel.name)),
106
115
  queue.add(() => fetchRelationIndexes(pool, rel.name)),
107
116
  queue.add(() => fetchRelationForeignKeys(pool, rel.name)),
108
117
  queue.add(() => fetchRelationStats(pool, rel.name)),
118
+ isViewKind(rel.type)
119
+ ? queue.add(() => fetchViewDefinition(pool, rel.name))
120
+ : undefined,
109
121
  ]);
110
122
  const attrs = attributes;
111
123
  const idxs = indexes;
@@ -127,17 +139,19 @@ export const assembleDatabase = async (pool, store) => {
127
139
  ? { ...base, estimated_distinct: distinct }
128
140
  : base;
129
141
  });
130
- return [
131
- rel.name,
132
- {
133
- name: rel.name,
134
- comment: rel.comment,
135
- kind: rel.type,
136
- attributes: toRecord(transformedAttrs, (a) => a.name),
137
- indexes: toRecord(idxs.map(transformIndex), (i) => i.index_name),
138
- references: toRecord(fks.map(transformReference), (r) => r.constraint_name),
139
- },
140
- ];
142
+ const relationObj = {
143
+ name: rel.name,
144
+ comment: rel.comment,
145
+ kind: rel.type,
146
+ estimated_row_count: relStats.estimated_row_count,
147
+ attributes: toRecord(transformedAttrs, (a) => a.name),
148
+ indexes: toRecord(idxs.map(transformIndex), (i) => i.index_name),
149
+ references: toRecord(fks.map(transformReference), (r) => r.constraint_name),
150
+ ...(viewDefinition
151
+ ? { viewDefinition: viewDefinition }
152
+ : {}),
153
+ };
154
+ return [rel.name, relationObj];
141
155
  }));
142
156
  runInAction(() => {
143
157
  store.steps.introspection.state = 'done';
@@ -156,6 +170,13 @@ export const assembleDatabase = async (pool, store) => {
156
170
  comment: comment ?? null,
157
171
  relations: Object.fromEntries(relationEntries),
158
172
  enums: typedEnums,
173
+ checkConstraints: checkConstraints,
174
+ extensions: extensions,
175
+ sequences: sequences,
176
+ triggers: triggers,
177
+ functions: functions,
178
+ customTypes: customTypes,
179
+ rls: rls,
159
180
  };
160
181
  };
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibGUubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2Fzc2VtYmxlLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQVFqQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixrQkFBa0IsR0FDckIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLFFBQVEsR0FBRyxDQUNiLEtBQW1CLEVBQ25CLEdBQXdCLEVBQ1AsRUFBRSxDQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBb0IsRUFBRSxFQUFFO0lBQ2hELE1BQU0sSUFBSSxHQUFHO1FBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO1FBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztRQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0tBQ3hCLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNILEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxXQUFvQjtZQUMxQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQTBDO1lBQ2xFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBcUI7U0FDbkQsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXO1FBQ25CLENBQUMsQ0FBQztZQUNJLEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxTQUFrQjtZQUN4QixXQUFXLEVBQUUsSUFBYTtZQUMxQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQW1CO1NBQy9DO1FBQ0gsQ0FBQyxDQUFDO1lBQ0ksR0FBRyxJQUFJO1lBQ1AsSUFBSSxFQUFFLFNBQWtCO1lBQ3hCLFdBQVcsRUFBRSxLQUFjO1NBQzlCLENBQUM7QUFDWixDQUFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQWUsRUFBRSxFQUFFLENBQ3hDLEdBQUcsQ0FBQyxVQUFVO0lBQ1YsQ0FBQyxDQUFFLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBVztJQUNwQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVM7UUFDYixDQUFDLENBQUUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFXO1FBQ25DLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWTtZQUNoQixDQUFDLENBQUU7Z0JBQ0csVUFBVSxFQUFFLFdBQVc7Z0JBQ3ZCLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxtQkFBb0I7YUFDdEM7WUFDYixDQUFDLENBQUUsRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFXLENBQUM7QUFFL0MsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO0lBQzFCLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYTtJQUNoQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7SUFDMUIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO0lBQzFCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztJQUNwQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7SUFDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVO1FBQ2QsQ0FBQyxDQUFFO1lBQ0csVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFrQjtTQUNsQztRQUNiLENBQUMsQ0FBRSxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQVcsQ0FBQztDQUN4QyxDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsRUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWU7SUFDbkMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVO0lBQ3pCLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxtQkFBbUI7SUFDM0MscUJBQXFCLEVBQUUsRUFBRSxDQUFDLHFCQUFxQjtJQUMvQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVM7SUFDdkIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTO0lBQ3ZCLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTztDQUN0QixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQ2pDLElBQVUsRUFDVixLQUFhLEVBQ0ssRUFBRTtJQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUVoRCxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxZQUFZLEdBQUcsT0FFcEIsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLEtBQXFELENBQUM7SUFFekUsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sQ0FBQyxNQUFNO1lBQ1QsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsS0FBSztZQUNSLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHO1FBQ2pCLEdBQUcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM3QixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7S0FDNUMsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDckMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDM0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0Q7WUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEQsQ0FDSixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsVUFBOEIsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxPQUF1QixDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLFdBQWdDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsS0FBdUIsQ0FBQztRQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FDMUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxjQUFjO1lBQ2hCLENBQUMsQ0FBQyxrQkFBa0I7U0FDdkIsQ0FBQyxDQUNMLENBQUM7UUFFRixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM5QixNQUFNLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QyxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsS0FBSyxTQUFTO2dCQUN6QixDQUFDLENBQUMsRUFBQyxHQUFHLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDSCxHQUFHLENBQUMsSUFBSTtZQUNSO2dCQUNJLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDZCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87Z0JBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtnQkFDZCxVQUFVLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNyRCxPQUFPLEVBQUUsUUFBUSxDQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQ3hCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUN0QjtnQkFDRCxVQUFVLEVBQUUsUUFBUSxDQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQzNCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUMzQjthQUNKO1NBQ0ssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFFRixXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDSCxJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDTCxjQUFjLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxlQUFnQjtZQUMvRCxjQUFjLEVBQ1YsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBc0I7U0FDNUQ7UUFDRCxVQUFVLEVBQUU7WUFDUixpQkFBaUIsRUFBRSxVQUFXLENBQUMsaUJBQWlCO1lBQ2hELFlBQVksRUFBRSxVQUFXLENBQUMsWUFBWTtTQUN6QztRQUNELElBQUksRUFBRSxVQUFXLENBQUMsYUFBYTtRQUMvQixPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUk7UUFDeEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQzlDLEtBQUssRUFBRSxVQUFVO0tBQ3BCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UG9vbH0gZnJvbSAncGcnO1xuaW1wb3J0IFBRdWV1ZSBmcm9tICdwLXF1ZXVlJztcbmltcG9ydCB7cnVuSW5BY3Rpb259IGZyb20gJ21vYngnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1REYXRhYmFzZX0gZnJvbSAnLi4vc2NoZW1hcy9pbmRleC5tanMnO1xuaW1wb3J0IHR5cGUge1RBdHRyaWJ1dGVJbmZvfSBmcm9tICcuLi9kYi9hdHRyaWJ1dGVzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEluZGV4SW5mb30gZnJvbSAnLi4vZGIvaW5kZXhlcy5tanMnO1xuaW1wb3J0IHR5cGUge1RGb3JlaWduS2V5SW5mb30gZnJvbSAnLi4vZGIvZm9yZWlnbi1rZXlzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFJlbGF0aW9uU3RhdHN9IGZyb20gJy4uL2RiL3N0YXRzLm1qcyc7XG5pbXBvcnQge1xuICAgIGZldGNoRGF0YWJhc2VJZGVudGlmaWVyLFxuICAgIGZldGNoRGF0YWJhc2VDb21tZW50LFxuICAgIGZldGNoUHVibGljUmVsYXRpb25zLFxuICAgIGZldGNoUHVibGljRW51bXMsXG4gICAgZmV0Y2hSZWxhdGlvbkF0dHJpYnV0ZXMsXG4gICAgZmV0Y2hSZWxhdGlvbkluZGV4ZXMsXG4gICAgZmV0Y2hSZWxhdGlvbkZvcmVpZ25LZXlzLFxuICAgIGFuYWx5emVSZWxhdGlvbixcbiAgICBmZXRjaFJlbGF0aW9uU3RhdHMsXG59IGZyb20gJy4uL2RiL2luZGV4Lm1qcyc7XG5cbmNvbnN0IHRvUmVjb3JkID0gPFQgZXh0ZW5kcyB1bmtub3duPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGtleTogKGl0ZW06IFQpID0+IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIFQ+ID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKGl0ZW1zLm1hcCgoaXRlbSkgPT4gW2tleShpdGVtKSwgaXRlbV0pKTtcblxuY29uc3QgdHJhbnNmb3JtQXR0cmlidXRlID0gKGF0dHI6IFRBdHRyaWJ1dGVJbmZvKSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IHtcbiAgICAgICAgbmFtZTogYXR0ci5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgZGF0YV90eXBlOiBhdHRyLmRhdGFfdHlwZSxcbiAgICAgICAgaXNfbnVsbGFibGU6IGF0dHIuaXNfbnVsbGFibGUsXG4gICAgICAgIGNvbW1lbnQ6IGF0dHIuY29tbWVudCxcbiAgICB9O1xuXG4gICAgaWYgKGF0dHIua2luZCA9PT0gJ2dlbmVyYXRlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICBraW5kOiAnZ2VuZXJhdGVkJyBhcyBjb25zdCxcbiAgICAgICAgICAgIGdlbmVyYXRlZF9zdG9yYWdlOiBhdHRyLmdlbmVyYXRlZF9zdG9yYWdlISBhcyAnc3RvcmVkJyB8ICd2aXJ0dWFsJyxcbiAgICAgICAgICAgIGdlbmVyYXRlZF9leHByZXNzaW9uOiBhdHRyLmdlbmVyYXRlZF9leHByZXNzaW9uISxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0ci5oYXNfZGVmYXVsdFxuICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICAgICAga2luZDogJ3JlZ3VsYXInIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICAgICAgZGVmYXVsdF9leHByZXNzaW9uOiBhdHRyLmRlZmF1bHRfZXhwcmVzc2lvbiEsXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICAgICAga2luZDogJ3JlZ3VsYXInIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBoYXNfZGVmYXVsdDogZmFsc2UgYXMgY29uc3QsXG4gICAgICAgICAgfTtcbn07XG5cbmNvbnN0IGRlcml2ZUluZGV4S2luZCA9IChpZHg6IFRJbmRleEluZm8pID0+XG4gICAgaWR4LmlzX3ByaW1hcnlcbiAgICAgICAgPyAoe2luZGV4X2tpbmQ6ICdwcmltYXJ5J30gYXMgY29uc3QpXG4gICAgICAgIDogaWR4LmlzX3VuaXF1ZVxuICAgICAgICAgID8gKHtpbmRleF9raW5kOiAndW5pcXVlJ30gYXMgY29uc3QpXG4gICAgICAgICAgOiBpZHguaXNfZXhjbHVzaW9uXG4gICAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgICAgICBpbmRleF9raW5kOiAnZXhjbHVzaW9uJyxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1c2lvbl9vcGVyYXRvcnM6IGlkeC5leGNsdXNpb25fb3BlcmF0b3JzISxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdClcbiAgICAgICAgICAgIDogKHtpbmRleF9raW5kOiAncGxhaW4nfSBhcyBjb25zdCk7XG5cbmNvbnN0IHRyYW5zZm9ybUluZGV4ID0gKGlkeDogVEluZGV4SW5mbykgPT4gKHtcbiAgICBpbmRleF9uYW1lOiBpZHguaW5kZXhfbmFtZSxcbiAgICByZWxhdGlvbl9uYW1lOiBpZHgucmVsYXRpb25fbmFtZSxcbiAgICBhdHRyaWJ1dGVzOiBpZHguYXR0cmlidXRlcyxcbiAgICBkZWZpbml0aW9uOiBpZHguZGVmaW5pdGlvbixcbiAgICBjb21tZW50OiBpZHguY29tbWVudCxcbiAgICAuLi5kZXJpdmVJbmRleEtpbmQoaWR4KSxcbiAgICAuLi4oaWR4LmlzX3BhcnRpYWxcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgICBpc19wYXJ0aWFsOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJ0aWFsX3ByZWRpY2F0ZTogaWR4LnBhcnRpYWxfcHJlZGljYXRlISxcbiAgICAgICAgICB9IGFzIGNvbnN0KVxuICAgICAgICA6ICh7aXNfcGFydGlhbDogZmFsc2V9IGFzIGNvbnN0KSksXG59KTtcblxuY29uc3QgdHJhbnNmb3JtUmVmZXJlbmNlID0gKGZrOiBURm9yZWlnbktleUluZm8pID0+ICh7XG4gICAgY29uc3RyYWludF9uYW1lOiBmay5jb25zdHJhaW50X25hbWUsXG4gICAgYXR0cmlidXRlczogZmsuYXR0cmlidXRlcyxcbiAgICByZWZlcmVuY2VkX3JlbGF0aW9uOiBmay5yZWZlcmVuY2VkX3JlbGF0aW9uLFxuICAgIHJlZmVyZW5jZWRfYXR0cmlidXRlczogZmsucmVmZXJlbmNlZF9hdHRyaWJ1dGVzLFxuICAgIG9uX3VwZGF0ZTogZmsub25fdXBkYXRlLFxuICAgIG9uX2RlbGV0ZTogZmsub25fZGVsZXRlLFxuICAgIGNvbW1lbnQ6IGZrLmNvbW1lbnQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGFzc2VtYmxlRGF0YWJhc2UgPSBhc3luYyAoXG4gICAgcG9vbDogUG9vbCxcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxURGF0YWJhc2U+ID0+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBQUXVldWUoe2NvbmN1cnJlbmN5OiAzfSk7XG4gICAgY29uc3QgY291bnRzID0gc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5jb3VudHM7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZmV0Y2hpbmcnO1xuICAgIH0pO1xuXG4gICAgY29uc3QgW2lkZW50aWZpZXIsIGNvbW1lbnRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hEYXRhYmFzZUNvbW1lbnQocG9vbCkpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgW2dyb3VwZWQsIGVudW1zXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljUmVsYXRpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljRW51bXMocG9vbCkpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdHlwZWRHcm91cGVkID0gZ3JvdXBlZCBhcyBBd2FpdGVkPFxuICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1JlbGF0aW9ucz5cbiAgICA+O1xuICAgIGNvbnN0IHR5cGVkRW51bXMgPSBlbnVtcyBhcyBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljRW51bXM+PjtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgY291bnRzLnRhYmxlcyA9XG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnRhYmxlPy5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5wYXJ0aXRpb25lZF90YWJsZT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMudmlld3MgPVxuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC52aWV3Py5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldz8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMuZW51bXMgPSBPYmplY3Qua2V5cyh0eXBlZEVudW1zKS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxSZWxhdGlvbnMgPSBbXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQucGFydGl0aW9uZWRfdGFibGUgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnRhYmxlID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC52aWV3ID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldyA/PyBbXSksXG4gICAgXTtcblxuICAgIGNvbnN0IHJlbGF0aW9uRW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhbGxSZWxhdGlvbnMubWFwKGFzeW5jIChyZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChyZWwudHlwZSAhPT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcXVldWUuYWRkKCgpID0+IGFuYWx5emVSZWxhdGlvbihwb29sLCByZWwubmFtZSkpO1xuICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRzLmFuYWx5emVkICs9IDE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IFthdHRyaWJ1dGVzLCBpbmRleGVzLCBmb3JlaWduS2V5cywgc3RhdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkF0dHJpYnV0ZXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25JbmRleGVzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25TdGF0cyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGF0dHJpYnV0ZXMgYXMgVEF0dHJpYnV0ZUluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGlkeHMgPSBpbmRleGVzIGFzIFRJbmRleEluZm9bXTtcbiAgICAgICAgICAgIGNvbnN0IGZrcyA9IGZvcmVpZ25LZXlzIGFzIFRGb3JlaWduS2V5SW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgcmVsU3RhdHMgPSBzdGF0cyBhcyBUUmVsYXRpb25TdGF0cztcblxuICAgICAgICAgICAgY29uc3QgZGlzdGluY3RMb29rdXAgPSBuZXcgTWFwKFxuICAgICAgICAgICAgICAgIHJlbFN0YXRzLmF0dHJpYnV0ZXMubWFwKChhKSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGEuYXR0cmlidXRlX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIGEuZXN0aW1hdGVkX2Rpc3RpbmN0LFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50cy5jb2x1bW5zICs9IGF0dHJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuaW5kZXhlcyArPSBpZHhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb3VudHMuZm9yZWlnbktleXMgKz0gZmtzLmxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEF0dHJzID0gYXR0cnMubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRyYW5zZm9ybUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0aW5jdCA9IGRpc3RpbmN0TG9va3VwLmdldChhdHRyLmF0dHJpYnV0ZV9uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlzdGluY3QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHsuLi5iYXNlLCBlc3RpbWF0ZWRfZGlzdGluY3Q6IGRpc3RpbmN0fVxuICAgICAgICAgICAgICAgICAgICA6IGJhc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICByZWwubmFtZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiByZWwuY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAga2luZDogcmVsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRvUmVjb3JkKHRyYW5zZm9ybWVkQXR0cnMsIChhKSA9PiBhLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBpbmRleGVzOiB0b1JlY29yZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkeHMubWFwKHRyYW5zZm9ybUluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpKSA9PiBpLmluZGV4X25hbWUsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRvUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmtzLm1hcCh0cmFuc2Zvcm1SZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHIpID0+IHIuY29uc3RyYWludF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdIGFzIGNvbnN0O1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLnN0YXRlID0gJ2RvbmUnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ3Bvc3RncmVzcWwnLFxuICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICB2ZXJzaW9uX3N0cmluZzogc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbiEsXG4gICAgICAgICAgICB2ZXJzaW9uX251bWJlcjpcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uTnVtYmVyISxcbiAgICAgICAgfSxcbiAgICAgICAgaWRlbnRpZmllcjoge1xuICAgICAgICAgICAgc3lzdGVtX2lkZW50aWZpZXI6IGlkZW50aWZpZXIhLnN5c3RlbV9pZGVudGlmaWVyLFxuICAgICAgICAgICAgZGF0YWJhc2Vfb2lkOiBpZGVudGlmaWVyIS5kYXRhYmFzZV9vaWQsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IGlkZW50aWZpZXIhLmRhdGFiYXNlX25hbWUsXG4gICAgICAgIGNvbW1lbnQ6IGNvbW1lbnQgPz8gbnVsbCxcbiAgICAgICAgcmVsYXRpb25zOiBPYmplY3QuZnJvbUVudHJpZXMocmVsYXRpb25FbnRyaWVzKSxcbiAgICAgICAgZW51bXM6IHR5cGVkRW51bXMsXG4gICAgfTtcbn07XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibGUubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2Fzc2VtYmxlLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDN0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQVFqQyxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGNBQWMsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixNQUFNLFFBQVEsR0FBRyxDQUNiLEtBQW1CLEVBQ25CLEdBQXdCLEVBQ1AsRUFBRSxDQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBb0IsRUFBRSxFQUFFO0lBQ2hELE1BQU0sSUFBSSxHQUFHO1FBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO1FBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztRQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7UUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0tBQ3hCLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUIsT0FBTztZQUNILEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxXQUFv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RCxVQUFVLEVBQUUsVUFFWDtRQUNELFNBQVMsRUFBRSxTQUVWO1FBQ0QsUUFBUSxFQUFFLFFBQTJEO1FBQ3JFLFNBQVMsRUFBRSxTQUVWO1FBQ0QsV0FBVyxFQUNQLFdBQStEO1FBQ25FLEdBQUcsRUFBRSxHQUErQztLQUN2RCxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Bvb2x9IGZyb20gJ3BnJztcbmltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQge3J1bkluQWN0aW9ufSBmcm9tICdtb2J4JztcblxuaW1wb3J0IHR5cGUge1RTdG9yZX0gZnJvbSAnLi4vc3RvcmUubWpzJztcbmltcG9ydCB0eXBlIHtURGF0YWJhc2VJbnRyb3NwZWN0aW9ufSBmcm9tICdAZGJjdHgvY29yZSc7XG5pbXBvcnQgdHlwZSB7VEF0dHJpYnV0ZUluZm99IGZyb20gJy4uL2RiL2F0dHJpYnV0ZXMubWpzJztcbmltcG9ydCB0eXBlIHtUSW5kZXhJbmZvfSBmcm9tICcuLi9kYi9pbmRleGVzLm1qcyc7XG5pbXBvcnQgdHlwZSB7VEZvcmVpZ25LZXlJbmZvfSBmcm9tICcuLi9kYi9mb3JlaWduLWtleXMubWpzJztcbmltcG9ydCB0eXBlIHtUUmVsYXRpb25TdGF0c30gZnJvbSAnLi4vZGIvc3RhdHMubWpzJztcbmltcG9ydCB7XG4gICAgZmV0Y2hEYXRhYmFzZUlkZW50aWZpZXIsXG4gICAgZmV0Y2hEYXRhYmFzZUNvbW1lbnQsXG4gICAgZmV0Y2hQdWJsaWNSZWxhdGlvbnMsXG4gICAgZmV0Y2hQdWJsaWNFbnVtcyxcbiAgICBmZXRjaFJlbGF0aW9uQXR0cmlidXRlcyxcbiAgICBmZXRjaFJlbGF0aW9uSW5kZXhlcyxcbiAgICBmZXRjaFJlbGF0aW9uRm9yZWlnbktleXMsXG4gICAgZmV0Y2hWaWV3RGVmaW5pdGlvbixcbiAgICBhbmFseXplUmVsYXRpb24sXG4gICAgZmV0Y2hSZWxhdGlvblN0YXRzLFxuICAgIGZldGNoUHVibGljQ2hlY2tDb25zdHJhaW50cyxcbiAgICBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnMsXG4gICAgZmV0Y2hQdWJsaWNTZXF1ZW5jZXMsXG4gICAgZmV0Y2hQdWJsaWNUcmlnZ2VycyxcbiAgICBmZXRjaFB1YmxpY0Z1bmN0aW9ucyxcbiAgICBmZXRjaFB1YmxpY0N1c3RvbVR5cGVzLFxuICAgIGZldGNoUHVibGljUkxTLFxufSBmcm9tICcuLi9kYi9pbmRleC5tanMnO1xuXG5jb25zdCB0b1JlY29yZCA9IDxUIGV4dGVuZHMgdW5rbm93bj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBrZXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBSZWNvcmQ8c3RyaW5nLCBUPiA9PlxuICAgIE9iamVjdC5mcm9tRW50cmllcyhpdGVtcy5tYXAoKGl0ZW0pID0+IFtrZXkoaXRlbSksIGl0ZW1dKSk7XG5cbmNvbnN0IHRyYW5zZm9ybUF0dHJpYnV0ZSA9IChhdHRyOiBUQXR0cmlidXRlSW5mbykgPT4ge1xuICAgIGNvbnN0IGJhc2UgPSB7XG4gICAgICAgIG5hbWU6IGF0dHIuYXR0cmlidXRlX25hbWUsXG4gICAgICAgIGRhdGFfdHlwZTogYXR0ci5kYXRhX3R5cGUsXG4gICAgICAgIGlzX251bGxhYmxlOiBhdHRyLmlzX251bGxhYmxlLFxuICAgICAgICBjb21tZW50OiBhdHRyLmNvbW1lbnQsXG4gICAgfTtcblxuICAgIGlmIChhdHRyLmtpbmQgPT09ICdnZW5lcmF0ZWQnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgICAga2luZDogJ2dlbmVyYXRlZCcgYXMgY29uc3QsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfc3RvcmFnZTogYXR0ci5nZW5lcmF0ZWRfc3RvcmFnZSEgYXMgJ3N0b3JlZCcgfCAndmlydHVhbCcsXG4gICAgICAgICAgICBnZW5lcmF0ZWRfZXhwcmVzc2lvbjogYXR0ci5nZW5lcmF0ZWRfZXhwcmVzc2lvbiEsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHIuaGFzX2RlZmF1bHRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgICAgIGRlZmF1bHRfZXhwcmVzc2lvbjogYXR0ci5kZWZhdWx0X2V4cHJlc3Npb24hLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgICAgIGtpbmQ6ICdyZWd1bGFyJyBhcyBjb25zdCxcbiAgICAgICAgICAgICAgaGFzX2RlZmF1bHQ6IGZhbHNlIGFzIGNvbnN0LFxuICAgICAgICAgIH07XG59O1xuXG5jb25zdCBkZXJpdmVJbmRleEtpbmQgPSAoaWR4OiBUSW5kZXhJbmZvKSA9PlxuICAgIGlkeC5pc19wcmltYXJ5XG4gICAgICAgID8gKHtpbmRleF9raW5kOiAncHJpbWFyeSd9IGFzIGNvbnN0KVxuICAgICAgICA6IGlkeC5pc191bmlxdWVcbiAgICAgICAgICA/ICh7aW5kZXhfa2luZDogJ3VuaXF1ZSd9IGFzIGNvbnN0KVxuICAgICAgICAgIDogaWR4LmlzX2V4Y2x1c2lvblxuICAgICAgICAgICAgPyAoe1xuICAgICAgICAgICAgICAgICAgaW5kZXhfa2luZDogJ2V4Y2x1c2lvbicsXG4gICAgICAgICAgICAgICAgICBleGNsdXNpb25fb3BlcmF0b3JzOiBpZHguZXhjbHVzaW9uX29wZXJhdG9ycyEsXG4gICAgICAgICAgICAgIH0gYXMgY29uc3QpXG4gICAgICAgICAgICA6ICh7aW5kZXhfa2luZDogJ3BsYWluJ30gYXMgY29uc3QpO1xuXG5jb25zdCB0cmFuc2Zvcm1JbmRleCA9IChpZHg6IFRJbmRleEluZm8pID0+ICh7XG4gICAgaW5kZXhfbmFtZTogaWR4LmluZGV4X25hbWUsXG4gICAgcmVsYXRpb25fbmFtZTogaWR4LnJlbGF0aW9uX25hbWUsXG4gICAgYXR0cmlidXRlczogaWR4LmF0dHJpYnV0ZXMsXG4gICAgZGVmaW5pdGlvbjogaWR4LmRlZmluaXRpb24sXG4gICAgY29tbWVudDogaWR4LmNvbW1lbnQsXG4gICAgLi4uZGVyaXZlSW5kZXhLaW5kKGlkeCksXG4gICAgLi4uKGlkeC5pc19wYXJ0aWFsXG4gICAgICAgID8gKHtcbiAgICAgICAgICAgICAgaXNfcGFydGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGFydGlhbF9wcmVkaWNhdGU6IGlkeC5wYXJ0aWFsX3ByZWRpY2F0ZSEsXG4gICAgICAgICAgfSBhcyBjb25zdClcbiAgICAgICAgOiAoe2lzX3BhcnRpYWw6IGZhbHNlfSBhcyBjb25zdCkpLFxufSk7XG5cbmNvbnN0IHRyYW5zZm9ybVJlZmVyZW5jZSA9IChmazogVEZvcmVpZ25LZXlJbmZvKSA9PiAoe1xuICAgIGNvbnN0cmFpbnRfbmFtZTogZmsuY29uc3RyYWludF9uYW1lLFxuICAgIGF0dHJpYnV0ZXM6IGZrLmF0dHJpYnV0ZXMsXG4gICAgcmVmZXJlbmNlZF9yZWxhdGlvbjogZmsucmVmZXJlbmNlZF9yZWxhdGlvbixcbiAgICByZWZlcmVuY2VkX2F0dHJpYnV0ZXM6IGZrLnJlZmVyZW5jZWRfYXR0cmlidXRlcyxcbiAgICBvbl91cGRhdGU6IGZrLm9uX3VwZGF0ZSxcbiAgICBvbl9kZWxldGU6IGZrLm9uX2RlbGV0ZSxcbiAgICBjb21tZW50OiBmay5jb21tZW50LFxufSk7XG5cbmV4cG9ydCBjb25zdCBhc3NlbWJsZURhdGFiYXNlID0gYXN5bmMgKFxuICAgIHBvb2w6IFBvb2wsXG4gICAgc3RvcmU6IFRTdG9yZSxcbik6IFByb21pc2U8VERhdGFiYXNlSW50cm9zcGVjdGlvbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7Y29uY3VycmVuY3k6IDN9KTtcbiAgICBjb25zdCBjb3VudHMgPSBzdG9yZS5zdGVwcy5pbnRyb3NwZWN0aW9uLmNvdW50cztcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgc3RvcmUuc3RlcHMuaW50cm9zcGVjdGlvbi5zdGF0ZSA9ICdmZXRjaGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBbaWRlbnRpZmllciwgY29tbWVudF0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlSWRlbnRpZmllcihwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaERhdGFiYXNlQ29tbWVudChwb29sKSksXG4gICAgXSk7XG5cbiAgICBjb25zdCBbXG4gICAgICAgIGdyb3VwZWQsXG4gICAgICAgIGVudW1zLFxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzLFxuICAgICAgICBleHRlbnNpb25zLFxuICAgICAgICBzZXF1ZW5jZXMsXG4gICAgICAgIHRyaWdnZXJzLFxuICAgICAgICBmdW5jdGlvbnMsXG4gICAgICAgIGN1c3RvbVR5cGVzLFxuICAgICAgICBybHMsXG4gICAgXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljUmVsYXRpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljRW51bXMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoSW5zdGFsbGVkRXh0ZW5zaW9ucyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1NlcXVlbmNlcyhwb29sKSksXG4gICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFB1YmxpY1RyaWdnZXJzKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljRnVuY3Rpb25zKHBvb2wpKSxcbiAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUHVibGljQ3VzdG9tVHlwZXMocG9vbCkpLFxuICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hQdWJsaWNSTFMocG9vbCkpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgdHlwZWRHcm91cGVkID0gZ3JvdXBlZCBhcyBBd2FpdGVkPFxuICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1JlbGF0aW9ucz5cbiAgICA+O1xuICAgIGNvbnN0IHR5cGVkRW51bXMgPSBlbnVtcyBhcyBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGZldGNoUHVibGljRW51bXM+PjtcblxuICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgY291bnRzLnRhYmxlcyA9XG4gICAgICAgICAgICAodHlwZWRHcm91cGVkLnRhYmxlPy5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5wYXJ0aXRpb25lZF90YWJsZT8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMudmlld3MgPVxuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC52aWV3Py5sZW5ndGggPz8gMCkgK1xuICAgICAgICAgICAgKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldz8ubGVuZ3RoID8/IDApO1xuICAgICAgICBjb3VudHMuZW51bXMgPSBPYmplY3Qua2V5cyh0eXBlZEVudW1zKS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxSZWxhdGlvbnMgPSBbXG4gICAgICAgIC4uLih0eXBlZEdyb3VwZWQucGFydGl0aW9uZWRfdGFibGUgPz8gW10pLFxuICAgICAgICAuLi4odHlwZWRHcm91cGVkLnRhYmxlID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC52aWV3ID8/IFtdKSxcbiAgICAgICAgLi4uKHR5cGVkR3JvdXBlZC5tYXRlcmlhbGl6ZWRfdmlldyA/PyBbXSksXG4gICAgXTtcblxuICAgIGNvbnN0IGlzVmlld0tpbmQgPSAodHlwZTogc3RyaW5nKSA9PlxuICAgICAgICB0eXBlID09PSAndmlldycgfHwgdHlwZSA9PT0gJ21hdGVyaWFsaXplZF92aWV3JztcblxuICAgIGNvbnN0IHNraXBBbmFseXplID0gc3RvcmUub3V0cHV0T3B0aW9ucy5za2lwQW5hbHl6ZTtcblxuICAgIGNvbnN0IHJlbGF0aW9uRW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBhbGxSZWxhdGlvbnMubWFwKGFzeW5jIChyZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChyZWwudHlwZSAhPT0gJ3ZpZXcnICYmICFza2lwQW5hbHl6ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHF1ZXVlLmFkZCgoKSA9PiBhbmFseXplUmVsYXRpb24ocG9vbCwgcmVsLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50cy5hbmFseXplZCArPSAxO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBbYXR0cmlidXRlcywgaW5kZXhlcywgZm9yZWlnbktleXMsIHN0YXRzLCB2aWV3RGVmaW5pdGlvbl0gPVxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgcXVldWUuYWRkKCgpID0+IGZldGNoUmVsYXRpb25BdHRyaWJ1dGVzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uSW5kZXhlcyhwb29sLCByZWwubmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICBxdWV1ZS5hZGQoKCkgPT4gZmV0Y2hSZWxhdGlvbkZvcmVpZ25LZXlzKHBvb2wsIHJlbC5uYW1lKSksXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCgoKSA9PiBmZXRjaFJlbGF0aW9uU3RhdHMocG9vbCwgcmVsLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgaXNWaWV3S2luZChyZWwudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcXVldWUuYWRkKCgpID0+IGZldGNoVmlld0RlZmluaXRpb24ocG9vbCwgcmVsLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gYXR0cmlidXRlcyBhcyBUQXR0cmlidXRlSW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgaWR4cyA9IGluZGV4ZXMgYXMgVEluZGV4SW5mb1tdO1xuICAgICAgICAgICAgY29uc3QgZmtzID0gZm9yZWlnbktleXMgYXMgVEZvcmVpZ25LZXlJbmZvW107XG4gICAgICAgICAgICBjb25zdCByZWxTdGF0cyA9IHN0YXRzIGFzIFRSZWxhdGlvblN0YXRzO1xuXG4gICAgICAgICAgICBjb25zdCBkaXN0aW5jdExvb2t1cCA9IG5ldyBNYXAoXG4gICAgICAgICAgICAgICAgcmVsU3RhdHMuYXR0cmlidXRlcy5tYXAoKGEpID0+IFtcbiAgICAgICAgICAgICAgICAgICAgYS5hdHRyaWJ1dGVfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYS5lc3RpbWF0ZWRfZGlzdGluY3QsXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRzLmNvbHVtbnMgKz0gYXR0cnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvdW50cy5pbmRleGVzICs9IGlkeHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvdW50cy5mb3JlaWduS2V5cyArPSBma3MubGVuZ3RoO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQXR0cnMgPSBhdHRycy5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdHJhbnNmb3JtQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RpbmN0ID0gZGlzdGluY3RMb29rdXAuZ2V0KGF0dHIuYXR0cmlidXRlX25hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXN0aW5jdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gey4uLmJhc2UsIGVzdGltYXRlZF9kaXN0aW5jdDogZGlzdGluY3R9XG4gICAgICAgICAgICAgICAgICAgIDogYmFzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbk9iaiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWwubmFtZSxcbiAgICAgICAgICAgICAgICBjb21tZW50OiByZWwuY29tbWVudCxcbiAgICAgICAgICAgICAgICBraW5kOiByZWwudHlwZSxcbiAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcm93X2NvdW50OiByZWxTdGF0cy5lc3RpbWF0ZWRfcm93X2NvdW50LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRvUmVjb3JkKHRyYW5zZm9ybWVkQXR0cnMsIChhKSA9PiBhLm5hbWUpLFxuICAgICAgICAgICAgICAgIGluZGV4ZXM6IHRvUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBpZHhzLm1hcCh0cmFuc2Zvcm1JbmRleCksXG4gICAgICAgICAgICAgICAgICAgIChpKSA9PiBpLmluZGV4X25hbWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiB0b1JlY29yZChcbiAgICAgICAgICAgICAgICAgICAgZmtzLm1hcCh0cmFuc2Zvcm1SZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgICAocikgPT4gci5jb25zdHJhaW50X25hbWUsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAuLi4odmlld0RlZmluaXRpb25cbiAgICAgICAgICAgICAgICAgICAgPyB7dmlld0RlZmluaXRpb246IHZpZXdEZWZpbml0aW9uIGFzIHN0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gW3JlbC5uYW1lLCByZWxhdGlvbk9ial0gYXMgY29uc3Q7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAncG9zdGdyZXNxbCcgYXMgY29uc3QsXG4gICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nOiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uISxcbiAgICAgICAgICAgIHZlcnNpb25fbnVtYmVyOlxuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb25OdW1iZXIhLFxuICAgICAgICB9LFxuICAgICAgICBpZGVudGlmaWVyOiB7XG4gICAgICAgICAgICBzeXN0ZW1faWRlbnRpZmllcjogaWRlbnRpZmllciEuc3lzdGVtX2lkZW50aWZpZXIsXG4gICAgICAgICAgICBkYXRhYmFzZV9vaWQ6IGlkZW50aWZpZXIhLmRhdGFiYXNlX29pZCxcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogaWRlbnRpZmllciEuZGF0YWJhc2VfbmFtZSxcbiAgICAgICAgY29tbWVudDogY29tbWVudCA/PyBudWxsLFxuICAgICAgICByZWxhdGlvbnM6IE9iamVjdC5mcm9tRW50cmllcyhyZWxhdGlvbkVudHJpZXMpLFxuICAgICAgICBlbnVtczogdHlwZWRFbnVtcyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogY2hlY2tDb25zdHJhaW50cyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNDaGVja0NvbnN0cmFpbnRzPlxuICAgICAgICA+LFxuICAgICAgICBleHRlbnNpb25zOiBleHRlbnNpb25zIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaEluc3RhbGxlZEV4dGVuc2lvbnM+XG4gICAgICAgID4sXG4gICAgICAgIHNlcXVlbmNlczogc2VxdWVuY2VzIGFzIEF3YWl0ZWQ8XG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaFB1YmxpY1NlcXVlbmNlcz5cbiAgICAgICAgPixcbiAgICAgICAgdHJpZ2dlcnM6IHRyaWdnZXJzIGFzIEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNUcmlnZ2Vycz4+LFxuICAgICAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucyBhcyBBd2FpdGVkPFxuICAgICAgICAgICAgUmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hQdWJsaWNGdW5jdGlvbnM+XG4gICAgICAgID4sXG4gICAgICAgIGN1c3RvbVR5cGVzOlxuICAgICAgICAgICAgY3VzdG9tVHlwZXMgYXMgdW5rbm93biBhcyBURGF0YWJhc2VJbnRyb3NwZWN0aW9uWydjdXN0b21UeXBlcyddLFxuICAgICAgICBybHM6IHJscyBhcyB1bmtub3duIGFzIFREYXRhYmFzZUludHJvc3BlY3Rpb25bJ3JscyddLFxuICAgIH07XG59O1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.mts","sourceRoot":"./src/","sources":["app/db.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAIzC,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAEF,QAAA,MAAO,IAAI,0BAAM,CAAC;AAyHlB,eAAO,MAAM,SAAS,GAClB,OAAO,MAAM,KACd,OAAO,CAAC,aAAa,GAAG,SAAS,CA8GnC,CAAC"}
1
+ {"version":3,"file":"db.d.mts","sourceRoot":"./src/","sources":["app/db.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAIzC,MAAM,MAAM,aAAa,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAEF,QAAA,MAAO,IAAI,0BAAM,CAAC;AAyHlB,eAAO,MAAM,SAAS,GAClB,OAAO,MAAM,KACd,OAAO,CAAC,aAAa,GAAG,SAAS,CA+GnC,CAAC"}
package/dist/app/db.mjs CHANGED
@@ -162,7 +162,8 @@ export const connectDB = async (store) => {
162
162
  }
163
163
  runInAction(() => {
164
164
  store.steps.databaseConnection.wrongAttempt =
165
- store.steps.databaseConnection.promptCount > 0;
165
+ store.steps.databaseConnection.promptCount > 0 ||
166
+ password !== undefined;
166
167
  store.steps.databaseConnection.password = null;
167
168
  store.steps.databaseConnection.promptCount += 1;
168
169
  store.steps.databaseConnection.state = 'need-password';
@@ -178,4 +179,4 @@ export const connectDB = async (store) => {
178
179
  };
179
180
  return attemptConnection(config.password, ssl);
180
181
  };
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2RiLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFJdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFPdkQsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQztBQUVsQixNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBWSxFQUFVLEVBQUU7SUFDbkQsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELE1BQU0sTUFBTSxHQUFHLEdBS2QsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7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Q2hELEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBRW5FLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUyxDQUFDO1lBRTdELFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUMvQyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwZyBmcm9tICdwZyc7XG5pbXBvcnQge3J1bkluQWN0aW9uLCB3aGVufSBmcm9tICdtb2J4JztcbmltcG9ydCB7c2NvcGV9IGZyb20gJ3Njb3BlLXV0aWxpdGllcyc7XG5cbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQgdHlwZSB7VFNTTE1vZGV9IGZyb20gJy4uL2luZGV4Lm1qcyc7XG5pbXBvcnQge2ZldGNoUG9zdGdyZXNWZXJzaW9ufSBmcm9tICcuLi9kYi92ZXJzaW9uLm1qcyc7XG5cbmV4cG9ydCB0eXBlIFREQkNvbm5lY3Rpb24gPSB7XG4gICAgcmVhZG9ubHkgcG9vbDogSW5zdGFuY2VUeXBlPHR5cGVvZiBQb29sPjtcbiAgICByZWFkb25seSBjbGVhbnVwOiAoKSA9PiB2b2lkO1xufTtcblxuY29uc3Qge1Bvb2x9ID0gcGc7XG5cbmNvbnN0IGZvcm1hdENvbm5lY3Rpb25FcnJvciA9IChlcnI6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKGVycikgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgIH1cblxuICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gU3lzdGVtIGVycm9ycyAoRUNPTk5SRUZVU0VELCBFVElNRURPVVQsIGV0Yy4pXG4gICAgY29uc3Qgc3lzRXJyID0gZXJyIGFzIHtcbiAgICAgICAgY29kZT86IHN0cmluZztcbiAgICAgICAgc3lzY2FsbD86IHN0cmluZztcbiAgICAgICAgYWRkcmVzcz86IHN0cmluZztcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICB9O1xuICAgIGlmIChzeXNFcnIuY29kZSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtzeXNFcnIuY29kZV07XG4gICAgICAgIGlmIChzeXNFcnIuc3lzY2FsbCkge1xuICAgICAgICAgICAgcGFydHMucHVzaChzeXNFcnIuc3lzY2FsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5c0Vyci5hZGRyZXNzKSB7XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKHN5c0Vyci5hZGRyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3lzRXJyLnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcoc3lzRXJyLnBvcnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICAgIH1cblxuICAgIHJldHVybiAnQ29ubmVjdGlvbiBmYWlsZWQnO1xufTtcblxudHlwZSBUUmVzb2x2ZWREQkNvbmZpZyA9IHtcbiAgICByZWFkb25seSBob3N0bmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBkYXRhYmFzZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IHJlc29sdmVEQkNvbmZpZyA9IChzdG9yZTogVFN0b3JlKTogVFJlc29sdmVkREJDb25maWcgPT5cbiAgICBzY29wZSh7XG4gICAgICAgIGhvc3RuYW1lOiAnbG9jYWxob3N0JyxcbiAgICAgICAgcG9ydDogNTQzMixcbiAgICAgICAgZGF0YWJhc2U6ICdwb3N0Z3JlcycsXG4gICAgICAgIHVzZXJuYW1lOiAncG9zdGdyZXMnLFxuICAgICAgICBwYXNzd29yZDogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB9KVxuICAgICAgICAubGV0KChjb25maWcpID0+ICh7XG4gICAgICAgICAgICBob3N0bmFtZTogcHJvY2Vzcy5lbnZbJ1BHSE9TVCddID8/IGNvbmZpZy5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHByb2Nlc3MuZW52WydQR1BPUlQnXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQocHJvY2Vzcy5lbnZbJ1BHUE9SVCddLCAxMClcbiAgICAgICAgICAgICAgICA6IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgZGF0YWJhc2U6IHByb2Nlc3MuZW52WydQR0RBVEFCQVNFJ10gPz8gY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHByb2Nlc3MuZW52WydQR1VTRVInXSA/PyBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnZbJ1BHUEFTU1dPUkQnXSA/PyBjb25maWcucGFzc3dvcmQsXG4gICAgICAgIH0pKVxuICAgICAgICAubGV0KChjb25maWcpID0+XG4gICAgICAgICAgICBzdG9yZS5jb25maWcuY29ubmVjdGlvblN0cmluZ1xuICAgICAgICAgICAgICAgID8gc2NvcGUobmV3IFVSTChzdG9yZS5jb25maWcuY29ubmVjdGlvblN0cmluZykpXG4gICAgICAgICAgICAgICAgICAgICAgLmxldCgodXJsKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lIHx8IGNvbmZpZy5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogdXJsLnBvcnQgPyBwYXJzZUludCh1cmwucG9ydCwgMTApIDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlOiB1cmwucGF0aG5hbWUuc2xpY2UoMSkgfHwgY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiB1cmwucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZSgpXG4gICAgICAgICAgICAgICAgOiBjb25maWcsXG4gICAgICAgIClcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiAoe1xuICAgICAgICAgICAgaG9zdG5hbWU6IHN0b3JlLmNvbmZpZy5ob3N0bmFtZSA/PyBjb25maWcuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBzdG9yZS5jb25maWcucG9ydCA/PyBjb25maWcucG9ydCxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBzdG9yZS5jb25maWcuZGF0YWJhc2UgPz8gY29uZmlnLmRhdGFiYXNlLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHN0b3JlLmNvbmZpZy51c2VybmFtZSA/PyBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICB9KSlcbiAgICAgICAgLnZhbHVlKCk7XG5cbnR5cGUgVFNTTENvbmZpZyA9XG4gICAgfCBmYWxzZVxuICAgIHwge1xuICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhbjtcbiAgICAgICAgICBjYT86IHN0cmluZztcbiAgICAgICAgICBjZXJ0Pzogc3RyaW5nO1xuICAgICAgICAgIGtleT86IHN0cmluZztcbiAgICAgIH07XG5cbmNvbnN0IGJ1aWxkU1NMQ29uZmlnID0gKHN0b3JlOiBUU3RvcmUpOiBUU1NMQ29uZmlnID0+IHtcbiAgICBjb25zdCBtb2RlOiBUU1NMTW9kZSA9IHN0b3JlLmNvbmZpZy5zc2xtb2RlID8/ICdwcmVmZXInO1xuXG4gICAgcmV0dXJuIG1vZGUgPT09ICdkaXNhYmxlJ1xuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDoge1xuICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6XG4gICAgICAgICAgICAgICAgICBtb2RlID09PSAndmVyaWZ5LWNhJyB8fCBtb2RlID09PSAndmVyaWZ5LWZ1bGwnLFxuICAgICAgICAgICAgICAuLi4oc3RvcmUuY29uZmlnLnNzbHJvb3RjZXJ0XG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhOiByZWFkRmlsZVN5bmMoc3RvcmUuY29uZmlnLnNzbHJvb3RjZXJ0LCAndXRmLTgnKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIC4uLihzdG9yZS5jb25maWcuc3NsY2VydFxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZXJ0OiByZWFkRmlsZVN5bmMoc3RvcmUuY29uZmlnLnNzbGNlcnQsICd1dGYtOCcpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgLi4uKHN0b3JlLmNvbmZpZy5zc2xrZXlcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByZWFkRmlsZVN5bmMoc3RvcmUuY29uZmlnLnNzbGtleSwgJ3V0Zi04JyksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgY29ubmVjdERCID0gYXN5bmMgKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4pOiBQcm9taXNlPFREQkNvbm5lY3Rpb24gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlREJDb25maWcoc3RvcmUpO1xuICAgIGNvbnN0IHNzbCA9IGJ1aWxkU1NMQ29uZmlnKHN0b3JlKTtcblxuICAgIC8vIFNTSCB0dW5uZWw6IGNvbm5lY3QgdmlhIGxvY2FsaG9zdCB0dW5uZWwsIGJ1dCBkaXNwbGF5IHRoZSByZWFsIHJlbW90ZSB0YXJnZXRcbiAgICBjb25zdCBjb25uZWN0aW9uSG9zdCA9XG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24uZW5hYmxlZCAmJlxuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmxvY2FsUG9ydCAhPT0gbnVsbFxuICAgICAgICAgICAgPyAnMTI3LjAuMC4xJ1xuICAgICAgICAgICAgOiBjb25maWcuaG9zdG5hbWU7XG4gICAgY29uc3QgY29ubmVjdGlvblBvcnQgPVxuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQgJiZcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgIT09IG51bGxcbiAgICAgICAgICAgID8gc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnRcbiAgICAgICAgICAgIDogY29uZmlnLnBvcnQ7XG5cbiAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRIb3N0bmFtZSA9IGNvbmZpZy5ob3N0bmFtZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZFBvcnQgPSBjb25maWcucG9ydDtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZERhdGFiYXNlID0gY29uZmlnLmRhdGFiYXNlO1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkVXNlcm5hbWUgPSBjb25maWcudXNlcm5hbWU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICB9KTtcblxuICAgIGNvbnN0IGF0dGVtcHRDb25uZWN0aW9uID0gYXN5bmMgKFxuICAgICAgICBwYXNzd29yZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICBzc2xDb25maWc6IFRTU0xDb25maWcsXG4gICAgKTogUHJvbWlzZTxUREJDb25uZWN0aW9uIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICAgIGNvbnN0IHBvb2wgPSBuZXcgUG9vbCh7XG4gICAgICAgICAgICBob3N0OiBjb25uZWN0aW9uSG9zdCxcbiAgICAgICAgICAgIHBvcnQ6IGNvbm5lY3Rpb25Qb3J0LFxuICAgICAgICAgICAgZGF0YWJhc2U6IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgIHVzZXI6IGNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgc3NsOiBzc2xDb25maWcsXG4gICAgICAgICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogMTBfMDAwLFxuICAgICAgICB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgcG9vbC5jb25uZWN0KCk7XG4gICAgICAgICAgICBjbGllbnQucmVsZWFzZSgpO1xuXG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZmV0Y2hQb3N0Z3Jlc1ZlcnNpb24ocG9vbCk7XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi52ZXJzaW9uO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wb3N0Z3Jlc1ZlcnNpb25OdW1iZXIgPVxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLnZlcnNpb25fbnVtO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0ZWQnO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcG9vbCxcbiAgICAgICAgICAgICAgICBjbGVhbnVwOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBvb2wuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdpZGxlJztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXdhaXQgcG9vbC5lbmQoKTtcblxuICAgICAgICAgICAgLy8gU1NMIGVycm9ycyBoYXBwZW4gYmVmb3JlIGF1dGgg4oCUIGNoZWNrIGZpcnN0XG4gICAgICAgICAgICBjb25zdCBlcnJNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJyc7XG4gICAgICAgICAgICBjb25zdCBpc1NTTEVycm9yID0gZXJyTXNnLmluY2x1ZGVzKCdkb2VzIG5vdCBzdXBwb3J0IFNTTCcpO1xuICAgICAgICAgICAgY29uc3Qgc3NsTW9kZTogVFNTTE1vZGUgPSBzdG9yZS5jb25maWcuc3NsbW9kZSA/PyAncHJlZmVyJztcblxuICAgICAgICAgICAgaWYgKGlzU1NMRXJyb3IgJiYgc3NsTW9kZSA9PT0gJ3ByZWZlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0ZW1wdENvbm5lY3Rpb24ocGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGdDb2RlID0gKGVyciBhcyB7Y29kZT86IHN0cmluZ30pLmNvZGU7XG4gICAgICAgICAgICBjb25zdCBpc0F1dGhFcnJvciA9XG4gICAgICAgICAgICAgICAgcGdDb2RlID09PSAnMjhQMDEnIHx8XG4gICAgICAgICAgICAgICAgcGdDb2RlID09PSAnMjgwMDAnIHx8XG4gICAgICAgICAgICAgICAgZXJyTXNnLmluY2x1ZGVzKCdwYXNzd29yZCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cbiAgICAgICAgICAgIGlmICghaXNBdXRoRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdlcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5lcnJvciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRDb25uZWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLndyb25nQXR0ZW1wdCA9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wcm9tcHRDb3VudCA+IDA7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucHJvbXB0Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnbmVlZC1wYXNzd29yZCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgIT09IG51bGwpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdQYXNzd29yZCA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCE7XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdENvbm5lY3Rpb24obmV3UGFzc3dvcmQsIHNzbENvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKGNvbmZpZy5wYXNzd29yZCwgc3NsKTtcbn07XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIubWpzIiwic291cmNlUm9vdCI6Ii4vc3JjLyIsInNvdXJjZXMiOlsiYXBwL2RiLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFJdEMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFPdkQsTUFBTSxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUUsQ0FBQztBQUVsQixNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBWSxFQUFVLEVBQUU7SUFDbkQsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELE1BQU0sTUFBTSxHQUFHLEdBS2QsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7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QUFXLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUVuRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVMsQ0FBQztZQUU3RCxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDL0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JlYWRGaWxlU3luY30gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGcgZnJvbSAncGcnO1xuaW1wb3J0IHtydW5JbkFjdGlvbiwgd2hlbn0gZnJvbSAnbW9ieCc7XG5pbXBvcnQge3Njb3BlfSBmcm9tICdzY29wZS11dGlsaXRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1RTU0xNb2RlfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHtmZXRjaFBvc3RncmVzVmVyc2lvbn0gZnJvbSAnLi4vZGIvdmVyc2lvbi5tanMnO1xuXG5leHBvcnQgdHlwZSBUREJDb25uZWN0aW9uID0ge1xuICAgIHJlYWRvbmx5IHBvb2w6IEluc3RhbmNlVHlwZTx0eXBlb2YgUG9vbD47XG4gICAgcmVhZG9ubHkgY2xlYW51cDogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IHtQb29sfSA9IHBnO1xuXG5jb25zdCBmb3JtYXRDb25uZWN0aW9uRXJyb3IgPSAoZXJyOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhlcnIpIHx8ICdVbmtub3duIGVycm9yJztcbiAgICB9XG5cbiAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIFN5c3RlbSBlcnJvcnMgKEVDT05OUkVGVVNFRCwgRVRJTUVET1VULCBldGMuKVxuICAgIGNvbnN0IHN5c0VyciA9IGVyciBhcyB7XG4gICAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICAgIHN5c2NhbGw/OiBzdHJpbmc7XG4gICAgICAgIGFkZHJlc3M/OiBzdHJpbmc7XG4gICAgICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgfTtcbiAgICBpZiAoc3lzRXJyLmNvZGUpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbc3lzRXJyLmNvZGVdO1xuICAgICAgICBpZiAoc3lzRXJyLnN5c2NhbGwpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goc3lzRXJyLnN5c2NhbGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeXNFcnIuYWRkcmVzcykge1xuICAgICAgICAgICAgcGFydHMucHVzaChzeXNFcnIuYWRkcmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN5c0Vyci5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHN5c0Vyci5wb3J0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ0Nvbm5lY3Rpb24gZmFpbGVkJztcbn07XG5cbnR5cGUgVFJlc29sdmVkREJDb25maWcgPSB7XG4gICAgcmVhZG9ubHkgaG9zdG5hbWU6IHN0cmluZztcbiAgICByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgZGF0YWJhc2U6IHN0cmluZztcbiAgICByZWFkb25seSB1c2VybmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCByZXNvbHZlREJDb25maWcgPSAoc3RvcmU6IFRTdG9yZSk6IFRSZXNvbHZlZERCQ29uZmlnID0+XG4gICAgc2NvcGUoe1xuICAgICAgICBob3N0bmFtZTogJ2xvY2FsaG9zdCcsXG4gICAgICAgIHBvcnQ6IDU0MzIsXG4gICAgICAgIGRhdGFiYXNlOiAncG9zdGdyZXMnLFxuICAgICAgICB1c2VybmFtZTogJ3Bvc3RncmVzJyxcbiAgICAgICAgcGFzc3dvcmQ6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgfSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PiAoe1xuICAgICAgICAgICAgaG9zdG5hbWU6IHByb2Nlc3MuZW52WydQR0hPU1QnXSA/PyBjb25maWcuaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwcm9jZXNzLmVudlsnUEdQT1JUJ11cbiAgICAgICAgICAgICAgICA/IHBhcnNlSW50KHByb2Nlc3MuZW52WydQR1BPUlQnXSwgMTApXG4gICAgICAgICAgICAgICAgOiBjb25maWcucG9ydCxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudlsnUEdEQVRBQkFTRSddID8/IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBwcm9jZXNzLmVudlsnUEdVU0VSJ10gPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52WydQR1BBU1NXT1JEJ10gPz8gY29uZmlnLnBhc3N3b3JkLFxuICAgICAgICB9KSlcbiAgICAgICAgLmxldCgoY29uZmlnKSA9PlxuICAgICAgICAgICAgc3RvcmUuY29uZmlnLmNvbm5lY3Rpb25TdHJpbmdcbiAgICAgICAgICAgICAgICA/IHNjb3BlKG5ldyBVUkwoc3RvcmUuY29uZmlnLmNvbm5lY3Rpb25TdHJpbmcpKVxuICAgICAgICAgICAgICAgICAgICAgIC5sZXQoKHVybCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSB8fCBjb25maWcuaG9zdG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0ID8gcGFyc2VJbnQodXJsLnBvcnQsIDEwKSA6IGNvbmZpZy5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZTogdXJsLnBhdGhuYW1lLnNsaWNlKDEpIHx8IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVVUklDb21wb25lbnQodXJsLnVzZXJuYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogdXJsLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAudmFsdWUoKVxuICAgICAgICAgICAgICAgIDogY29uZmlnLFxuICAgICAgICApXG4gICAgICAgIC5sZXQoKGNvbmZpZykgPT4gKHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiBzdG9yZS5jb25maWcuaG9zdG5hbWUgPz8gY29uZmlnLmhvc3RuYW1lLFxuICAgICAgICAgICAgcG9ydDogc3RvcmUuY29uZmlnLnBvcnQgPz8gY29uZmlnLnBvcnQsXG4gICAgICAgICAgICBkYXRhYmFzZTogc3RvcmUuY29uZmlnLmRhdGFiYXNlID8/IGNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiBzdG9yZS5jb25maWcudXNlcm5hbWUgPz8gY29uZmlnLnVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IGNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgfSkpXG4gICAgICAgIC52YWx1ZSgpO1xuXG50eXBlIFRTU0xDb25maWcgPVxuICAgIHwgZmFsc2VcbiAgICB8IHtcbiAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgY2E/OiBzdHJpbmc7XG4gICAgICAgICAgY2VydD86IHN0cmluZztcbiAgICAgICAgICBrZXk/OiBzdHJpbmc7XG4gICAgICB9O1xuXG5jb25zdCBidWlsZFNTTENvbmZpZyA9IChzdG9yZTogVFN0b3JlKTogVFNTTENvbmZpZyA9PiB7XG4gICAgY29uc3QgbW9kZTogVFNTTE1vZGUgPSBzdG9yZS5jb25maWcuc3NsbW9kZSA/PyAncHJlZmVyJztcblxuICAgIHJldHVybiBtb2RlID09PSAnZGlzYWJsZSdcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOlxuICAgICAgICAgICAgICAgICAgbW9kZSA9PT0gJ3ZlcmlmeS1jYScgfHwgbW9kZSA9PT0gJ3ZlcmlmeS1mdWxsJyxcbiAgICAgICAgICAgICAgLi4uKHN0b3JlLmNvbmZpZy5zc2xyb290Y2VydFxuICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYTogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xyb290Y2VydCwgJ3V0Zi04JyksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAuLi4oc3RvcmUuY29uZmlnLnNzbGNlcnRcbiAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VydDogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xjZXJ0LCAndXRmLTgnKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIC4uLihzdG9yZS5jb25maWcuc3Nsa2V5XG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcmVhZEZpbGVTeW5jKHN0b3JlLmNvbmZpZy5zc2xrZXksICd1dGYtOCcpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbm5lY3REQiA9IGFzeW5jIChcbiAgICBzdG9yZTogVFN0b3JlLFxuKTogUHJvbWlzZTxUREJDb25uZWN0aW9uIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVzb2x2ZURCQ29uZmlnKHN0b3JlKTtcbiAgICBjb25zdCBzc2wgPSBidWlsZFNTTENvbmZpZyhzdG9yZSk7XG5cbiAgICAvLyBTU0ggdHVubmVsOiBjb25uZWN0IHZpYSBsb2NhbGhvc3QgdHVubmVsLCBidXQgZGlzcGxheSB0aGUgcmVhbCByZW1vdGUgdGFyZ2V0XG4gICAgY29uc3QgY29ubmVjdGlvbkhvc3QgPVxuICAgICAgICBzdG9yZS5zdGVwcy5zc2hDb25uZWN0aW9uLmVuYWJsZWQgJiZcbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5sb2NhbFBvcnQgIT09IG51bGxcbiAgICAgICAgICAgID8gJzEyNy4wLjAuMSdcbiAgICAgICAgICAgIDogY29uZmlnLmhvc3RuYW1lO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25Qb3J0ID1cbiAgICAgICAgc3RvcmUuc3RlcHMuc3NoQ29ubmVjdGlvbi5lbmFibGVkICYmXG4gICAgICAgIHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0ICE9PSBudWxsXG4gICAgICAgICAgICA/IHN0b3JlLnN0ZXBzLnNzaENvbm5lY3Rpb24ubG9jYWxQb3J0XG4gICAgICAgICAgICA6IGNvbmZpZy5wb3J0O1xuXG4gICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGlja2VkSG9zdG5hbWUgPSBjb25maWcuaG9zdG5hbWU7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWRQb3J0ID0gY29uZmlnLnBvcnQ7XG4gICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5waWNrZWREYXRhYmFzZSA9IGNvbmZpZy5kYXRhYmFzZTtcbiAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBpY2tlZFVzZXJuYW1lID0gY29uZmlnLnVzZXJuYW1lO1xuICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGluZyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhdHRlbXB0Q29ubmVjdGlvbiA9IGFzeW5jIChcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgc3NsQ29uZmlnOiBUU1NMQ29uZmlnLFxuICAgICk6IFByb21pc2U8VERCQ29ubmVjdGlvbiB8IHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBvb2woe1xuICAgICAgICAgICAgaG9zdDogY29ubmVjdGlvbkhvc3QsXG4gICAgICAgICAgICBwb3J0OiBjb25uZWN0aW9uUG9ydCxcbiAgICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcuZGF0YWJhc2UsXG4gICAgICAgICAgICB1c2VyOiBjb25maWcudXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgIHNzbDogc3NsQ29uZmlnLFxuICAgICAgICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IDEwXzAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHBvb2wuY29ubmVjdCgpO1xuICAgICAgICAgICAgY2xpZW50LnJlbGVhc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGZldGNoUG9zdGdyZXNWZXJzaW9uKHBvb2wpO1xuXG4gICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBvc3RncmVzVmVyc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb24udmVyc2lvbjtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucG9zdGdyZXNWZXJzaW9uTnVtYmVyID1cbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi52ZXJzaW9uX251bTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnY29ubmVjdGVkJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBvb2wsXG4gICAgICAgICAgICAgICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwb29sLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICBydW5JbkFjdGlvbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnaWRsZSc7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGF3YWl0IHBvb2wuZW5kKCk7XG5cbiAgICAgICAgICAgIC8vIFNTTCBlcnJvcnMgaGFwcGVuIGJlZm9yZSBhdXRoIOKAlCBjaGVjayBmaXJzdFxuICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgaXNTU0xFcnJvciA9IGVyck1zZy5pbmNsdWRlcygnZG9lcyBub3Qgc3VwcG9ydCBTU0wnKTtcbiAgICAgICAgICAgIGNvbnN0IHNzbE1vZGU6IFRTU0xNb2RlID0gc3RvcmUuY29uZmlnLnNzbG1vZGUgPz8gJ3ByZWZlcic7XG5cbiAgICAgICAgICAgIGlmIChpc1NTTEVycm9yICYmIHNzbE1vZGUgPT09ICdwcmVmZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKHBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBnQ29kZSA9IChlcnIgYXMge2NvZGU/OiBzdHJpbmd9KS5jb2RlO1xuICAgICAgICAgICAgY29uc3QgaXNBdXRoRXJyb3IgPVxuICAgICAgICAgICAgICAgIHBnQ29kZSA9PT0gJzI4UDAxJyB8fFxuICAgICAgICAgICAgICAgIHBnQ29kZSA9PT0gJzI4MDAwJyB8fFxuICAgICAgICAgICAgICAgIGVyck1zZy5pbmNsdWRlcygncGFzc3dvcmQgbXVzdCBiZSBhIHN0cmluZycpO1xuXG4gICAgICAgICAgICBpZiAoIWlzQXV0aEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnZXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uZXJyb3IgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0Q29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi53cm9uZ0F0dGVtcHQgPVxuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucHJvbXB0Q291bnQgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuZGF0YWJhc2VDb25uZWN0aW9uLnBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucHJvbXB0Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24uc3RhdGUgPSAnbmVlZC1wYXNzd29yZCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXdhaXQgd2hlbigoKSA9PiBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgIT09IG51bGwpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdQYXNzd29yZCA9IHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCE7XG5cbiAgICAgICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5kYXRhYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmRhdGFiYXNlQ29ubmVjdGlvbi5zdGF0ZSA9ICdjb25uZWN0aW5nJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYXR0ZW1wdENvbm5lY3Rpb24obmV3UGFzc3dvcmQsIHNzbENvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dGVtcHRDb25uZWN0aW9uKGNvbmZpZy5wYXNzd29yZCwgc3NsKTtcbn07XG4iXX0=
@@ -8,6 +8,7 @@ export declare const detectProvider: (hostname: string) => TDatabaseProvider;
8
8
  export declare const detectAIAssistants: () => TAIAssistant[];
9
9
  export declare const detectDocker: () => boolean;
10
10
  export declare const detectSSHSession: () => boolean;
11
+ export declare const detectHostname: () => string;
11
12
  export declare const detectUsername: () => string;
12
13
  export declare const isLocalhost: (hostname: string) => boolean;
13
14
  //# sourceMappingURL=detect.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.mts","sourceRoot":"./src/","sources":["app/detect.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,YAAY,EACZ,iBAAiB,EACjB,GAAG,EACH,MAAM,EACN,aAAa,EACb,eAAe,EAClB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ,QAAO,GAKT,CAAC;AAEpB,eAAO,MAAM,WAAW,QAAO,MAqB9B,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAAgD,CAAC;AAI9E,eAAO,MAAM,kBAAkB,QAAO,aAiBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,eAYvC,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,iBA0BjD,CAAC;AAaF,eAAO,MAAM,kBAAkB,QAAO,YAAY,EAMjD,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,OAAoC,CAAC;AAErE,eAAO,MAAM,gBAAgB,QAAO,OACuB,CAAC;AAE5D,eAAO,MAAM,cAAc,QAAO,MAA6B,CAAC;AAEhE,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,OAS9C,CAAC"}
1
+ {"version":3,"file":"detect.d.mts","sourceRoot":"./src/","sources":["app/detect.mts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,YAAY,EACZ,iBAAiB,EACjB,GAAG,EACH,MAAM,EACN,aAAa,EACb,eAAe,EAClB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ,QAAO,GAKT,CAAC;AAEpB,eAAO,MAAM,WAAW,QAAO,MAqB9B,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAAgD,CAAC;AAI9E,eAAO,MAAM,kBAAkB,QAAO,aAiBrC,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,eAYvC,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,iBA0BjD,CAAC;AAaF,eAAO,MAAM,kBAAkB,QAAO,YAAY,EAMjD,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,OAAoC,CAAC;AAErE,eAAO,MAAM,gBAAgB,QAAO,OACuB,CAAC;AAE5D,eAAO,MAAM,cAAc,QAAO,MAAoB,CAAC;AAEvD,eAAO,MAAM,cAAc,QAAO,MAA6B,CAAC;AAEhE,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,OAS9C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { existsSync } from 'fs';
2
- import { totalmem, userInfo } from 'os';
2
+ import { hostname, totalmem, userInfo } from 'os';
3
3
  import { basename, join } from 'path';
4
4
  import { cwd, env, platform } from 'process';
5
5
  export const detectOS = () => platform === 'darwin'
@@ -96,6 +96,7 @@ export const detectAIAssistants = () => {
96
96
  };
97
97
  export const detectDocker = () => existsSync('/.dockerenv');
98
98
  export const detectSSHSession = () => !!(env.SSH_CONNECTION || env.SSH_CLIENT || env.SSH_TTY);
99
+ export const detectHostname = () => hostname();
99
100
  export const detectUsername = () => userInfo().username;
100
101
  export const isLocalhost = (hostname) => {
101
102
  const lower = hostname.toLowerCase();
@@ -104,4 +105,4 @@ export const isLocalhost = (hostname) => {
104
105
  lower === '::1' ||
105
106
  lower === '0.0.0.0');
106
107
  };
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0Lm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImFwcC9kZXRlY3QubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFDOUIsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBVzNDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFRLEVBQUUsQ0FDOUIsUUFBUSxLQUFLLFFBQVE7SUFDakIsQ0FBQyxDQUFDLE9BQU87SUFDVCxDQUFDLENBQUMsUUFBUSxLQUFLLE9BQU87UUFDcEIsQ0FBQyxDQUFDLFNBQVM7UUFDWCxDQUFDLENBQUMsT0FBTyxDQUFDO0FBRXBCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFXLEVBQUU7SUFDcEMsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDdkIsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFFeEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBMkI7UUFDbEMsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsS0FBSztRQUNWLEdBQUcsRUFBRSxLQUFLO1FBQ1YsSUFBSSxFQUFFLE1BQU07UUFDWixHQUFHLEVBQUUsS0FBSztLQUNiLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENB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RUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUVoRSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFnQixFQUFXLEVBQUU7SUFDckQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXJDLE9BQU8sQ0FDSCxLQUFLLEtBQUssV0FBVztRQUNyQixLQUFLLEtBQUssV0FBVztRQUNyQixLQUFLLEtBQUssS0FBSztRQUNmLEtBQUssS0FBSyxTQUFTLENBQ3RCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7dG90YWxtZW0sIHVzZXJJbmZvfSBmcm9tICdvcyc7XG5pbXBvcnQge2Jhc2VuYW1lLCBqb2lufSBmcm9tICdwYXRoJztcbmltcG9ydCB7Y3dkLCBlbnYsIHBsYXRmb3JtfSBmcm9tICdwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFRBSUFzc2lzdGFudCxcbiAgICBURGF0YWJhc2VQcm92aWRlcixcbiAgICBUT3MsXG4gICAgVFNoZWxsLFxuICAgIFRTeXN0ZW1NZW1vcnksXG4gICAgVFBhY2thZ2VNYW5hZ2VyLFxufSBmcm9tICdAZGJjdHgvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RPUyA9ICgpOiBUT3MgPT5cbiAgICBwbGF0Zm9ybSA9PT0gJ2RhcndpbidcbiAgICAgICAgPyAnbWFjb3MnXG4gICAgICAgIDogcGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICAgICAgICA/ICd3aW5kb3dzJ1xuICAgICAgICAgIDogJ2xpbnV4JztcblxuZXhwb3J0IGNvbnN0IGRldGVjdFNoZWxsID0gKCk6IFRTaGVsbCA9PiB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIHJldHVybiAncG93ZXJzaGVsbCc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hlbGwgPSBlbnYuU0hFTEw7XG5cbiAgICBpZiAoIXNoZWxsKSB7XG4gICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShzaGVsbCk7XG4gICAgY29uc3Qga25vd246IFJlY29yZDxzdHJpbmcsIFRTaGVsbD4gPSB7XG4gICAgICAgIGJhc2g6ICdiYXNoJyxcbiAgICAgICAgenNoOiAnenNoJyxcbiAgICAgICAga3NoOiAna3NoJyxcbiAgICAgICAgZmlzaDogJ2Zpc2gnLFxuICAgICAgICBhc2g6ICdhc2gnLFxuICAgIH07XG5cbiAgICByZXR1cm4ga25vd25bbmFtZV0gPz8gJ290aGVyJztcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RXU0wgPSAoKTogYm9vbGVhbiA9PiAhIShlbnYuV1NMX0RJU1RST19OQU1FIHx8IGVudi5XU0xFTlYpO1xuXG5jb25zdCBHQiA9IDEwMjQgKiogMztcblxuZXhwb3J0IGNvbnN0IGRldGVjdFN5c3RlbU1lbW9yeSA9ICgpOiBUU3lzdGVtTWVtb3J5ID0+IHtcbiAgICBjb25zdCBieXRlcyA9IHRvdGFsbWVtKCk7XG5cbiAgICBpZiAoYnl0ZXMgPCAxMiAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnOGcnO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPCAyMCAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnMTZnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMjggKiBHQikge1xuICAgICAgICByZXR1cm4gJzI0Zyc7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDQ4ICogR0IpIHtcbiAgICAgICAgcmV0dXJuICczMmcnO1xuICAgIH1cblxuICAgIHJldHVybiAnbW9yZSc7XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0UGFja2FnZU1hbmFnZXIgPSAoKTogVFBhY2thZ2VNYW5hZ2VyID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IGVudi5ucG1fY29uZmlnX3VzZXJfYWdlbnQgPz8gJyc7XG4gICAgY29uc3Qga25vd246IHJlYWRvbmx5IFRQYWNrYWdlTWFuYWdlcltdID0gW1xuICAgICAgICAncG5wbScsXG4gICAgICAgICd5YXJuJyxcbiAgICAgICAgJ2J1bicsXG4gICAgICAgICdkZW5vJyxcbiAgICBdIGFzIGNvbnN0O1xuXG4gICAgY29uc3QgbWF0Y2ggPSBrbm93bi5maW5kKChwbSkgPT4gYWdlbnQuc3RhcnRzV2l0aChwbSkpO1xuXG4gICAgcmV0dXJuIG1hdGNoID8/ICducG0nO1xufTtcblxuLy8gVE9ETzogSW1wbGVtZW50IGhvc3RuYW1lIOKGkiBwcm92aWRlciBtYXBwaW5nXG5leHBvcnQgY29uc3QgZGV0ZWN0UHJvdmlkZXIgPSAoaG9zdG5hbWU6IHN0cmluZyk6IFREYXRhYmFzZVByb3ZpZGVyID0+IHtcbiAgICBjb25zdCBydWxlczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbc3RyaW5nLCBURGF0YWJhc2VQcm92aWRlcl0+ID0gW1xuICAgICAgICBbJy5uZW9uLnRlY2gnLCAnbmVvbiddLFxuICAgICAgICBbJy5yZHMuYW1hem9uYXdzLmNvbScsICdhd3MnXSxcbiAgICAgICAgWycuYW1hem9uYXdzLmNvbScsICdhd3MnXSxcbiAgICAgICAgWycuc3VwYWJhc2UuY28nLCAnc3VwYWJhc2UnXSxcbiAgICAgICAgWycuc3VwYWJhc2UuY29tJywgJ3N1cGFiYXNlJ10sXG4gICAgICAgIFsnLmRhdGFiYXNlLmF6dXJlLmNvbScsICdhenVyZSddLFxuICAgICAgICBbJy5jbG91ZHNxbC4nLCAnZ2NwJ10sXG4gICAgICAgIFsnLnNxbC5nb29nJywgJ2djcCddLFxuICAgICAgICBbJy5yYWlsd2F5LmFwcCcsICdyYWlsd2F5J10sXG4gICAgICAgIFsnLnJlbmRlci5jb20nLCAncmVuZGVyJ10sXG4gICAgICAgIFsnLmFpdmVuY2xvdWQuY29tJywgJ2F2aWVuJ10sXG4gICAgICAgIFsnLmFpdmVuLmlvJywgJ2F2aWVuJ10sXG4gICAgICAgIFsnLnRpbWVzY2FsZWRiLmlvJywgJ3RpbWVzY2FsZV9jbG91ZCddLFxuICAgICAgICBbJy5oZXJva3VhcHAuY29tJywgJ2hlcm9rdSddLFxuICAgICAgICBbJy5mbHkuZGV2JywgJ2ZseSddLFxuICAgICAgICBbJy5rb3llYi5hcHAnLCAna295ZWInXSxcbiAgICAgICAgWycuZGIub25kaWdpdGFsb2NlYW4uY29tJywgJ2RpZ2l0YWxfb2NlYW4nXSxcbiAgICAgICAgWycuYWxpYmFiYWNsb3VkZGIuY29tJywgJ2FsaWJhZGFfY2xvdWQnXSxcbiAgICBdO1xuXG4gICAgY29uc3QgbG93ZXIgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZvdW5kID0gcnVsZXMuZmluZCgoW3N1ZmZpeF0pID0+IGxvd2VyLmluY2x1ZGVzKHN1ZmZpeCkpO1xuXG4gICAgcmV0dXJuIGZvdW5kPy5bMV0gPz8gJ290aGVyJztcbn07XG5cbmNvbnN0IGFpQXNzaXN0YW50UnVsZXM6IFJlYWRvbmx5QXJyYXk8XG4gICAgcmVhZG9ubHkgW1RBSUFzc2lzdGFudCwgUmVhZG9ubHlBcnJheTxzdHJpbmc+XVxuPiA9IFtcbiAgICBbJ2N1cnNvcicsIFsnLmN1cnNvcicsICcuY3Vyc29ycnVsZXMnXV0sXG4gICAgWydjbGF1ZGVfY29kZScsIFsnLmNsYXVkZScsICdDTEFVREUubWQnXV0sXG4gICAgWydvcGVuY29kZScsIFsnLm9wZW5jb2RlJ11dLFxuICAgIFsnYWlkZXInLCBbJy5haWRlci5jb25mLnltbCcsICcuYWlkZXIuY2hhdC5oaXN0b3J5Lm1kJ11dLFxuICAgIFsnb3BlbmFpX2NvZGV4JywgWycuY29kZXgnXV0sXG4gICAgWydnaXRodWJfY29waWxvdCcsIFsnLmdpdGh1Yi9jb3BpbG90LWluc3RydWN0aW9ucy5tZCddXSxcbl07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RBSUFzc2lzdGFudHMgPSAoKTogVEFJQXNzaXN0YW50W10gPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBjd2QoKTtcblxuICAgIHJldHVybiBhaUFzc2lzdGFudFJ1bGVzXG4gICAgICAgIC5maWx0ZXIoKFssIHBhdGhzXSkgPT4gcGF0aHMuc29tZSgocCkgPT4gZXhpc3RzU3luYyhqb2luKHJvb3QsIHApKSkpXG4gICAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0RG9ja2VyID0gKCk6IGJvb2xlYW4gPT4gZXhpc3RzU3luYygnLy5kb2NrZXJlbnYnKTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdFNTSFNlc3Npb24gPSAoKTogYm9vbGVhbiA9PlxuICAgICEhKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX0NMSUVOVCB8fCBlbnYuU1NIX1RUWSk7XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RVc2VybmFtZSA9ICgpOiBzdHJpbmcgPT4gdXNlckluZm8oKS51c2VybmFtZTtcblxuZXhwb3J0IGNvbnN0IGlzTG9jYWxob3N0ID0gKGhvc3RuYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBsb3dlciA9IGhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICBsb3dlciA9PT0gJ2xvY2FsaG9zdCcgfHxcbiAgICAgICAgbG93ZXIgPT09ICcxMjcuMC4wLjEnIHx8XG4gICAgICAgIGxvd2VyID09PSAnOjoxJyB8fFxuICAgICAgICBsb3dlciA9PT0gJzAuMC4wLjAnXG4gICAgKTtcbn07XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0Lm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImFwcC9kZXRlY3QubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxJQUFJLENBQUM7QUFDOUIsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQVczQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBUSxFQUFFLENBQzlCLFFBQVEsS0FBSyxRQUFRO0lBQ2pCLENBQUMsQ0FBQyxPQUFPO0lBQ1QsQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPO1FBQ3BCLENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUVwQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBVyxFQUFFO0lBQ3BDLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBRXhCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNULE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQTJCO1FBQ2xDLElBQUksRUFBRSxNQUFNO1FBQ1osR0FBRyxFQUFFLEtBQUs7UUFDVixHQUFHLEVBQUUsS0FBSztRQUNWLElBQUksRUFBRSxNQUFNO1FBQ1osR0FBRyxFQUFFLEtBQUs7S0FDYixDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElB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R0FBRyxHQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsR0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQWdCLEVBQVcsRUFBRTtJQUNyRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFckMsT0FBTyxDQUNILEtBQUssS0FBSyxXQUFXO1FBQ3JCLEtBQUssS0FBSyxXQUFXO1FBQ3JCLEtBQUssS0FBSyxLQUFLO1FBQ2YsS0FBSyxLQUFLLFNBQVMsQ0FDdEIsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhpc3RzU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtob3N0bmFtZSwgdG90YWxtZW0sIHVzZXJJbmZvfSBmcm9tICdvcyc7XG5pbXBvcnQge2Jhc2VuYW1lLCBqb2lufSBmcm9tICdwYXRoJztcbmltcG9ydCB7Y3dkLCBlbnYsIHBsYXRmb3JtfSBmcm9tICdwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFRBSUFzc2lzdGFudCxcbiAgICBURGF0YWJhc2VQcm92aWRlcixcbiAgICBUT3MsXG4gICAgVFNoZWxsLFxuICAgIFRTeXN0ZW1NZW1vcnksXG4gICAgVFBhY2thZ2VNYW5hZ2VyLFxufSBmcm9tICdAZGJjdHgvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RPUyA9ICgpOiBUT3MgPT5cbiAgICBwbGF0Zm9ybSA9PT0gJ2RhcndpbidcbiAgICAgICAgPyAnbWFjb3MnXG4gICAgICAgIDogcGxhdGZvcm0gPT09ICd3aW4zMidcbiAgICAgICAgICA/ICd3aW5kb3dzJ1xuICAgICAgICAgIDogJ2xpbnV4JztcblxuZXhwb3J0IGNvbnN0IGRldGVjdFNoZWxsID0gKCk6IFRTaGVsbCA9PiB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIHJldHVybiAncG93ZXJzaGVsbCc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hlbGwgPSBlbnYuU0hFTEw7XG5cbiAgICBpZiAoIXNoZWxsKSB7XG4gICAgICAgIHJldHVybiAnb3RoZXInO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShzaGVsbCk7XG4gICAgY29uc3Qga25vd246IFJlY29yZDxzdHJpbmcsIFRTaGVsbD4gPSB7XG4gICAgICAgIGJhc2g6ICdiYXNoJyxcbiAgICAgICAgenNoOiAnenNoJyxcbiAgICAgICAga3NoOiAna3NoJyxcbiAgICAgICAgZmlzaDogJ2Zpc2gnLFxuICAgICAgICBhc2g6ICdhc2gnLFxuICAgIH07XG5cbiAgICByZXR1cm4ga25vd25bbmFtZV0gPz8gJ290aGVyJztcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RXU0wgPSAoKTogYm9vbGVhbiA9PiAhIShlbnYuV1NMX0RJU1RST19OQU1FIHx8IGVudi5XU0xFTlYpO1xuXG5jb25zdCBHQiA9IDEwMjQgKiogMztcblxuZXhwb3J0IGNvbnN0IGRldGVjdFN5c3RlbU1lbW9yeSA9ICgpOiBUU3lzdGVtTWVtb3J5ID0+IHtcbiAgICBjb25zdCBieXRlcyA9IHRvdGFsbWVtKCk7XG5cbiAgICBpZiAoYnl0ZXMgPCAxMiAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnOGcnO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMgPCAyMCAqIEdCKSB7XG4gICAgICAgIHJldHVybiAnMTZnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMjggKiBHQikge1xuICAgICAgICByZXR1cm4gJzI0Zyc7XG4gICAgfVxuICAgIGlmIChieXRlcyA8IDQ4ICogR0IpIHtcbiAgICAgICAgcmV0dXJuICczMmcnO1xuICAgIH1cblxuICAgIHJldHVybiAnbW9yZSc7XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0UGFja2FnZU1hbmFnZXIgPSAoKTogVFBhY2thZ2VNYW5hZ2VyID0+IHtcbiAgICBjb25zdCBhZ2VudCA9IGVudi5ucG1fY29uZmlnX3VzZXJfYWdlbnQgPz8gJyc7XG4gICAgY29uc3Qga25vd246IHJlYWRvbmx5IFRQYWNrYWdlTWFuYWdlcltdID0gW1xuICAgICAgICAncG5wbScsXG4gICAgICAgICd5YXJuJyxcbiAgICAgICAgJ2J1bicsXG4gICAgICAgICdkZW5vJyxcbiAgICBdIGFzIGNvbnN0O1xuXG4gICAgY29uc3QgbWF0Y2ggPSBrbm93bi5maW5kKChwbSkgPT4gYWdlbnQuc3RhcnRzV2l0aChwbSkpO1xuXG4gICAgcmV0dXJuIG1hdGNoID8/ICducG0nO1xufTtcblxuLy8gVE9ETzogSW1wbGVtZW50IGhvc3RuYW1lIOKGkiBwcm92aWRlciBtYXBwaW5nXG5leHBvcnQgY29uc3QgZGV0ZWN0UHJvdmlkZXIgPSAoaG9zdG5hbWU6IHN0cmluZyk6IFREYXRhYmFzZVByb3ZpZGVyID0+IHtcbiAgICBjb25zdCBydWxlczogUmVhZG9ubHlBcnJheTxyZWFkb25seSBbc3RyaW5nLCBURGF0YWJhc2VQcm92aWRlcl0+ID0gW1xuICAgICAgICBbJy5uZW9uLnRlY2gnLCAnbmVvbiddLFxuICAgICAgICBbJy5yZHMuYW1hem9uYXdzLmNvbScsICdhd3MnXSxcbiAgICAgICAgWycuYW1hem9uYXdzLmNvbScsICdhd3MnXSxcbiAgICAgICAgWycuc3VwYWJhc2UuY28nLCAnc3VwYWJhc2UnXSxcbiAgICAgICAgWycuc3VwYWJhc2UuY29tJywgJ3N1cGFiYXNlJ10sXG4gICAgICAgIFsnLmRhdGFiYXNlLmF6dXJlLmNvbScsICdhenVyZSddLFxuICAgICAgICBbJy5jbG91ZHNxbC4nLCAnZ2NwJ10sXG4gICAgICAgIFsnLnNxbC5nb29nJywgJ2djcCddLFxuICAgICAgICBbJy5yYWlsd2F5LmFwcCcsICdyYWlsd2F5J10sXG4gICAgICAgIFsnLnJlbmRlci5jb20nLCAncmVuZGVyJ10sXG4gICAgICAgIFsnLmFpdmVuY2xvdWQuY29tJywgJ2F2aWVuJ10sXG4gICAgICAgIFsnLmFpdmVuLmlvJywgJ2F2aWVuJ10sXG4gICAgICAgIFsnLnRpbWVzY2FsZWRiLmlvJywgJ3RpbWVzY2FsZV9jbG91ZCddLFxuICAgICAgICBbJy5oZXJva3VhcHAuY29tJywgJ2hlcm9rdSddLFxuICAgICAgICBbJy5mbHkuZGV2JywgJ2ZseSddLFxuICAgICAgICBbJy5rb3llYi5hcHAnLCAna295ZWInXSxcbiAgICAgICAgWycuZGIub25kaWdpdGFsb2NlYW4uY29tJywgJ2RpZ2l0YWxfb2NlYW4nXSxcbiAgICAgICAgWycuYWxpYmFiYWNsb3VkZGIuY29tJywgJ2FsaWJhZGFfY2xvdWQnXSxcbiAgICBdO1xuXG4gICAgY29uc3QgbG93ZXIgPSBob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGZvdW5kID0gcnVsZXMuZmluZCgoW3N1ZmZpeF0pID0+IGxvd2VyLmluY2x1ZGVzKHN1ZmZpeCkpO1xuXG4gICAgcmV0dXJuIGZvdW5kPy5bMV0gPz8gJ290aGVyJztcbn07XG5cbmNvbnN0IGFpQXNzaXN0YW50UnVsZXM6IFJlYWRvbmx5QXJyYXk8XG4gICAgcmVhZG9ubHkgW1RBSUFzc2lzdGFudCwgUmVhZG9ubHlBcnJheTxzdHJpbmc+XVxuPiA9IFtcbiAgICBbJ2N1cnNvcicsIFsnLmN1cnNvcicsICcuY3Vyc29ycnVsZXMnXV0sXG4gICAgWydjbGF1ZGVfY29kZScsIFsnLmNsYXVkZScsICdDTEFVREUubWQnXV0sXG4gICAgWydvcGVuY29kZScsIFsnLm9wZW5jb2RlJ11dLFxuICAgIFsnYWlkZXInLCBbJy5haWRlci5jb25mLnltbCcsICcuYWlkZXIuY2hhdC5oaXN0b3J5Lm1kJ11dLFxuICAgIFsnb3BlbmFpX2NvZGV4JywgWycuY29kZXgnXV0sXG4gICAgWydnaXRodWJfY29waWxvdCcsIFsnLmdpdGh1Yi9jb3BpbG90LWluc3RydWN0aW9ucy5tZCddXSxcbl07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RBSUFzc2lzdGFudHMgPSAoKTogVEFJQXNzaXN0YW50W10gPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBjd2QoKTtcblxuICAgIHJldHVybiBhaUFzc2lzdGFudFJ1bGVzXG4gICAgICAgIC5maWx0ZXIoKFssIHBhdGhzXSkgPT4gcGF0aHMuc29tZSgocCkgPT4gZXhpc3RzU3luYyhqb2luKHJvb3QsIHApKSkpXG4gICAgICAgIC5tYXAoKFtuYW1lXSkgPT4gbmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0RG9ja2VyID0gKCk6IGJvb2xlYW4gPT4gZXhpc3RzU3luYygnLy5kb2NrZXJlbnYnKTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdFNTSFNlc3Npb24gPSAoKTogYm9vbGVhbiA9PlxuICAgICEhKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX0NMSUVOVCB8fCBlbnYuU1NIX1RUWSk7XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RIb3N0bmFtZSA9ICgpOiBzdHJpbmcgPT4gaG9zdG5hbWUoKTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdFVzZXJuYW1lID0gKCk6IHN0cmluZyA9PiB1c2VySW5mbygpLnVzZXJuYW1lO1xuXG5leHBvcnQgY29uc3QgaXNMb2NhbGhvc3QgPSAoaG9zdG5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGxvd2VyID0gaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIGxvd2VyID09PSAnbG9jYWxob3N0JyB8fFxuICAgICAgICBsb3dlciA9PT0gJzEyNy4wLjAuMScgfHxcbiAgICAgICAgbG93ZXIgPT09ICc6OjEnIHx8XG4gICAgICAgIGxvd2VyID09PSAnMC4wLjAuMCdcbiAgICApO1xufTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import type { Instance } from 'ink';
2
+ import type { TStore } from '../store.mjs';
3
+ export declare const runList: (store: TStore, inkApp: Instance) => Promise<void>;
4
+ //# sourceMappingURL=list.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.mts","sourceRoot":"./src/","sources":["app/list.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,KAAK,CAAC;AAElC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAOzC,eAAO,MAAM,OAAO,GAChB,OAAO,MAAM,EACb,QAAQ,QAAQ,KACjB,OAAO,CAAC,IAAI,CA2Gd,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { runInAction, when } from 'mobx';
2
+ import { readConfig } from './config.mjs';
3
+ import { createAuthenticatedTRPCClient } from '../lib/trpc.mjs';
4
+ import { connectAccount } from './session.mjs';
5
+ import { tailRevision } from './tail.mjs';
6
+ import { logger } from '../logger.mjs';
7
+ export const runList = async (store, inkApp) => {
8
+ try {
9
+ const config = await readConfig();
10
+ if (!config.token) {
11
+ inkApp.unmount();
12
+ console.log('no auth token found. run `dbctx login` to authenticate.');
13
+ process.exit(1);
14
+ }
15
+ const authed = createAuthenticatedTRPCClient(() => Promise.resolve(config.token));
16
+ await connectAccount(config.token, store);
17
+ const items = await authed.databases.listForUser.query();
18
+ if (items.length === 0) {
19
+ inkApp.unmount();
20
+ console.log('no databases yet. run `dbctx` against a database to get started.');
21
+ process.exit(0);
22
+ }
23
+ runInAction(() => {
24
+ store.mode = 'list-picking';
25
+ store.listPicker = {
26
+ items,
27
+ focusedIndex: 0,
28
+ selectedIndex: null,
29
+ };
30
+ });
31
+ await when(() => store.listPicker?.selectedIndex !== null);
32
+ const picker = store.listPicker;
33
+ if (picker === null || picker.selectedIndex === null) {
34
+ return;
35
+ }
36
+ // Synthetic "exit" row sentinel — selectedIndex === items.length means
37
+ // the user picked the bottom "exit" entry. Unmount and quit.
38
+ if (picker.selectedIndex === picker.items.length) {
39
+ inkApp.unmount();
40
+ process.exit(0);
41
+ }
42
+ const picked = picker.items[picker.selectedIndex];
43
+ if (picked === undefined) {
44
+ return;
45
+ }
46
+ const needsLocalRerun = !picked.samplesIngested ||
47
+ (!picked.postIntrospection.done &&
48
+ picked.postIntrospection.jobStatus === null);
49
+ if (needsLocalRerun) {
50
+ inkApp.unmount();
51
+ const reason = !picked.samplesIngested
52
+ ? 'samples for this database have not been uploaded yet.'
53
+ : 'post-introspection enrichment is stuck (no live job and not complete).';
54
+ console.log(`"${picked.name}": ${reason}`);
55
+ console.log('rerun `dbctx` against the same database to pick up where you left off.');
56
+ process.exit(0);
57
+ }
58
+ // Tail-able: pre-fill upstream steps to mirror a hash-hit-then-tail
59
+ // outcome and flip mode so the regular cascade renders. Phase-0 done
60
+ // can be pre-set (no extra info to fetch); post-sampling is left to
61
+ // dispatchAndStreamPostSampling so the relations/foreign-keys counts come
62
+ // back from the server.s runPostSampling response.
63
+ runInAction(() => {
64
+ store.mode = 'list-tailing';
65
+ store.steps.ingestion.introspection.state = 'skipped';
66
+ store.steps.sampling.state = 'skipped';
67
+ store.steps.sampling.reused = true;
68
+ store.steps.ingestion.samples.state = 'skipped';
69
+ store.steps.ingestion.samples.reused = true;
70
+ if (picked.postIntrospection.done) {
71
+ store.steps.ingestion.postIntrospection.state = 'done';
72
+ store.steps.ingestion.postIntrospection.reused = true;
73
+ }
74
+ });
75
+ await tailRevision({
76
+ authed,
77
+ revisionId: picked.latestRevisionId,
78
+ store,
79
+ postIntrospectionDone: picked.postIntrospection.done,
80
+ });
81
+ runInAction(() => {
82
+ store.exitRequested = true;
83
+ });
84
+ }
85
+ catch (err) {
86
+ const msg = err instanceof Error ? err.message : String(err);
87
+ logger.error(`list: ${msg}`);
88
+ inkApp.unmount();
89
+ console.log(`error: ${msg}`);
90
+ process.exit(1);
91
+ }
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJhcHAvbGlzdC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUN4QixLQUFhLEVBQ2IsTUFBZ0IsRUFDSCxFQUFFO0lBQ2YsSUFBSSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsR0FBRyxDQUNQLHlEQUF5RCxDQUM1RCxDQUFDO1lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsNkJBQTZCLENBQUMsR0FBRyxFQUFFLENBQzlDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQU0sQ0FBQyxDQUNqQyxDQUFDO1FBRUYsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FDUCxrRUFBa0UsQ0FDckUsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDYixLQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUM1QixLQUFLLENBQUMsVUFBVSxHQUFHO2dCQUNmLEtBQUs7Z0JBQ0wsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7YUFDdEIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxhQUFhLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFM0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxPQUFPO1FBQ1gsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSw2REFBNkQ7UUFDN0QsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQ2pCLENBQUMsTUFBTSxDQUFDLGVBQWU7WUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJO2dCQUMzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRXJELElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWU7Z0JBQ2xDLENBQUMsQ0FBQyx1REFBdUQ7Z0JBQ3pELENBQUMsQ0FBQyx3RUFBd0UsQ0FBQztZQUMvRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQ1Asd0VBQXdFLENBQzNFLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxvRUFBb0U7UUFDcEUscUVBQXFFO1FBQ3JFLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsbURBQW1EO1FBQ25ELFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDYixLQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztZQUM1QixLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN0RCxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDaEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDNUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ3ZELEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLENBQUM7WUFDZixNQUFNO1lBQ04sVUFBVSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDbkMsS0FBSztZQUNMLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJO1NBQ3ZELENBQUMsQ0FBQztRQUVILFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDYixLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ1gsTUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7SW5zdGFuY2V9IGZyb20gJ2luayc7XG5pbXBvcnQge3J1bkluQWN0aW9uLCB3aGVufSBmcm9tICdtb2J4JztcbmltcG9ydCB0eXBlIHtUU3RvcmV9IGZyb20gJy4uL3N0b3JlLm1qcyc7XG5pbXBvcnQge3JlYWRDb25maWd9IGZyb20gJy4vY29uZmlnLm1qcyc7XG5pbXBvcnQge2NyZWF0ZUF1dGhlbnRpY2F0ZWRUUlBDQ2xpZW50fSBmcm9tICcuLi9saWIvdHJwYy5tanMnO1xuaW1wb3J0IHtjb25uZWN0QWNjb3VudH0gZnJvbSAnLi9zZXNzaW9uLm1qcyc7XG5pbXBvcnQge3RhaWxSZXZpc2lvbn0gZnJvbSAnLi90YWlsLm1qcyc7XG5pbXBvcnQge2xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyLm1qcyc7XG5cbmV4cG9ydCBjb25zdCBydW5MaXN0ID0gYXN5bmMgKFxuICAgIHN0b3JlOiBUU3RvcmUsXG4gICAgaW5rQXBwOiBJbnN0YW5jZSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKTtcbiAgICAgICAgaWYgKCFjb25maWcudG9rZW4pIHtcbiAgICAgICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnbm8gYXV0aCB0b2tlbiBmb3VuZC4gcnVuIGBkYmN0eCBsb2dpbmAgdG8gYXV0aGVudGljYXRlLicsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXV0aGVkID0gY3JlYXRlQXV0aGVudGljYXRlZFRSUENDbGllbnQoKCkgPT5cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShjb25maWcudG9rZW4hKSxcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBjb25uZWN0QWNjb3VudChjb25maWcudG9rZW4sIHN0b3JlKTtcblxuICAgICAgICBjb25zdCBpdGVtcyA9IGF3YWl0IGF1dGhlZC5kYXRhYmFzZXMubGlzdEZvclVzZXIucXVlcnkoKTtcblxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ25vIGRhdGFiYXNlcyB5ZXQuIHJ1biBgZGJjdHhgIGFnYWluc3QgYSBkYXRhYmFzZSB0byBnZXQgc3RhcnRlZC4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bkluQWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLm1vZGUgPSAnbGlzdC1waWNraW5nJztcbiAgICAgICAgICAgIHN0b3JlLmxpc3RQaWNrZXIgPSB7XG4gICAgICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICAgICAgZm9jdXNlZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSW5kZXg6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB3aGVuKCgpID0+IHN0b3JlLmxpc3RQaWNrZXI/LnNlbGVjdGVkSW5kZXggIT09IG51bGwpO1xuXG4gICAgICAgIGNvbnN0IHBpY2tlciA9IHN0b3JlLmxpc3RQaWNrZXI7XG4gICAgICAgIGlmIChwaWNrZXIgPT09IG51bGwgfHwgcGlja2VyLnNlbGVjdGVkSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN5bnRoZXRpYyBcImV4aXRcIiByb3cgc2VudGluZWwg4oCUIHNlbGVjdGVkSW5kZXggPT09IGl0ZW1zLmxlbmd0aCBtZWFuc1xuICAgICAgICAvLyB0aGUgdXNlciBwaWNrZWQgdGhlIGJvdHRvbSBcImV4aXRcIiBlbnRyeS4gVW5tb3VudCBhbmQgcXVpdC5cbiAgICAgICAgaWYgKHBpY2tlci5zZWxlY3RlZEluZGV4ID09PSBwaWNrZXIuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGlja2VkID0gcGlja2VyLml0ZW1zW3BpY2tlci5zZWxlY3RlZEluZGV4XTtcbiAgICAgICAgaWYgKHBpY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZWVkc0xvY2FsUmVydW4gPVxuICAgICAgICAgICAgIXBpY2tlZC5zYW1wbGVzSW5nZXN0ZWQgfHxcbiAgICAgICAgICAgICghcGlja2VkLnBvc3RJbnRyb3NwZWN0aW9uLmRvbmUgJiZcbiAgICAgICAgICAgICAgICBwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uam9iU3RhdHVzID09PSBudWxsKTtcblxuICAgICAgICBpZiAobmVlZHNMb2NhbFJlcnVuKSB7XG4gICAgICAgICAgICBpbmtBcHAudW5tb3VudCgpO1xuICAgICAgICAgICAgY29uc3QgcmVhc29uID0gIXBpY2tlZC5zYW1wbGVzSW5nZXN0ZWRcbiAgICAgICAgICAgICAgICA/ICdzYW1wbGVzIGZvciB0aGlzIGRhdGFiYXNlIGhhdmUgbm90IGJlZW4gdXBsb2FkZWQgeWV0LidcbiAgICAgICAgICAgICAgICA6ICdwb3N0LWludHJvc3BlY3Rpb24gZW5yaWNobWVudCBpcyBzdHVjayAobm8gbGl2ZSBqb2IgYW5kIG5vdCBjb21wbGV0ZSkuJztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcIiR7cGlja2VkLm5hbWV9XCI6ICR7cmVhc29ufWApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ3JlcnVuIGBkYmN0eGAgYWdhaW5zdCB0aGUgc2FtZSBkYXRhYmFzZSB0byBwaWNrIHVwIHdoZXJlIHlvdSBsZWZ0IG9mZi4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRhaWwtYWJsZTogcHJlLWZpbGwgdXBzdHJlYW0gc3RlcHMgdG8gbWlycm9yIGEgaGFzaC1oaXQtdGhlbi10YWlsXG4gICAgICAgIC8vIG91dGNvbWUgYW5kIGZsaXAgbW9kZSBzbyB0aGUgcmVndWxhciBjYXNjYWRlIHJlbmRlcnMuIFBoYXNlLTAgZG9uZVxuICAgICAgICAvLyBjYW4gYmUgcHJlLXNldCAobm8gZXh0cmEgaW5mbyB0byBmZXRjaCk7IHBvc3Qtc2FtcGxpbmcgaXMgbGVmdCB0b1xuICAgICAgICAvLyBkaXNwYXRjaEFuZFN0cmVhbVBvc3RTYW1wbGluZyBzbyB0aGUgcmVsYXRpb25zL2ZvcmVpZ24ta2V5cyBjb3VudHMgY29tZVxuICAgICAgICAvLyBiYWNrIGZyb20gdGhlIHNlcnZlci5zIHJ1blBvc3RTYW1wbGluZyByZXNwb25zZS5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUubW9kZSA9ICdsaXN0LXRhaWxpbmcnO1xuICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUgPSAnc2tpcHBlZCc7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5zYW1wbGluZy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLnNhbXBsaW5nLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24uc2FtcGxlcy5zdGF0ZSA9ICdza2lwcGVkJztcbiAgICAgICAgICAgIHN0b3JlLnN0ZXBzLmluZ2VzdGlvbi5zYW1wbGVzLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAocGlja2VkLnBvc3RJbnRyb3NwZWN0aW9uLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5zdGVwcy5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhdGUgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgc3RvcmUuc3RlcHMuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnJldXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRhaWxSZXZpc2lvbih7XG4gICAgICAgICAgICBhdXRoZWQsXG4gICAgICAgICAgICByZXZpc2lvbklkOiBwaWNrZWQubGF0ZXN0UmV2aXNpb25JZCxcbiAgICAgICAgICAgIHN0b3JlLFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb25Eb25lOiBwaWNrZWQucG9zdEludHJvc3BlY3Rpb24uZG9uZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcnVuSW5BY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuZXhpdFJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgbGlzdDogJHttc2d9YCk7XG4gICAgICAgIGlua0FwcC51bm1vdW50KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBlcnJvcjogJHttc2d9YCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG59O1xuIl19
@@ -0,0 +1,26 @@
1
+ import type { Pool } from 'pg';
2
+ import type { TDatabaseIntrospection } from '@dbctx/core';
3
+ import type { TStore } from '../store.mjs';
4
+ export type TLoadIntrospectionError = {
5
+ kind: 'read';
6
+ message: string;
7
+ } | {
8
+ kind: 'parse';
9
+ message: string;
10
+ } | {
11
+ kind: 'schema';
12
+ message: string;
13
+ } | {
14
+ kind: 'mismatch';
15
+ message: string;
16
+ };
17
+ export type TLoadIntrospectionResult = {
18
+ ok: true;
19
+ result: TDatabaseIntrospection;
20
+ } | {
21
+ ok: false;
22
+ error: TLoadIntrospectionError;
23
+ };
24
+ export declare const loadIntrospectionFromFile: (path: string, pool: Pool) => Promise<TLoadIntrospectionResult>;
25
+ export declare const populateIntrospectionCounts: (store: TStore, introspection: TDatabaseIntrospection) => void;
26
+ //# sourceMappingURL=load-introspection.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-introspection.d.mts","sourceRoot":"./src/","sources":["app/load-introspection.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAC;AAG7B,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAGzC,MAAM,MAAM,uBAAuB,GAC7B;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAC/B;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GAChC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,GACjC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC;AAE1C,MAAM,MAAM,wBAAwB,GAC9B;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAC,GAC1C;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,uBAAuB,CAAA;CAAC,CAAC;AAKlD,eAAO,MAAM,yBAAyB,GAClC,MAAM,MAAM,EACZ,MAAM,IAAI,KACX,OAAO,CAAC,wBAAwB,CAuElC,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACpC,OAAO,MAAM,EACb,eAAe,sBAAsB,KACtC,IAoCF,CAAC"}