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
@@ -0,0 +1,17 @@
1
+ import type { TStore } from '../store.mjs';
2
+ import type { TFlowState } from './states.mjs';
3
+ type TStoreSteps = TStore['steps'];
4
+ export declare const projectStoreFromFlow: (state: TFlowState) => {
5
+ readonly ingestion: {
6
+ readonly introspection: Omit<TStoreSteps["ingestion"]["introspection"], "gate">;
7
+ readonly postIntrospection: TStoreSteps["ingestion"]["postIntrospection"];
8
+ };
9
+ readonly sampling: Pick<TStoreSteps["sampling"], "state" | "reused" | "error">;
10
+ readonly userExplanation: TStoreSteps["userExplanation"];
11
+ readonly account: {
12
+ readonly state: "error";
13
+ readonly error: string | null;
14
+ } | null;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=projection.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.d.mts","sourceRoot":"./src/","sources":["flow/projection.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAM7C,KAAK,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAMnC,eAAO,MAAM,oBAAoB,GAC7B,OAAO,UAAU,KAClB;IACC,QAAQ,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,aAAa,EAAE,IAAI,CACxB,WAAW,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,EACzC,MAAM,CACT,CAAC;QACF,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,mBAAmB,CAAC,CAAC;KAC7E,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,IAAI,CACnB,WAAW,CAAC,UAAU,CAAC,EACvB,OAAO,GAAG,QAAQ,GAAG,OAAO,CAC/B,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,GAAG,IAAI,CAAC;CA2FZ,CAAC"}
@@ -0,0 +1,83 @@
1
+ // Compute a deep-ish patch of the store fields the flow drives. Sibling
2
+ // fields the helpers themselves manage (e.g. SSH connection.state during
3
+ // password retry) are deliberately omitted — those stay owned by their
4
+ // helper.
5
+ export const projectStoreFromFlow = (state) => {
6
+ const introspectionStepState = state.errorPhase === 'ingesting-introspection' ||
7
+ state.errorPhase === 'preflight-checking'
8
+ ? 'error'
9
+ : state.preflightHit
10
+ ? 'skipped'
11
+ : state.revisionId !== null
12
+ ? 'done'
13
+ : state.phase === 'ingesting-introspection'
14
+ ? 'uploading'
15
+ : 'idle';
16
+ const samplingState = state.errorPhase === 'sampling' ||
17
+ state.errorPhase === 'sampling-mask-resolving'
18
+ ? 'error'
19
+ : state.samplesAlreadyIngested
20
+ ? 'skipped'
21
+ : state.phase === 'sampling'
22
+ ? 'fetching'
23
+ : state.phase === 'uploading-samples' ||
24
+ state.phase === 'awaiting-post-sampling' ||
25
+ state.phase === 'done'
26
+ ? 'done'
27
+ : 'idle';
28
+ const phasesAfterExplanation = new Set([
29
+ 'preflight-checking',
30
+ 'ingesting-introspection',
31
+ 'sampling-mask-resolving',
32
+ 'sampling',
33
+ 'uploading-samples',
34
+ 'awaiting-post-sampling',
35
+ 'done',
36
+ ]);
37
+ const userExplanationState = state.phase === 'awaiting-explanation'
38
+ ? 'prompting'
39
+ : state.explanation !== null ||
40
+ phasesAfterExplanation.has(state.phase)
41
+ ? 'done'
42
+ : 'idle';
43
+ const accountDelta = state.errorPhase === 'creating-session' ||
44
+ state.errorPhase === 'awaiting-authorization'
45
+ ? { state: 'error', error: state.errorMessage }
46
+ : null;
47
+ return {
48
+ ingestion: {
49
+ introspection: {
50
+ state: introspectionStepState,
51
+ error: state.errorPhase === 'ingesting-introspection' ||
52
+ state.errorPhase === 'preflight-checking'
53
+ ? state.errorMessage
54
+ : null,
55
+ },
56
+ postIntrospection: {
57
+ state: state.postIntrospection.state,
58
+ error: state.postIntrospection.error,
59
+ reused: state.postIntrospection.reused,
60
+ stage: state.postIntrospection.stage,
61
+ tokensIn: state.postIntrospection.tokensIn,
62
+ tokensOut: state.postIntrospection.tokensOut,
63
+ columnsDone: state.postIntrospection.columnsDone,
64
+ columnsTotal: state.postIntrospection.columnsTotal,
65
+ jobId: state.postIntrospection.jobId,
66
+ },
67
+ },
68
+ sampling: {
69
+ state: samplingState,
70
+ reused: state.samplesAlreadyIngested,
71
+ error: state.errorPhase === 'sampling' ||
72
+ state.errorPhase === 'sampling-mask-resolving'
73
+ ? state.errorMessage
74
+ : null,
75
+ },
76
+ userExplanation: {
77
+ state: userExplanationState,
78
+ value: state.explanation,
79
+ },
80
+ account: accountDelta,
81
+ };
82
+ };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbi5tanMiLCJzb3VyY2VSb290IjoiLi9zcmMvIiwic291cmNlcyI6WyJmbG93L3Byb2plY3Rpb24ubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLHdFQUF3RTtBQUN4RSx5RUFBeUU7QUFDekUsdUVBQXVFO0FBQ3ZFLFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNoQyxLQUFpQixFQWtCbkIsRUFBRTtJQUNBLE1BQU0sc0JBQXNCLEdBQ3hCLEtBQUssQ0FBQyxVQUFVLEtBQUsseUJBQXlCO1FBQzlDLEtBQUssQ0FBQyxVQUFVLEtBQUssb0JBQW9CO1FBQ3JDLENBQUMsQ0FBQyxPQUFPO1FBQ1QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ2xCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssSUFBSTtnQkFDekIsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUsseUJBQXlCO29CQUN6QyxDQUFDLENBQUMsV0FBVztvQkFDYixDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXZCLE1BQU0sYUFBYSxHQUNmLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVTtRQUMvQixLQUFLLENBQUMsVUFBVSxLQUFLLHlCQUF5QjtRQUMxQyxDQUFDLENBQUMsT0FBTztRQUNULENBQUMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCO1lBQzVCLENBQUMsQ0FBQyxTQUFTO1lBQ1gsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVTtnQkFDMUIsQ0FBQyxDQUFDLFVBQVU7Z0JBQ1osQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssbUJBQW1CO29CQUNqQyxLQUFLLENBQUMsS0FBSyxLQUFLLHdCQUF3QjtvQkFDeEMsS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNO29CQUN4QixDQUFDLENBQUMsTUFBTTtvQkFDUixDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXZCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDbkMsb0JBQW9CO1FBQ3BCLHlCQUF5QjtRQUN6Qix5QkFBeUI7UUFDekIsVUFBVTtRQUNWLG1CQUFtQjtRQUNuQix3QkFBd0I7UUFDeEIsTUFBTTtLQUNULENBQUMsQ0FBQztJQUNILE1BQU0sb0JBQW9CLEdBQ3RCLEtBQUssQ0FBQyxLQUFLLEtBQUssc0JBQXNCO1FBQ2xDLENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssSUFBSTtZQUN4QixzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN6QyxDQUFDLENBQUMsTUFBTTtZQUNSLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFbkIsTUFBTSxZQUFZLEdBSWQsS0FBSyxDQUFDLFVBQVUsS0FBSyxrQkFBa0I7UUFDdkMsS0FBSyxDQUFDLFVBQVUsS0FBSyx3QkFBd0I7UUFDekMsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBQztRQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWYsT0FBTztRQUNILFNBQVMsRUFBRTtZQUNQLGFBQWEsRUFBRTtnQkFDWCxLQUFLLEVBQUUsc0JBQXNCO2dCQUM3QixLQUFLLEVBQ0QsS0FBSyxDQUFDLFVBQVUsS0FBSyx5QkFBeUI7b0JBQzlDLEtBQUssQ0FBQyxVQUFVLEtBQUssb0JBQW9CO29CQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQ3BCLENBQUMsQ0FBQyxJQUFJO2FBQ2pCO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2YsS0FBSyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUNwQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUs7Z0JBQ3BDLE1BQU0sRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTTtnQkFDdEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUNwQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzFDLFNBQVMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUztnQkFDNUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO2dCQUNoRCxZQUFZLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2xELEtBQUssRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSzthQUN2QztTQUNKO1FBQ0QsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLGFBQWE7WUFDcEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxzQkFBc0I7WUFDcEMsS0FBSyxFQUNELEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVTtnQkFDL0IsS0FBSyxDQUFDLFVBQVUsS0FBSyx5QkFBeUI7Z0JBQzFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtnQkFDcEIsQ0FBQyxDQUFDLElBQUk7U0FDakI7UUFDRCxlQUFlLEVBQUU7WUFDYixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVztTQUMzQjtRQUNELE9BQU8sRUFBRSxZQUFZO0tBQ3hCLENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7VFN0b3JlfSBmcm9tICcuLi9zdG9yZS5tanMnO1xuaW1wb3J0IHR5cGUge1RGbG93U3RhdGV9IGZyb20gJy4vc3RhdGVzLm1qcyc7XG5cbi8vIFB1cmUgcHJvamVjdGlvbjogVEZsb3dTdGF0ZSDihpIgcGFydGlhbCBzdG9yZSBkZWx0YSB0aGUgaW50ZXJwcmV0ZXIgYXBwbGllc1xuLy8gaW5zaWRlIHJ1bkluQWN0aW9uLiBGaWVsZCBuYW1lcyBtYXRjaCB0aGUgZXhpc3Rpbmcgc3RvcmUgc2hhcGUgZXhhY3RseSBzb1xuLy8gdGhlIEluayBVSSBrZWVwcyByZWFkaW5nIHRoZSBzYW1lIHBhdGhzIGl0IGFsd2F5cyBkaWQuXG5cbnR5cGUgVFN0b3JlU3RlcHMgPSBUU3RvcmVbJ3N0ZXBzJ107XG5cbi8vIENvbXB1dGUgYSBkZWVwLWlzaCBwYXRjaCBvZiB0aGUgc3RvcmUgZmllbGRzIHRoZSBmbG93IGRyaXZlcy4gU2libGluZ1xuLy8gZmllbGRzIHRoZSBoZWxwZXJzIHRoZW1zZWx2ZXMgbWFuYWdlIChlLmcuIFNTSCBjb25uZWN0aW9uLnN0YXRlIGR1cmluZ1xuLy8gcGFzc3dvcmQgcmV0cnkpIGFyZSBkZWxpYmVyYXRlbHkgb21pdHRlZCDigJQgdGhvc2Ugc3RheSBvd25lZCBieSB0aGVpclxuLy8gaGVscGVyLlxuZXhwb3J0IGNvbnN0IHByb2plY3RTdG9yZUZyb21GbG93ID0gKFxuICAgIHN0YXRlOiBURmxvd1N0YXRlLFxuKToge1xuICAgIHJlYWRvbmx5IGluZ2VzdGlvbjoge1xuICAgICAgICByZWFkb25seSBpbnRyb3NwZWN0aW9uOiBPbWl0PFxuICAgICAgICAgICAgVFN0b3JlU3RlcHNbJ2luZ2VzdGlvbiddWydpbnRyb3NwZWN0aW9uJ10sXG4gICAgICAgICAgICAnZ2F0ZSdcbiAgICAgICAgPjtcbiAgICAgICAgcmVhZG9ubHkgcG9zdEludHJvc3BlY3Rpb246IFRTdG9yZVN0ZXBzWydpbmdlc3Rpb24nXVsncG9zdEludHJvc3BlY3Rpb24nXTtcbiAgICB9O1xuICAgIHJlYWRvbmx5IHNhbXBsaW5nOiBQaWNrPFxuICAgICAgICBUU3RvcmVTdGVwc1snc2FtcGxpbmcnXSxcbiAgICAgICAgJ3N0YXRlJyB8ICdyZXVzZWQnIHwgJ2Vycm9yJ1xuICAgID47XG4gICAgcmVhZG9ubHkgdXNlckV4cGxhbmF0aW9uOiBUU3RvcmVTdGVwc1sndXNlckV4cGxhbmF0aW9uJ107XG4gICAgcmVhZG9ubHkgYWNjb3VudDoge1xuICAgICAgICByZWFkb25seSBzdGF0ZTogJ2Vycm9yJztcbiAgICAgICAgcmVhZG9ubHkgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgfSB8IG51bGw7XG59ID0+IHtcbiAgICBjb25zdCBpbnRyb3NwZWN0aW9uU3RlcFN0YXRlOiBUU3RvcmVTdGVwc1snaW5nZXN0aW9uJ11bJ2ludHJvc3BlY3Rpb24nXVsnc3RhdGUnXSA9XG4gICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicgfHxcbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3ByZWZsaWdodC1jaGVja2luZydcbiAgICAgICAgICAgID8gJ2Vycm9yJ1xuICAgICAgICAgICAgOiBzdGF0ZS5wcmVmbGlnaHRIaXRcbiAgICAgICAgICAgICAgPyAnc2tpcHBlZCdcbiAgICAgICAgICAgICAgOiBzdGF0ZS5yZXZpc2lvbklkICE9PSBudWxsXG4gICAgICAgICAgICAgICAgPyAnZG9uZSdcbiAgICAgICAgICAgICAgICA6IHN0YXRlLnBoYXNlID09PSAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nXG4gICAgICAgICAgICAgICAgICA/ICd1cGxvYWRpbmcnXG4gICAgICAgICAgICAgICAgICA6ICdpZGxlJztcblxuICAgIGNvbnN0IHNhbXBsaW5nU3RhdGU6IFRTdG9yZVN0ZXBzWydzYW1wbGluZyddWydzdGF0ZSddID1cbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3NhbXBsaW5nJyB8fFxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnXG4gICAgICAgICAgICA/ICdlcnJvcidcbiAgICAgICAgICAgIDogc3RhdGUuc2FtcGxlc0FscmVhZHlJbmdlc3RlZFxuICAgICAgICAgICAgICA/ICdza2lwcGVkJ1xuICAgICAgICAgICAgICA6IHN0YXRlLnBoYXNlID09PSAnc2FtcGxpbmcnXG4gICAgICAgICAgICAgICAgPyAnZmV0Y2hpbmcnXG4gICAgICAgICAgICAgICAgOiBzdGF0ZS5waGFzZSA9PT0gJ3VwbG9hZGluZy1zYW1wbGVzJyB8fFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5waGFzZSA9PT0gJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnBoYXNlID09PSAnZG9uZSdcbiAgICAgICAgICAgICAgICAgID8gJ2RvbmUnXG4gICAgICAgICAgICAgICAgICA6ICdpZGxlJztcblxuICAgIGNvbnN0IHBoYXNlc0FmdGVyRXhwbGFuYXRpb24gPSBuZXcgU2V0KFtcbiAgICAgICAgJ3ByZWZsaWdodC1jaGVja2luZycsXG4gICAgICAgICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicsXG4gICAgICAgICdzYW1wbGluZy1tYXNrLXJlc29sdmluZycsXG4gICAgICAgICdzYW1wbGluZycsXG4gICAgICAgICd1cGxvYWRpbmctc2FtcGxlcycsXG4gICAgICAgICdhd2FpdGluZy1wb3N0LXNhbXBsaW5nJyxcbiAgICAgICAgJ2RvbmUnLFxuICAgIF0pO1xuICAgIGNvbnN0IHVzZXJFeHBsYW5hdGlvblN0YXRlOiBUU3RvcmVTdGVwc1sndXNlckV4cGxhbmF0aW9uJ11bJ3N0YXRlJ10gPVxuICAgICAgICBzdGF0ZS5waGFzZSA9PT0gJ2F3YWl0aW5nLWV4cGxhbmF0aW9uJ1xuICAgICAgICAgICAgPyAncHJvbXB0aW5nJ1xuICAgICAgICAgICAgOiBzdGF0ZS5leHBsYW5hdGlvbiAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHBoYXNlc0FmdGVyRXhwbGFuYXRpb24uaGFzKHN0YXRlLnBoYXNlKVxuICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICA6ICdpZGxlJztcblxuICAgIGNvbnN0IGFjY291bnREZWx0YToge1xuICAgICAgICByZWFkb25seSBzdGF0ZTogJ2Vycm9yJztcbiAgICAgICAgcmVhZG9ubHkgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gICAgfSB8IG51bGwgPVxuICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnY3JlYXRpbmctc2Vzc2lvbicgfHxcbiAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ2F3YWl0aW5nLWF1dGhvcml6YXRpb24nXG4gICAgICAgICAgICA/IHtzdGF0ZTogJ2Vycm9yJywgZXJyb3I6IHN0YXRlLmVycm9yTWVzc2FnZX1cbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGluZ2VzdGlvbjoge1xuICAgICAgICAgICAgaW50cm9zcGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBpbnRyb3NwZWN0aW9uU3RlcFN0YXRlLFxuICAgICAgICAgICAgICAgIGVycm9yOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnaW5nZXN0aW5nLWludHJvc3BlY3Rpb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yUGhhc2UgPT09ICdwcmVmbGlnaHQtY2hlY2tpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXRlLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvc3RJbnRyb3NwZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5lcnJvcixcbiAgICAgICAgICAgICAgICByZXVzZWQ6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLnJldXNlZCxcbiAgICAgICAgICAgICAgICBzdGFnZTogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uc3RhZ2UsXG4gICAgICAgICAgICAgICAgdG9rZW5zSW46IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLnRva2Vuc0luLFxuICAgICAgICAgICAgICAgIHRva2Vuc091dDogc3RhdGUucG9zdEludHJvc3BlY3Rpb24udG9rZW5zT3V0LFxuICAgICAgICAgICAgICAgIGNvbHVtbnNEb25lOiBzdGF0ZS5wb3N0SW50cm9zcGVjdGlvbi5jb2x1bW5zRG9uZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IHN0YXRlLnBvc3RJbnRyb3NwZWN0aW9uLmNvbHVtbnNUb3RhbCxcbiAgICAgICAgICAgICAgICBqb2JJZDogc3RhdGUucG9zdEludHJvc3BlY3Rpb24uam9iSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYW1wbGluZzoge1xuICAgICAgICAgICAgc3RhdGU6IHNhbXBsaW5nU3RhdGUsXG4gICAgICAgICAgICByZXVzZWQ6IHN0YXRlLnNhbXBsZXNBbHJlYWR5SW5nZXN0ZWQsXG4gICAgICAgICAgICBlcnJvcjpcbiAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvclBoYXNlID09PSAnc2FtcGxpbmcnIHx8XG4gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JQaGFzZSA9PT0gJ3NhbXBsaW5nLW1hc2stcmVzb2x2aW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IHN0YXRlLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJFeHBsYW5hdGlvbjoge1xuICAgICAgICAgICAgc3RhdGU6IHVzZXJFeHBsYW5hdGlvblN0YXRlLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXRlLmV4cGxhbmF0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50OiBhY2NvdW50RGVsdGEsXG4gICAgfTtcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=projection.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.test.d.mts","sourceRoot":"./src/","sources":["flow/projection.test.mts"],"names":[],"mappings":""}
@@ -0,0 +1,162 @@
1
+ import { describe, test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { projectStoreFromFlow } from './projection.mjs';
4
+ import { initialFlowState } from './states.mjs';
5
+ const init = (overrides = {}) => ({
6
+ ...initialFlowState({
7
+ stopAfter: null,
8
+ sshEnabled: false,
9
+ fileMaskPath: null,
10
+ fromIntrospectionFile: false,
11
+ outputJSONPath: null,
12
+ outputSamplesDir: null,
13
+ explanation: null,
14
+ }),
15
+ ...overrides,
16
+ });
17
+ describe('projection: ingestion.introspection.state', () => {
18
+ test('idle phase → idle', () => {
19
+ const p = projectStoreFromFlow(init());
20
+ assert.equal(p.ingestion.introspection.state, 'idle');
21
+ });
22
+ test('ingesting-introspection phase → uploading', () => {
23
+ const p = projectStoreFromFlow(init({ phase: 'ingesting-introspection' }));
24
+ assert.equal(p.ingestion.introspection.state, 'uploading');
25
+ });
26
+ test('preflightHit → skipped', () => {
27
+ const p = projectStoreFromFlow(init({ preflightHit: true, revisionId: 'r' }));
28
+ assert.equal(p.ingestion.introspection.state, 'skipped');
29
+ });
30
+ test('revisionId set, no preflight hit → done', () => {
31
+ const p = projectStoreFromFlow(init({ revisionId: 'r', phase: 'sampling' }));
32
+ assert.equal(p.ingestion.introspection.state, 'done');
33
+ });
34
+ test('errorPhase = ingesting-introspection → error + message', () => {
35
+ const p = projectStoreFromFlow(init({
36
+ phase: 'error',
37
+ errorPhase: 'ingesting-introspection',
38
+ errorMessage: 'pg conflict',
39
+ }));
40
+ assert.equal(p.ingestion.introspection.state, 'error');
41
+ assert.equal(p.ingestion.introspection.error, 'pg conflict');
42
+ });
43
+ });
44
+ describe('projection: ingestion.postIntrospection', () => {
45
+ test('initial sub-status → idle', () => {
46
+ const p = projectStoreFromFlow(init());
47
+ assert.equal(p.ingestion.postIntrospection.state, 'idle');
48
+ assert.equal(p.ingestion.postIntrospection.jobId, null);
49
+ assert.equal(p.ingestion.postIntrospection.reused, false);
50
+ });
51
+ test('reused branch → reused=true, state=done', () => {
52
+ const p = projectStoreFromFlow(init({
53
+ postIntrospection: {
54
+ state: 'done',
55
+ jobId: null,
56
+ reused: true,
57
+ stage: null,
58
+ tokensIn: null,
59
+ tokensOut: null,
60
+ columnsDone: null,
61
+ columnsTotal: null,
62
+ error: null,
63
+ },
64
+ }));
65
+ assert.equal(p.ingestion.postIntrospection.state, 'done');
66
+ assert.equal(p.ingestion.postIntrospection.reused, true);
67
+ });
68
+ test('progress fields propagate through', () => {
69
+ const p = projectStoreFromFlow(init({
70
+ postIntrospection: {
71
+ state: 'running',
72
+ jobId: 'pi-1',
73
+ reused: false,
74
+ stage: 'classifying',
75
+ tokensIn: 200,
76
+ tokensOut: 100,
77
+ columnsDone: 5,
78
+ columnsTotal: 50,
79
+ error: null,
80
+ },
81
+ }));
82
+ assert.equal(p.ingestion.postIntrospection.stage, 'classifying');
83
+ assert.equal(p.ingestion.postIntrospection.tokensIn, 200);
84
+ assert.equal(p.ingestion.postIntrospection.columnsDone, 5);
85
+ });
86
+ });
87
+ describe('projection: sampling', () => {
88
+ test('idle phase → idle', () => {
89
+ const p = projectStoreFromFlow(init());
90
+ assert.equal(p.sampling.state, 'idle');
91
+ assert.equal(p.sampling.reused, false);
92
+ });
93
+ test('samplesAlreadyIngested → skipped + reused=true', () => {
94
+ const p = projectStoreFromFlow(init({ samplesAlreadyIngested: true }));
95
+ assert.equal(p.sampling.state, 'skipped');
96
+ assert.equal(p.sampling.reused, true);
97
+ });
98
+ test('sampling phase → fetching', () => {
99
+ const p = projectStoreFromFlow(init({ phase: 'sampling' }));
100
+ assert.equal(p.sampling.state, 'fetching');
101
+ });
102
+ test('uploading-samples + later phases → done', () => {
103
+ for (const phase of [
104
+ 'uploading-samples',
105
+ 'awaiting-post-sampling',
106
+ 'done',
107
+ ]) {
108
+ const p = projectStoreFromFlow(init({ phase }));
109
+ assert.equal(p.sampling.state, 'done', `phase=${phase}`);
110
+ }
111
+ });
112
+ test('errorPhase = sampling → error + message', () => {
113
+ const p = projectStoreFromFlow(init({
114
+ phase: 'error',
115
+ errorPhase: 'sampling',
116
+ errorMessage: 'oom',
117
+ }));
118
+ assert.equal(p.sampling.state, 'error');
119
+ assert.equal(p.sampling.error, 'oom');
120
+ });
121
+ test('errorPhase = sampling-mask-resolving → error', () => {
122
+ const p = projectStoreFromFlow(init({
123
+ phase: 'error',
124
+ errorPhase: 'sampling-mask-resolving',
125
+ errorMessage: 'mask not ready',
126
+ }));
127
+ assert.equal(p.sampling.state, 'error');
128
+ });
129
+ });
130
+ describe('projection: userExplanation', () => {
131
+ test('awaiting-explanation → prompting', () => {
132
+ const p = projectStoreFromFlow(init({ phase: 'awaiting-explanation' }));
133
+ assert.equal(p.userExplanation.state, 'prompting');
134
+ });
135
+ test('explanation set → done immediately', () => {
136
+ const p = projectStoreFromFlow(init({ explanation: 'analytics' }));
137
+ assert.equal(p.userExplanation.state, 'done');
138
+ assert.equal(p.userExplanation.value, 'analytics');
139
+ });
140
+ test('any post-explanation phase → done', () => {
141
+ for (const phase of [
142
+ 'preflight-checking',
143
+ 'sampling',
144
+ 'awaiting-post-sampling',
145
+ 'done',
146
+ ]) {
147
+ const p = projectStoreFromFlow(init({ phase }));
148
+ assert.equal(p.userExplanation.state, 'done', `phase=${phase}`);
149
+ }
150
+ });
151
+ test('pre-explanation phases → idle (when no flag)', () => {
152
+ for (const phase of [
153
+ 'connecting-db',
154
+ 'introspecting',
155
+ 'creating-session',
156
+ ]) {
157
+ const p = projectStoreFromFlow(init({ phase }));
158
+ assert.equal(p.userExplanation.state, 'idle', `phase=${phase}`);
159
+ }
160
+ });
161
+ });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGlvbi50ZXN0Lm1qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbImZsb3cvcHJvamVjdGlvbi50ZXN0Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sY0FBYyxDQUFDO0FBRS9ELE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBaUMsRUFBRSxFQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELEdBQUcsZ0JBQWdCLENBQUM7UUFDaEIsU0FBUyxFQUFFLElBQUk7UUFDZixVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsSUFBSTtRQUNsQixxQkFBcUIsRUFBRSxLQUFLO1FBQzVCLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQztJQUNGLEdBQUcsU0FBUztDQUNmLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUMzQixNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FDMUIsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLHlCQUF5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fSBmcm9tICdub2RlOnRlc3QnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuaW1wb3J0IHtwcm9qZWN0U3RvcmVGcm9tRmxvd30gZnJvbSAnLi9wcm9qZWN0aW9uLm1qcyc7XG5pbXBvcnQge2luaXRpYWxGbG93U3RhdGUsIHR5cGUgVEZsb3dTdGF0ZX0gZnJvbSAnLi9zdGF0ZXMubWpzJztcblxuY29uc3QgaW5pdCA9IChvdmVycmlkZXM6IFBhcnRpYWw8VEZsb3dTdGF0ZT4gPSB7fSk6IFRGbG93U3RhdGUgPT4gKHtcbiAgICAuLi5pbml0aWFsRmxvd1N0YXRlKHtcbiAgICAgICAgc3RvcEFmdGVyOiBudWxsLFxuICAgICAgICBzc2hFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZmlsZU1hc2tQYXRoOiBudWxsLFxuICAgICAgICBmcm9tSW50cm9zcGVjdGlvbkZpbGU6IGZhbHNlLFxuICAgICAgICBvdXRwdXRKU09OUGF0aDogbnVsbCxcbiAgICAgICAgb3V0cHV0U2FtcGxlc0RpcjogbnVsbCxcbiAgICAgICAgZXhwbGFuYXRpb246IG51bGwsXG4gICAgfSksXG4gICAgLi4ub3ZlcnJpZGVzLFxufSk7XG5cbmRlc2NyaWJlKCdwcm9qZWN0aW9uOiBpbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5zdGF0ZScsICgpID0+IHtcbiAgICB0ZXN0KCdpZGxlIHBoYXNlIOKGkiBpZGxlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCgpKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uc3RhdGUsICdpZGxlJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpbmdlc3RpbmctaW50cm9zcGVjdGlvbiBwaGFzZSDihpIgdXBsb2FkaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coXG4gICAgICAgICAgICBpbml0KHtwaGFzZTogJ2luZ2VzdGluZy1pbnRyb3NwZWN0aW9uJ30pLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5zdGF0ZSwgJ3VwbG9hZGluZycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncHJlZmxpZ2h0SGl0IOKGkiBza2lwcGVkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coXG4gICAgICAgICAgICBpbml0KHtwcmVmbGlnaHRIaXQ6IHRydWUsIHJldmlzaW9uSWQ6ICdyJ30pLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24uaW50cm9zcGVjdGlvbi5zdGF0ZSwgJ3NraXBwZWQnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldmlzaW9uSWQgc2V0LCBubyBwcmVmbGlnaHQgaGl0IOKGkiBkb25lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coXG4gICAgICAgICAgICBpbml0KHtyZXZpc2lvbklkOiAncicsIHBoYXNlOiAnc2FtcGxpbmcnfSksXG4gICAgICAgICk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLnN0YXRlLCAnZG9uZScpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3JQaGFzZSA9IGluZ2VzdGluZy1pbnRyb3NwZWN0aW9uIOKGkiBlcnJvciArIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0U3RvcmVGcm9tRmxvdyhcbiAgICAgICAgICAgIGluaXQoe1xuICAgICAgICAgICAgICAgIHBoYXNlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGVycm9yUGhhc2U6ICdpbmdlc3RpbmctaW50cm9zcGVjdGlvbicsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiAncGcgY29uZmxpY3QnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLmluZ2VzdGlvbi5pbnRyb3NwZWN0aW9uLnN0YXRlLCAnZXJyb3InKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuaW5nZXN0aW9uLmludHJvc3BlY3Rpb24uZXJyb3IsICdwZyBjb25mbGljdCcpO1xuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwcm9qZWN0aW9uOiBpbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgnaW5pdGlhbCBzdWItc3RhdHVzIOKGkiBpZGxlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCgpKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlLCAnaWRsZScpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uam9iSWQsIG51bGwpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24ucmV1c2VkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXVzZWQgYnJhbmNoIOKGkiByZXVzZWQ9dHJ1ZSwgc3RhdGU9ZG9uZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IHByb2plY3RTdG9yZUZyb21GbG93KFxuICAgICAgICAgICAgaW5pdCh7XG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgam9iSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJldXNlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc0luOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbnNPdXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNEb25lOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zVG90YWw6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuaW5nZXN0aW9uLnBvc3RJbnRyb3NwZWN0aW9uLnN0YXRlLCAnZG9uZScpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24ucmV1c2VkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Byb2dyZXNzIGZpZWxkcyBwcm9wYWdhdGUgdGhyb3VnaCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IHByb2plY3RTdG9yZUZyb21GbG93KFxuICAgICAgICAgICAgaW5pdCh7XG4gICAgICAgICAgICAgICAgcG9zdEludHJvc3BlY3Rpb246IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdydW5uaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgam9iSWQ6ICdwaS0xJyxcbiAgICAgICAgICAgICAgICAgICAgcmV1c2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhZ2U6ICdjbGFzc2lmeWluZycsXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc0luOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHRva2Vuc091dDogMTAwLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zRG9uZTogNSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc1RvdGFsOiA1MCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24uc3RhZ2UsICdjbGFzc2lmeWluZycpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5pbmdlc3Rpb24ucG9zdEludHJvc3BlY3Rpb24udG9rZW5zSW4sIDIwMCk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLmluZ2VzdGlvbi5wb3N0SW50cm9zcGVjdGlvbi5jb2x1bW5zRG9uZSwgNSk7XG4gICAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3Byb2plY3Rpb246IHNhbXBsaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ2lkbGUgcGhhc2Ug4oaSIGlkbGUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0U3RvcmVGcm9tRmxvdyhpbml0KCkpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ2lkbGUnKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuc2FtcGxpbmcucmV1c2VkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzYW1wbGVzQWxyZWFkeUluZ2VzdGVkIOKGkiBza2lwcGVkICsgcmV1c2VkPXRydWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0U3RvcmVGcm9tRmxvdyhpbml0KHtzYW1wbGVzQWxyZWFkeUluZ2VzdGVkOiB0cnVlfSkpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ3NraXBwZWQnKTtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHAuc2FtcGxpbmcucmV1c2VkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3NhbXBsaW5nIHBoYXNlIOKGkiBmZXRjaGluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IHByb2plY3RTdG9yZUZyb21GbG93KGluaXQoe3BoYXNlOiAnc2FtcGxpbmcnfSkpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ2ZldGNoaW5nJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1cGxvYWRpbmctc2FtcGxlcyArIGxhdGVyIHBoYXNlcyDihpIgZG9uZScsICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiBbXG4gICAgICAgICAgICAndXBsb2FkaW5nLXNhbXBsZXMnLFxuICAgICAgICAgICAgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCh7cGhhc2V9KSk7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ2RvbmUnLCBgcGhhc2U9JHtwaGFzZX1gKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3JQaGFzZSA9IHNhbXBsaW5nIOKGkiBlcnJvciArIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0U3RvcmVGcm9tRmxvdyhcbiAgICAgICAgICAgIGluaXQoe1xuICAgICAgICAgICAgICAgIHBoYXNlOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGVycm9yUGhhc2U6ICdzYW1wbGluZycsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiAnb29tJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ2Vycm9yJyk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLnNhbXBsaW5nLmVycm9yLCAnb29tJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlcnJvclBoYXNlID0gc2FtcGxpbmctbWFzay1yZXNvbHZpbmcg4oaSIGVycm9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coXG4gICAgICAgICAgICBpbml0KHtcbiAgICAgICAgICAgICAgICBwaGFzZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICBlcnJvclBoYXNlOiAnc2FtcGxpbmctbWFzay1yZXNvbHZpbmcnLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogJ21hc2sgbm90IHJlYWR5JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC5zYW1wbGluZy5zdGF0ZSwgJ2Vycm9yJyk7XG4gICAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3Byb2plY3Rpb246IHVzZXJFeHBsYW5hdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdhd2FpdGluZy1leHBsYW5hdGlvbiDihpIgcHJvbXB0aW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCh7cGhhc2U6ICdhd2FpdGluZy1leHBsYW5hdGlvbid9KSk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLnVzZXJFeHBsYW5hdGlvbi5zdGF0ZSwgJ3Byb21wdGluZycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXhwbGFuYXRpb24gc2V0IOKGkiBkb25lIGltbWVkaWF0ZWx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCh7ZXhwbGFuYXRpb246ICdhbmFseXRpY3MnfSkpO1xuICAgICAgICBhc3NlcnQuZXF1YWwocC51c2VyRXhwbGFuYXRpb24uc3RhdGUsICdkb25lJyk7XG4gICAgICAgIGFzc2VydC5lcXVhbChwLnVzZXJFeHBsYW5hdGlvbi52YWx1ZSwgJ2FuYWx5dGljcycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYW55IHBvc3QtZXhwbGFuYXRpb24gcGhhc2Ug4oaSIGRvbmUnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcGhhc2Ugb2YgW1xuICAgICAgICAgICAgJ3ByZWZsaWdodC1jaGVja2luZycsXG4gICAgICAgICAgICAnc2FtcGxpbmcnLFxuICAgICAgICAgICAgJ2F3YWl0aW5nLXBvc3Qtc2FtcGxpbmcnLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCh7cGhhc2V9KSk7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwocC51c2VyRXhwbGFuYXRpb24uc3RhdGUsICdkb25lJywgYHBoYXNlPSR7cGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRlc3QoJ3ByZS1leHBsYW5hdGlvbiBwaGFzZXMg4oaSIGlkbGUgKHdoZW4gbm8gZmxhZyknLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcGhhc2Ugb2YgW1xuICAgICAgICAgICAgJ2Nvbm5lY3RpbmctZGInLFxuICAgICAgICAgICAgJ2ludHJvc3BlY3RpbmcnLFxuICAgICAgICAgICAgJ2NyZWF0aW5nLXNlc3Npb24nLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcHJvamVjdFN0b3JlRnJvbUZsb3coaW5pdCh7cGhhc2V9KSk7XG4gICAgICAgICAgICBhc3NlcnQuZXF1YWwocC51c2VyRXhwbGFuYXRpb24uc3RhdGUsICdpZGxlJywgYHBoYXNlPSR7cGhhc2V9YCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,5 @@
1
+ import type { TFlowEvent } from './events.mjs';
2
+ import { type TFlowState } from './states.mjs';
3
+ export declare const reduce: (state: TFlowState, event: TFlowEvent) => TFlowState;
4
+ export declare const cleanPostIntrospection: (state: TFlowState) => TFlowState;
5
+ //# sourceMappingURL=reducer.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer.d.mts","sourceRoot":"./src/","sources":["flow/reducer.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,EAGH,KAAK,UAAU,EAClB,MAAM,cAAc,CAAC;AAuBtB,eAAO,MAAM,MAAM,GAAI,OAAO,UAAU,EAAE,OAAO,UAAU,KAAG,UAqT7D,CAAC;AAIF,eAAO,MAAM,sBAAsB,GAAI,OAAO,UAAU,KAAG,UAGzD,CAAC"}