@spine-event-engine/server 2.0.0-snapshot.2

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 (354) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +569 -0
  3. package/REFERENCE.md +488 -0
  4. package/dist/bus/command-bus.d.ts +61 -0
  5. package/dist/bus/command-bus.d.ts.map +1 -0
  6. package/dist/bus/command-bus.js +201 -0
  7. package/dist/bus/command-bus.js.map +1 -0
  8. package/dist/bus/command-dispatcher-registry.d.ts +33 -0
  9. package/dist/bus/command-dispatcher-registry.d.ts.map +1 -0
  10. package/dist/bus/command-dispatcher-registry.js +75 -0
  11. package/dist/bus/command-dispatcher-registry.js.map +1 -0
  12. package/dist/bus/command-dispatcher.d.ts +25 -0
  13. package/dist/bus/command-dispatcher.d.ts.map +1 -0
  14. package/dist/bus/command-dispatcher.js +15 -0
  15. package/dist/bus/command-dispatcher.js.map +1 -0
  16. package/dist/bus/command-errors.d.ts +23 -0
  17. package/dist/bus/command-errors.d.ts.map +1 -0
  18. package/dist/bus/command-errors.js +52 -0
  19. package/dist/bus/command-errors.js.map +1 -0
  20. package/dist/bus/event-bus.d.ts +113 -0
  21. package/dist/bus/event-bus.d.ts.map +1 -0
  22. package/dist/bus/event-bus.js +518 -0
  23. package/dist/bus/event-bus.js.map +1 -0
  24. package/dist/bus/event-dispatcher-origin-schemas.d.ts +17 -0
  25. package/dist/bus/event-dispatcher-origin-schemas.d.ts.map +1 -0
  26. package/dist/bus/event-dispatcher-origin-schemas.js +32 -0
  27. package/dist/bus/event-dispatcher-origin-schemas.js.map +1 -0
  28. package/dist/bus/event-dispatcher-registry.d.ts +48 -0
  29. package/dist/bus/event-dispatcher-registry.d.ts.map +1 -0
  30. package/dist/bus/event-dispatcher-registry.js +176 -0
  31. package/dist/bus/event-dispatcher-registry.js.map +1 -0
  32. package/dist/bus/event-dispatcher.d.ts +48 -0
  33. package/dist/bus/event-dispatcher.d.ts.map +1 -0
  34. package/dist/bus/event-dispatcher.js +15 -0
  35. package/dist/bus/event-dispatcher.js.map +1 -0
  36. package/dist/context/bounded-context.d.ts +606 -0
  37. package/dist/context/bounded-context.d.ts.map +1 -0
  38. package/dist/context/bounded-context.js +1780 -0
  39. package/dist/context/bounded-context.js.map +1 -0
  40. package/dist/context/entity-inbox.d.ts +63 -0
  41. package/dist/context/entity-inbox.d.ts.map +1 -0
  42. package/dist/context/entity-inbox.js +380 -0
  43. package/dist/context/entity-inbox.js.map +1 -0
  44. package/dist/context/local-inbox-handoff.d.ts +244 -0
  45. package/dist/context/local-inbox-handoff.d.ts.map +1 -0
  46. package/dist/context/local-inbox-handoff.js +334 -0
  47. package/dist/context/local-inbox-handoff.js.map +1 -0
  48. package/dist/context/projection-handoff.d.ts +46 -0
  49. package/dist/context/projection-handoff.d.ts.map +1 -0
  50. package/dist/context/projection-handoff.js +172 -0
  51. package/dist/context/projection-handoff.js.map +1 -0
  52. package/dist/context/tenant-index.d.ts +41 -0
  53. package/dist/context/tenant-index.d.ts.map +1 -0
  54. package/dist/context/tenant-index.js +92 -0
  55. package/dist/context/tenant-index.js.map +1 -0
  56. package/dist/delivery/conditional-pickup.d.ts +25 -0
  57. package/dist/delivery/conditional-pickup.d.ts.map +1 -0
  58. package/dist/delivery/conditional-pickup.js +26 -0
  59. package/dist/delivery/conditional-pickup.js.map +1 -0
  60. package/dist/delivery/delivery-builder.d.ts +216 -0
  61. package/dist/delivery/delivery-builder.d.ts.map +1 -0
  62. package/dist/delivery/delivery-builder.js +323 -0
  63. package/dist/delivery/delivery-builder.js.map +1 -0
  64. package/dist/delivery/delivery-lease.d.ts +15 -0
  65. package/dist/delivery/delivery-lease.d.ts.map +1 -0
  66. package/dist/delivery/delivery-lease.js +44 -0
  67. package/dist/delivery/delivery-lease.js.map +1 -0
  68. package/dist/delivery/delivery-loop.d.ts +113 -0
  69. package/dist/delivery/delivery-loop.d.ts.map +1 -0
  70. package/dist/delivery/delivery-loop.js +119 -0
  71. package/dist/delivery/delivery-loop.js.map +1 -0
  72. package/dist/delivery/delivery-monitor.d.ts +165 -0
  73. package/dist/delivery/delivery-monitor.d.ts.map +1 -0
  74. package/dist/delivery/delivery-monitor.js +168 -0
  75. package/dist/delivery/delivery-monitor.js.map +1 -0
  76. package/dist/delivery/delivery-ports.d.ts +141 -0
  77. package/dist/delivery/delivery-ports.d.ts.map +1 -0
  78. package/dist/delivery/delivery-ports.js +15 -0
  79. package/dist/delivery/delivery-ports.js.map +1 -0
  80. package/dist/delivery/delivery-run-control.d.ts +50 -0
  81. package/dist/delivery/delivery-run-control.d.ts.map +1 -0
  82. package/dist/delivery/delivery-run-control.js +66 -0
  83. package/dist/delivery/delivery-run-control.js.map +1 -0
  84. package/dist/delivery/delivery-run-coordinator.d.ts +218 -0
  85. package/dist/delivery/delivery-run-coordinator.d.ts.map +1 -0
  86. package/dist/delivery/delivery-run-coordinator.js +609 -0
  87. package/dist/delivery/delivery-run-coordinator.js.map +1 -0
  88. package/dist/delivery/delivery-storage-error.d.ts +13 -0
  89. package/dist/delivery/delivery-storage-error.d.ts.map +1 -0
  90. package/dist/delivery/delivery-storage-error.js +30 -0
  91. package/dist/delivery/delivery-storage-error.js.map +1 -0
  92. package/dist/delivery/delivery-supervisor.d.ts +175 -0
  93. package/dist/delivery/delivery-supervisor.d.ts.map +1 -0
  94. package/dist/delivery/delivery-supervisor.js +469 -0
  95. package/dist/delivery/delivery-supervisor.js.map +1 -0
  96. package/dist/delivery/delivery-worker.d.ts +180 -0
  97. package/dist/delivery/delivery-worker.d.ts.map +1 -0
  98. package/dist/delivery/delivery-worker.js +232 -0
  99. package/dist/delivery/delivery-worker.js.map +1 -0
  100. package/dist/delivery/delivery.d.ts +238 -0
  101. package/dist/delivery/delivery.d.ts.map +1 -0
  102. package/dist/delivery/delivery.js +400 -0
  103. package/dist/delivery/delivery.js.map +1 -0
  104. package/dist/delivery/inbox-records.d.ts +19 -0
  105. package/dist/delivery/inbox-records.d.ts.map +1 -0
  106. package/dist/delivery/inbox-records.js +291 -0
  107. package/dist/delivery/inbox-records.js.map +1 -0
  108. package/dist/delivery/inbox-storage.d.ts +81 -0
  109. package/dist/delivery/inbox-storage.d.ts.map +1 -0
  110. package/dist/delivery/inbox-storage.js +353 -0
  111. package/dist/delivery/inbox-storage.js.map +1 -0
  112. package/dist/delivery/inbox.d.ts +263 -0
  113. package/dist/delivery/inbox.d.ts.map +1 -0
  114. package/dist/delivery/inbox.js +172 -0
  115. package/dist/delivery/inbox.js.map +1 -0
  116. package/dist/delivery/parked-delivery-obligations.d.ts +182 -0
  117. package/dist/delivery/parked-delivery-obligations.d.ts.map +1 -0
  118. package/dist/delivery/parked-delivery-obligations.js +390 -0
  119. package/dist/delivery/parked-delivery-obligations.js.map +1 -0
  120. package/dist/delivery/shard-index.d.ts +41 -0
  121. package/dist/delivery/shard-index.d.ts.map +1 -0
  122. package/dist/delivery/shard-index.js +67 -0
  123. package/dist/delivery/shard-index.js.map +1 -0
  124. package/dist/delivery/sharded-work-registry.d.ts +114 -0
  125. package/dist/delivery/sharded-work-registry.d.ts.map +1 -0
  126. package/dist/delivery/sharded-work-registry.js +360 -0
  127. package/dist/delivery/sharded-work-registry.js.map +1 -0
  128. package/dist/entity/entity-metadata.d.ts +173 -0
  129. package/dist/entity/entity-metadata.d.ts.map +1 -0
  130. package/dist/entity/entity-metadata.js +187 -0
  131. package/dist/entity/entity-metadata.js.map +1 -0
  132. package/dist/entity/entity-storage-descriptor.d.ts +64 -0
  133. package/dist/entity/entity-storage-descriptor.d.ts.map +1 -0
  134. package/dist/entity/entity-storage-descriptor.js +227 -0
  135. package/dist/entity/entity-storage-descriptor.js.map +1 -0
  136. package/dist/entity/entity-transaction.d.ts +372 -0
  137. package/dist/entity/entity-transaction.d.ts.map +1 -0
  138. package/dist/entity/entity-transaction.js +413 -0
  139. package/dist/entity/entity-transaction.js.map +1 -0
  140. package/dist/entity/entity-transition-validation.d.ts +47 -0
  141. package/dist/entity/entity-transition-validation.d.ts.map +1 -0
  142. package/dist/entity/entity-transition-validation.js +327 -0
  143. package/dist/entity/entity-transition-validation.js.map +1 -0
  144. package/dist/entity/entity.d.ts +499 -0
  145. package/dist/entity/entity.d.ts.map +1 -0
  146. package/dist/entity/entity.js +829 -0
  147. package/dist/entity/entity.js.map +1 -0
  148. package/dist/entity/implicit-required-id.d.ts +15 -0
  149. package/dist/entity/implicit-required-id.d.ts.map +1 -0
  150. package/dist/entity/implicit-required-id.js +123 -0
  151. package/dist/entity/implicit-required-id.js.map +1 -0
  152. package/dist/entity/spec-scanner.d.ts +14 -0
  153. package/dist/entity/spec-scanner.d.ts.map +1 -0
  154. package/dist/entity/spec-scanner.js +37 -0
  155. package/dist/entity/spec-scanner.js.map +1 -0
  156. package/dist/handler/build-time-handler-analyzer.d.ts +150 -0
  157. package/dist/handler/build-time-handler-analyzer.d.ts.map +1 -0
  158. package/dist/handler/build-time-handler-analyzer.js +1101 -0
  159. package/dist/handler/build-time-handler-analyzer.js.map +1 -0
  160. package/dist/handler/command-registration-readiness.d.ts +99 -0
  161. package/dist/handler/command-registration-readiness.d.ts.map +1 -0
  162. package/dist/handler/command-registration-readiness.js +118 -0
  163. package/dist/handler/command-registration-readiness.js.map +1 -0
  164. package/dist/handler/event-handler-filter.d.ts +43 -0
  165. package/dist/handler/event-handler-filter.d.ts.map +1 -0
  166. package/dist/handler/event-handler-filter.js +128 -0
  167. package/dist/handler/event-handler-filter.js.map +1 -0
  168. package/dist/handler/event-registration-readiness.d.ts +196 -0
  169. package/dist/handler/event-registration-readiness.d.ts.map +1 -0
  170. package/dist/handler/event-registration-readiness.js +187 -0
  171. package/dist/handler/event-registration-readiness.js.map +1 -0
  172. package/dist/handler/external.d.ts +10 -0
  173. package/dist/handler/external.d.ts.map +1 -0
  174. package/dist/handler/external.js +15 -0
  175. package/dist/handler/external.js.map +1 -0
  176. package/dist/handler/generated-handler-registry.d.ts +154 -0
  177. package/dist/handler/generated-handler-registry.d.ts.map +1 -0
  178. package/dist/handler/generated-handler-registry.js +223 -0
  179. package/dist/handler/generated-handler-registry.js.map +1 -0
  180. package/dist/handler/generated-registry-discovery.d.ts +94 -0
  181. package/dist/handler/generated-registry-discovery.d.ts.map +1 -0
  182. package/dist/handler/generated-registry-discovery.js +228 -0
  183. package/dist/handler/generated-registry-discovery.js.map +1 -0
  184. package/dist/handler/generated-registry-writer.d.ts +58 -0
  185. package/dist/handler/generated-registry-writer.d.ts.map +1 -0
  186. package/dist/handler/generated-registry-writer.js +458 -0
  187. package/dist/handler/generated-registry-writer.js.map +1 -0
  188. package/dist/handler/handler-codegen.d.ts +48 -0
  189. package/dist/handler/handler-codegen.d.ts.map +1 -0
  190. package/dist/handler/handler-codegen.js +214 -0
  191. package/dist/handler/handler-codegen.js.map +1 -0
  192. package/dist/handler/handler-decorators.d.ts +134 -0
  193. package/dist/handler/handler-decorators.d.ts.map +1 -0
  194. package/dist/handler/handler-decorators.js +239 -0
  195. package/dist/handler/handler-decorators.js.map +1 -0
  196. package/dist/handler/handler-metadata.d.ts +510 -0
  197. package/dist/handler/handler-metadata.d.ts.map +1 -0
  198. package/dist/handler/handler-metadata.js +391 -0
  199. package/dist/handler/handler-metadata.js.map +1 -0
  200. package/dist/handler/registration-readiness-metadata.d.ts +68 -0
  201. package/dist/handler/registration-readiness-metadata.d.ts.map +1 -0
  202. package/dist/handler/registration-readiness-metadata.js +170 -0
  203. package/dist/handler/registration-readiness-metadata.js.map +1 -0
  204. package/dist/handler/rejection-source.d.ts +11 -0
  205. package/dist/handler/rejection-source.d.ts.map +1 -0
  206. package/dist/handler/rejection-source.js +25 -0
  207. package/dist/handler/rejection-source.js.map +1 -0
  208. package/dist/index.d.ts +46 -0
  209. package/dist/index.d.ts.map +1 -0
  210. package/dist/index.js +54 -0
  211. package/dist/index.js.map +1 -0
  212. package/dist/integration/external-messages.d.ts +49 -0
  213. package/dist/integration/external-messages.d.ts.map +1 -0
  214. package/dist/integration/external-messages.js +112 -0
  215. package/dist/integration/external-messages.js.map +1 -0
  216. package/dist/integration/integration-broker.d.ts +74 -0
  217. package/dist/integration/integration-broker.d.ts.map +1 -0
  218. package/dist/integration/integration-broker.js +444 -0
  219. package/dist/integration/integration-broker.js.map +1 -0
  220. package/dist/integration/third-party-context.d.ts +56 -0
  221. package/dist/integration/third-party-context.d.ts.map +1 -0
  222. package/dist/integration/third-party-context.js +130 -0
  223. package/dist/integration/third-party-context.js.map +1 -0
  224. package/dist/repository/command-errors.d.ts +25 -0
  225. package/dist/repository/command-errors.d.ts.map +1 -0
  226. package/dist/repository/command-errors.js +43 -0
  227. package/dist/repository/command-errors.js.map +1 -0
  228. package/dist/repository/command-routing.d.ts +72 -0
  229. package/dist/repository/command-routing.d.ts.map +1 -0
  230. package/dist/repository/command-routing.js +98 -0
  231. package/dist/repository/command-routing.js.map +1 -0
  232. package/dist/repository/commit-fence.d.ts +22 -0
  233. package/dist/repository/commit-fence.d.ts.map +1 -0
  234. package/dist/repository/commit-fence.js +37 -0
  235. package/dist/repository/commit-fence.js.map +1 -0
  236. package/dist/repository/event-routing.d.ts +71 -0
  237. package/dist/repository/event-routing.d.ts.map +1 -0
  238. package/dist/repository/event-routing.js +96 -0
  239. package/dist/repository/event-routing.js.map +1 -0
  240. package/dist/repository/primitive-id.d.ts +86 -0
  241. package/dist/repository/primitive-id.d.ts.map +1 -0
  242. package/dist/repository/primitive-id.js +110 -0
  243. package/dist/repository/primitive-id.js.map +1 -0
  244. package/dist/repository/repository.d.ts +670 -0
  245. package/dist/repository/repository.d.ts.map +1 -0
  246. package/dist/repository/repository.js +3298 -0
  247. package/dist/repository/repository.js.map +1 -0
  248. package/dist/repository/routing-declarations.d.ts +75 -0
  249. package/dist/repository/routing-declarations.d.ts.map +1 -0
  250. package/dist/repository/routing-declarations.js +101 -0
  251. package/dist/repository/routing-declarations.js.map +1 -0
  252. package/dist/repository/state-update-routing.d.ts +66 -0
  253. package/dist/repository/state-update-routing.d.ts.map +1 -0
  254. package/dist/repository/state-update-routing.js +91 -0
  255. package/dist/repository/state-update-routing.js.map +1 -0
  256. package/dist/runtime/runtime.d.ts +156 -0
  257. package/dist/runtime/runtime.d.ts.map +1 -0
  258. package/dist/runtime/runtime.js +215 -0
  259. package/dist/runtime/runtime.js.map +1 -0
  260. package/dist/runtime/signal-intake.d.ts +84 -0
  261. package/dist/runtime/signal-intake.d.ts.map +1 -0
  262. package/dist/runtime/signal-intake.js +94 -0
  263. package/dist/runtime/signal-intake.js.map +1 -0
  264. package/dist/runtime/signal-metadata.d.ts +242 -0
  265. package/dist/runtime/signal-metadata.d.ts.map +1 -0
  266. package/dist/runtime/signal-metadata.js +368 -0
  267. package/dist/runtime/signal-metadata.js.map +1 -0
  268. package/dist/server/browser-server.d.ts +49 -0
  269. package/dist/server/browser-server.d.ts.map +1 -0
  270. package/dist/server/browser-server.js +633 -0
  271. package/dist/server/browser-server.js.map +1 -0
  272. package/dist/server/durable-subscription-bindings.d.ts +122 -0
  273. package/dist/server/durable-subscription-bindings.d.ts.map +1 -0
  274. package/dist/server/durable-subscription-bindings.js +524 -0
  275. package/dist/server/durable-subscription-bindings.js.map +1 -0
  276. package/dist/server/environment-attachment.d.ts +356 -0
  277. package/dist/server/environment-attachment.d.ts.map +1 -0
  278. package/dist/server/environment-attachment.js +2061 -0
  279. package/dist/server/environment-attachment.js.map +1 -0
  280. package/dist/server/environment-delivery-records.d.ts +77 -0
  281. package/dist/server/environment-delivery-records.d.ts.map +1 -0
  282. package/dist/server/environment-delivery-records.js +282 -0
  283. package/dist/server/environment-delivery-records.js.map +1 -0
  284. package/dist/server/environment-delivery-worker.d.ts +161 -0
  285. package/dist/server/environment-delivery-worker.d.ts.map +1 -0
  286. package/dist/server/environment-delivery-worker.js +664 -0
  287. package/dist/server/environment-delivery-worker.js.map +1 -0
  288. package/dist/server/environment.d.ts +43 -0
  289. package/dist/server/environment.d.ts.map +1 -0
  290. package/dist/server/environment.js +90 -0
  291. package/dist/server/environment.js.map +1 -0
  292. package/dist/server/managed-child-subscription.d.ts +11 -0
  293. package/dist/server/managed-child-subscription.d.ts.map +1 -0
  294. package/dist/server/managed-child-subscription.js +44 -0
  295. package/dist/server/managed-child-subscription.js.map +1 -0
  296. package/dist/server/managed-server-application.d.ts +324 -0
  297. package/dist/server/managed-server-application.d.ts.map +1 -0
  298. package/dist/server/managed-server-application.js +937 -0
  299. package/dist/server/managed-server-application.js.map +1 -0
  300. package/dist/server/node-coordinator.d.ts +191 -0
  301. package/dist/server/node-coordinator.d.ts.map +1 -0
  302. package/dist/server/node-coordinator.js +552 -0
  303. package/dist/server/node-coordinator.js.map +1 -0
  304. package/dist/server/process-server-coordinator.d.ts +15 -0
  305. package/dist/server/process-server-coordinator.d.ts.map +1 -0
  306. package/dist/server/process-server-coordinator.js +112 -0
  307. package/dist/server/process-server-coordinator.js.map +1 -0
  308. package/dist/server/reserved-spine-rpc-paths.json +8 -0
  309. package/dist/server/retryable-close.d.ts +28 -0
  310. package/dist/server/retryable-close.d.ts.map +1 -0
  311. package/dist/server/retryable-close.js +129 -0
  312. package/dist/server/retryable-close.js.map +1 -0
  313. package/dist/server/server-environment.d.ts +180 -0
  314. package/dist/server/server-environment.d.ts.map +1 -0
  315. package/dist/server/server-environment.js +418 -0
  316. package/dist/server/server-environment.js.map +1 -0
  317. package/dist/server/server-log.d.ts +18 -0
  318. package/dist/server/server-log.d.ts.map +1 -0
  319. package/dist/server/server-log.js +96 -0
  320. package/dist/server/server-log.js.map +1 -0
  321. package/dist/server/server.d.ts +389 -0
  322. package/dist/server/server.d.ts.map +1 -0
  323. package/dist/server/server.js +752 -0
  324. package/dist/server/server.js.map +1 -0
  325. package/dist/services/spine-services.d.ts +88 -0
  326. package/dist/services/spine-services.d.ts.map +1 -0
  327. package/dist/services/spine-services.js +1586 -0
  328. package/dist/services/spine-services.js.map +1 -0
  329. package/dist/stand/stand.d.ts +294 -0
  330. package/dist/stand/stand.d.ts.map +1 -0
  331. package/dist/stand/stand.js +680 -0
  332. package/dist/stand/stand.js.map +1 -0
  333. package/dist/stand/subscription-observer.d.ts +53 -0
  334. package/dist/stand/subscription-observer.d.ts.map +1 -0
  335. package/dist/stand/subscription-observer.js +444 -0
  336. package/dist/stand/subscription-observer.js.map +1 -0
  337. package/dist/stand/subscription-records.d.ts +12 -0
  338. package/dist/stand/subscription-records.d.ts.map +1 -0
  339. package/dist/stand/subscription-records.js +99 -0
  340. package/dist/stand/subscription-records.js.map +1 -0
  341. package/dist/stand/subscription-registry.d.ts +285 -0
  342. package/dist/stand/subscription-registry.d.ts.map +1 -0
  343. package/dist/stand/subscription-registry.js +403 -0
  344. package/dist/stand/subscription-registry.js.map +1 -0
  345. package/dist/stand/subscription-runtime.d.ts +102 -0
  346. package/dist/stand/subscription-runtime.d.ts.map +1 -0
  347. package/dist/stand/subscription-runtime.js +380 -0
  348. package/dist/stand/subscription-runtime.js.map +1 -0
  349. package/dist/testing/index.d.ts +14 -0
  350. package/dist/testing/index.d.ts.map +1 -0
  351. package/dist/testing/index.js +34 -0
  352. package/dist/testing/index.js.map +1 -0
  353. package/dist/tsconfig.tsbuildinfo +1 -0
  354. package/package.json +65 -0
