@powerhousedao/reactor 4.1.0-dev.10 → 4.1.0-dev.101

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 (234) 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/core/reactor-builder.d.ts +24 -0
  34. package/dist/src/core/reactor-builder.d.ts.map +1 -0
  35. package/dist/src/core/reactor-builder.js +152 -0
  36. package/dist/src/core/reactor-builder.js.map +1 -0
  37. package/dist/src/core/reactor.d.ts +96 -0
  38. package/dist/src/core/reactor.d.ts.map +1 -0
  39. package/dist/src/core/reactor.js +666 -0
  40. package/dist/src/core/reactor.js.map +1 -0
  41. package/dist/src/core/types.d.ts +168 -0
  42. package/dist/src/core/types.d.ts.map +1 -0
  43. package/dist/src/core/types.js +2 -0
  44. package/dist/src/core/types.js.map +1 -0
  45. package/dist/src/core/utils.d.ts +50 -0
  46. package/dist/src/core/utils.d.ts.map +1 -0
  47. package/dist/src/core/utils.js +133 -0
  48. package/dist/src/core/utils.js.map +1 -0
  49. package/dist/src/events/event-bus.d.ts +3 -3
  50. package/dist/src/events/event-bus.d.ts.map +1 -1
  51. package/dist/src/events/event-bus.js.map +1 -1
  52. package/dist/src/events/interfaces.d.ts +1 -1
  53. package/dist/src/events/interfaces.d.ts.map +1 -1
  54. package/dist/src/events/types.d.ts +15 -1
  55. package/dist/src/events/types.d.ts.map +1 -1
  56. package/dist/src/events/types.js +6 -0
  57. package/dist/src/events/types.js.map +1 -1
  58. package/dist/src/executor/interfaces.d.ts +31 -54
  59. package/dist/src/executor/interfaces.d.ts.map +1 -1
  60. package/dist/src/executor/simple-job-executor-manager.d.ts +32 -0
  61. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  62. package/dist/src/executor/simple-job-executor-manager.js +212 -0
  63. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  64. package/dist/src/executor/simple-job-executor.d.ts +58 -0
  65. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  66. package/dist/src/executor/simple-job-executor.js +516 -0
  67. package/dist/src/executor/simple-job-executor.js.map +1 -0
  68. package/dist/src/executor/types.d.ts +32 -8
  69. package/dist/src/executor/types.d.ts.map +1 -1
  70. package/dist/src/executor/types.js.map +1 -1
  71. package/dist/src/executor/util.d.ts +47 -0
  72. package/dist/src/executor/util.d.ts.map +1 -0
  73. package/dist/src/executor/util.js +113 -0
  74. package/dist/src/executor/util.js.map +1 -0
  75. package/dist/src/index.d.ts +32 -3
  76. package/dist/src/index.d.ts.map +1 -1
  77. package/dist/src/index.js +38 -2
  78. package/dist/src/index.js.map +1 -1
  79. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +16 -0
  80. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  81. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  82. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  83. package/dist/src/job-tracker/index.d.ts +3 -0
  84. package/dist/src/job-tracker/index.d.ts.map +1 -0
  85. package/dist/src/job-tracker/index.js +2 -0
  86. package/dist/src/job-tracker/index.js.map +1 -0
  87. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  88. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  89. package/dist/src/job-tracker/interfaces.js +2 -0
  90. package/dist/src/job-tracker/interfaces.js.map +1 -0
  91. package/dist/src/queue/interfaces.d.ts +46 -5
  92. package/dist/src/queue/interfaces.d.ts.map +1 -1
  93. package/dist/src/queue/job-execution-handle.d.ts +25 -0
  94. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  95. package/dist/src/queue/job-execution-handle.js +62 -0
  96. package/dist/src/queue/job-execution-handle.js.map +1 -0
  97. package/dist/src/queue/queue.d.ts +56 -5
  98. package/dist/src/queue/queue.d.ts.map +1 -1
  99. package/dist/src/queue/queue.js +284 -36
  100. package/dist/src/queue/queue.js.map +1 -1
  101. package/dist/src/queue/types.d.ts +33 -5
  102. package/dist/src/queue/types.d.ts.map +1 -1
  103. package/dist/src/queue/types.js +12 -0
  104. package/dist/src/queue/types.js.map +1 -1
  105. package/dist/src/read-models/coordinator.d.ts +38 -0
  106. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  107. package/dist/src/read-models/coordinator.js +62 -0
  108. package/dist/src/read-models/coordinator.js.map +1 -0
  109. package/dist/src/read-models/document-view.d.ts +20 -0
  110. package/dist/src/read-models/document-view.d.ts.map +1 -0
  111. package/dist/src/read-models/document-view.js +365 -0
  112. package/dist/src/read-models/document-view.js.map +1 -0
  113. package/dist/src/read-models/interfaces.d.ts +29 -0
  114. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  115. package/dist/src/read-models/interfaces.js +2 -0
  116. package/dist/src/read-models/interfaces.js.map +1 -0
  117. package/dist/src/read-models/types.d.ts +46 -0
  118. package/dist/src/read-models/types.d.ts.map +1 -0
  119. package/dist/src/read-models/types.js +2 -0
  120. package/dist/src/read-models/types.js.map +1 -0
  121. package/dist/src/registry/implementation.d.ts +62 -0
  122. package/dist/src/registry/implementation.d.ts.map +1 -0
  123. package/dist/src/registry/implementation.js +96 -0
  124. package/dist/src/registry/implementation.js.map +1 -0
  125. package/dist/src/registry/index.d.ts +3 -0
  126. package/dist/src/registry/index.d.ts.map +1 -0
  127. package/dist/src/registry/index.js +2 -0
  128. package/dist/src/registry/index.js.map +1 -0
  129. package/dist/src/registry/interfaces.d.ts +39 -0
  130. package/dist/src/registry/interfaces.d.ts.map +1 -0
  131. package/dist/src/registry/interfaces.js +2 -0
  132. package/dist/src/registry/interfaces.js.map +1 -0
  133. package/dist/src/shared/awaiter.d.ts +32 -0
  134. package/dist/src/shared/awaiter.d.ts.map +1 -0
  135. package/dist/src/shared/awaiter.js +132 -0
  136. package/dist/src/shared/awaiter.js.map +1 -0
  137. package/dist/src/shared/errors.d.ts +17 -0
  138. package/dist/src/shared/errors.d.ts.map +1 -0
  139. package/dist/src/shared/errors.js +33 -0
  140. package/dist/src/shared/errors.js.map +1 -0
  141. package/dist/src/shared/factories.d.ts +16 -0
  142. package/dist/src/shared/factories.d.ts.map +1 -0
  143. package/dist/src/shared/factories.js +33 -0
  144. package/dist/src/shared/factories.js.map +1 -0
  145. package/dist/src/shared/types.d.ts +100 -20
  146. package/dist/src/shared/types.d.ts.map +1 -1
  147. package/dist/src/shared/types.js +35 -1
  148. package/dist/src/shared/types.js.map +1 -1
  149. package/dist/src/shared/utils.d.ts +3 -0
  150. package/dist/src/shared/utils.d.ts.map +1 -0
  151. package/dist/src/shared/utils.js +8 -0
  152. package/dist/src/shared/utils.js.map +1 -0
  153. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  154. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  155. package/dist/src/signer/passthrough-signer.js +6 -0
  156. package/dist/src/signer/passthrough-signer.js.map +1 -0
  157. package/dist/src/signer/types.d.ts +15 -0
  158. package/dist/src/signer/types.d.ts.map +1 -0
  159. package/dist/src/signer/types.js +2 -0
  160. package/dist/src/signer/types.js.map +1 -0
  161. package/dist/src/storage/interfaces.d.ts +209 -0
  162. package/dist/src/storage/interfaces.d.ts.map +1 -0
  163. package/dist/src/storage/interfaces.js +19 -0
  164. package/dist/src/storage/interfaces.js.map +1 -0
  165. package/dist/src/storage/kysely/document-indexer.d.ts +25 -0
  166. package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -0
  167. package/dist/src/storage/kysely/document-indexer.js +345 -0
  168. package/dist/src/storage/kysely/document-indexer.js.map +1 -0
  169. package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
  170. package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
  171. package/dist/src/storage/kysely/keyframe-store.js +71 -0
  172. package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
  173. package/dist/src/storage/kysely/store.d.ts +15 -0
  174. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  175. package/dist/src/storage/kysely/store.js +196 -0
  176. package/dist/src/storage/kysely/store.js.map +1 -0
  177. package/dist/src/storage/kysely/types.d.ts +72 -0
  178. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  179. package/dist/src/storage/kysely/types.js +2 -0
  180. package/dist/src/storage/kysely/types.js.map +1 -0
  181. package/dist/src/storage/txn.d.ts +15 -0
  182. package/dist/src/storage/txn.d.ts.map +1 -0
  183. package/dist/src/storage/txn.js +43 -0
  184. package/dist/src/storage/txn.js.map +1 -0
  185. package/dist/src/subs/default-error-handler.d.ts +13 -0
  186. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  187. package/dist/src/subs/default-error-handler.js +27 -0
  188. package/dist/src/subs/default-error-handler.js.map +1 -0
  189. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  190. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  191. package/dist/src/subs/react-subscription-manager.js +185 -0
  192. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  193. package/dist/src/subs/types.d.ts +64 -0
  194. package/dist/src/subs/types.d.ts.map +1 -0
  195. package/dist/src/subs/types.js +2 -0
  196. package/dist/src/subs/types.js.map +1 -0
  197. package/dist/src/utils/reshuffle.d.ts +30 -0
  198. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  199. package/dist/src/utils/reshuffle.js +47 -0
  200. package/dist/src/utils/reshuffle.js.map +1 -0
  201. package/package.json +18 -7
  202. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  203. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  204. package/dist/bench/end-to-end-flow.bench.js +0 -256
  205. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  206. package/dist/bench/event-bus.bench.d.ts +0 -2
  207. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  208. package/dist/bench/event-bus.bench.js +0 -238
  209. package/dist/bench/event-bus.bench.js.map +0 -1
  210. package/dist/bench/queue-only.bench.d.ts +0 -2
  211. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  212. package/dist/bench/queue-only.bench.js +0 -40
  213. package/dist/bench/queue-only.bench.js.map +0 -1
  214. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  215. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  216. package/dist/bench/reactor-throughput.bench.js +0 -137
  217. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  218. package/dist/src/executor/job-executor.d.ts +0 -62
  219. package/dist/src/executor/job-executor.d.ts.map +0 -1
  220. package/dist/src/executor/job-executor.js +0 -325
  221. package/dist/src/executor/job-executor.js.map +0 -1
  222. package/dist/test/event-bus.test.d.ts +0 -2
  223. package/dist/test/event-bus.test.d.ts.map +0 -1
  224. package/dist/test/event-bus.test.js +0 -532
  225. package/dist/test/event-bus.test.js.map +0 -1
  226. package/dist/test/job-executor.test.d.ts +0 -2
  227. package/dist/test/job-executor.test.d.ts.map +0 -1
  228. package/dist/test/job-executor.test.js +0 -581
  229. package/dist/test/job-executor.test.js.map +0 -1
  230. package/dist/test/queue.test.d.ts +0 -2
  231. package/dist/test/queue.test.d.ts.map +0 -1
  232. package/dist/test/queue.test.js +0 -396
  233. package/dist/test/queue.test.js.map +0 -1
  234. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,516 @@
