@powerhousedao/reactor 5.0.0-staging.9 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/dist/src/cache/buffer/ring-buffer.d.ts +37 -0
  2. package/dist/src/cache/buffer/ring-buffer.d.ts.map +1 -0
  3. package/dist/src/cache/buffer/ring-buffer.js +69 -0
  4. package/dist/src/cache/buffer/ring-buffer.js.map +1 -0
  5. package/dist/src/cache/kysely-write-cache.d.ts +133 -0
  6. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -0
  7. package/dist/src/cache/kysely-write-cache.js +375 -0
  8. package/dist/src/cache/kysely-write-cache.js.map +1 -0
  9. package/dist/src/cache/lru/lru-tracker.d.ts +15 -0
  10. package/dist/src/cache/lru/lru-tracker.d.ts.map +1 -0
  11. package/dist/src/cache/lru/lru-tracker.js +96 -0
  12. package/dist/src/cache/lru/lru-tracker.js.map +1 -0
  13. package/dist/src/cache/types.d.ts +42 -0
  14. package/dist/src/cache/types.d.ts.map +1 -0
  15. package/dist/src/cache/types.js +2 -0
  16. package/dist/src/cache/types.js.map +1 -0
  17. package/dist/src/cache/write/interfaces.d.ts +83 -0
  18. package/dist/src/cache/write/interfaces.d.ts.map +1 -0
  19. package/dist/src/cache/write/interfaces.js +2 -0
  20. package/dist/src/cache/write/interfaces.js.map +1 -0
  21. package/dist/src/client/reactor-client.d.ts +103 -0
  22. package/dist/src/client/reactor-client.d.ts.map +1 -0
  23. package/dist/src/client/reactor-client.js +184 -0
  24. package/dist/src/client/reactor-client.js.map +1 -0
  25. package/dist/src/client/types.d.ts +213 -0
  26. package/dist/src/client/types.d.ts.map +1 -0
  27. package/dist/src/client/types.js +14 -0
  28. package/dist/src/client/types.js.map +1 -0
  29. package/dist/src/core/builder.d.ts +20 -0
  30. package/dist/src/core/builder.d.ts.map +1 -0
  31. package/dist/src/core/builder.js +47 -0
  32. package/dist/src/core/builder.js.map +1 -0
  33. package/dist/src/{reactor.d.ts → core/reactor.d.ts} +14 -30
  34. package/dist/src/core/reactor.d.ts.map +1 -0
  35. package/dist/src/{reactor.js → core/reactor.js} +162 -114
  36. package/dist/src/core/reactor.js.map +1 -0
  37. package/dist/src/{interfaces/reactor.d.ts → core/types.d.ts} +7 -7
  38. package/dist/src/core/types.d.ts.map +1 -0
  39. package/dist/src/core/types.js +2 -0
  40. package/dist/src/core/types.js.map +1 -0
  41. package/dist/src/{utils.d.ts → core/utils.d.ts} +2 -2
  42. package/dist/src/core/utils.d.ts.map +1 -0
  43. package/dist/src/core/utils.js.map +1 -0
  44. package/dist/src/events/event-bus.d.ts +2 -2
  45. package/dist/src/events/event-bus.d.ts.map +1 -1
  46. package/dist/src/events/event-bus.js +1 -1
  47. package/dist/src/events/event-bus.js.map +1 -1
  48. package/dist/src/events/interfaces.d.ts +1 -1
  49. package/dist/src/events/interfaces.d.ts.map +1 -1
  50. package/dist/src/events/types.d.ts +14 -0
  51. package/dist/src/events/types.d.ts.map +1 -1
  52. package/dist/src/events/types.js +6 -0
  53. package/dist/src/events/types.js.map +1 -1
  54. package/dist/src/executor/interfaces.d.ts +2 -2
  55. package/dist/src/executor/interfaces.d.ts.map +1 -1
  56. package/dist/src/executor/simple-job-executor-manager.d.ts +6 -1
  57. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
  58. package/dist/src/executor/simple-job-executor-manager.js +121 -37
  59. package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
  60. package/dist/src/executor/simple-job-executor.d.ts +32 -3
  61. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  62. package/dist/src/executor/simple-job-executor.js +451 -17
  63. package/dist/src/executor/simple-job-executor.js.map +1 -1
  64. package/dist/src/executor/types.d.ts +10 -3
  65. package/dist/src/executor/types.d.ts.map +1 -1
  66. package/dist/src/executor/types.js.map +1 -1
  67. package/dist/src/executor/util.d.ts +47 -0
  68. package/dist/src/executor/util.d.ts.map +1 -0
  69. package/dist/src/executor/util.js +113 -0
  70. package/dist/src/executor/util.js.map +1 -0
  71. package/dist/src/index.d.ts +23 -3
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +30 -2
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +16 -0
  76. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  77. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  78. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  79. package/dist/src/job-tracker/index.d.ts +3 -0
  80. package/dist/src/job-tracker/index.d.ts.map +1 -0
  81. package/dist/src/job-tracker/index.js +2 -0
  82. package/dist/src/job-tracker/index.js.map +1 -0
  83. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  84. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  85. package/dist/src/job-tracker/interfaces.js +2 -0
  86. package/dist/src/job-tracker/interfaces.js.map +1 -0
  87. package/dist/src/queue/interfaces.d.ts +6 -5
  88. package/dist/src/queue/interfaces.d.ts.map +1 -1
  89. package/dist/src/queue/job-execution-handle.d.ts +5 -3
  90. package/dist/src/queue/job-execution-handle.d.ts.map +1 -1
  91. package/dist/src/queue/job-execution-handle.js +2 -2
  92. package/dist/src/queue/job-execution-handle.js.map +1 -1
  93. package/dist/src/queue/queue.d.ts +7 -5
  94. package/dist/src/queue/queue.d.ts.map +1 -1
  95. package/dist/src/queue/queue.js +61 -27
  96. package/dist/src/queue/queue.js.map +1 -1
  97. package/dist/src/queue/types.d.ts +11 -8
  98. package/dist/src/queue/types.d.ts.map +1 -1
  99. package/dist/src/queue/types.js.map +1 -1
  100. package/dist/src/read-models/coordinator.d.ts +38 -0
  101. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  102. package/dist/src/read-models/coordinator.js +62 -0
  103. package/dist/src/read-models/coordinator.js.map +1 -0
  104. package/dist/src/read-models/document-view.d.ts +20 -0
  105. package/dist/src/read-models/document-view.d.ts.map +1 -0
  106. package/dist/src/read-models/document-view.js +365 -0
  107. package/dist/src/read-models/document-view.js.map +1 -0
  108. package/dist/src/read-models/interfaces.d.ts +29 -0
  109. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  110. package/dist/src/read-models/interfaces.js +2 -0
  111. package/dist/src/read-models/interfaces.js.map +1 -0
  112. package/dist/src/read-models/types.d.ts +46 -0
  113. package/dist/src/read-models/types.d.ts.map +1 -0
  114. package/dist/src/read-models/types.js +2 -0
  115. package/dist/src/read-models/types.js.map +1 -0
  116. package/dist/src/registry/implementation.js +1 -1
  117. package/dist/src/registry/implementation.js.map +1 -1
  118. package/dist/src/shared/awaiter.d.ts +32 -0
  119. package/dist/src/shared/awaiter.d.ts.map +1 -0
  120. package/dist/src/shared/awaiter.js +132 -0
  121. package/dist/src/shared/awaiter.js.map +1 -0
  122. package/dist/src/shared/errors.d.ts +17 -0
  123. package/dist/src/shared/errors.d.ts.map +1 -0
  124. package/dist/src/shared/errors.js +33 -0
  125. package/dist/src/shared/errors.js.map +1 -0
  126. package/dist/src/shared/factories.d.ts +1 -1
  127. package/dist/src/shared/factories.d.ts.map +1 -1
  128. package/dist/src/shared/types.d.ts +17 -1
  129. package/dist/src/shared/types.d.ts.map +1 -1
  130. package/dist/src/shared/types.js +5 -0
  131. package/dist/src/shared/types.js.map +1 -1
  132. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  133. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  134. package/dist/src/signer/passthrough-signer.js +6 -0
  135. package/dist/src/signer/passthrough-signer.js.map +1 -0
  136. package/dist/src/signer/types.d.ts +15 -0
  137. package/dist/src/signer/types.d.ts.map +1 -0
  138. package/dist/src/signer/types.js +2 -0
  139. package/dist/src/signer/types.js.map +1 -0
  140. package/dist/src/storage/interfaces.d.ts +121 -0
  141. package/dist/src/storage/interfaces.d.ts.map +1 -0
  142. package/dist/src/storage/interfaces.js +19 -0
  143. package/dist/src/storage/interfaces.js.map +1 -0
  144. package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
  145. package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
  146. package/dist/src/storage/kysely/keyframe-store.js +71 -0
  147. package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
  148. package/dist/src/storage/kysely/store.d.ts +15 -0
  149. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  150. package/dist/src/storage/kysely/store.js +196 -0
  151. package/dist/src/storage/kysely/store.js.map +1 -0
  152. package/dist/src/storage/kysely/types.d.ts +39 -0
  153. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  154. package/dist/src/storage/kysely/types.js +2 -0
  155. package/dist/src/storage/kysely/types.js.map +1 -0
  156. package/dist/src/storage/txn.d.ts +15 -0
  157. package/dist/src/storage/txn.d.ts.map +1 -0
  158. package/dist/src/storage/txn.js +41 -0
  159. package/dist/src/storage/txn.js.map +1 -0
  160. package/dist/src/subs/default-error-handler.d.ts +13 -0
  161. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  162. package/dist/src/subs/default-error-handler.js +27 -0
  163. package/dist/src/subs/default-error-handler.js.map +1 -0
  164. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  165. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  166. package/dist/src/subs/react-subscription-manager.js +185 -0
  167. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  168. package/dist/src/subs/types.d.ts +64 -0
  169. package/dist/src/subs/types.d.ts.map +1 -0
  170. package/dist/src/subs/types.js +2 -0
  171. package/dist/src/subs/types.js.map +1 -0
  172. package/dist/src/utils/reshuffle.d.ts +30 -0
  173. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  174. package/dist/src/utils/reshuffle.js +47 -0
  175. package/dist/src/utils/reshuffle.js.map +1 -0
  176. package/package.json +15 -9
  177. package/dist/bench/event-bus.bench.d.ts +0 -2
  178. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  179. package/dist/bench/event-bus.bench.js +0 -228
  180. package/dist/bench/event-bus.bench.js.map +0 -1
  181. package/dist/bench/queue-only.bench.d.ts +0 -2
  182. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  183. package/dist/bench/queue-only.bench.js +0 -46
  184. package/dist/bench/queue-only.bench.js.map +0 -1
  185. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  186. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  187. package/dist/bench/reactor-throughput.bench.js +0 -144
  188. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  189. package/dist/src/interfaces/reactor.d.ts.map +0 -1
  190. package/dist/src/interfaces/reactor.js +0 -2
  191. package/dist/src/interfaces/reactor.js.map +0 -1
  192. package/dist/src/reactor.d.ts.map +0 -1
  193. package/dist/src/reactor.js.map +0 -1
  194. package/dist/src/utils.d.ts.map +0 -1
  195. package/dist/src/utils.js.map +0 -1
  196. package/dist/test/event-bus.test.d.ts +0 -2
  197. package/dist/test/event-bus.test.d.ts.map +0 -1
  198. package/dist/test/event-bus.test.js +0 -541
  199. package/dist/test/event-bus.test.js.map +0 -1
  200. package/dist/test/executor/executor-integration.test.d.ts +0 -2
  201. package/dist/test/executor/executor-integration.test.d.ts.map +0 -1
  202. package/dist/test/executor/executor-integration.test.js +0 -287
  203. package/dist/test/executor/executor-integration.test.js.map +0 -1
  204. package/dist/test/executor/job-execution-handle.test.d.ts +0 -2
  205. package/dist/test/executor/job-execution-handle.test.d.ts.map +0 -1
  206. package/dist/test/executor/job-execution-handle.test.js +0 -272
  207. package/dist/test/executor/job-execution-handle.test.js.map +0 -1
  208. package/dist/test/executor/simple-job-executor-manager.test.d.ts +0 -2
  209. package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +0 -1
  210. package/dist/test/executor/simple-job-executor-manager.test.js +0 -132
  211. package/dist/test/executor/simple-job-executor-manager.test.js.map +0 -1
  212. package/dist/test/executor/simple-job-executor.test.d.ts +0 -2
  213. package/dist/test/executor/simple-job-executor.test.d.ts.map +0 -1
  214. package/dist/test/executor/simple-job-executor.test.js +0 -139
  215. package/dist/test/executor/simple-job-executor.test.js.map +0 -1
  216. package/dist/test/factories.d.ts +0 -122
  217. package/dist/test/factories.d.ts.map +0 -1
  218. package/dist/test/factories.js +0 -319
  219. package/dist/test/factories.js.map +0 -1
  220. package/dist/test/integration/document-drive-integration.test.d.ts +0 -2
  221. package/dist/test/integration/document-drive-integration.test.d.ts.map +0 -1
  222. package/dist/test/integration/document-drive-integration.test.js +0 -1102
  223. package/dist/test/integration/document-drive-integration.test.js.map +0 -1
  224. package/dist/test/integration/reactor-read.test.d.ts +0 -2
  225. package/dist/test/integration/reactor-read.test.d.ts.map +0 -1
  226. package/dist/test/integration/reactor-read.test.js +0 -300
  227. package/dist/test/integration/reactor-read.test.js.map +0 -1
  228. package/dist/test/queue/queue-integration.test.d.ts +0 -2
  229. package/dist/test/queue/queue-integration.test.d.ts.map +0 -1
  230. package/dist/test/queue/queue-integration.test.js +0 -322
  231. package/dist/test/queue/queue-integration.test.js.map +0 -1
  232. package/dist/test/queue/queue.test.d.ts +0 -2
  233. package/dist/test/queue/queue.test.d.ts.map +0 -1
  234. package/dist/test/queue/queue.test.js +0 -770
  235. package/dist/test/queue/queue.test.js.map +0 -1
  236. package/dist/test/registry/registry.test.d.ts +0 -2
  237. package/dist/test/registry/registry.test.d.ts.map +0 -1
  238. package/dist/test/registry/registry.test.js +0 -182
  239. package/dist/test/registry/registry.test.js.map +0 -1
  240. package/dist/test/utils.test.d.ts +0 -2
  241. package/dist/test/utils.test.d.ts.map +0 -1
  242. package/dist/test/utils.test.js +0 -66
  243. package/dist/test/utils.test.js.map +0 -1
  244. package/dist/tsconfig.tsbuildinfo +0 -1
  245. package/dist/vitest.config.d.ts +0 -3
  246. package/dist/vitest.config.d.ts.map +0 -1
  247. package/dist/vitest.config.js +0 -11
  248. package/dist/vitest.config.js.map +0 -1
  249. /package/dist/src/{utils.js → core/utils.js} +0 -0
