dbctx 2.0.1 → 2.1.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 (220) hide show
  1. package/dist/index.mjs +6727 -282
  2. package/package.json +12 -9
  3. package/dist/app/assemble.d.mts +0 -5
  4. package/dist/app/assemble.d.mts.map +0 -1
  5. package/dist/app/assemble.mjs +0 -182
  6. package/dist/app/config.d.mts +0 -9
  7. package/dist/app/config.d.mts.map +0 -1
  8. package/dist/app/config.mjs +0 -49
  9. package/dist/app/db.d.mts +0 -9
  10. package/dist/app/db.d.mts.map +0 -1
  11. package/dist/app/db.mjs +0 -182
  12. package/dist/app/detect.d.mts +0 -14
  13. package/dist/app/detect.d.mts.map +0 -1
  14. package/dist/app/detect.mjs +0 -108
  15. package/dist/app/list.d.mts +0 -4
  16. package/dist/app/list.d.mts.map +0 -1
  17. package/dist/app/list.mjs +0 -93
  18. package/dist/app/load-introspection.d.mts +0 -26
  19. package/dist/app/load-introspection.d.mts.map +0 -1
  20. package/dist/app/load-introspection.mjs +0 -89
  21. package/dist/app/login.d.mts +0 -2
  22. package/dist/app/login.d.mts.map +0 -1
  23. package/dist/app/login.mjs +0 -69
  24. package/dist/app/open-url.d.mts +0 -6
  25. package/dist/app/open-url.d.mts.map +0 -1
  26. package/dist/app/open-url.mjs +0 -33
  27. package/dist/app/sample.d.mts +0 -24
  28. package/dist/app/sample.d.mts.map +0 -1
  29. package/dist/app/sample.mjs +0 -257
  30. package/dist/app/session.d.mts +0 -9
  31. package/dist/app/session.d.mts.map +0 -1
  32. package/dist/app/session.mjs +0 -195
  33. package/dist/app/ssh.d.mts +0 -3
  34. package/dist/app/ssh.d.mts.map +0 -1
  35. package/dist/app/ssh.mjs +0 -218
  36. package/dist/app/tail.d.mts +0 -13
  37. package/dist/app/tail.d.mts.map +0 -1
  38. package/dist/app/tail.mjs +0 -168
  39. package/dist/db/analyze.d.mts +0 -3
  40. package/dist/db/analyze.d.mts.map +0 -1
  41. package/dist/db/analyze.mjs +0 -16
  42. package/dist/db/attributes.d.mts +0 -16
  43. package/dist/db/attributes.d.mts.map +0 -1
  44. package/dist/db/attributes.mjs +0 -37
  45. package/dist/db/check-constraints.d.mts +0 -9
  46. package/dist/db/check-constraints.d.mts.map +0 -1
  47. package/dist/db/check-constraints.mjs +0 -17
  48. package/dist/db/custom-types.d.mts +0 -26
  49. package/dist/db/custom-types.d.mts.map +0 -1
  50. package/dist/db/custom-types.mjs +0 -61
  51. package/dist/db/enums.d.mts +0 -8
  52. package/dist/db/enums.d.mts.map +0 -1
  53. package/dist/db/enums.mjs +0 -24
  54. package/dist/db/extensions.d.mts +0 -8
  55. package/dist/db/extensions.d.mts.map +0 -1
  56. package/dist/db/extensions.mjs +0 -14
  57. package/dist/db/file-stats.d.mts +0 -11
  58. package/dist/db/file-stats.d.mts.map +0 -1
  59. package/dist/db/file-stats.mjs +0 -43
  60. package/dist/db/foreign-keys.d.mts +0 -14
  61. package/dist/db/foreign-keys.d.mts.map +0 -1
  62. package/dist/db/foreign-keys.mjs +0 -44
  63. package/dist/db/functions.d.mts +0 -11
  64. package/dist/db/functions.d.mts.map +0 -1
  65. package/dist/db/functions.mjs +0 -23
  66. package/dist/db/index.d.mts +0 -19
  67. package/dist/db/index.d.mts.map +0 -1
  68. package/dist/db/index.mjs +0 -19
  69. package/dist/db/indexes.d.mts +0 -16
  70. package/dist/db/indexes.d.mts.map +0 -1
  71. package/dist/db/indexes.mjs +0 -38
  72. package/dist/db/planner-stats.d.mts +0 -33
  73. package/dist/db/planner-stats.d.mts.map +0 -1
  74. package/dist/db/planner-stats.mjs +0 -103
  75. package/dist/db/relations.d.mts +0 -11
  76. package/dist/db/relations.d.mts.map +0 -1
  77. package/dist/db/relations.mjs +0 -32
  78. package/dist/db/rls.d.mts +0 -21
  79. package/dist/db/rls.d.mts.map +0 -1
  80. package/dist/db/rls.mjs +0 -48
  81. package/dist/db/sample.d.mts +0 -16
  82. package/dist/db/sample.d.mts.map +0 -1
  83. package/dist/db/sample.mjs +0 -73
  84. package/dist/db/sequences.d.mts +0 -15
  85. package/dist/db/sequences.d.mts.map +0 -1
  86. package/dist/db/sequences.mjs +0 -31
  87. package/dist/db/stats.d.mts +0 -12
  88. package/dist/db/stats.d.mts.map +0 -1
  89. package/dist/db/stats.mjs +0 -34
  90. package/dist/db/triggers.d.mts +0 -11
  91. package/dist/db/triggers.d.mts.map +0 -1
  92. package/dist/db/triggers.mjs +0 -21
  93. package/dist/db/version.d.mts +0 -14
  94. package/dist/db/version.d.mts.map +0 -1
  95. package/dist/db/version.mjs +0 -27
  96. package/dist/flow/events.d.mts +0 -115
  97. package/dist/flow/events.d.mts.map +0 -1
  98. package/dist/flow/events.mjs +0 -2
  99. package/dist/flow/interpreter.d.mts +0 -21
  100. package/dist/flow/interpreter.d.mts.map +0 -1
  101. package/dist/flow/interpreter.mjs +0 -605
  102. package/dist/flow/projection.d.mts +0 -17
  103. package/dist/flow/projection.d.mts.map +0 -1
  104. package/dist/flow/projection.mjs +0 -83
  105. package/dist/flow/projection.test.d.mts +0 -2
  106. package/dist/flow/projection.test.d.mts.map +0 -1
  107. package/dist/flow/projection.test.mjs +0 -162
  108. package/dist/flow/reducer.d.mts +0 -5
  109. package/dist/flow/reducer.d.mts.map +0 -1
  110. package/dist/flow/reducer.mjs +0 -306
  111. package/dist/flow/reducer.test.d.mts +0 -2
  112. package/dist/flow/reducer.test.d.mts.map +0 -1
  113. package/dist/flow/reducer.test.mjs +0 -479
  114. package/dist/flow/run.d.mts +0 -3
  115. package/dist/flow/run.d.mts.map +0 -1
  116. package/dist/flow/run.mjs +0 -89
  117. package/dist/flow/states.d.mts +0 -54
  118. package/dist/flow/states.d.mts.map +0 -1
  119. package/dist/flow/states.mjs +0 -39
  120. package/dist/index.d.mts +0 -29
  121. package/dist/index.d.mts.map +0 -1
  122. package/dist/lib/atomic-write.d.mts +0 -4
  123. package/dist/lib/atomic-write.d.mts.map +0 -1
  124. package/dist/lib/atomic-write.mjs +0 -75
  125. package/dist/lib/env.d.mts +0 -2
  126. package/dist/lib/env.d.mts.map +0 -1
  127. package/dist/lib/env.mjs +0 -4
  128. package/dist/lib/stream-job.d.mts +0 -19
  129. package/dist/lib/stream-job.d.mts.map +0 -1
  130. package/dist/lib/stream-job.mjs +0 -55
  131. package/dist/lib/trpc-url.d.mts +0 -2
  132. package/dist/lib/trpc-url.d.mts.map +0 -1
  133. package/dist/lib/trpc-url.mjs +0 -5
  134. package/dist/lib/trpc.d.mts +0 -7
  135. package/dist/lib/trpc.d.mts.map +0 -1
  136. package/dist/lib/trpc.mjs +0 -37
  137. package/dist/lib/trpc.react.d.mts +0 -4
  138. package/dist/lib/trpc.react.d.mts.map +0 -1
  139. package/dist/lib/trpc.react.mjs +0 -3
  140. package/dist/lib/version.d.mts +0 -2
  141. package/dist/lib/version.d.mts.map +0 -1
  142. package/dist/lib/version.mjs +0 -5
  143. package/dist/logger.d.mts +0 -3
  144. package/dist/logger.d.mts.map +0 -1
  145. package/dist/logger.mjs +0 -11
  146. package/dist/providers/TrpcProvider.d.ts +0 -9
  147. package/dist/providers/TrpcProvider.d.ts.map +0 -1
  148. package/dist/providers/TrpcProvider.js +0 -41
  149. package/dist/store.d.mts +0 -176
  150. package/dist/store.d.mts.map +0 -1
  151. package/dist/store.mjs +0 -147
  152. package/dist/types/connection.d.mts +0 -17
  153. package/dist/types/connection.d.mts.map +0 -1
  154. package/dist/types/connection.mjs +0 -2
  155. package/dist/ui/App.d.ts +0 -10
  156. package/dist/ui/App.d.ts.map +0 -1
  157. package/dist/ui/App.js +0 -41
  158. package/dist/ui/components/Analyze.d.ts +0 -10
  159. package/dist/ui/components/Analyze.d.ts.map +0 -1
  160. package/dist/ui/components/Analyze.js +0 -54
  161. package/dist/ui/components/Billing.d.ts +0 -10
  162. package/dist/ui/components/Billing.d.ts.map +0 -1
  163. package/dist/ui/components/Billing.js +0 -40
  164. package/dist/ui/components/DB.d.ts +0 -10
  165. package/dist/ui/components/DB.d.ts.map +0 -1
  166. package/dist/ui/components/DB.js +0 -22
  167. package/dist/ui/components/DatabasePicker.d.ts +0 -13
  168. package/dist/ui/components/DatabasePicker.d.ts.map +0 -1
  169. package/dist/ui/components/DatabasePicker.js +0 -79
  170. package/dist/ui/components/Enrich.d.ts +0 -10
  171. package/dist/ui/components/Enrich.d.ts.map +0 -1
  172. package/dist/ui/components/Enrich.js +0 -41
  173. package/dist/ui/components/Error.d.ts +0 -7
  174. package/dist/ui/components/Error.d.ts.map +0 -1
  175. package/dist/ui/components/Error.js +0 -6
  176. package/dist/ui/components/Gate.d.ts +0 -10
  177. package/dist/ui/components/Gate.d.ts.map +0 -1
  178. package/dist/ui/components/Gate.js +0 -15
  179. package/dist/ui/components/Introspect.d.ts +0 -10
  180. package/dist/ui/components/Introspect.d.ts.map +0 -1
  181. package/dist/ui/components/Introspect.js +0 -66
  182. package/dist/ui/components/IntrospectionUpload.d.ts +0 -10
  183. package/dist/ui/components/IntrospectionUpload.d.ts.map +0 -1
  184. package/dist/ui/components/IntrospectionUpload.js +0 -30
  185. package/dist/ui/components/Login.d.ts +0 -19
  186. package/dist/ui/components/Login.d.ts.map +0 -1
  187. package/dist/ui/components/Login.js +0 -38
  188. package/dist/ui/components/OutputJson.d.ts +0 -10
  189. package/dist/ui/components/OutputJson.d.ts.map +0 -1
  190. package/dist/ui/components/OutputJson.js +0 -18
  191. package/dist/ui/components/PasswordInput.d.ts +0 -7
  192. package/dist/ui/components/PasswordInput.d.ts.map +0 -1
  193. package/dist/ui/components/PasswordInput.js +0 -32
  194. package/dist/ui/components/SSH.d.ts +0 -10
  195. package/dist/ui/components/SSH.d.ts.map +0 -1
  196. package/dist/ui/components/SSH.js +0 -22
  197. package/dist/ui/components/SamplesUpload.d.ts +0 -10
  198. package/dist/ui/components/SamplesUpload.d.ts.map +0 -1
  199. package/dist/ui/components/SamplesUpload.js +0 -24
  200. package/dist/ui/components/Sampling.d.ts +0 -10
  201. package/dist/ui/components/Sampling.d.ts.map +0 -1
  202. package/dist/ui/components/Sampling.js +0 -58
  203. package/dist/ui/components/Session.d.ts +0 -10
  204. package/dist/ui/components/Session.d.ts.map +0 -1
  205. package/dist/ui/components/Session.js +0 -47
  206. package/dist/ui/components/Spinner.d.ts +0 -3
  207. package/dist/ui/components/Spinner.d.ts.map +0 -1
  208. package/dist/ui/components/Spinner.js +0 -30
  209. package/dist/ui/components/Splash.d.ts +0 -3
  210. package/dist/ui/components/Splash.d.ts.map +0 -1
  211. package/dist/ui/components/Splash.js +0 -13
  212. package/dist/ui/components/TextInput.d.ts +0 -11
  213. package/dist/ui/components/TextInput.d.ts.map +0 -1
  214. package/dist/ui/components/TextInput.js +0 -286
  215. package/dist/ui/components/UserExplanation.d.ts +0 -10
  216. package/dist/ui/components/UserExplanation.d.ts.map +0 -1
  217. package/dist/ui/components/UserExplanation.js +0 -34
  218. package/dist/validatePaths.d.mts +0 -13
  219. package/dist/validatePaths.d.mts.map +0 -1
  220. package/dist/validatePaths.mjs +0 -58