1
+ import { OperationEventTypes } from "../events/types.js";
2
+ import { DocumentDeletedError } from "../shared/errors.js";
3
+ import { applyDeleteDocumentAction, applyUpgradeDocumentAction, createDocumentFromAction, getNextIndexForScope, } from "./util.js";
4
+ /**
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
10
+ */
11
+ export class SimpleJobExecutor {
12
+ registry;
13
+ documentStorage;
14
+ operationStorage;
15
+ operationStore;
16
+ eventBus;
17
+ writeCache;
18
+ config;
19
+ constructor(registry, documentStorage, operationStorage, operationStore, eventBus, writeCache, config) {
20
+ this.registry = registry;
21
+ this.documentStorage = documentStorage;
22
+ this.operationStorage = operationStorage;
23
+ this.operationStore = operationStore;
24
+ this.eventBus = eventBus;
25
+ this.writeCache = writeCache;
26
+ this.config = {
27
+ maxConcurrency: config?.maxConcurrency ?? 1,
28
+ jobTimeoutMs: config?.jobTimeoutMs ?? 30000,
29
+ retryBaseDelayMs: config?.retryBaseDelayMs ?? 100,
30
+ retryMaxDelayMs: config?.retryMaxDelayMs ?? 5000,
31
+ legacyStorageEnabled: config?.legacyStorageEnabled ?? true,
32
+ };
33
+ }
34
+ /**
35
+ * Execute a single job by applying all its actions through the appropriate reducers.
36
+ * Actions are processed sequentially in order.
37
+ */
38
+ async executeJob(job) {
39
+ const startTime = Date.now();
40
+ const generatedOperations = [];
41
+ const operationsWithContext = [];
42
+ // Process each action in the job sequentially
43
+ for (const action of job.actions) {
44
+ // Handle system actions specially (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
45
+ if (action.type === "CREATE_DOCUMENT") {
46
+ const result = await this.executeCreateDocumentAction(job, action, startTime);
47
+ const error = this.accumulateResultOrReturnError(result, generatedOperations, operationsWithContext);
48
+ if (error !== null) {
49
+ return error;
50
+ }
51
+ continue;
52
+ }
53
+ if (action.type === "DELETE_DOCUMENT") {
54
+ const result = await this.executeDeleteDocumentAction(job, action, startTime);
55
+ const error = this.accumulateResultOrReturnError(result, generatedOperations, operationsWithContext);
56
+ if (error !== null) {
57
+ return error;
58
+ }
59
+ continue;
60
+ }
61
+ if (action.type === "UPGRADE_DOCUMENT") {
62
+ const result = await this.executeUpgradeDocumentAction(job, action, startTime);
63
+ const error = this.accumulateResultOrReturnError(result, generatedOperations, operationsWithContext);
64
+ if (error !== null) {
65
+ return error;
66
+ }
67
+ continue;
68
+ }
69
+ if (action.type === "ADD_RELATIONSHIP") {
70
+ const result = await this.executeAddRelationshipAction(job, action, startTime);
71
+ const error = this.accumulateResultOrReturnError(result, generatedOperations, operationsWithContext);
72
+ if (error !== null) {
73
+ return error;
74
+ }
75
+ continue;
76
+ }
77
+ if (action.type === "REMOVE_RELATIONSHIP") {
78
+ const result = await this.executeRemoveRelationshipAction(job, action, startTime);
79
+ const error = this.accumulateResultOrReturnError(result, generatedOperations, operationsWithContext);
80
+ if (error !== null) {
81
+ return error;
82
+ }
83
+ continue;
84
+ }
85
+ // For regular actions, load the document and apply through reducer
86
+ let document;
87
+ try {
88
+ document = await this.writeCache.getState(job.documentId, job.scope, job.branch);
89
+ }
90
+ catch (error) {
91
+ return {
92
+ job,
93
+ success: false,
94
+ error: error instanceof Error ? error : new Error(String(error)),
95
+ duration: Date.now() - startTime,
96
+ };
97
+ }
98
+ // Check if document is deleted
99
+ const documentState = document.state.document;
100
+ if (documentState.isDeleted) {
101
+ return {
102
+ job,
103
+ success: false,
104
+ error: new DocumentDeletedError(job.documentId, documentState.deletedAtUtcIso),
105
+ duration: Date.now() - startTime,
106
+ };
107
+ }
108
+ let module;
109
+ try {
110
+ module = this.registry.getModule(document.header.documentType);
111
+ }
112
+ catch (error) {
113
+ return {
114
+ job,
115
+ success: false,
116
+ error: error instanceof Error ? error : new Error(String(error)),
117
+ duration: Date.now() - startTime,
118
+ };
119
+ }
120
+ let updatedDocument;
121
+ try {
122
+ updatedDocument = module.reducer(document, action);
123
+ }
124
+ catch (error) {
125
+ 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)}`;
126
+ const enhancedError = new Error(contextMessage);
127
+ if (error instanceof Error && error.stack) {
128
+ enhancedError.stack = `${contextMessage}\n\nOriginal stack trace:\n${error.stack}`;
129
+ }
130
+ return {
131
+ job,
132
+ success: false,
133
+ error: enhancedError,
134
+ duration: Date.now() - startTime,
135
+ };
136
+ }
137
+ const scope = job.scope;
138
+ const operations = updatedDocument.operations[scope];
139
+ if (operations.length === 0) {
140
+ throw new Error("No operation generated from action");
141
+ }
142
+ const newOperation = operations[operations.length - 1];
143
+ generatedOperations.push(newOperation);
144
+ // Write the operation to legacy storage
145
+ if (this.config.legacyStorageEnabled) {
146
+ try {
147
+ await this.operationStorage.addDocumentOperations(job.documentId, [newOperation], updatedDocument);
148
+ }
149
+ catch (error) {
150
+ return {
151
+ job,
152
+ success: false,
153
+ error: error instanceof Error ? error : new Error(String(error)),
154
+ duration: Date.now() - startTime,
155
+ };
156
+ }
157
+ }
158
+ // Compute resultingState for passing via context (not persisted)
159
+ const resultingState = JSON.stringify(updatedDocument.state);
160
+ // Write the operation to new IOperationStore (dual-writing)
161
+ try {
162
+ await this.operationStore.apply(job.documentId, document.header.documentType, scope, job.branch, newOperation.index, (txn) => {
163
+ txn.addOperations(newOperation);
164
+ });
165
+ }
166
+ catch (error) {
167
+ return {
168
+ job,
169
+ success: false,
170
+ error: new Error(`Failed to write operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
171
+ duration: Date.now() - startTime,
172
+ };
173
+ }
174
+ updatedDocument.header.revision = {
175
+ ...updatedDocument.header.revision,
176
+ [scope]: newOperation.index + 1,
177
+ };
178
+ this.writeCache.putState(job.documentId, scope, job.branch, newOperation.index, updatedDocument);
179
+ operationsWithContext.push({
180
+ operation: newOperation,
181
+ context: {
182
+ documentId: job.documentId,
183
+ scope,
184
+ branch: job.branch,
185
+ documentType: document.header.documentType,
186
+ resultingState, // Ephemeral, passed via events only
187
+ },
188
+ });
189
+ }
190
+ // Emit event for read models with all operations - non-blocking
191
+ if (operationsWithContext.length > 0) {
192
+ this.eventBus
193
+ .emit(OperationEventTypes.OPERATION_WRITTEN, {
194
+ operations: operationsWithContext,
195
+ })
196
+ .catch(() => {
197
+ // TODO: Log error
198
+ });
199
+ }
200
+ return {
201
+ job,
202
+ success: true,
203
+ operations: generatedOperations,
204
+ duration: Date.now() - startTime,
205
+ };
206
+ }
207
+ /**
208
+ * Execute a CREATE_DOCUMENT system action.
209
+ * This creates a new document in storage along with its initial operation.
210
+ * For a new document, the operation index is always 0.
211
+ */
212
+ async executeCreateDocumentAction(job, action, startTime) {
213
+ if (job.scope !== "document") {
214
+ return {
215
+ job,
216
+ success: false,
217
+ error: new Error(`CREATE_DOCUMENT must be in "document" scope, got "${job.scope}"`),
218
+ duration: Date.now() - startTime,
219
+ };
220
+ }
221
+ const document = createDocumentFromAction(action);
222
+ // Legacy: Store the document in storage
223
+ if (this.config.legacyStorageEnabled) {
224
+ try {
225
+ await this.documentStorage.create(document);
226
+ }
227
+ catch (error) {
228
+ return this.buildErrorResult(job, new Error(`Failed to create document in storage: ${error instanceof Error ? error.message : String(error)}`), startTime);
229
+ }
230
+ }
231
+ const operation = this.createOperation(action, 0);
232
+ // Legacy: Write the CREATE_DOCUMENT operation to legacy storage
233
+ if (this.config.legacyStorageEnabled) {
234
+ try {
235
+ await this.operationStorage.addDocumentOperations(document.header.id, [operation], document);
236
+ }
237
+ catch (error) {
238
+ return this.buildErrorResult(job, new Error(`Failed to write CREATE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`), startTime);
239
+ }
240
+ }
241
+ // Compute resultingState for passing via context (not persisted)
242
+ // Include header and all scopes present in the document state (auth, document, etc.)
243
+ // but not global/local which aren't initialized by CREATE_DOCUMENT
244
+ const resultingStateObj = {
245
+ header: document.header,
246
+ ...document.state,
247
+ };
248
+ const resultingState = JSON.stringify(resultingStateObj);
249
+ const writeError = await this.writeOperationToStore(document.header.id, document.header.documentType, job.scope, job.branch, operation, job, startTime);
250
+ if (writeError !== null) {
251
+ return writeError;
252
+ }
253
+ this.updateDocumentRevision(document, job.scope, operation.index);
254
+ this.writeCacheState(document.header.id, job.scope, job.branch, operation.index, document);
255
+ return this.buildSuccessResult(job, operation, document.header.id, document.header.documentType, resultingState, startTime);
256
+ }
257
+ /**
258
+ * Execute a DELETE_DOCUMENT system action.
259
+ * This deletes a document from legacy storage and writes the operation to IOperationStore.
260
+ * The operation index is determined from the document's current operation count.
261
+ */
262
+ async executeDeleteDocumentAction(job, action, startTime) {
263
+ const input = action.input;
264
+ if (!input.documentId) {
265
+ return this.buildErrorResult(job, new Error("DELETE_DOCUMENT action requires a documentId in input"), startTime);
266
+ }
267
+ const documentId = input.documentId;
268
+ let document;
269
+ try {
270
+ document = await this.writeCache.getState(documentId, job.scope, job.branch);
271
+ }
272
+ catch (error) {
273
+ return this.buildErrorResult(job, new Error(`Failed to fetch document before deletion: ${error instanceof Error ? error.message : String(error)}`), startTime);
274
+ }
275
+ // Check if document is already deleted
276
+ const documentState = document.state.document;
277
+ if (documentState.isDeleted) {
278
+ return this.buildErrorResult(job, new DocumentDeletedError(documentId, documentState.deletedAtUtcIso), startTime);
279
+ }
280
+ const nextIndex = getNextIndexForScope(document, job.scope);
281
+ const operation = this.createOperation(action, nextIndex);
282
+ if (this.config.legacyStorageEnabled) {
283
+ try {
284
+ await this.documentStorage.delete(documentId);
285
+ }
286
+ catch (error) {
287
+ return this.buildErrorResult(job, new Error(`Failed to delete document from legacy storage: ${error instanceof Error ? error.message : String(error)}`), startTime);
288
+ }
289
+ }
290
+ // Mark the document as deleted in the state for read model indexing
291
+ applyDeleteDocumentAction(document, action);
292
+ // Compute resultingState for passing via context (not persisted)
293
+ // DELETE_DOCUMENT only affects header and document scopes
294
+ const resultingStateObj = {
295
+ header: document.header,
296
+ document: document.state.document,
297
+ };
298
+ const resultingState = JSON.stringify(resultingStateObj);
299
+ const writeError = await this.writeOperationToStore(documentId, document.header.documentType, job.scope, job.branch, operation, job, startTime);
300
+ if (writeError !== null) {
301
+ return writeError;
302
+ }
303
+ return this.buildSuccessResult(job, operation, documentId, document.header.documentType, resultingState, startTime);
304
+ }
305
+ /**
306
+ * Execute an UPGRADE_DOCUMENT system action.
307
+ * This sets the document's initial state from the upgrade action.
308
+ * The operation index is determined from the document's current operation count.
309
+ */
310
+ async executeUpgradeDocumentAction(job, action, startTime) {
311
+ const input = action.input;
312
+ if (!input.documentId) {
313
+ return this.buildErrorResult(job, new Error("UPGRADE_DOCUMENT action requires a documentId in input"), startTime);
314
+ }
315
+ const documentId = input.documentId;
316
+ let document;
317
+ try {
318
+ document = await this.writeCache.getState(documentId, job.scope, job.branch);
319
+ }
320
+ catch (error) {
321
+ return this.buildErrorResult(job, new Error(`Failed to fetch document for upgrade: ${error instanceof Error ? error.message : String(error)}`), startTime);
322
+ }
323
+ const documentState = document.state.document;
324
+ if (documentState.isDeleted) {
325
+ return this.buildErrorResult(job, new DocumentDeletedError(documentId, documentState.deletedAtUtcIso), startTime);
326
+ }
327
+ const nextIndex = getNextIndexForScope(document, job.scope);
328
+ applyUpgradeDocumentAction(document, action);
329
+ const operation = this.createOperation(action, nextIndex);
330
+ // Write the updated document to legacy storage
331
+ if (this.config.legacyStorageEnabled) {
332
+ try {
333
+ await this.operationStorage.addDocumentOperations(documentId, [operation], document);
334
+ }
335
+ catch (error) {
336
+ return this.buildErrorResult(job, new Error(`Failed to write UPGRADE_DOCUMENT operation to legacy storage: ${error instanceof Error ? error.message : String(error)}`), startTime);
337
+ }
338
+ }
339
+ // Compute resultingState for passing via context (not persisted)
340
+ const resultingStateObj = {
341
+ header: document.header,
342
+ ...document.state,
343
+ };
344
+ const resultingState = JSON.stringify(resultingStateObj);
345
+ const writeError = await this.writeOperationToStore(documentId, document.header.documentType, job.scope, job.branch, operation, job, startTime);
346
+ if (writeError !== null) {
347
+ return writeError;
348
+ }
349
+ this.updateDocumentRevision(document, job.scope, operation.index);
350
+ this.writeCacheState(documentId, job.scope, job.branch, operation.index, document);
351
+ return this.buildSuccessResult(job, operation, documentId, document.header.documentType, resultingState, startTime);
352
+ }
353
+ async executeAddRelationshipAction(job, action, startTime) {
354
+ if (job.scope !== "document") {
355
+ return this.buildErrorResult(job, new Error(`ADD_RELATIONSHIP must be in "document" scope, got "${job.scope}"`), startTime);
356
+ }
357
+ const input = action.input;
358
+ if (!input.sourceId || !input.targetId || !input.relationshipType) {
359
+ return this.buildErrorResult(job, new Error("ADD_RELATIONSHIP action requires sourceId, targetId, and relationshipType in input"), startTime);
360
+ }
361
+ if (input.sourceId === input.targetId) {
362
+ return this.buildErrorResult(job, new Error("ADD_RELATIONSHIP: sourceId and targetId cannot be the same (self-relationships not allowed)"), startTime);
363
+ }
364
+ let sourceDoc;
365
+ try {
366
+ sourceDoc = await this.writeCache.getState(input.sourceId, "document", job.branch);
367
+ }
368
+ catch (error) {
369
+ return this.buildErrorResult(job, new Error(`ADD_RELATIONSHIP: source document ${input.sourceId} not found: ${error instanceof Error ? error.message : String(error)}`), startTime);
370
+ }
371
+ let targetDoc;
372
+ try {
373
+ targetDoc = await this.writeCache.getState(input.targetId, "document", job.branch);
374
+ }
375
+ catch (error) {
376
+ return this.buildErrorResult(job, new Error(`ADD_RELATIONSHIP: target document ${input.targetId} not found: ${error instanceof Error ? error.message : String(error)}`), startTime);
377
+ }
378
+ const targetDocState = targetDoc.state.document;
379
+ if (targetDocState.isDeleted) {
380
+ return this.buildErrorResult(job, new Error(`ADD_RELATIONSHIP: target document ${input.targetId} is deleted`), startTime);
381
+ }
382
+ const nextIndex = getNextIndexForScope(sourceDoc, job.scope);
383
+ const operation = this.createOperation(action, nextIndex);
384
+ const writeError = await this.writeOperationToStore(input.sourceId, sourceDoc.header.documentType, job.scope, job.branch, operation, job, startTime);
385
+ if (writeError !== null) {
386
+ return writeError;
387
+ }
388
+ sourceDoc.header.lastModifiedAtUtcIso =
389
+ operation.timestampUtcMs || new Date().toISOString();
390
+ this.updateDocumentRevision(sourceDoc, job.scope, operation.index);
391
+ sourceDoc.operations = {
392
+ ...sourceDoc.operations,
393
+ [job.scope]: [...(sourceDoc.operations[job.scope] ?? []), operation],
394
+ };
395
+ const scopeState = sourceDoc.state[job.scope];
396
+ const resultingStateObj = {
397
+ header: structuredClone(sourceDoc.header),
398
+ [job.scope]: scopeState === undefined ? {} : structuredClone(scopeState),
399
+ };
400
+ const resultingState = JSON.stringify(resultingStateObj);
401
+ this.writeCacheState(input.sourceId, job.scope, job.branch, operation.index, sourceDoc);
402
+ return this.buildSuccessResult(job, operation, input.sourceId, sourceDoc.header.documentType, resultingState, startTime);
403
+ }
404
+ async executeRemoveRelationshipAction(job, action, startTime) {
405
+ if (job.scope !== "document") {
406
+ return this.buildErrorResult(job, new Error(`REMOVE_RELATIONSHIP must be in "document" scope, got "${job.scope}"`), startTime);
407
+ }
408
+ const input = action.input;
409
+ if (!input.sourceId || !input.targetId || !input.relationshipType) {
410
+ return this.buildErrorResult(job, new Error("REMOVE_RELATIONSHIP action requires sourceId, targetId, and relationshipType in input"), startTime);
411
+ }
412
+ let sourceDoc;
413
+ try {
414
+ sourceDoc = await this.writeCache.getState(input.sourceId, "document", job.branch);
415
+ }
416
+ catch (error) {
417
+ return this.buildErrorResult(job, new Error(`REMOVE_RELATIONSHIP: source document ${input.sourceId} not found: ${error instanceof Error ? error.message : String(error)}`), startTime);
418
+ }
419
+ const nextIndex = getNextIndexForScope(sourceDoc, job.scope);
420
+ const operation = this.createOperation(action, nextIndex);
421
+ const writeError = await this.writeOperationToStore(input.sourceId, sourceDoc.header.documentType, job.scope, job.branch, operation, job, startTime);
422
+ if (writeError !== null) {
423
+ return writeError;
424
+ }
425
+ sourceDoc.header.lastModifiedAtUtcIso =
426
+ operation.timestampUtcMs || new Date().toISOString();
427
+ this.updateDocumentRevision(sourceDoc, job.scope, operation.index);
428
+ sourceDoc.operations = {
429
+ ...sourceDoc.operations,
430
+ [job.scope]: [...(sourceDoc.operations[job.scope] ?? []), operation],
431
+ };
432
+ const scopeState = sourceDoc.state[job.scope];
433
+ const resultingStateObj = {
434
+ header: structuredClone(sourceDoc.header),
435
+ [job.scope]: scopeState === undefined ? {} : structuredClone(scopeState),
436
+ };
437
+ const resultingState = JSON.stringify(resultingStateObj);
438
+ this.writeCacheState(input.sourceId, job.scope, job.branch, operation.index, sourceDoc);
439
+ return this.buildSuccessResult(job, operation, input.sourceId, sourceDoc.header.documentType, resultingState, startTime);
440
+ }
441
+ createOperation(action, index) {
442
+ return {
443
+ index: index,
444
+ timestampUtcMs: action.timestampUtcMs || new Date().toISOString(),
445
+ hash: "",
446
+ skip: 0,
447
+ action: action,
448
+ };
449
+ }
450
+ async writeOperationToStore(documentId, documentType, scope, branch, operation, job, startTime) {
451
+ try {
452
+ await this.operationStore.apply(documentId, documentType, scope, branch, operation.index, (txn) => {
453
+ txn.addOperations(operation);
454
+ });
455
+ return null;
456
+ }
457
+ catch (error) {
458
+ return {
459
+ job,
460
+ success: false,
461
+ error: new Error(`Failed to write operation to IOperationStore: ${error instanceof Error ? error.message : String(error)}`),
462
+ duration: Date.now() - startTime,
463
+ };
464
+ }
465
+ }
466
+ updateDocumentRevision(document, scope, operationIndex) {
467
+ document.header.revision = {
468
+ ...document.header.revision,
469
+ [scope]: operationIndex + 1,
470
+ };
471
+ }
472
+ writeCacheState(documentId, scope, branch, operationIndex, document) {
473
+ this.writeCache.putState(documentId, scope, branch, operationIndex, document);
474
+ }
475
+ buildSuccessResult(job, operation, documentId, documentType, resultingState, startTime) {
476
+ return {
477
+ job,
478
+ success: true,
479
+ operations: [operation],
480
+ operationsWithContext: [
481
+ {
482
+ operation,
483
+ context: {
484
+ documentId: documentId,
485
+ scope: job.scope,
486
+ branch: job.branch,
487
+ documentType: documentType,
488
+ resultingState,
489
+ },
490
+ },
491
+ ],
492
+ duration: Date.now() - startTime,
493
+ };
494
+ }
495
+ buildErrorResult(job, error, startTime) {
496
+ return {
497
+ job,
498
+ success: false,
499
+ error: error,
500
+ duration: Date.now() - startTime,
501
+ };
502
+ }
503
+ accumulateResultOrReturnError(result, generatedOperations, operationsWithContext) {
504
+ if (!result.success) {
505
+ return result;
506
+ }
507
+ if (result.operations && result.operations.length > 0) {
508
+ generatedOperations.push(...result.operations);
509
+ }
510
+ if (result.operationsWithContext) {
511
+ operationsWithContext.push(...result.operationsWithContext);
512
+ }
513
+ return null;
514
+ }
515
+ }
516
+ //# sourceMappingURL=simple-job-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-job-executor.js","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { 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
  */
