@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,214 @@
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 { lstatSync, mkdirSync, opendirSync, renameSync, rmSync, writeFileSync } from "node:fs";
15
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
16
+ import ts from "typescript";
17
+ import { BuildHandlerAnalyzer } from "./build-time-handler-analyzer.js";
18
+ import { GeneratedRegistryWriter } from "./generated-registry-writer.js";
19
+ const maxCompilerRoots = 1000;
20
+ const maxDiscoveryEntries = 1000;
21
+ const defaultOperations = {
22
+ mkdir: (path) => {
23
+ mkdirSync(path, { recursive: true });
24
+ },
25
+ write: (path, source) => {
26
+ writeFileSync(path, source, "utf8");
27
+ },
28
+ rename: renameSync,
29
+ remove: (path) => {
30
+ rmSync(path, { force: true });
31
+ },
32
+ };
33
+ /**
34
+ * Creates and atomically replaces an application's generated handler registry.
35
+ *
36
+ * @param options Application root and generation configuration.
37
+ * @param operations Optional filesystem operations used for generation.
38
+ */
39
+ export function generateHandlerRegistry(options, operations = {}) {
40
+ const appRoot = HandlerFiles.directory(resolve(options.appRoot), "Application root");
41
+ const project = HandlerFiles.file(appRoot, join(appRoot, "tsconfig.json"), "Project");
42
+ const generatedRoot = HandlerFiles.path(appRoot, join(appRoot, "generated"), "Generated root");
43
+ const outputFile = HandlerFiles.path(generatedRoot, join(generatedRoot, "handler/generated-handler-registry.ts"), "Generated output");
44
+ const { program, sources } = HandlerFiles.program(appRoot, project);
45
+ const analysis = BuildHandlerAnalyzer.analyze(program, sources);
46
+ if (analysis.diagnostics.length > 0)
47
+ throw new Error(HandlerFiles.diagnostics(analysis.diagnostics));
48
+ const source = new GeneratedRegistryWriter().render(analysis, { outputFile });
49
+ (operations.mkdir ?? defaultOperations.mkdir)(dirname(outputFile));
50
+ HandlerFiles.write(outputFile, source, operations);
51
+ }
52
+ const HandlerFiles = Object.freeze({
53
+ program(appRoot, project) {
54
+ const config = ts.readConfigFile(project, (path) => ts.sys.readFile(path));
55
+ if (config.error !== undefined)
56
+ throw new Error(HandlerFiles.configDiagnostics([config.error]));
57
+ HandlerFiles.assertIncludes(HandlerFiles.value(config.config, "include"), appRoot);
58
+ const parsed = ts.parseJsonConfigFileContent(config.config, HandlerFiles.configHost(appRoot, dirname(project)), dirname(project), undefined, project);
59
+ if (parsed.errors.length > 0)
60
+ throw new Error(HandlerFiles.configDiagnostics(parsed.errors));
61
+ if ((parsed.projectReferences?.length ?? 0) > 0)
62
+ throw new Error("Project references are not supported for handler generation.");
63
+ if (parsed.fileNames.length > maxCompilerRoots)
64
+ throw new Error(`Handler source count exceeds ${String(maxCompilerRoots)}.`);
65
+ const roots = parsed.fileNames.map((file) => HandlerFiles.typeScriptFile(appRoot, file));
66
+ const program = ts.createProgram({
67
+ rootNames: roots,
68
+ options: parsed.options,
69
+ ...(parsed.projectReferences === undefined
70
+ ? {}
71
+ : { projectReferences: parsed.projectReferences }),
72
+ });
73
+ const sources = roots
74
+ .map((root) => program.getSourceFile(root))
75
+ .filter(HandlerFiles.sourceFile);
76
+ return { program, sources };
77
+ },
78
+ assertIncludes(value, appRoot) {
79
+ if (!Array.isArray(value))
80
+ return;
81
+ for (const include of value) {
82
+ if (typeof include !== "string")
83
+ continue;
84
+ if (include.split(/[\\/]/u).includes(".."))
85
+ throw new Error(`Handler source must stay within ${appRoot}.`);
86
+ }
87
+ },
88
+ value(value, key) {
89
+ if (typeof value !== "object" || value === null)
90
+ return undefined;
91
+ return value[key];
92
+ },
93
+ configHost(appRoot, currentDirectory) {
94
+ let entries = 0;
95
+ // TypeScript 6.0.3 exports matchFiles at runtime but omits it from its declarations.
96
+ const matchFiles = ts.matchFiles;
97
+ return {
98
+ useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
99
+ readDirectory: (path, extensions, excludes, includes, depth) => matchFiles(path, extensions, excludes, includes, ts.sys.useCaseSensitiveFileNames, currentDirectory, depth, (directory) => {
100
+ const resolvedDirectory = resolve(currentDirectory, directory);
101
+ HandlerFiles.containedPath(appRoot, resolvedDirectory, "Handler discovery directory");
102
+ const files = [];
103
+ const directories = [];
104
+ const handle = opendirSync(resolvedDirectory);
105
+ try {
106
+ let entry;
107
+ while ((entry = handle.readSync()) !== null) {
108
+ entries += 1;
109
+ if (entries > maxDiscoveryEntries)
110
+ throw new Error(`Handler discovery entry count exceeds ${String(maxDiscoveryEntries)}.`);
111
+ const candidate = join(resolvedDirectory, entry.name);
112
+ if (lstatSync(candidate).isSymbolicLink())
113
+ throw new Error(`Handler discovery must not traverse symlink: ${candidate}`);
114
+ if (entry.isDirectory())
115
+ directories.push(entry.name);
116
+ else if (entry.isFile())
117
+ files.push(entry.name);
118
+ }
119
+ }
120
+ finally {
121
+ handle.closeSync();
122
+ }
123
+ return { files, directories };
124
+ }, (path) => ts.sys.realpath?.(path) ?? path),
125
+ fileExists: (path) => ts.sys.fileExists(path),
126
+ readFile: (path) => ts.sys.readFile(path),
127
+ trace: () => undefined,
128
+ directoryExists: (path) => ts.sys.directoryExists(path),
129
+ realpath: (path) => ts.sys.realpath?.(path) ?? path,
130
+ };
131
+ },
132
+ sourceFile(value) {
133
+ return value !== undefined;
134
+ },
135
+ diagnostics(diagnostics) {
136
+ return diagnostics
137
+ .map((diagnostic) => {
138
+ const location = `${diagnostic.sourceFile}:${String(diagnostic.line)}:` + String(diagnostic.column);
139
+ return `${location} ${diagnostic.code} ${diagnostic.message}`;
140
+ })
141
+ .join("\n");
142
+ },
143
+ configDiagnostics(diagnostics) {
144
+ return ts.formatDiagnosticsWithColorAndContext(diagnostics, {
145
+ getCanonicalFileName: (fileName) => fileName,
146
+ getCurrentDirectory: () => process.cwd(),
147
+ getNewLine: () => "\n",
148
+ });
149
+ },
150
+ file(root, value, label) {
151
+ const path = HandlerFiles.path(root, value, label);
152
+ if (!lstatSync(path).isFile())
153
+ throw new Error(`${label} must be a regular file: ${path}`);
154
+ return path;
155
+ },
156
+ typeScriptFile(root, value) {
157
+ if (!value.endsWith(".ts") || value.endsWith(".d.ts"))
158
+ throw new Error(`Handler source must be a TypeScript file: ${value}`);
159
+ return HandlerFiles.file(root, value, "Handler source");
160
+ },
161
+ directory(path, label) {
162
+ HandlerFiles.assertNoSymlinkAncestors(path, label);
163
+ if (!lstatSync(path).isDirectory())
164
+ throw new Error(`${label} must be a directory: ${path}`);
165
+ return path;
166
+ },
167
+ path(root, path, label) {
168
+ const value = relative(root, path);
169
+ if (value === "" || value.startsWith("..") || isAbsolute(value))
170
+ throw new Error(`${label} must stay within ${root}.`);
171
+ HandlerFiles.assertNoSymlinkAncestors(path, label);
172
+ return path;
173
+ },
174
+ containedPath(root, path, label) {
175
+ const value = relative(root, path);
176
+ if (value.startsWith("..") || isAbsolute(value))
177
+ throw new Error(`${label} must stay within ${root}.`);
178
+ HandlerFiles.assertNoSymlinkAncestors(path, label);
179
+ return path;
180
+ },
181
+ assertNoSymlinkAncestors(path, label) {
182
+ const parts = resolve(path).split(sep).filter(Boolean);
183
+ let current = sep;
184
+ for (const part of parts) {
185
+ current = join(current, part);
186
+ try {
187
+ if (lstatSync(current).isSymbolicLink())
188
+ throw new Error(`${label} must not use a symlink path.`);
189
+ }
190
+ catch (error) {
191
+ if (error.code !== "ENOENT")
192
+ throw error;
193
+ }
194
+ }
195
+ },
196
+ write(outputFile, source, operations) {
197
+ const fileOperations = { ...defaultOperations, ...operations };
198
+ const stage = join(dirname(outputFile), `.${basename(outputFile)}.${String(process.pid)}.${crypto.randomUUID()}.tmp`);
199
+ try {
200
+ fileOperations.write(stage, source);
201
+ fileOperations.rename(stage, outputFile);
202
+ }
203
+ catch (primary) {
204
+ try {
205
+ fileOperations.remove(stage);
206
+ }
207
+ catch (cleanup) {
208
+ throw new AggregateError([primary, cleanup], "Generated handler registry publication failed.");
209
+ }
210
+ throw primary;
211
+ }
212
+ },
213
+ });
214
+ //# sourceMappingURL=handler-codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-codegen.js","sourceRoot":"","sources":["../../src/handler/handler-codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import type { DescriptorMessageSchema } from "../entity/entity-metadata.js";
2
+ import { type EntityClass, type EntityHandlersMetadata, type EventApplicationOptions, type WhereOptions } from "./handler-metadata.js";
3
+ export type { WhereOptions } from "./handler-metadata.js";
4
+ /**
5
+ * Describes the standard TypeScript method decorator accepted by Spine handler declarations.
6
+ *
7
+ * @typeParam This - Entity instance that owns the decorated method.
8
+ * @typeParam Parameters - Parameters accepted by the decorated method.
9
+ * @typeParam Return - Result returned by the decorated method.
10
+ * @param value Decorated method implementation.
11
+ * @param context Standard TypeScript decorator context.
12
+ */
13
+ export type HandlerMethodDecorator = <This extends object, Parameters extends readonly unknown[], Return>(value: HandlerMethodValue<This, Parameters, Return>, context: ClassMethodDecoratorContext<This, HandlerMethodValue<This, Parameters, Return>>) => void;
14
+ /**
15
+ * Describes an instance method shape accepted by public handler decorators.
16
+ *
17
+ * @typeParam This - Entity instance that owns the method.
18
+ * @typeParam Parameters - Parameters accepted by the method.
19
+ * @typeParam Return - Result returned by the method.
20
+ * @param this Entity instance that receives the invocation.
21
+ * @param parameters Arguments supplied to the handler.
22
+ * @returns Handler result.
23
+ */
24
+ export type HandlerMethodValue<This extends object = object, Parameters extends readonly unknown[] = readonly unknown[], Return = unknown> = (this: This, ...parameters: Parameters) => Return;
25
+ /**
26
+ * Creates a command-assignee declaration.
27
+ *
28
+ * Bare `@Assign` is the ordinary application form. Generated handler
29
+ * registries require a command input and normal event output; a rejection is
30
+ * valid in neither role, but the handler may throw a generated rejection
31
+ * throwable. The decorator records metadata only; it does not register the
32
+ * handler, instantiate the entity, or invoke the method.
33
+ *
34
+ * @typeParam This - Entity instance that owns the method.
35
+ * @typeParam Parameters - Parameters accepted by the method.
36
+ * @typeParam Return - Result returned by the method.
37
+ * @param value Decorated method implementation or command schema.
38
+ * @param context Standard decorator context for bare usage.
39
+ */
40
+ export declare function Assign<This extends object, Parameters extends readonly unknown[], Return>(value: HandlerMethodValue<This, Parameters, Return>, context: ClassMethodDecoratorContext<This, HandlerMethodValue<This, Parameters, Return>>): void;
41
+ /**
42
+ * Creates a command-reacting declaration.
43
+ *
44
+ * Bare `@Command` is the ordinary application form. Generated registries accept
45
+ * command inputs; event-to-command handlers also accept event or rejection
46
+ * inputs. Normal outputs are commands, while rejections are thrown, not
47
+ * returned. Command reactors may fan out in `HandlerMetadataRegistry`; this
48
+ * decorator only records the declaration.
49
+ *
50
+ * @typeParam This - Entity instance that owns the method.
51
+ * @typeParam Parameters - Parameters accepted by the method.
52
+ * @typeParam Return - Result returned by the method.
53
+ * @param value Decorated method implementation or command schema.
54
+ * @param context Standard decorator context for bare usage.
55
+ */
56
+ export declare function Command<This extends object, Parameters extends readonly unknown[], Return>(value: HandlerMethodValue<This, Parameters, Return>, context: ClassMethodDecoratorContext<This, HandlerMethodValue<This, Parameters, Return>>): void;
57
+ /**
58
+ * Creates an Event/rejection or Entity-state subscriber declaration.
59
+ *
60
+ * Bare `@Subscribe` accepts generated Event/rejection or descriptor-marked
61
+ * Entity-state inputs and returns `void`. Event/rejection inputs produce
62
+ * event-subscription metadata; Entity state inputs produce state-subscription
63
+ * metadata. Subscribers are metadata-only declarations bridged by generated
64
+ * registry and runtime metadata.
65
+ *
66
+ * @typeParam This - Entity instance that owns the method.
67
+ * @typeParam Parameters - Parameters accepted by the method.
68
+ * @typeParam Return - Result returned by the method.
69
+ * @param value Decorated method implementation.
70
+ * @param context Standard decorator context for bare usage.
71
+ */
72
+ export declare function Subscribe<This extends object, Parameters extends readonly unknown[], Return>(value: HandlerMethodValue<This, Parameters, Return>, context: ClassMethodDecoratorContext<This, HandlerMethodValue<This, Parameters, Return>>): void;
73
+ /**
74
+ * Creates an event-reactor declaration.
75
+ *
76
+ * Bare `@React` accepts generated event or rejection inputs and returns normal
77
+ * events or explicit `void`; rejections are thrown, not returned. Reactors are
78
+ * collected as class-owned metadata and may fan out through the caller-owned
79
+ * handler registry.
80
+ *
81
+ * @typeParam This - Entity instance that owns the method.
82
+ * @typeParam Parameters - Parameters accepted by the method.
83
+ * @typeParam Return - Result returned by the method.
84
+ * @param value Decorated method implementation or event schema.
85
+ * @param context Standard decorator context for bare usage.
86
+ */
87
+ export declare function React<This extends object, Parameters extends readonly unknown[], Return>(value: HandlerMethodValue<This, Parameters, Return>, context: ClassMethodDecoratorContext<This, HandlerMethodValue<This, Parameters, Return>>): void;
88
+ /**
89
+ * Creates one Event field equality filter for an Event-consuming handler.
90
+ *
91
+ * Generated handler analysis validates the declaration and carries it into
92
+ * immutable repository metadata. The decorator itself does not inspect or
93
+ * invoke the handler.
94
+ *
95
+ * @param options Event source field and canonical expected value.
96
+ * @returns Decorator for a public instance handler method.
97
+ */
98
+ export declare function Where(options: WhereOptions): HandlerMethodDecorator;
99
+ /**
100
+ * Creates legacy framework event-application metadata.
101
+ *
102
+ * New application aggregates must not use `@Apply`; managed aggregates are no
103
+ * longer event-sourced and the framework owns state transactions. This
104
+ * decorator is kept only for compatibility code that still needs explicit
105
+ * schema-bearing event application metadata. The optional `allowImport` flag
106
+ * is preserved only as part of that legacy metadata shape.
107
+ *
108
+ * @param schema Event schema accepted by the decorated method.
109
+ * @param options Legacy event-application metadata options.
110
+ * @returns Decorator that records the application metadata.
111
+ */
112
+ export declare function Apply(schema: DescriptorMessageSchema, options?: EventApplicationOptions): HandlerMethodDecorator;
113
+ /**
114
+ * Builds schema-bearing decorator declarations for framework compatibility.
115
+ *
116
+ * The returned object is the same frozen `EntityHandlersMetadata` contract
117
+ * produced by `EntityHandlers.define()` and accepted by
118
+ * `HandlerMetadataRegistry`. Only own prototype methods of `entityType` are
119
+ * inspected; inherited decorated methods are intentionally not materialized by
120
+ * this class-owned adapter.
121
+ *
122
+ * Application code must not call this function and must not provide its own
123
+ * handler discovery/materialization. Generated framework registries own schema
124
+ * inference for bare decorators; this adapter only supports legacy
125
+ * schema-bearing decorator metadata.
126
+ *
127
+ * @typeParam Instance - Entity instance that owns the handlers.
128
+ * @typeParam StateSchema - Schema that describes the entity state.
129
+ * @param entityType Entity class whose own decorated methods are read.
130
+ * @param stateSchema Schema that describes the entity state.
131
+ * @returns Frozen handler metadata for the decorated methods.
132
+ */
133
+ export declare function materializeDecoratedEntityHandlers<Instance extends object, StateSchema extends DescriptorMessageSchema>(entityType: EntityClass<Instance>, stateSchema: StateSchema): EntityHandlersMetadata<Instance, StateSchema>;
134
+ //# sourceMappingURL=handler-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-decorators.d.ts","sourceRoot":"","sources":["../../src/handler/handler-decorators.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAI5B,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAiB1D;;;;;;;;GAQG;AACH,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,SAAS,MAAM,EACnB,UAAU,SAAS,SAAS,OAAO,EAAE,EACrC,MAAM,EAEN,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,KACrF,IAAI,CAAC;AAEV;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,CAC5B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,UAAU,SAAS,SAAS,OAAO,EAAE,GAAG,SAAS,OAAO,EAAE,EAC1D,MAAM,GAAG,OAAO,IACd,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAItD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,UAAU,SAAS,SAAS,OAAO,EAAE,EAAE,MAAM,EACvF,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,GACvF,IAAI,CAAC;AAgBR;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,IAAI,SAAS,MAAM,EAAE,UAAU,SAAS,SAAS,OAAO,EAAE,EAAE,MAAM,EACxF,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,GACvF,IAAI,CAAC;AAgBR;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,IAAI,SAAS,MAAM,EAAE,UAAU,SAAS,SAAS,OAAO,EAAE,EAAE,MAAM,EAC1F,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,GACvF,IAAI,CAAC;AAiBR;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,UAAU,SAAS,SAAS,OAAO,EAAE,EAAE,MAAM,EACtF,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EACnD,OAAO,EAAE,2BAA2B,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,GACvF,IAAI,CAAC;AAgBR;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,sBAAsB,CAUnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAExB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,SAAS,MAAM,EACvB,WAAW,SAAS,uBAAuB,EAE3C,UAAU,EAAE,WAAW,CAAC,QAAQ,CAAC,EACjC,WAAW,EAAE,WAAW,GACvB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CA0B/C"}
@@ -0,0 +1,239 @@
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 { EntityHandlers, } from "./handler-metadata.js";
15
+ const handlerDecoratorMetadataKey = Symbol("@spine-event-engine/server.handlerDecorators");
16
+ /**
17
+ * Creates command-assignment decorator metadata or a schema-bearing decorator.
18
+ *
19
+ * @param schemaOrValue Command schema or decorated method implementation.
20
+ * @param context Standard decorator context for bare usage.
21
+ * @returns A decorator for schema-bearing usage, or `undefined` after bare usage.
22
+ */
23
+ export function Assign(schemaOrValue, context) {
24
+ return DecoratorMetadata.decorateOrCreate("command-assignment", schemaOrValue, context);
25
+ }
26
+ /**
27
+ * Creates command-reaction decorator metadata or a schema-bearing decorator.
28
+ *
29
+ * @param schemaOrValue Command schema or decorated method implementation.
30
+ * @param context Standard decorator context for bare usage.
31
+ * @returns A decorator for schema-bearing usage, or `undefined` after bare usage.
32
+ */
33
+ export function Command(schemaOrValue, context) {
34
+ return DecoratorMetadata.decorateOrCreate("command-reaction", schemaOrValue, context);
35
+ }
36
+ /**
37
+ * Creates subscriber decorator metadata or a schema-bearing decorator.
38
+ *
39
+ * @param schemaOrValue Event, rejection, or descriptor-marked Entity state
40
+ * schema, or the decorated method implementation.
41
+ * @param context Standard decorator context for bare usage.
42
+ * @returns A decorator for schema-bearing usage, or `undefined` after bare usage.
43
+ */
44
+ export function Subscribe(schemaOrValue, context) {
45
+ return DecoratorMetadata.decorateOrCreate("event-subscription", schemaOrValue, context);
46
+ }
47
+ /**
48
+ * Creates event-reaction decorator metadata or a schema-bearing decorator.
49
+ *
50
+ * @param schemaOrValue Event schema or decorated method implementation.
51
+ * @param context Standard decorator context for bare usage.
52
+ * @returns A decorator for schema-bearing usage, or `undefined` after bare usage.
53
+ */
54
+ export function React(schemaOrValue, context) {
55
+ return DecoratorMetadata.decorateOrCreate("event-reaction", schemaOrValue, context);
56
+ }
57
+ /**
58
+ * Creates one Event field equality filter for an Event-consuming handler.
59
+ *
60
+ * Generated handler analysis validates the declaration and carries it into
61
+ * immutable repository metadata. The decorator itself does not inspect or
62
+ * invoke the handler.
63
+ *
64
+ * @param options Event source field and canonical expected value.
65
+ * @returns Decorator for a public instance handler method.
66
+ */
67
+ export function Where(options) {
68
+ const snapshot = WhereValues.snapshot(options);
69
+ return (_value, context) => {
70
+ void snapshot;
71
+ DecoratorMetadata.methodName(context);
72
+ };
73
+ }
74
+ /**
75
+ * Creates legacy framework event-application metadata.
76
+ *
77
+ * New application aggregates must not use `@Apply`; managed aggregates are no
78
+ * longer event-sourced and the framework owns state transactions. This
79
+ * decorator is kept only for compatibility code that still needs explicit
80
+ * schema-bearing event application metadata. The optional `allowImport` flag
81
+ * is preserved only as part of that legacy metadata shape.
82
+ *
83
+ * @param schema Event schema accepted by the decorated method.
84
+ * @param options Legacy event-application metadata options.
85
+ * @returns Decorator that records the application metadata.
86
+ */
87
+ export function Apply(schema, options = {}) {
88
+ return DecoratorMetadata.create("event-application", schema, options);
89
+ }
90
+ /**
91
+ * Builds schema-bearing decorator declarations for framework compatibility.
92
+ *
93
+ * The returned object is the same frozen `EntityHandlersMetadata` contract
94
+ * produced by `EntityHandlers.define()` and accepted by
95
+ * `HandlerMetadataRegistry`. Only own prototype methods of `entityType` are
96
+ * inspected; inherited decorated methods are intentionally not materialized by
97
+ * this class-owned adapter.
98
+ *
99
+ * Application code must not call this function and must not provide its own
100
+ * handler discovery/materialization. Generated framework registries own schema
101
+ * inference for bare decorators; this adapter only supports legacy
102
+ * schema-bearing decorator metadata.
103
+ *
104
+ * @typeParam Instance - Entity instance that owns the handlers.
105
+ * @typeParam StateSchema - Schema that describes the entity state.
106
+ * @param entityType Entity class whose own decorated methods are read.
107
+ * @param stateSchema Schema that describes the entity state.
108
+ * @returns Frozen handler metadata for the decorated methods.
109
+ */
110
+ export function materializeDecoratedEntityHandlers(entityType, stateSchema) {
111
+ const decoratedHandlers = DecoratorMetadata.collect(entityType);
112
+ return EntityHandlers.define(entityType, stateSchema, (builder) => decoratedHandlers.map((handler) => {
113
+ const methodName = handler.methodName;
114
+ switch (handler.kind) {
115
+ case "command-assignment":
116
+ return builder.assign(DecoratorMetadata.schema(handler), methodName);
117
+ case "command-reaction":
118
+ return builder.command(DecoratorMetadata.schema(handler), methodName);
119
+ case "event-subscription":
120
+ return builder.subscribe(DecoratorMetadata.schema(handler), methodName);
121
+ case "event-reaction":
122
+ return builder.react(DecoratorMetadata.schema(handler), methodName);
123
+ case "event-application":
124
+ return builder.apply(DecoratorMetadata.schema(handler), methodName, {
125
+ allowImport: handler.allowImport ?? false,
126
+ });
127
+ }
128
+ }));
129
+ }
130
+ const DecoratorMetadata = Object.freeze({
131
+ methodName(context) {
132
+ if (context.static || context.private) {
133
+ throw new TypeError("Spine handler decorators must be applied to public instance methods.");
134
+ }
135
+ if (typeof context.name !== "string") {
136
+ throw new TypeError("Spine handler decorators require string-named methods.");
137
+ }
138
+ return context.name;
139
+ },
140
+ decorateOrCreate(kind, schemaOrValue, context) {
141
+ if (context !== undefined) {
142
+ DecoratorMetadata.create(kind)(schemaOrValue, context);
143
+ return undefined;
144
+ }
145
+ return DecoratorMetadata.create(kind, schemaOrValue);
146
+ },
147
+ create(kind, schema, options = {}) {
148
+ return (_value, context) => {
149
+ const methodName = DecoratorMetadata.methodName(context);
150
+ const record = Object.freeze({
151
+ kind,
152
+ ...(schema === undefined ? {} : { schema }),
153
+ methodName,
154
+ ...(kind === "event-application" ? { allowImport: options.allowImport ?? false } : {}),
155
+ });
156
+ const metadata = DecoratorMetadata.require(context);
157
+ const previous = DecoratorMetadata.read(metadata);
158
+ Object.defineProperty(metadata, handlerDecoratorMetadataKey, {
159
+ configurable: true,
160
+ enumerable: false,
161
+ value: Object.freeze([...previous, record]),
162
+ writable: true,
163
+ });
164
+ };
165
+ },
166
+ schema(handler) {
167
+ if (handler.schema === undefined) {
168
+ throw new TypeError(`Decorated handler "${handler.methodName}" was declared without a schema; ` +
169
+ "use generated registry metadata or explicit EntityHandlers.define() registration.");
170
+ }
171
+ return handler.schema;
172
+ },
173
+ collect(entityType) {
174
+ const metadata = DecoratorMetadata.classMetadata(entityType);
175
+ if (metadata === undefined) {
176
+ return Object.freeze([]);
177
+ }
178
+ const records = DecoratorMetadata.read(metadata).filter((record) => {
179
+ const descriptor = Object.getOwnPropertyDescriptor(entityType.prototype, record.methodName);
180
+ return typeof descriptor?.value === "function";
181
+ });
182
+ return Object.freeze(records);
183
+ },
184
+ installSymbol() {
185
+ const existingMetadata = Reflect.get(Symbol, "metadata");
186
+ if (typeof existingMetadata === "symbol") {
187
+ return existingMetadata;
188
+ }
189
+ const metadata = Symbol("Symbol.metadata");
190
+ Object.defineProperty(Symbol, "metadata", {
191
+ configurable: true,
192
+ enumerable: false,
193
+ value: metadata,
194
+ writable: false,
195
+ });
196
+ return metadata;
197
+ },
198
+ require(context) {
199
+ if (context.metadata === undefined) {
200
+ throw new TypeError("Spine handler decorators require standard decorator metadata support.");
201
+ }
202
+ return context.metadata;
203
+ },
204
+ classMetadata(entityType) {
205
+ const descriptor = Object.getOwnPropertyDescriptor(entityType, decoratorMetadataSymbol);
206
+ const metadata = descriptor?.value;
207
+ if (metadata === null || typeof metadata !== "object") {
208
+ return undefined;
209
+ }
210
+ return metadata;
211
+ },
212
+ read(metadata) {
213
+ if (!Object.hasOwn(metadata, handlerDecoratorMetadataKey)) {
214
+ return [];
215
+ }
216
+ const value = metadata[handlerDecoratorMetadataKey];
217
+ return Array.isArray(value) ? value : [];
218
+ },
219
+ });
220
+ const WhereValues = Object.freeze({
221
+ snapshot(options) {
222
+ const value = options;
223
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
224
+ throw new TypeError("Where options must be an object.");
225
+ }
226
+ const keys = Object.keys(value);
227
+ if (keys.length !== 2 ||
228
+ !keys.includes("eventField") ||
229
+ !keys.includes("equals") ||
230
+ typeof options.eventField !== "string" ||
231
+ options.eventField.trim().length === 0 ||
232
+ typeof options.equals !== "string") {
233
+ throw new TypeError("Where options require exactly non-empty eventField and string equals.");
234
+ }
235
+ return Object.freeze({ eventField: options.eventField, equals: options.equals });
236
+ },
237
+ });
238
+ const decoratorMetadataSymbol = DecoratorMetadata.installSymbol();
239
+ //# sourceMappingURL=handler-decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-decorators.js","sourceRoot":"","sources":["../../src/handler/handler-decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACL,cAAc,GAQf,MAAM,uBAAuB,CAAC;AAqD/B,MAAM,2BAA2B,GAAG,MAAM,CAAC,8CAA8C,CAAC,CAAC;AAsB3F;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,aAA2D,EAC3D,OAAqC;IAErC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC;AAsBD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CACrB,aAA2D,EAC3D,OAAqC;IAErC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC;AAsBD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CACvB,aAA2D,EAC3D,OAAqC;IAErC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC;AAqBD;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACnB,aAA2D,EAC3D,OAAqC;IAErC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAC,OAAqB;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO,CACL,MAAoD,EACpD,OAAwF,EAClF,EAAE;QACR,KAAK,QAAQ,CAAC;QACd,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,KAAK,CACnB,MAA+B,EAC/B,UAAmC,EAAE;IAErC,OAAO,iBAAiB,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,kCAAkC,CAIhD,UAAiC,EACjC,WAAwB;IAExB,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhE,OAAO,cAAc,CAAC,MAAM,CAC1B,UAAU,EACV,WAAW,EACX,CAAC,OAAO,EAAE,EAAE,CACV,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAyC,CAAC;QAErE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,oBAAoB;gBACvB,OAAO,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YACvE,KAAK,kBAAkB;gBACrB,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YACxE,KAAK,oBAAoB;gBACvB,OAAO,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YAC1E,KAAK,gBAAgB;gBACnB,OAAO,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;YACtE,KAAK,mBAAmB;gBACtB,OAAO,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE;oBAClE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;iBAC1C,CAAC,CAAC;QACP,CAAC;IACH,CAAC,CAA4F,CAChG,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,UAAU,CAAC,OAAgC;QACzC,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,gBAAgB,CACd,IAA0B,EAC1B,aAA2D,EAC3D,OAAgD;QAEhD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,aAAmC,EAAE,OAAO,CAAC,CAAC;YAC7E,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,aAAwC,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CACJ,IAA0B,EAC1B,MAAgC,EAChC,UAAmC,EAAE;QAErC,OAAO,CACL,MAAoD,EACpD,OAAwF,EAClF,EAAE;YACR,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzD,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC;gBACnD,IAAI;gBACJ,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3C,UAAU;gBACV,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,2BAA2B,EAAE;gBAC3D,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC3C,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAA+B;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CACjB,sBAAsB,OAAO,CAAC,UAAU,mCAAmC;gBACzE,mFAAmF,CACtF,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,OAAO,CACL,UAAiC;QAEjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACjE,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAE5F,OAAO,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,aAAa;QACX,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEzD,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAE3C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;YACxC,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,OAEP;QACC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,aAAa,CACX,UAAiC;QAEjC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAY,UAAU,EAAE,KAAK,CAAC;QAE5C,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACtD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,QAAwC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,QAAsC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,2BAA2B,CAAC,EAAE,CAAC;YAC1D,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAEpD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAA2C,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAqB;QAC5B,MAAM,KAAK,GAAY,OAAO,CAAC;QAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IACE,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5B,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACxB,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YACtC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YACtC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAClC,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,uEAAuE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,aAAa,EAAE,CAAC"}