@@ -1,306 +0,0 @@
1
- import { initialPostIntrospection, } from './states.mjs';
2
- // Pure reducer: (state, event) → state. Exhaustive switch over the
3
- // discriminated union so TypeScript catches missing cases at compile time.
4
- // Unrelated events (event kinds that don't apply to the current phase or
5
- // sub-status) return state unchanged — pinned by the no-op invariant test.
6
- const setError = (state, phase, message) => ({
7
- ...state,
8
- phase: 'error',
9
- errorPhase: phase,
10
- errorMessage: message,
11
- });
12
- const stopAfterReached = (state) => ({
13
- ...state,
14
- phase: 'done',
15
- });
16
- export const reduce = (state, event) => {
17
- // Side-channel: post-introspection progress can fire in any phase
18
- // post-`ingesting-introspection`. Update the sub-status without changing
19
- // primary phase.
20
- if (event.kind === 'post-introspection-progress') {
21
- return {
22
- ...state,
23
- postIntrospection: {
24
- ...state.postIntrospection,
25
- state: 'running',
26
- stage: event.stage,
27
- tokensIn: event.tokensIn,
28
- tokensOut: event.tokensOut,
29
- columnsDone: event.columnsDone,
30
- columnsTotal: event.columnsTotal,
31
- },
32
- };
33
- }
34
- if (event.kind === 'post-introspection-completed') {
35
- return {
36
- ...state,
37
- postIntrospection: {
38
- ...state.postIntrospection,
39
- state: 'done',
40
- },
41
- };
42
- }
43
- if (event.kind === 'post-introspection-failed') {
44
- return {
45
- ...state,
46
- postIntrospection: {
47
- ...state.postIntrospection,
48
- state: 'error',
49
- error: event.error,
50
- },
51
- };
52
- }
53
- // Stop-after is the same shape regardless of phase: enter terminal `done`.
54
- if (event.kind === 'stop-after-reached') {
55
- return stopAfterReached(state);
56
- }
57
- // ── phase-specific transitions ──────────────────────────────────
58
- if (state.phase === 'idle') {
59
- if (event.kind === 'start') {
60
- return {
61
- ...state,
62
- phase: state.sshEnabled ? 'connecting-ssh' : 'connecting-db',
63
- };
64
- }
65
- return state;
66
- }
67
- if (state.phase === 'connecting-ssh') {
68
- if (event.kind === 'ssh-connected' || event.kind === 'ssh-not-needed') {
69
- return state.stopAfter === 'ssh-connect'
70
- ? stopAfterReached(state)
71
- : { ...state, phase: 'connecting-db' };
72
- }
73
- if (event.kind === 'ssh-failed') {
74
- return setError(state, 'connecting-ssh', event.error);
75
- }
76
- return state;
77
- }
78
- if (state.phase === 'connecting-db') {
79
- if (event.kind === 'db-connected') {
80
- return state.stopAfter === 'db-connect'
81
- ? stopAfterReached(state)
82
- : { ...state, phase: 'introspecting' };
83
- }
84
- if (event.kind === 'db-failed') {
85
- return setError(state, 'connecting-db', event.error);
86
- }
87
- return state;
88
- }
89
- if (state.phase === 'introspecting') {
90
- if (event.kind === 'introspection-loaded') {
91
- // Output JSON write is a sub-step before stop-after-introspection.
92
- return state.outputJSONPath !== null
93
- ? { ...state, phase: 'output-json' }
94
- : state.stopAfter === 'introspection'
95
- ? stopAfterReached(state)
96
- : { ...state, phase: 'creating-session' };
97
- }
98
- if (event.kind === 'introspection-failed') {
99
- return setError(state, 'introspecting', event.error);
100
- }
101
- return state;
102
- }
103
- if (state.phase === 'output-json') {
104
- if (event.kind === 'output-json-written' ||
105
- event.kind === 'output-json-skipped' ||
106
- event.kind === 'output-json-not-requested') {
107
- return state.stopAfter === 'introspection'
108
- ? stopAfterReached(state)
109
- : { ...state, phase: 'creating-session' };
110
- }
111
- if (event.kind === 'output-json-failed') {
112
- return setError(state, 'output-json', event.error);
113
- }
114
- return state;
115
- }
116
- if (state.phase === 'creating-session') {
117
- if (event.kind === 'session-created') {
118
- return {
119
- ...state,
120
- sessionId: event.sessionId,
121
- phase: 'awaiting-authorization',
122
- };
123
- }
124
- if (event.kind === 'fast-path-completed') {
125
- return {
126
- ...state,
127
- sessionId: event.sessionId,
128
- authToken: event.token,
129
- phase: state.explanation !== null
130
- ? 'preflight-checking'
131
- : 'awaiting-explanation',
132
- };
133
- }
134
- if (event.kind === 'auth-not-needed') {
135
- // No server-side flow at all — proceed straight to terminal.
136
- return stopAfterReached(state);
137
- }
138
- if (event.kind === 'session-failed') {
139
- return setError(state, 'creating-session', event.error);
140
- }
141
- return state;
142
- }
143
- if (state.phase === 'awaiting-authorization') {
144
- if (event.kind === 'auth-confirmed') {
145
- return {
146
- ...state,
147
- authToken: event.token,
148
- phase: state.explanation !== null
149
- ? 'preflight-checking'
150
- : 'awaiting-explanation',
151
- };
152
- }
153
- if (event.kind === 'auth-failed') {
154
- return setError(state, 'awaiting-authorization', event.error);
155
- }
156
- return state;
157
- }
158
- if (state.phase === 'awaiting-explanation') {
159
- if (event.kind === 'explanation-given') {
160
- return {
161
- ...state,
162
- explanation: event.value,
163
- phase: 'preflight-checking',
164
- };
165
- }
166
- return state;
167
- }
168
- if (state.phase === 'preflight-checking') {
169
- if (event.kind === 'check-introspection-hit') {
170
- // Reused revision: skip ingest entirely. Post-introspection state
171
- // depends on whether the server returned a job id.
172
- return {
173
- ...state,
174
- revisionId: event.revisionId,
175
- samplesAlreadyIngested: event.samplesExist,
176
- tablesNeedingSamples: event.tablesNeedingSamples,
177
- preflightHit: true,
178
- postIntrospection: {
179
- ...state.postIntrospection,
180
- jobId: event.postIntrospectionJobId,
181
- state: event.postIntrospectionJobId === null
182
- ? 'done'
183
- : 'queued',
184
- reused: event.postIntrospectionJobId === null,
185
- },
186
- phase: event.samplesExist
187
- ? 'awaiting-post-sampling'
188
- : 'sampling-mask-resolving',
189
- };
190
- }
191
- if (event.kind === 'check-introspection-miss') {
192
- return { ...state, phase: 'ingesting-introspection' };
193
- }
194
- if (event.kind === 'ingest-failed') {
195
- return setError(state, 'preflight-checking', event.error);
196
- }
197
- return state;
198
- }
199
- if (state.phase === 'ingesting-introspection') {
200
- if (event.kind === 'introspection-ingested') {
201
- return {
202
- ...state,
203
- revisionId: event.revisionId,
204
- samplesAlreadyIngested: event.samplesExist,
205
- tablesNeedingSamples: event.tablesNeedingSamples,
206
- postIntrospection: {
207
- ...state.postIntrospection,
208
- jobId: event.postIntrospectionJobId,
209
- state: event.postIntrospectionJobId === null
210
- ? 'done'
211
- : 'queued',
212
- reused: event.postIntrospectionJobId === null,
213
- },
214
- phase: event.samplesExist
215
- ? 'awaiting-post-sampling'
216
- : 'sampling-mask-resolving',
217
- };
218
- }
219
- if (event.kind === 'ingest-failed') {
220
- return setError(state, 'ingesting-introspection', event.error);
221
- }
222
- return state;
223
- }
224
- if (state.phase === 'sampling-mask-resolving') {
225
- if (event.kind === 'mask-loaded') {
226
- return {
227
- ...state,
228
- sampling: { ...state.sampling, mask: event.mask },
229
- phase: 'sampling',
230
- };
231
- }
232
- if (event.kind === 'mask-fetch-failed') {
233
- return setError(state, 'sampling-mask-resolving', event.error);
234
- }
235
- // Cascade: post-introspection failed while we're still waiting on
236
- // it for the mask (the side-channel handler above already updated
237
- // sub-status; primary phase needs to fail too). The interpreter
238
- // re-dispatches as `mask-fetch-failed` after observing the substate
239
- // change.
240
- return state;
241
- }
242
- if (state.phase === 'sampling') {
243
- if (event.kind === 'sample-table-yielded') {
244
- return {
245
- ...state,
246
- sampling: {
247
- ...state.sampling,
248
- collected: [...state.sampling.collected, event.event],
249
- },
250
- };
251
- }
252
- if (event.kind === 'sampling-completed') {
253
- return state.stopAfter === 'sampling'
254
- ? stopAfterReached(state)
255
- : {
256
- ...state,
257
- sampling: {
258
- ...state.sampling,
259
- totalTables: state.sampling.collected.length,
260
- },
261
- phase: 'uploading-samples',
262
- };
263
- }
264
- if (event.kind === 'sampling-failed') {
265
- return setError(state, 'sampling', event.error);
266
- }
267
- return state;
268
- }
269
- if (state.phase === 'uploading-samples') {
270
- if (event.kind === 'sample-chunk-uploaded') {
271
- return {
272
- ...state,
273
- sampling: {
274
- ...state.sampling,
275
- uploadedTables: state.sampling.uploadedTables + event.chunkSize,
276
- },
277
- };
278
- }
279
- if (event.kind === 'samples-upload-completed' ||
280
- event.kind === 'samples-upload-not-needed') {
281
- return { ...state, phase: 'awaiting-post-sampling' };
282
- }
283
- if (event.kind === 'samples-upload-failed') {
284
- return setError(state, 'uploading-samples', event.error);
285
- }
286
- return state;
287
- }
288
- if (state.phase === 'awaiting-post-sampling') {
289
- if (event.kind === 'post-sampling-completed') {
290
- return { ...state, phase: 'done' };
291
- }
292
- if (event.kind === 'post-sampling-failed') {
293
- return setError(state, 'awaiting-post-sampling', event.error);
294
- }
295
- return state;
296
- }
297
- // Terminal phases ignore further events.
298
- return state;
299
- };
300
- // Resets sub-status fields to fresh — useful when the reducer is composed
301
- // with a higher-level driver that wants a clean slate (tests use this).
302
- export const cleanPostIntrospection = (state) => ({
303
- ...state,
304
- postIntrospection: initialPostIntrospection,
305
- });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlci5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJmbG93L3JlZHVjZXIubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCx3QkFBd0IsR0FHM0IsTUFBTSxjQUFjLENBQUM7QUFFdEIsbUVBQW1FO0FBQ25FLDJFQUEyRTtBQUMzRSx5RUFBeUU7QUFDekUsMkVBQTJFO0FBRTNFLE1BQU0sUUFBUSxHQUFHLENBQ2IsS0FBaUIsRUFDakIsS0FBaUIsRUFDakIsT0FBZSxFQUNMLEVBQUUsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxLQUFLO0lBQ1IsS0FBSyxFQUFFLE9BQU87SUFDZCxVQUFVLEVBQUUsS0FBSztJQUNqQixZQUFZLEVBQUUsT0FBTztDQUN4QixDQUFDLENBQUM7QUFFSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBYyxFQUFFLENBQUMsQ0FBQztJQUN6RCxHQUFHLEtBQUs7SUFDUixLQUFLLEVBQUUsTUFBTTtDQUNoQixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQWlCLEVBQWMsRUFBRTtJQUN2RSxrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLGlCQUFpQjtJQUNqQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssNkJBQTZCLEVBQUUsQ0FBQztRQUMvQyxPQUFPO1lBQ0gsR0FBRyxLQUFLO1lBQ1IsaUJBQWlCLEVBQUU7Z0JBQ2YsR0FBRyxLQUFLLENBQUMsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7Z0JBQ3hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7YUFDbkM7U0FDSixDQUFDO0lBQ04s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QUFDLEtBQUssS0FBSyx3QkFBd0IsRUFBRSxDQUFDO1FBQzNDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyx5QkFBeUIsRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBQyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLHdFQUF3RTtBQUN4RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQWMsRUFBRSxDQUFDLENBQUM7SUFDdEUsR0FBRyxLQUFLO0lBQ1IsaUJBQWlCLEVBQUUsd0JBQXdCO0NBQzlDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtURmxvd0V2ZW50fSBmcm9tICcuL2V2ZW50cy5tanMnO1xuaW1wb3J0IHtcbiAgICBpbml0aWFsUG9zdEludHJvc3BlY3Rpb24sXG4gICAgdHlwZSBURmxvd1BoYXNlLFxuICAgIHR5cGUgVEZsb3dTdGF0ZSxcbn0gZnJvbSAnLi9zdGF0ZXMubWpzJztcblxuLy8gUHVyZSByZWR1Y2VyOiAoc3RhdGUsIGV2ZW50KSDihpIgc3RhdGUuIEV4aGF1c3RpdmUgc3dpdGNoIG92ZXIgdGhlXG4vLyBkaXNjcmltaW5hdGVkIHVuaW9uIHNvIFR5cGVTY3JpcHQgY2F0Y2hlcyBtaXNzaW5nIGNhc2VzIGF0IGNvbXBpbGUgdGltZS5cbi8vIFVucmVsYXRlZCBldmVudHMgKGV2ZW50IGtpbmRzIHRoYXQgZG9uJ3QgYXBwbHkgdG8gdGhlIGN1cnJlbnQgcGhhc2Ugb3Jcbi8vIHN1Yi1zdGF0dXMpIHJldHVybiBzdGF0ZSB1bmNoYW5nZWQg4oCUIHBpbm5lZCBieSB0aGUgbm8tb3AgaW52YXJpYW50IHRlc3QuXG5cbmNvbnN0IHNldEVycm9yID0gKFxuICAgIHN0YXRlOiBURmxvd1N0YXRlLFxuICAgIHBoYXNlOiBURmxvd1BoYXNlLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbik6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaGFzZTogJ2Vycm9yJyxcbiAgICBlcnJvclBoYXNlOiBwaGFzZSxcbiAgICBlcnJvck1lc3NhZ2U6IG1lc3NhZ2UsXG59KTtcblxuY29uc3Qgc3RvcEFmdGVyUmVhY2hlZCA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaGFzZTogJ2RvbmUnLFxufSk7XG5cbmV4cG9ydCBjb25zdCByZWR1Y2UgPSAoc3RhdGU6IFRGbG93U3RhdGUsIGV2ZW50OiBURmxvd0V2ZW50KTogVEZsb3dTdGF0ZSA9PiB7XG4gICAgLy8gU2lkZS1jaGFubmVsOiBwb3N0LWludHJvc3BlY3Rpb24gcHJvZ3Jlc3MgY2FuIGZpcmUgaW4gYW55IHBoYXNlXG4gICAgLy8gcG9zdC1gaW5nZXN0aW5nLWludHJvc3BlY3Rpb25gLiBVcGRhdGUgdGhlIHN1Yi1zdGF0dXMgd2l0aG91dCBjaGFuZ2luZ1xuICAgIC8vIHByaW1hcnkgcGhhc2UuXG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LWludHJvc3BlY3Rpb24tcHJvZ3Jlc3MnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICBzdGFnZTogZXZlbnQuc3RhZ2UsXG4gICAgICAgICAgICAgICAgdG9rZW5zSW46IGV2ZW50LnRva2Vuc0luLFxuICAgICAgICAgICAgICAgIHRva2Vuc091dDogZXZlbnQudG9rZW5zT3V0LFxuICAgICAgICAgICAgICAgIGNvbHVtbnNEb25lOiBldmVudC5jb2x1bW5zRG9uZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IGV2ZW50LmNvbHVtbnNUb3RhbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudC5raW5kID09PSAncG9zdC1pbnRyb3NwZWN0aW9uLWNvbXBsZXRlZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wb3N0SW50cm9zcGVjdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0ZTogJ2RvbmUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LWludHJvc3BlY3Rpb24tZmFpbGVkJykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBwb3N0SW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGVycm9yOiBldmVudC5lcnJvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU3RvcC1hZnRlciBpcyB0aGUgc2FtZSBzaGFwZSByZWdhcmRsZXNzIG9mIHBoYXNlOiBlbnRlciB0ZXJtaW5hbCBgZG9uZWAuXG4gICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzdG9wLWFmdGVyLXJlYWNoZWQnKSB7XG4gICAgICAgIHJldHVybiBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgcGhhc2Utc3BlY2lmaWMgdHJhbnNpdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdpZGxlJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBwaGFzZTogc3RhdGUuc3NoRW5hYmxlZCA/ICdjb25uZWN0aW5nLXNzaCcgOiAnY29ubmVjdGluZy1kYicsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdjb25uZWN0aW5nLXNzaCcpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzc2gtY29ubmVjdGVkJyB8fCBldmVudC5raW5kID09PSAnc3NoLW5vdC1uZWVkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnc3NoLWNvbm5lY3QnXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDogey4uLnN0YXRlLCBwaGFzZTogJ2Nvbm5lY3RpbmctZGInfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NzaC1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdjb25uZWN0aW5nLXNzaCcsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnY29ubmVjdGluZy1kYicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdkYi1jb25uZWN0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnZGItY29ubmVjdCdcbiAgICAgICAgICAgICAgICA/IHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpXG4gICAgICAgICAgICAgICAgOiB7Li4uc3RhdGUsIHBoYXNlOiAnaW50cm9zcGVjdGluZyd9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZGItZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnY29ubmVjdGluZy1kYicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnaW50cm9zcGVjdGluZycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWxvYWRlZCcpIHtcbiAgICAgICAgICAgIC8vIE91dHB1dCBKU09OIHdyaXRlIGlzIGEgc3ViLXN0ZXAgYmVmb3JlIHN0b3AtYWZ0ZXItaW50cm9zcGVjdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5vdXRwdXRKU09OUGF0aCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gey4uLnN0YXRlLCBwaGFzZTogJ291dHB1dC1qc29uJ31cbiAgICAgICAgICAgICAgICA6IHN0YXRlLnN0b3BBZnRlciA9PT0gJ2ludHJvc3BlY3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpXG4gICAgICAgICAgICAgICAgICA6IHsuLi5zdGF0ZSwgcGhhc2U6ICdjcmVhdGluZy1zZXNzaW9uJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2ludHJvc3BlY3RpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ291dHB1dC1qc29uJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnb3V0cHV0LWpzb24td3JpdHRlbicgfHxcbiAgICAgICAgICAgIGV2ZW50LmtpbmQgPT09ICdvdXRwdXQtanNvbi1za2lwcGVkJyB8fFxuICAgICAgICAgICAgZXZlbnQua2luZCA9PT0gJ291dHB1dC1qc29uLW5vdC1yZXF1ZXN0ZWQnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0b3BBZnRlciA9PT0gJ2ludHJvc3BlY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDogey4uLnN0YXRlLCBwaGFzZTogJ2NyZWF0aW5nLXNlc3Npb24nfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ291dHB1dC1qc29uLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ291dHB1dC1qc29uJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdjcmVhdGluZy1zZXNzaW9uJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Nlc3Npb24tY3JlYXRlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBldmVudC5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcGhhc2U6ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdmYXN0LXBhdGgtY29tcGxldGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGV2ZW50LnNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICBhdXRoVG9rZW46IGV2ZW50LnRva2VuLFxuICAgICAgICAgICAgICAgIHBoYXNlOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5leHBsYW5hdGlvbiAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYXdhaXRpbmctZXhwbGFuYXRpb24nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtbm90LW5lZWRlZCcpIHtcbiAgICAgICAgICAgIC8vIE5vIHNlcnZlci1zaWRlIGZsb3cgYXQgYWxsIOKAlCBwcm9jZWVkIHN0cmFpZ2h0IHRvIHRlcm1pbmFsLlxuICAgICAgICAgICAgcmV0dXJuIHN0b3BBZnRlclJlYWNoZWQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnc2Vzc2lvbi1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdjcmVhdGluZy1zZXNzaW9uJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1hdXRob3JpemF0aW9uJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtY29uZmlybWVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBhdXRoVG9rZW46IGV2ZW50LnRva2VuLFxuICAgICAgICAgICAgICAgIHBoYXNlOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5leHBsYW5hdGlvbiAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncHJlZmxpZ2h0LWNoZWNraW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYXdhaXRpbmctZXhwbGFuYXRpb24nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2F1dGgtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnYXdhaXRpbmctYXV0aG9yaXphdGlvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnYXdhaXRpbmctZXhwbGFuYXRpb24nKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnZXhwbGFuYXRpb24tZ2l2ZW4nKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uOiBldmVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBwaGFzZTogJ3ByZWZsaWdodC1jaGVja2luZycsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdwcmVmbGlnaHQtY2hlY2tpbmcnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnY2hlY2staW50cm9zcGVjdGlvbi1oaXQnKSB7XG4gICAgICAgICAgICAvLyBSZXVzZWQgcmV2aXNpb246IHNraXAgaW5nZXN0IGVudGlyZWx5LiBQb3N0LWludHJvc3BlY3Rpb24gc3RhdGVcbiAgICAgICAgICAgIC8vIGRlcGVuZHMgb24gd2hldGhlciB0aGUgc2VydmVyIHJldHVybmVkIGEgam9iIGlkLlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICByZXZpc2lvbklkOiBldmVudC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGV2ZW50LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogZXZlbnQudGFibGVzTmVlZGluZ1NhbXBsZXMsXG4gICAgICAgICAgICAgICAgcHJlZmxpZ2h0SGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBqb2JJZDogZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdxdWV1ZWQnLFxuICAgICAgICAgICAgICAgICAgICByZXVzZWQ6IGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQgPT09IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwaGFzZTogZXZlbnQuc2FtcGxlc0V4aXN0XG4gICAgICAgICAgICAgICAgICAgID8gJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgICAgIDogJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdjaGVjay1pbnRyb3NwZWN0aW9uLW1pc3MnKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBwaGFzZTogJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbmdlc3QtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAncHJlZmxpZ2h0LWNoZWNraW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdpbnRyb3NwZWN0aW9uLWluZ2VzdGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICByZXZpc2lvbklkOiBldmVudC5yZXZpc2lvbklkLFxuICAgICAgICAgICAgICAgIHNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQ6IGV2ZW50LnNhbXBsZXNFeGlzdCxcbiAgICAgICAgICAgICAgICB0YWJsZXNOZWVkaW5nU2FtcGxlczogZXZlbnQudGFibGVzTmVlZGluZ1NhbXBsZXMsXG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUucG9zdEludHJvc3BlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGpvYklkOiBldmVudC5wb3N0SW50cm9zcGVjdGlvbkpvYklkLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnBvc3RJbnRyb3NwZWN0aW9uSm9iSWQgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3F1ZXVlZCcsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogZXZlbnQucG9zdEludHJvc3BlY3Rpb25Kb2JJZCA9PT0gbnVsbCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBoYXNlOiBldmVudC5zYW1wbGVzRXhpc3RcbiAgICAgICAgICAgICAgICAgICAgPyAnYXdhaXRpbmctcG9zdC1zYW1wbGluZydcbiAgICAgICAgICAgICAgICAgICAgOiAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ2luZ2VzdC1mYWlsZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0RXJyb3Ioc3RhdGUsICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicsIGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnKSB7XG4gICAgICAgIGlmIChldmVudC5raW5kID09PSAnbWFzay1sb2FkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7Li4uc3RhdGUuc2FtcGxpbmcsIG1hc2s6IGV2ZW50Lm1hc2t9LFxuICAgICAgICAgICAgICAgIHBoYXNlOiAnc2FtcGxpbmcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ21hc2stZmV0Y2gtZmFpbGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNldEVycm9yKHN0YXRlLCAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2FzY2FkZTogcG9zdC1pbnRyb3NwZWN0aW9uIGZhaWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCB3YWl0aW5nIG9uXG4gICAgICAgIC8vIGl0IGZvciB0aGUgbWFzayAodGhlIHNpZGUtY2hhbm5lbCBoYW5kbGVyIGFib3ZlIGFscmVhZHkgdXBkYXRlZFxuICAgICAgICAvLyBzdWItc3RhdHVzOyBwcmltYXJ5IHBoYXNlIG5lZWRzIHRvIGZhaWwgdG9vKS4gVGhlIGludGVycHJldGVyXG4gICAgICAgIC8vIHJlLWRpc3BhdGNoZXMgYXMgYG1hc2stZmV0Y2gtZmFpbGVkYCBhZnRlciBvYnNlcnZpbmcgdGhlIHN1YnN0YXRlXG4gICAgICAgIC8vIGNoYW5nZS5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5waGFzZSA9PT0gJ3NhbXBsaW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsZS10YWJsZS15aWVsZGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zYW1wbGluZyxcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkOiBbLi4uc3RhdGUuc2FtcGxpbmcuY29sbGVjdGVkLCBldmVudC5ldmVudF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGluZy1jb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuc3RvcEFmdGVyID09PSAnc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgPyBzdG9wQWZ0ZXJSZWFjaGVkKHN0YXRlKVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNhbXBsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFRhYmxlczogc3RhdGUuc2FtcGxpbmcuY29sbGVjdGVkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOiAndXBsb2FkaW5nLXNhbXBsZXMnLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsaW5nLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3NhbXBsaW5nJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICd1cGxvYWRpbmctc2FtcGxlcycpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdzYW1wbGUtY2h1bmstdXBsb2FkZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgIHNhbXBsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNhbXBsaW5nLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRlZFRhYmxlczpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNhbXBsaW5nLnVwbG9hZGVkVGFibGVzICsgZXZlbnQuY2h1bmtTaXplLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50LmtpbmQgPT09ICdzYW1wbGVzLXVwbG9hZC1jb21wbGV0ZWQnIHx8XG4gICAgICAgICAgICBldmVudC5raW5kID09PSAnc2FtcGxlcy11cGxvYWQtbm90LW5lZWRlZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBwaGFzZTogJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3NhbXBsZXMtdXBsb2FkLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ3VwbG9hZGluZy1zYW1wbGVzJywgZXZlbnQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJykge1xuICAgICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3Bvc3Qtc2FtcGxpbmctY29tcGxldGVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgcGhhc2U6ICdkb25lJ307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtpbmQgPT09ICdwb3N0LXNhbXBsaW5nLWZhaWxlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRFcnJvcihzdGF0ZSwgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLCBldmVudC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIC8vIFRlcm1pbmFsIHBoYXNlcyBpZ25vcmUgZnVydGhlciBldmVudHMuXG4gICAgcmV0dXJuIHN0YXRlO1xufTtcblxuLy8gUmVzZXRzIHN1Yi1zdGF0dXMgZmllbGRzIHRvIGZyZXNoIOKAlCB1c2VmdWwgd2hlbiB0aGUgcmVkdWNlciBpcyBjb21wb3NlZFxuLy8gd2l0aCBhIGhpZ2hlci1sZXZlbCBkcml2ZXIgdGhhdCB3YW50cyBhIGNsZWFuIHNsYXRlICh0ZXN0cyB1c2UgdGhpcykuXG5leHBvcnQgY29uc3QgY2xlYW5Qb3N0SW50cm9zcGVjdGlvbiA9IChzdGF0ZTogVEZsb3dTdGF0ZSk6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwb3N0SW50cm9zcGVjdGlvbjogaW5pdGlhbFBvc3RJbnRyb3NwZWN0aW9uLFxufSk7XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reducer.test.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reducer.test.d.mts","sourceRoot":"./src/","sources":["flow/reducer.test.mts"],"names":[],"mappings":""}