@@ -7,12 +9,19 @@ export type JobResult = {
7
9
  job: Job;
8
10
  /** Whether the job executed successfully */
9
11
  success: boolean;
10
- /** Error message if the job failed */
11
- error?: string;
12
+ /** Error if the job failed */
13
+ error?: Error;
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[];
12
21
  /** Timestamp when the job execution completed */
13
- completedAt: string;
22
+ completedAt?: string;
14
23
  /** Duration of job execution in milliseconds */
15
- duration: number;
24
+ duration?: number;
16
25
  /** Any additional metadata from the execution */
17
26
  metadata?: Record<string, any>;
18
27
  };
@@ -23,11 +32,13 @@ export type JobExecutorConfig = {
23
32
  /** Maximum number of concurrent jobs to execute */
24
33
  maxConcurrency?: number;
25
34
  /** Maximum time in milliseconds a job can run before being considered timed out */
26
- jobTimeout?: number;
35
+ jobTimeoutMs?: number;
27
36
  /** Base delay in milliseconds for exponential backoff retries */
28
- retryBaseDelay?: number;
37
+ retryBaseDelayMs?: number;
29
38
  /** Maximum delay in milliseconds for exponential backoff retries */
30
- retryMaxDelay?: number;
39
+ retryMaxDelayMs?: number;
40
+ /** Enable or disable legacy storage reads and writes. Default: true for backward compatibility */
41
+ legacyStorageEnabled?: boolean;
31
42
  };
32
43
  /**
33
44
  * Event types for the job executor
@@ -64,4 +75,17 @@ export type ExecutorStoppedEvent = {
64
75
  stoppedAt: string;
65
76
  graceful: boolean;
66
77
  };
78
+ /**
79
+ * Status information for the job executor manager
80
+ */
81
+ export type ExecutorManagerStatus = {
82
+ /** Whether the manager is currently running */
83
+ isRunning: boolean;
84
+ /** Number of executor instances managed */
85
+ numExecutors: number;
86
+ /** Number of jobs currently being processed */
87
+ activeJobs: number;
88
+ /** Total number of jobs processed since start */
89
+ totalJobsProcessed: number;
90
+ };
67
91
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAC;IAET,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IAEjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IAEjB,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,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,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"}
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;IAEzB,kGAAkG;IAClG,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,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":"AA0CA;;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":"AAwDA;;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"}