@@ -1,67 +1,501 @@
1
+ import { OperationEventTypes } from "../events/types.js";
2
+ import { DocumentDeletedError } from "../shared/errors.js";
3
+ import { applyDeleteDocumentAction, applyUpgradeDocumentAction, createDocumentFromAction, getNextIndexForScope, } from "./util.js";
1
4
  /**
2
5
  * Simple job executor that processes a job by applying actions through document model reducers.
6
+ *
7
+ * @see docs/planning/Storage/IOperationStore.md for storage schema
8
+ * @see docs/planning/Operations/index.md for operation structure
9
+ * @see docs/planning/Jobs/reshuffle.md for skip mechanism details
3
10
  */
4
11
  export class SimpleJobExecutor {
5
12
  registry;
6
13
  documentStorage;
7
14
  operationStorage;
8
- constructor(registry, documentStorage, operationStorage) {
15
+ operationStore;
16
+ eventBus;
17
+ writeCache;
18
+ constructor(registry, documentStorage, operationStorage, operationStore, eventBus, writeCache) {
9
19
  this.registry = registry;
10
20
  this.documentStorage = documentStorage;
11
21
  this.operationStorage = operationStorage;
22
+ this.operationStore = operationStore;
23
+ this.eventBus = eventBus;
24
+ this.writeCache = writeCache;
12
25
  }
13
26
  /**
14
- * Execute a single job by applying its action through the appropriate reducer.
27
+ * Execute a single job by applying all its actions through the appropriate reducers.
28
+ * Actions are processed sequentially in order.
15
29
  */
16
30
  async executeJob(job) {
17
31
  const startTime = Date.now();
32
+ const generatedOperations = [];
33
+ const operationsWithContext = [];
34
+ // Process each action in the job sequentially
35
+ for (const action of job.actions) {
36
+ // Handle system actions specially (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
37
+ if (action.type === "CREATE_DOCUMENT") {
38
+ const result = await this.executeCreateDocumentAction(job, action, startTime);
39
+ if (!result.success) {
40
+ return result;
41
+ }
42
+ if (result.operations && result.operations.length > 0) {
43
+ generatedOperations.push(...result.operations);
44
+ }
45
+ if (result.operationsWithContext) {
46
+ operationsWithContext.push(...result.operationsWithContext);
47
+ }
48
+ continue;
49
+ }
50
+ if (action.type === "DELETE_DOCUMENT") {
51
+ const result = await this.executeDeleteDocumentAction(job, action, startTime);
52
+ if (!result.success) {
53
+ return result;
54
+ }
55
+ if (result.operations && result.operations.length > 0) {
56
+ generatedOperations.push(...result.operations);
57
+ }
58
+ if (result.operationsWithContext) {
59
+ operationsWithContext.push(...result.operationsWithContext);
60
+ }
61
+ continue;
62
+ }
63
+ if (action.type === "UPGRADE_DOCUMENT") {
64
+ const result = await this.executeUpgradeDocumentAction(job, action, startTime);
65
+ if (!result.success) {
66
+ return result;
67
+ }
68
+ if (result.operations && result.operations.length > 0) {
69
+ generatedOperations.push(...result.operations);
70
+ }
71
+ if (result.operationsWithContext) {
72
+ operationsWithContext.push(...result.operationsWithContext);
73
+ }
74
+ continue;
75
+ }
76
+ // For regular actions, load the document and apply through reducer
77
+ let document;
78
+ try {
79
+ document = await this.writeCache.getState(job.documentId, job.scope, job.branch);
80
+ }
81
+ catch (error) {
82
+ return {
83
+ job,
84
+ success: false,
85
+ error: error instanceof Error ? error : new Error(String(error)),
86
+ duration: Date.now() - startTime,
87
+ };
88
+ }
89
+ // Check if document is deleted
90
+ const documentState = document.state.document;
91
+ if (documentState.isDeleted) {
92
+ return {
93
+ job,
94
+ success: false,
95
+ error: new DocumentDeletedError(job.documentId, documentState.deletedAtUtcIso),
96
+ duration: Date.now() - startTime,
97
+ };
98
+ }
99
+ let module;
100
+ try {
101
+ module = this.registry.getModule(document.header.documentType);
102
+ }
103
+ catch (error) {
104
+ return {
105
+ job,
106
+ success: false,
107
+ error: error instanceof Error ? error : new Error(String(error)),
108
+ duration: Date.now() - startTime,
109
+ };
110
+ }
111
+ let updatedDocument;
112
+ try {
113
+ updatedDocument = module.reducer(document, action);
114
+ }
115
+ catch (error) {
116
+ const contextMessage = `Failed to apply action to document:\n Action type: ${action.type}\n Document ID: ${job.documentId}\n Document type: ${document.header.documentType}\n Scope: ${job.scope}\n Original error: ${error instanceof Error ? error.message : String(error)}`;
117
+ const enhancedError = new Error(contextMessage);
118
+ if (error instanceof Error && error.stack) {
119
+ enhancedError.stack = `${contextMessage}\n\nOriginal stack trace:\n${error.stack}`;
120
+ }
121
+ return {
122
+ job,
123
+ success: false,
124
+ error: enhancedError,
125
+ duration: Date.now() - startTime,
126
+ };
127
+ }
128
+ const scope = job.scope;
129
+ const operations = updatedDocument.operations[scope];
130
+ if (operations.length === 0) {
131
+ throw new Error("No operation generated from action");
132
+ }
133
+ const newOperation = operations[operations.length - 1];
134
+ generatedOperations.push(newOperation);
135
+ // Write the operation to legacy storage
136
+ try {
137
+ await this.operationStorage.addDocumentOperations(job.documentId, [newOperation], updatedDocument);
138
+ }
139
+ catch (error) {
140
+ return {
141
+ job,
142
+ success: false,
143
+ error: error instanceof Error ? error : new Error(String(error)),
144
+ duration: Date.now() - startTime,
145
+ };
146
+ }
147
+ // Compute resultingState for passing via context (not persisted)
148
+ const resultingState = JSON.stringify(updatedDocument.state);
149
+ // Write the operation to new IOperationStore (dual-writing)
150
+ try {
151
+ await this.operationStore.apply(job.documentId, document.header.documentType, scope, job.branch, newOperation.index, (txn) => {
152
+ txn.addOperations(newOperation);
153
+ });
154
+ }
155
+ catch (error) {
156
+ return {
157
+ job,
158
+ success: false,
159
+ error: new Error(`Failed to write operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
160
+ duration: Date.now() - startTime,
161
+ };
162
+ }
163
+ updatedDocument.header.revision = {
164
+ ...updatedDocument.header.revision,
165
+ [scope]: newOperation.index + 1,
166
+ };
167
+ this.writeCache.putState(job.documentId, scope, job.branch, newOperation.index, updatedDocument);
168
+ operationsWithContext.push({
169
+ operation: newOperation,
170
+ context: {
171
+ documentId: job.documentId,
172
+ scope,
173
+ branch: job.branch,
174
+ documentType: document.header.documentType,
175
+ resultingState, // Ephemeral, passed via events only
176
+ },
177
+ });
178
+ }
179
+ // Emit event for read models with all operations - non-blocking
180
+ if (operationsWithContext.length > 0) {
181
+ this.eventBus
182
+ .emit(OperationEventTypes.OPERATION_WRITTEN, {
183
+ operations: operationsWithContext,
184
+ })
185
+ .catch(() => {
186
+ // TODO: Log error
187
+ });
188
+ }
189
+ return {
190
+ job,
191
+ success: true,
192
+ operations: generatedOperations,
193
+ duration: Date.now() - startTime,
194
+ };
195
+ }
196
+ /**
197
+ * Execute a CREATE_DOCUMENT system action.
198
+ * This creates a new document in storage along with its initial operation.
199
+ * For a new document, the operation index is always 0.
200
+ */
201
+ async executeCreateDocumentAction(job, action, startTime) {
202
+ if (job.scope !== "document") {
203
+ return {
204
+ job,
205
+ success: false,
206
+ error: new Error(`CREATE_DOCUMENT must be in "document" scope, got "${job.scope}"`),
207
+ duration: Date.now() - startTime,
208
+ };
209
+ }
210
+ const document = createDocumentFromAction(action);
211
+ // Legacy: Store the document in storage
212
+ try {
213
+ await this.documentStorage.create(document);
214
+ }
215
+ catch (error) {
216
+ return {
217
+ job,
218
+ success: false,
219
+ error: new Error(`Failed to create document in storage: ${error instanceof Error ? error.message : String(error)}`),
220
+ duration: Date.now() - startTime,
221
+ };
222
+ }
223
+ // Create the operation with index 0 (first operation for a new document)
224
+ const operation = {
225
+ index: 0,
226
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
227
+ hash: "", // Will be computed later
228
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
229
+ action: action,
230
+ };
231
+ // Legacy: Write the CREATE_DOCUMENT operation to legacy storage
232
+ try {
233
+ await this.operationStorage.addDocumentOperations(document.header.id, [operation], document);
234
+ }
235
+ catch (error) {
236
+ return {
237
+ job,
238
+ success: false,
239
+ error: new Error(`Failed to write CREATE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`),
240
+ duration: Date.now() - startTime,
241
+ };
242
+ }
243
+ // Compute resultingState for passing via context (not persisted)
244
+ // Include header and all scopes present in the document state (auth, document, etc.)
245
+ // but not global/local which aren't initialized by CREATE_DOCUMENT
246
+ const resultingStateObj = {
247
+ header: document.header,
248
+ ...document.state,
249
+ };
250
+ const resultingState = JSON.stringify(resultingStateObj);
251
+ // Write the operation to new IOperationStore (dual-writing)
252
+ // Note: resultingState is NOT persisted in IOperationStore
253
+ try {
254
+ await this.operationStore.apply(document.header.id, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
255
+ txn.addOperations(operation);
256
+ });
257
+ }
258
+ catch (error) {
259
+ return {
260
+ job,
261
+ success: false,
262
+ error: new Error(`Failed to write CREATE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
263
+ duration: Date.now() - startTime,
264
+ };
265
+ }
266
+ document.header.revision = {
267
+ ...document.header.revision,
268
+ [job.scope]: operation.index + 1,
269
+ };
270
+ this.writeCache.putState(document.header.id, job.scope, job.branch, operation.index, document);
271
+ return {
272
+ job,
273
+ success: true,
274
+ operations: [operation],
275
+ operationsWithContext: [
276
+ {
277
+ operation,
278
+ context: {
279
+ documentId: document.header.id,
280
+ scope: job.scope,
281
+ branch: job.branch,
282
+ documentType: document.header.documentType,
283
+ resultingState,
284
+ },
285
+ },
286
+ ],
287
+ duration: Date.now() - startTime,
288
+ };
289
+ }
290
+ /**
291
+ * Execute a DELETE_DOCUMENT system action.
292
+ * This deletes a document from legacy storage and writes the operation to IOperationStore.
293
+ * The operation index is determined from the document's current operation count.
294
+ */
295
+ async executeDeleteDocumentAction(job, action, startTime) {
296
+ const input = action.input;
297
+ if (!input.documentId) {
298
+ return {
299
+ job,
300
+ success: false,
301
+ error: new Error("DELETE_DOCUMENT action requires a documentId in input"),
302
+ duration: Date.now() - startTime,
303
+ };
304
+ }
305
+ const documentId = input.documentId;
18
306
  let document;
19
307
  try {
20
- document = await this.documentStorage.get(job.documentId);
308
+ document = await this.writeCache.getState(documentId, job.scope, job.branch);
21
309
  }
22
310
  catch (error) {
23
311
  return {
24
312
  job,
25
313
  success: false,
26
- error: error instanceof Error ? error : new Error(String(error)),
314
+ error: new Error(`Failed to fetch document before deletion: ${error instanceof Error ? error.message : String(error)}`),
315
+ duration: Date.now() - startTime,
316
+ };
317
+ }
318
+ // Check if document is already deleted
319
+ const documentState = document.state.document;
320
+ if (documentState.isDeleted) {
321
+ return {
322
+ job,
323
+ success: false,
324
+ error: new DocumentDeletedError(documentId, documentState.deletedAtUtcIso),
27
325
  duration: Date.now() - startTime,
28
326
  };
29
327
  }
30
- let module;
328
+ // Determine the next operation index for this scope only (per-scope indexing)
329
+ const nextIndex = getNextIndexForScope(document, job.scope);
330
+ // Create the DELETE_DOCUMENT operation
331
+ const operation = {
332
+ index: nextIndex,
333
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
334
+ hash: "", // Will be computed later
335
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
336
+ action: action,
337
+ };
31
338
  try {
32
- module = this.registry.getModule(document.header.documentType);
339
+ await this.documentStorage.delete(documentId);
33
340
  }
34
341
  catch (error) {
35
342
  return {
36
343
  job,
37
344
  success: false,
38
- error: error instanceof Error ? error : new Error(String(error)),
345
+ error: new Error(`Failed to delete document from legacy storage: ${error instanceof Error ? error.message : String(error)}`),
39
346
  duration: Date.now() - startTime,
40
347
  };
41
348
  }
42
- const updatedDocument = module.reducer(document, job.operation.action);
43
- const scope = job.scope || "global";
44
- const operations = updatedDocument.operations[scope];
45
- if (operations.length === 0) {
46
- throw new Error("No operation generated from action");
349
+ // Mark the document as deleted in the state for read model indexing
350
+ applyDeleteDocumentAction(document, action);
351
+ // Compute resultingState for passing via context (not persisted)
352
+ // DELETE_DOCUMENT only affects header and document scopes
353
+ const resultingStateObj = {
354
+ header: document.header,
355
+ document: document.state.document,
356
+ };
357
+ const resultingState = JSON.stringify(resultingStateObj);
358
+ // Write the DELETE_DOCUMENT operation to IOperationStore
359
+ // Note: resultingState is NOT persisted in IOperationStore
360
+ try {
361
+ await this.operationStore.apply(documentId, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
362
+ txn.addOperations(operation);
363
+ });
364
+ }
365
+ catch (error) {
366
+ return {
367
+ job,
368
+ success: false,
369
+ error: new Error(`Failed to write DELETE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
370
+ duration: Date.now() - startTime,
371
+ };
47
372
  }
48
- const newOperation = operations[operations.length - 1];
49
- // Write the operation to legacy storage
373
+ return {
374
+ job,
375
+ success: true,
376
+ operations: [operation],
377
+ operationsWithContext: [
378
+ {
379
+ operation,
380
+ context: {
381
+ documentId,
382
+ scope: job.scope,
383
+ branch: job.branch,
384
+ documentType: document.header.documentType,
385
+ resultingState,
386
+ },
387
+ },
388
+ ],
389
+ duration: Date.now() - startTime,
390
+ };
391
+ }
392
+ /**
393
+ * Execute an UPGRADE_DOCUMENT system action.
394
+ * This sets the document's initial state from the upgrade action.
395
+ * The operation index is determined from the document's current operation count.
396
+ */
397
+ async executeUpgradeDocumentAction(job, action, startTime) {
398
+ const input = action.input;
399
+ if (!input.documentId) {
400
+ return {
401
+ job,
402
+ success: false,
403
+ error: new Error("UPGRADE_DOCUMENT action requires a documentId in input"),
404
+ duration: Date.now() - startTime,
405
+ };
406
+ }
407
+ const documentId = input.documentId;
408
+ // Load the document from write cache
409
+ let document;
50
410
  try {
51
- await this.operationStorage.addDocumentOperations(job.documentId, [newOperation], updatedDocument);
411
+ document = await this.writeCache.getState(documentId, job.scope, job.branch);
52
412
  }
53
413
  catch (error) {
54
414
  return {
55
415
  job,
56
416
  success: false,
57
- error: error instanceof Error ? error : new Error(String(error)),
417
+ error: new Error(`Failed to fetch document for upgrade: ${error instanceof Error ? error.message : String(error)}`),
418
+ duration: Date.now() - startTime,
419
+ };
420
+ }
421
+ // Check if document is deleted
422
+ const documentState = document.state.document;
423
+ if (documentState.isDeleted) {
424
+ return {
425
+ job,
426
+ success: false,
427
+ error: new DocumentDeletedError(documentId, documentState.deletedAtUtcIso),
58
428
  duration: Date.now() - startTime,
59
429
  };
60
430
  }
431
+ // Determine the next operation index for this scope only (per-scope indexing)
432
+ const nextIndex = getNextIndexForScope(document, job.scope);
433
+ // Apply the initialState from the upgrade action
434
+ // The initialState from UPGRADE_DOCUMENT should be merged with the existing base state
435
+ // to preserve auth and document scopes while adding model-specific scopes (global, local, etc.)
436
+ applyUpgradeDocumentAction(document, action);
437
+ // Create the UPGRADE_DOCUMENT operation with calculated index
438
+ const operation = {
439
+ index: nextIndex,
440
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
441
+ hash: "", // Will be computed later
442
+ skip: 0, // Always 0 for new operations; skip > 0 only during reshuffle
443
+ action: action,
444
+ };
445
+ // Write the updated document to legacy storage
446
+ try {
447
+ await this.operationStorage.addDocumentOperations(documentId, [operation], document);
448
+ }
449
+ catch (error) {
450
+ return {
451
+ job,
452
+ success: false,
453
+ error: new Error(`Failed to write UPGRADE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`),
454
+ duration: Date.now() - startTime,
455
+ };
456
+ }
457
+ // Compute resultingState for passing via context (not persisted)
458
+ const resultingStateObj = {
459
+ header: document.header,
460
+ ...document.state,
461
+ };
462
+ const resultingState = JSON.stringify(resultingStateObj);
463
+ // Write the operation to new IOperationStore (dual-writing)
464
+ // Note: resultingState is NOT persisted in IOperationStore
465
+ try {
466
+ await this.operationStore.apply(documentId, document.header.documentType, job.scope, job.branch, operation.index, (txn) => {
467
+ txn.addOperations(operation);
468
+ });
469
+ }
470
+ catch (error) {
471
+ return {
472
+ job,
473
+ success: false,
474
+ error: new Error(`Failed to write UPGRADE_DOCUMENT operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
475
+ duration: Date.now() - startTime,
476
+ };
477
+ }
478
+ document.header.revision = {
479
+ ...document.header.revision,
480
+ [job.scope]: operation.index + 1,
481
+ };
482
+ this.writeCache.putState(documentId, job.scope, job.branch, operation.index, document);
61
483
  return {
62
484
  job,
63
485
  success: true,
64
- operation: newOperation,
486
+ operations: [operation],
487
+ operationsWithContext: [
488
+ {
489
+ operation,
490
+ context: {
491
+ documentId,
492
+ scope: job.scope,
493
+ branch: job.branch,
494
+ documentType: document.header.documentType,
495
+ resultingState,
496
+ },
497
+ },
498
+ ],
65
499
  duration: Date.now() - startTime,
66
500
  };
67
501
  }
@@ -1 +1 @@
1
- {"version":3,"file":"simple-job-executor.js","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAElB;IACA;IACA;IAHV,YACU,QAAgC,EAChC,eAAiC,EACjC,gBAA2C;QAF3C,aAAQ,GAAR,QAAQ,CAAwB;QAChC,oBAAe,GAAf,eAAe,CAAkB;QACjC,qBAAgB,GAAhB,gBAAgB,CAA2B;IAClD,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,QAAoB,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,IAAI,MAA2B,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CACpC,QAAsB,EACtB,GAAG,CAAC,SAAS,CAAC,MAAM,CACrB,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;QACpC,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvD,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAC/C,GAAG,CAAC,UAAU,EACd,CAAC,YAAY,CAAC,EACd,eAAe,CAChB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"simple-job-executor.js","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAO3D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAEnB;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAElB;IACA;IACA;IACA;IACA;IACA;IANV,YACU,QAAgC,EAChC,eAAiC,EACjC,gBAA2C,EAC3C,cAA+B,EAC/B,QAAmB,EACnB,UAAuB;QALvB,aAAQ,GAAR,QAAQ,CAAwB;QAChC,oBAAe,GAAf,eAAe,CAAkB;QACjC,qBAAgB,GAAhB,gBAAgB,CAA2B;QAC3C,mBAAc,GAAd,cAAc,CAAiB;QAC/B,aAAQ,GAAR,QAAQ,CAAW;QACnB,eAAU,GAAV,UAAU,CAAa;IAC9B,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,mBAAmB,GAAgB,EAAE,CAAC;QAC5C,MAAM,qBAAqB,GAA2B,EAAE,CAAC;QAEzD,8CAA8C;QAC9C,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACjC,2EAA2E;YAC3E,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CACnD,GAAG,EACH,MAAM,EACN,SAAS,CACV,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjD,CAAC;gBACD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,qBAAqB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,2BAA2B,CACnD,GAAG,EACH,MAAM,EACN,SAAS,CACV,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjD,CAAC;gBACD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,qBAAqB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,4BAA4B,CACpD,GAAG,EACH,MAAM,EACN,SAAS,CACV,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtD,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBACjD,CAAC;gBACD,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;oBACjC,qBAAqB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBAC9D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,mEAAmE;YACnE,IAAI,QAAoB,CAAC;YACzB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CACvC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC9C,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC5B,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,oBAAoB,CAC7B,GAAG,CAAC,UAAU,EACd,aAAa,CAAC,eAAe,CAC9B;oBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,IAAI,MAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,IAAI,eAA2B,CAAC;YAChC,IAAI,CAAC;gBACH,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,QAAsB,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,cAAc,GAAG,uDAAuD,MAAM,CAAC,IAAI,oBAAoB,GAAG,CAAC,UAAU,sBAAsB,QAAQ,CAAC,MAAM,CAAC,YAAY,cAAc,GAAG,CAAC,KAAK,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpR,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC1C,aAAa,CAAC,KAAK,GAAG,GAAG,cAAc,8BAA8B,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrF,CAAC;gBACD,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,aAAa;oBACpB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACrD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvD,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEvC,wCAAwC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAC/C,GAAG,CAAC,UAAU,EACd,CAAC,YAAY,CAAC,EACd,eAAe,CAChB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,iEAAiE;YACjE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE7D,4DAA4D;YAC5D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAC7B,GAAG,CAAC,UAAU,EACd,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC5B,KAAK,EACL,GAAG,CAAC,MAAM,EACV,YAAY,CAAC,KAAK,EAClB,CAAC,GAAG,EAAE,EAAE;oBACN,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;gBAClC,CAAC,CACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,GAAG;oBACH,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,KAAK,CACd,iDAAiD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1G;oBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACjC,CAAC;YACJ,CAAC;YAED,eAAe,CAAC,MAAM,CAAC,QAAQ,GAAG;gBAChC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ;gBAClC,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC;aAChC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,CACtB,GAAG,CAAC,UAAU,EACd,KAAK,EACL,GAAG,CAAC,MAAM,EACV,YAAY,CAAC,KAAK,EAClB,eAAe,CAChB,CAAC;YAEF,qBAAqB,CAAC,IAAI,CAAC;gBACzB,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE;oBACP,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,KAAK;oBACL,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;oBAC1C,cAAc,EAAE,oCAAoC;iBACrD;aACF,CAAC,CAAC;QACL,CAAC;QAED,gEAAgE;QAChE,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ;iBACV,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;gBAC3C,UAAU,EAAE,qBAAqB;aAClC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE;gBACV,kBAAkB;YACpB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,mBAAmB;YAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,2BAA2B,CACvC,GAAQ,EACR,MAAc,EACd,SAAiB;QAcjB,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,qDAAqD,GAAG,CAAC,KAAK,GAAG,CAClE;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAA8B,CAAC,CAAC;QAE1E,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClG;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,MAAM,SAAS,GAAc;YAC3B,KAAK,EAAE,CAAC;YACR,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjE,IAAI,EAAE,EAAE,EAAE,yBAAyB;YACnC,IAAI,EAAE,CAAC,EAAE,8DAA8D;YACvE,MAAM,EAAE,MAAM;SACf,CAAC;QAEF,gEAAgE;QAChE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,CAAC,SAAS,CAAC,EACX,QAAQ,CACT,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,gEAAgE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzH;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,qFAAqF;QACrF,mEAAmE;QACnE,MAAM,iBAAiB,GAA4B;YACjD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,QAAQ,CAAC,KAAK;SAClB,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEzD,4DAA4D;QAC5D,2DAA2D;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC5B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,SAAS,CAAC,KAAK,EACf,CAAC,GAAG,EAAE,EAAE;gBACN,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,iEAAiE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1H;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG;YACzB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAC3B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC;SACjC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,CACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,EAClB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,SAAS,CAAC,KAAK,EACf,QAAQ,CACT,CAAC;QAEF,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,qBAAqB,EAAE;gBACrB;oBACE,SAAS;oBACT,OAAO,EAAE;wBACP,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;wBAC1C,cAAc;qBACf;iBACF;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,2BAA2B,CACvC,GAAQ,EACR,MAAc,EACd,SAAiB;QAcjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;QAExD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,uDAAuD,CACxD;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEpC,IAAI,QAAoB,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CACvC,UAAU,EACV,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,6CAA6C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtG;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9C,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,oBAAoB,CAC7B,UAAU,EACV,aAAa,CAAC,eAAe,CAC9B;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5D,uCAAuC;QACvC,MAAM,SAAS,GAAc;YAC3B,KAAK,EAAE,SAAS;YAChB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjE,IAAI,EAAE,EAAE,EAAE,yBAAyB;YACnC,IAAI,EAAE,CAAC,EAAE,8DAA8D;YACvE,MAAM,EAAE,MAAM;SACf,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,kDAAkD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3G;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,oEAAoE;QACpE,yBAAyB,CAAC,QAAQ,EAAE,MAAe,CAAC,CAAC;QAErD,iEAAiE;QACjE,0DAA0D;QAC1D,MAAM,iBAAiB,GAA4B;YACjD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ;SAClC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEzD,yDAAyD;QACzD,2DAA2D;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAC7B,UAAU,EACV,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC5B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,SAAS,CAAC,KAAK,EACf,CAAC,GAAG,EAAE,EAAE;gBACN,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,iEAAiE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1H;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,qBAAqB,EAAE;gBACrB;oBACE,SAAS;oBACT,OAAO,EAAE;wBACP,UAAU;wBACV,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;wBAC1C,cAAc;qBACf;iBACF;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,4BAA4B,CACxC,GAAQ,EACR,MAAc,EACd,SAAiB;QAcjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAmC,CAAC;QAEzD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,wDAAwD,CACzD;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEpC,qCAAqC;QACrC,IAAI,QAAoB,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CACvC,UAAU,EACV,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,CACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClG;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9C,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,oBAAoB,CAC7B,UAAU,EACV,aAAa,CAAC,eAAe,CAC9B;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5D,iDAAiD;QACjD,uFAAuF;QACvF,gGAAgG;QAChG,0BAA0B,CAAC,QAAQ,EAAE,MAAe,CAAC,CAAC;QAEtD,8DAA8D;QAC9D,MAAM,SAAS,GAAc;YAC3B,KAAK,EAAE,SAAS;YAChB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjE,IAAI,EAAE,EAAE,EAAE,yBAAyB;YACnC,IAAI,EAAE,CAAC,EAAE,8DAA8D;YACvE,MAAM,EAAE,MAAM;SACf,CAAC;QAEF,+CAA+C;QAC/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAC/C,UAAU,EACV,CAAC,SAAS,CAAC,EACX,QAAQ,CACT,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,iEAAiE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1H;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,MAAM,iBAAiB,GAA4B;YACjD,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,QAAQ,CAAC,KAAK;SAClB,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEzD,4DAA4D;QAC5D,2DAA2D;QAC3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAC7B,UAAU,EACV,QAAQ,CAAC,MAAM,CAAC,YAAY,EAC5B,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,SAAS,CAAC,KAAK,EACf,CAAC,GAAG,EAAE,EAAE;gBACN,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,KAAK,CACd,kEAAkE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3H;gBACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG;YACzB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAC3B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,CAAC;SACjC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,CACtB,UAAU,EACV,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,MAAM,EACV,SAAS,CAAC,KAAK,EACf,QAAQ,CACT,CAAC;QAEF,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,qBAAqB,EAAE;gBACrB;oBACE,SAAS;oBACT,OAAO,EAAE;wBACP,UAAU;wBACV,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY;wBAC1C,cAAc;qBACf;iBACF;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;CACF"}
@@ -1,4 +1,6 @@
1
- import { type Job } from "../queue/types.js";
1
+ import type { Operation } from "document-model";
2
+ import type { Job } from "../queue/types.js";
3
+ import type { OperationWithContext } from "../storage/interfaces.js";
2
4
  /**
3
5
  * Represents the result of a job execution
4
6
  */
@@ -9,8 +11,13 @@ export type JobResult = {
9
11
  success: boolean;
10
12
  /** Error if the job failed */
11
13
  error?: Error;
12
- /** The operation generated from the action (if successful) */
13
- operation?: any;
14
+ /** The operations generated from the actions (if successful) */
15
+ operations?: Operation[];
16
+ /**
17
+ * Operations with context (includes ephemeral resultingState).
18
+ * Used for emitting to IDocumentView via event bus.
19
+ */
20
+ operationsWithContext?: OperationWithContext[];
14
21
  /** Timestamp when the job execution completed */
15
22
  completedAt?: string;
16
23
  /** Duration of job execution in milliseconds */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAC;IAET,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,GAAG,CAAC;IAEhB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IAEnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAC;IAET,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,gEAAgE;IAChE,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IAEzB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAE/C,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IAEnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AA6CA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;CACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAqDA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;CACf,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { CreateDocumentAction, DeleteDocumentAction, PHDocument, UpgradeDocumentAction } from "document-model";
2
+ /**
3
+ * Creates a PHDocument from a CREATE_DOCUMENT action input.
4
+ * Reconstructs the document header and initializes the base state.
5
+ *
6
+ * @param action - The CREATE_DOCUMENT action containing the document parameters
7
+ * @returns A newly constructed PHDocument with initialized header and base state
8
+ */
9
+ export declare function createDocumentFromAction(action: CreateDocumentAction): PHDocument;
10
+ /**
11
+ * Applies an UPGRADE_DOCUMENT action to a document.
12
+ * Merges the initialState from the action with the existing document state,
13
+ * preserving auth and document scopes while adding model-specific scopes.
14
+ *
15
+ * @param document - The document to upgrade
16
+ * @param action - The UPGRADE_DOCUMENT action
17
+ * @returns The upgraded document (mutates in place and returns for convenience)
18
+ */
19
+ export declare function applyUpgradeDocumentAction(document: PHDocument, action: UpgradeDocumentAction): PHDocument;
20
+ /**
21
+ * Applies a DELETE_DOCUMENT action to a document.
22
+ * Marks the document as deleted in the document scope state.
23
+ *
24
+ * @param document - The document to mark as deleted
25
+ * @param action - The DELETE_DOCUMENT action
26
+ * @returns The updated document (mutates in place and returns for convenience)
27
+ */
28
+ export declare function applyDeleteDocumentAction(document: PHDocument, action: DeleteDocumentAction): PHDocument;
29
+ /**
30
+ * Calculate the next operation index for a specific scope.
31
+ * Each scope maintains its own independent index sequence.
32
+ *
33
+ * Per-scope indexing means:
34
+ * - Each scope (document, global, local, etc.) has independent indexes
35
+ * - Indexes start at 0 for each scope
36
+ * - Different scopes can have operations with the same index value
37
+ *
38
+ * This function uses header.revision which is populated by the cache/storage layer
39
+ * and contains the next available index for each scope. This design avoids requiring
40
+ * the full operation history to be loaded, which is crucial for snapshot-based caching.
41
+ *
42
+ * @param document - The document whose header.revision to inspect
43
+ * @param scope - The scope to calculate the next index for
44
+ * @returns The next available index in the specified scope
45
+ */
46
+ export declare const getNextIndexForScope: (document: PHDocument, scope: string) => number;
47
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/executor/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,oBAAoB,EACpB,UAAU,EACV,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAGxB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,GAC3B,UAAU,CA+CZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,qBAAqB,GAC5B,UAAU,CAgBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,oBAAoB,GAC3B,UAAU,CAaZ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,UAAU,EACpB,OAAO,MAAM,KACZ,MAEF,CAAC"}