@@ -0,0 +1,413 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ import { clone, create, fromBinary, toBinary } from "@bufbuild/protobuf";
15
+ import { ConstraintViolationSchema } from "@spine-event-engine/proto";
16
+ import { validateEntityStateTransition, } from "./entity-transition-validation.js";
17
+ const noConstraintViolations = Object.freeze([]);
18
+ /**
19
+ * Error thrown when transaction methods are called after commit or rollback.
20
+ */
21
+ export class EntityTransactionStateError extends Error {
22
+ // prettier-ignore
23
+ /**
24
+ * Transaction status that rejected the operation.
25
+ */
26
+ status;
27
+ /**
28
+ * Operation rejected by the transaction status.
29
+ */
30
+ operation;
31
+ /**
32
+ * Creates a deterministic closed-transaction error.
33
+ *
34
+ * @param status Status that made the operation unavailable.
35
+ * @param operation Operation that was rejected.
36
+ */
37
+ constructor(status, operation) {
38
+ super(`Cannot ${operation} an entity transaction with status "${status}".`);
39
+ this.name = "EntityTransactionStateError";
40
+ this.status = status;
41
+ this.operation = operation;
42
+ Object.setPrototypeOf(this, new.target.prototype);
43
+ }
44
+ }
45
+ /**
46
+ * Error thrown when active-only state mutation is attempted for an archived or
47
+ * deleted draft.
48
+ *
49
+ * The error exposes only the deterministic draft lifecycle reason. It does not
50
+ * include entity state payloads, IDs, or previous/draft values.
51
+ */
52
+ export class DraftStateError extends Error {
53
+ // prettier-ignore
54
+ /**
55
+ * Draft lifecycle reason that rejected active-only mutation.
56
+ */
57
+ reason;
58
+ /**
59
+ * Creates a deterministic draft lifecycle guard error.
60
+ *
61
+ * @param reason Draft lifecycle reason that prevented mutation.
62
+ */
63
+ constructor(reason) {
64
+ super(`Cannot mutate active entity state while the draft is ${reason}.`);
65
+ this.name = "DraftStateError";
66
+ this.reason = reason;
67
+ Object.setPrototypeOf(this, new.target.prototype);
68
+ }
69
+ }
70
+ /**
71
+ * Framework-owned buffered transaction over one entity state draft.
72
+ *
73
+ * The transaction owns only in-memory draft/result data. It does not invoke
74
+ * handlers, write repositories, apply snapshots, dispatch messages, start
75
+ * buses, or participate in async-local/global transaction state.
76
+ */
77
+ export class EntityTransaction {
78
+ #schema;
79
+ #previous;
80
+ #draft;
81
+ #status = "active";
82
+ #version;
83
+ #lifecycle;
84
+ /**
85
+ * Creates a transaction over previous state and a buffered draft.
86
+ *
87
+ * @param options State, version, and lifecycle inputs for the transaction.
88
+ */
89
+ constructor(options) {
90
+ this.#schema = options.schema;
91
+ this.#previous =
92
+ options.previous === undefined
93
+ ? undefined
94
+ : TransactionDrafts.clone(options.schema, options.previous);
95
+ this.#draft = TransactionDrafts.clone(options.schema, options.draft ?? options.previous ?? create(options.schema));
96
+ this.#version = {
97
+ previous: options.version.previous,
98
+ draft: options.version.draft,
99
+ };
100
+ this.#lifecycle = {
101
+ archived: options.lifecycle?.archived ?? false,
102
+ deleted: options.lifecycle?.deleted ?? false,
103
+ };
104
+ }
105
+ /**
106
+ * Gets the current lifecycle status of the transaction.
107
+ *
108
+ * @returns The active, committed, or rolled-back status.
109
+ */
110
+ get status() {
111
+ return this.#status;
112
+ }
113
+ /**
114
+ * Gets the previous committed state snapshot, absent for creation transactions.
115
+ *
116
+ * @returns A cloned prior state, if one exists.
117
+ */
118
+ get previous() {
119
+ return this.#previous === undefined
120
+ ? undefined
121
+ : TransactionDrafts.clone(this.#schema, this.#previous);
122
+ }
123
+ /**
124
+ * Gets the current draft state snapshot.
125
+ *
126
+ * @returns A cloned draft state.
127
+ */
128
+ get currentDraft() {
129
+ return TransactionDrafts.clone(this.#schema, this.#draft);
130
+ }
131
+ /**
132
+ * Gets explicit version metadata carried by the current draft.
133
+ *
134
+ * @returns The previous and draft version metadata.
135
+ */
136
+ get version() {
137
+ return { previous: this.#version.previous, draft: this.#version.draft };
138
+ }
139
+ /**
140
+ * Gets lifecycle flags carried by the current draft.
141
+ *
142
+ * @returns The current archived and deleted flags.
143
+ */
144
+ get lifecycle() {
145
+ return { archived: this.#lifecycle.archived, deleted: this.#lifecycle.deleted };
146
+ }
147
+ /**
148
+ * Ensures an active, non-archived, non-deleted draft for entity state mutation.
149
+ *
150
+ * This guard is intentionally local to the buffered transaction draft. It
151
+ * does not query repositories, filter read-side results, or inspect storage.
152
+ *
153
+ * @throws {@link EntityTransactionStateError} when the transaction was already
154
+ * committed or rolled back.
155
+ * @throws {@link DraftStateError} when the active draft is
156
+ * archived or deleted.
157
+ */
158
+ requireActive() {
159
+ this.#requireActiveStatus("requireActive");
160
+ this.#requireDraftAllowsStateMutation();
161
+ }
162
+ /**
163
+ * Updates the buffered draft in place.
164
+ *
165
+ * The mutator receives the live draft. The previous committed state is never
166
+ * exposed as mutable transaction storage. Mutators must complete
167
+ * synchronously; a returned thenable is rejected and cannot later mutate the
168
+ * live draft. If a synchronous mutator throws after changing the draft, its
169
+ * partial changes remain visible.
170
+ *
171
+ * @param mutator Synchronous operation that changes the live draft.
172
+ * @returns A cloned snapshot of the changed draft.
173
+ */
174
+ update(mutator) {
175
+ this.#requireActiveForStateMutation("update");
176
+ const before = TransactionDrafts.clone(this.#schema, this.#draft);
177
+ try {
178
+ TransactionDrafts.invoke(mutator, this.#draft);
179
+ }
180
+ catch (error) {
181
+ if (error instanceof AsyncMutatorError) {
182
+ this.#draft = before;
183
+ }
184
+ throw error;
185
+ }
186
+ return this.currentDraft;
187
+ }
188
+ /**
189
+ * Validates and applies a scratch draft only when it is valid.
190
+ *
191
+ * Validation failures are returned as an immutable violations list. Errors
192
+ * thrown by the mutator propagate and leave the live draft unchanged.
193
+ * Mutators must complete synchronously; returned thenables are rejected.
194
+ *
195
+ * @param mutator Synchronous operation that changes a scratch draft.
196
+ * @returns An empty frozen list when applied, or validation violations.
197
+ */
198
+ tryUpdate(mutator) {
199
+ this.#requireActiveForStateMutation("tryUpdate");
200
+ const candidate = TransactionDrafts.clone(this.#schema, this.#draft);
201
+ TransactionDrafts.invoke(mutator, candidate);
202
+ const validation = validateEntityStateTransition({
203
+ schema: this.#schema,
204
+ previous: this.#previous,
205
+ next: candidate,
206
+ });
207
+ if (!validation.valid) {
208
+ return Object.freeze(validation.violations.map((violation) => TransactionDrafts.freeze(clone(ConstraintViolationSchema, violation))));
209
+ }
210
+ this.#draft = TransactionDrafts.clone(this.#schema, candidate);
211
+ return noConstraintViolations;
212
+ }
213
+ /**
214
+ * Updates the buffered draft to archived.
215
+ *
216
+ * The helper changes only in-memory draft lifecycle metadata. It does not
217
+ * persist lifecycle state, emit lifecycle events, or filter queries.
218
+ *
219
+ * @returns The changed lifecycle flags.
220
+ */
221
+ archive() {
222
+ this.#replaceLifecycle("archive", { archived: true });
223
+ return this.lifecycle;
224
+ }
225
+ /**
226
+ * Updates the buffered draft to not archived.
227
+ *
228
+ * The helper changes only in-memory draft lifecycle metadata. It does not
229
+ * persist lifecycle state, emit lifecycle events, or filter queries.
230
+ *
231
+ * @returns The changed lifecycle flags.
232
+ */
233
+ unarchive() {
234
+ this.#replaceLifecycle("unarchive", { archived: false });
235
+ return this.lifecycle;
236
+ }
237
+ /**
238
+ * Updates the buffered draft to deleted.
239
+ *
240
+ * The helper changes only in-memory draft lifecycle metadata. It does not
241
+ * persist lifecycle state, emit lifecycle events, or filter queries.
242
+ *
243
+ * @returns The changed lifecycle flags.
244
+ */
245
+ markDeleted() {
246
+ this.#replaceLifecycle("markDeleted", { deleted: true });
247
+ return this.lifecycle;
248
+ }
249
+ /**
250
+ * Updates the buffered draft to not deleted.
251
+ *
252
+ * The helper changes only in-memory draft lifecycle metadata. It does not
253
+ * persist lifecycle state, emit lifecycle events, or filter queries.
254
+ *
255
+ * @returns The changed lifecycle flags.
256
+ */
257
+ restore() {
258
+ this.#replaceLifecycle("restore", { deleted: false });
259
+ return this.lifecycle;
260
+ }
261
+ /**
262
+ * Updates caller-owned explicit draft version metadata.
263
+ *
264
+ * This helper does not compute version increments, timestamps, producer
265
+ * metadata, or event versions. It preserves the transaction's `Version`
266
+ * generic and returns a snapshot of the previous/draft metadata pair.
267
+ *
268
+ * @param draft Replacement caller-owned draft version metadata.
269
+ * @returns The updated previous and draft metadata.
270
+ */
271
+ updateVersionMetadata(draft) {
272
+ this.#requireActiveStatus("updateVersionMetadata");
273
+ this.#version = {
274
+ previous: this.#version.previous,
275
+ draft,
276
+ };
277
+ return this.version;
278
+ }
279
+ /**
280
+ * Validates and commits the current draft at this transaction boundary.
281
+ *
282
+ * Ordinary entity state validation failures are returned as rejected commit
283
+ * results with validator violations. They do not throw and do not mark the
284
+ * transaction committed.
285
+ *
286
+ * @returns An accepted commit or a validation-rejected result.
287
+ */
288
+ commit() {
289
+ this.#requireActiveStatus("commit");
290
+ const previous = this.previous;
291
+ const next = this.currentDraft;
292
+ const validation = validateEntityStateTransition({
293
+ schema: this.#schema,
294
+ previous,
295
+ next,
296
+ });
297
+ if (!validation.valid) {
298
+ return {
299
+ status: "rejected",
300
+ previous,
301
+ next,
302
+ version: this.version,
303
+ lifecycle: this.lifecycle,
304
+ validation,
305
+ };
306
+ }
307
+ this.#status = "committed";
308
+ return {
309
+ status: "accepted",
310
+ previous,
311
+ next,
312
+ version: {
313
+ previous: this.#version.previous,
314
+ committed: this.#version.draft,
315
+ },
316
+ lifecycle: this.lifecycle,
317
+ validation,
318
+ };
319
+ }
320
+ /**
321
+ * Returns unaccepted draft evidence and closes the transaction.
322
+ *
323
+ * Rollback does not validate or accept state. It only closes this in-memory
324
+ * transaction so future updates or commits are rejected deterministically.
325
+ *
326
+ * @returns The discarded draft and prior-state evidence.
327
+ */
328
+ rollback() {
329
+ this.#requireActiveStatus("rollback");
330
+ this.#status = "rolled-back";
331
+ return {
332
+ status: "rolled-back",
333
+ previous: this.previous,
334
+ draft: this.currentDraft,
335
+ version: this.version,
336
+ lifecycle: this.lifecycle,
337
+ };
338
+ }
339
+ #replaceLifecycle(operation, updates) {
340
+ this.#requireActiveStatus(operation);
341
+ this.#lifecycle = {
342
+ archived: updates.archived ?? this.#lifecycle.archived,
343
+ deleted: updates.deleted ?? this.#lifecycle.deleted,
344
+ };
345
+ }
346
+ #requireActiveForStateMutation(operation) {
347
+ this.#requireActiveStatus(operation);
348
+ this.#requireDraftAllowsStateMutation();
349
+ }
350
+ #requireActiveStatus(operation) {
351
+ if (this.#status !== "active") {
352
+ throw new EntityTransactionStateError(this.#status, operation);
353
+ }
354
+ }
355
+ #requireDraftAllowsStateMutation() {
356
+ if (this.#lifecycle.archived) {
357
+ throw new DraftStateError("archived");
358
+ }
359
+ if (this.#lifecycle.deleted) {
360
+ throw new DraftStateError("deleted");
361
+ }
362
+ }
363
+ }
364
+ class AsyncMutatorError extends TypeError {
365
+ constructor() {
366
+ super("Entity state mutators must be synchronous.");
367
+ this.name = "AsyncMutatorError";
368
+ Object.setPrototypeOf(this, new.target.prototype);
369
+ }
370
+ }
371
+ /**
372
+ * Clones transaction state, applies synchronous mutation, and captures immutable validation snapshots.
373
+ */
374
+ const TransactionDrafts = Object.freeze({
375
+ clone(schema, state) {
376
+ return fromBinary(schema, toBinary(schema, state, { writeUnknownFields: false }));
377
+ },
378
+ invoke(mutator, draft) {
379
+ const result = mutator(draft);
380
+ if (!this.isThenable(result)) {
381
+ return;
382
+ }
383
+ void Promise.resolve(result).catch(() => undefined);
384
+ throw new AsyncMutatorError();
385
+ },
386
+ isThenable(value) {
387
+ return (((typeof value === "object" && value !== null) || typeof value === "function") &&
388
+ typeof value.then === "function");
389
+ },
390
+ freeze(value, seen = new WeakSet()) {
391
+ if ((typeof value !== "object" && typeof value !== "function") || value === null) {
392
+ return value;
393
+ }
394
+ if (seen.has(value)) {
395
+ return value;
396
+ }
397
+ seen.add(value);
398
+ for (const child of Object.values(value)) {
399
+ this.freeze(child, seen);
400
+ }
401
+ return Object.freeze(value);
402
+ },
403
+ });
404
+ /**
405
+ * Creates a transaction with inferred schema state typing.
406
+ *
407
+ * @param options State, version, and lifecycle inputs for the transaction.
408
+ * @returns A new isolated entity transaction.
409
+ */
410
+ export function createEntityTransaction(options) {
411
+ return new EntityTransaction(options);
412
+ }
413
+ //# sourceMappingURL=entity-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-transaction.js","sourceRoot":"","sources":["../../src/entity/entity-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { type MessageShape } from "@bufbuild/protobuf";
2
+ import { type TransitionValidationResult } from "@spine-event-engine/core";
3
+ import { type DescriptorMessageSchema } from "./entity-metadata.js";
4
+ /**
5
+ * Request for built-in server entity state transition validation.
6
+ *
7
+ * The built-in rules derive Spine `(set_once)` semantics from descriptor-backed
8
+ * entity metadata. Creation transitions with `previous === undefined` may
9
+ * establish supported set-once values; unsupported repeated, map-valued, and
10
+ * explicit optional set-once declarations fail closed even on creation.
11
+ */
12
+ export interface StateTransitionRequest<Schema extends DescriptorMessageSchema = DescriptorMessageSchema> {
13
+ /**
14
+ * Generated Protobuf-ES schema describing the entity state.
15
+ */
16
+ readonly schema: Schema;
17
+ /**
18
+ * Previous committed entity state, absent when creating the entity state.
19
+ */
20
+ readonly previous: MessageShape<Schema> | undefined;
21
+ /**
22
+ * Proposed next entity state to validate before commit.
23
+ */
24
+ readonly next: MessageShape<Schema>;
25
+ }
26
+ /**
27
+ * Structured, sanitized result returned by {@link validateEntityStateTransition}.
28
+ */
29
+ export type StateTransitionResult = TransitionValidationResult;
30
+ /**
31
+ * Returns the built-in validation result for a proposed entity state transition.
32
+ *
33
+ * The validator first applies ordinary message validation, then enforces an
34
+ * implicit required declaration-first Entity ID when no explicit `(required)`
35
+ * option is present, and finally enforces descriptor-derived `(set_once)`
36
+ * fields. It delegates result shaping to `@spine-event-engine/core` and does
37
+ * not instantiate entities, dispatch handlers, touch repositories, or perform
38
+ * runtime I/O. Repeated, map-valued, and explicit optional `(set_once)` fields
39
+ * are rejected with field-specific violations.
40
+ * Non-entity schemas still fail through `DescriptorMetadataError` from
41
+ * `describeEntityMetadata()`.
42
+ *
43
+ * @param request Schema and previous/next state values to validate.
44
+ * @returns Sanitized validation result with any message or transition violations.
45
+ */
46
+ export declare function validateEntityStateTransition<Schema extends DescriptorMessageSchema>(request: StateTransitionRequest<Schema>): StateTransitionResult;
47
+ //# sourceMappingURL=entity-transition-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-transition-validation.d.ts","sourceRoot":"","sources":["../../src/entity/entity-transition-validation.ts"],"names":[],"mappings":"AAcA,OAAO,EAA4C,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjG,OAAO,EACL,KAAK,0BAA0B,EAGhC,MAAM,0BAA0B,CAAC;AAQlC,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB,CACrC,MAAM,SAAS,uBAAuB,GAAG,uBAAuB;IAIhE;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAO/D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,SAAS,uBAAuB,EAClF,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,GACtC,qBAAqB,CAIvB"}