@nwire/forge 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/dist/__tests__/actor-methods.test.d.ts +9 -0
  4. package/dist/__tests__/actor-methods.test.d.ts.map +1 -0
  5. package/dist/__tests__/actor-methods.test.js +210 -0
  6. package/dist/__tests__/actor-methods.test.js.map +1 -0
  7. package/dist/__tests__/actor-schema-bound.test.d.ts +6 -0
  8. package/dist/__tests__/actor-schema-bound.test.d.ts.map +1 -0
  9. package/dist/__tests__/actor-schema-bound.test.js +112 -0
  10. package/dist/__tests__/actor-schema-bound.test.js.map +1 -0
  11. package/dist/__tests__/app-capabilities.test.d.ts +19 -0
  12. package/dist/__tests__/app-capabilities.test.d.ts.map +1 -0
  13. package/dist/__tests__/app-capabilities.test.js +57 -0
  14. package/dist/__tests__/app-capabilities.test.js.map +1 -0
  15. package/dist/__tests__/cli-runner.test.d.ts +6 -0
  16. package/dist/__tests__/cli-runner.test.d.ts.map +1 -0
  17. package/dist/__tests__/cli-runner.test.js +158 -0
  18. package/dist/__tests__/cli-runner.test.js.map +1 -0
  19. package/dist/__tests__/create-app.test.d.ts +18 -0
  20. package/dist/__tests__/create-app.test.d.ts.map +1 -0
  21. package/dist/__tests__/create-app.test.js +189 -0
  22. package/dist/__tests__/create-app.test.js.map +1 -0
  23. package/dist/__tests__/cross-service-bus.test.d.ts +8 -0
  24. package/dist/__tests__/cross-service-bus.test.d.ts.map +1 -0
  25. package/dist/__tests__/cross-service-bus.test.js +139 -0
  26. package/dist/__tests__/cross-service-bus.test.js.map +1 -0
  27. package/dist/__tests__/define-schema.test.d.ts +5 -0
  28. package/dist/__tests__/define-schema.test.d.ts.map +1 -0
  29. package/dist/__tests__/define-schema.test.js +83 -0
  30. package/dist/__tests__/define-schema.test.js.map +1 -0
  31. package/dist/__tests__/dev-logger.test.d.ts +9 -0
  32. package/dist/__tests__/dev-logger.test.d.ts.map +1 -0
  33. package/dist/__tests__/dev-logger.test.js +126 -0
  34. package/dist/__tests__/dev-logger.test.js.map +1 -0
  35. package/dist/__tests__/external-call.test.d.ts +14 -0
  36. package/dist/__tests__/external-call.test.d.ts.map +1 -0
  37. package/dist/__tests__/external-call.test.js +99 -0
  38. package/dist/__tests__/external-call.test.js.map +1 -0
  39. package/dist/__tests__/framework-events.test.d.ts +13 -0
  40. package/dist/__tests__/framework-events.test.d.ts.map +1 -0
  41. package/dist/__tests__/framework-events.test.js +204 -0
  42. package/dist/__tests__/framework-events.test.js.map +1 -0
  43. package/dist/__tests__/inline-handler.test.d.ts +8 -0
  44. package/dist/__tests__/inline-handler.test.d.ts.map +1 -0
  45. package/dist/__tests__/inline-handler.test.js +101 -0
  46. package/dist/__tests__/inline-handler.test.js.map +1 -0
  47. package/dist/__tests__/lifecycle-logging.test.d.ts +12 -0
  48. package/dist/__tests__/lifecycle-logging.test.d.ts.map +1 -0
  49. package/dist/__tests__/lifecycle-logging.test.js +112 -0
  50. package/dist/__tests__/lifecycle-logging.test.js.map +1 -0
  51. package/dist/__tests__/middleware.test.d.ts +7 -0
  52. package/dist/__tests__/middleware.test.d.ts.map +1 -0
  53. package/dist/__tests__/middleware.test.js +109 -0
  54. package/dist/__tests__/middleware.test.js.map +1 -0
  55. package/dist/__tests__/module-needs.test.d.ts +10 -0
  56. package/dist/__tests__/module-needs.test.d.ts.map +1 -0
  57. package/dist/__tests__/module-needs.test.js +77 -0
  58. package/dist/__tests__/module-needs.test.js.map +1 -0
  59. package/dist/__tests__/module-topo-sort.test.d.ts +15 -0
  60. package/dist/__tests__/module-topo-sort.test.d.ts.map +1 -0
  61. package/dist/__tests__/module-topo-sort.test.js +105 -0
  62. package/dist/__tests__/module-topo-sort.test.js.map +1 -0
  63. package/dist/__tests__/multi-tenancy.test.d.ts +10 -0
  64. package/dist/__tests__/multi-tenancy.test.d.ts.map +1 -0
  65. package/dist/__tests__/multi-tenancy.test.js +122 -0
  66. package/dist/__tests__/multi-tenancy.test.js.map +1 -0
  67. package/dist/__tests__/needs-topology.test.d.ts +11 -0
  68. package/dist/__tests__/needs-topology.test.d.ts.map +1 -0
  69. package/dist/__tests__/needs-topology.test.js +82 -0
  70. package/dist/__tests__/needs-topology.test.js.map +1 -0
  71. package/dist/__tests__/plugin-closure.test.d.ts +15 -0
  72. package/dist/__tests__/plugin-closure.test.d.ts.map +1 -0
  73. package/dist/__tests__/plugin-closure.test.js +140 -0
  74. package/dist/__tests__/plugin-closure.test.js.map +1 -0
  75. package/dist/__tests__/plugin.test.d.ts +10 -0
  76. package/dist/__tests__/plugin.test.d.ts.map +1 -0
  77. package/dist/__tests__/plugin.test.js +225 -0
  78. package/dist/__tests__/plugin.test.js.map +1 -0
  79. package/dist/__tests__/primitives.test.d.ts +9 -0
  80. package/dist/__tests__/primitives.test.d.ts.map +1 -0
  81. package/dist/__tests__/primitives.test.js +434 -0
  82. package/dist/__tests__/primitives.test.js.map +1 -0
  83. package/dist/__tests__/production-readiness.test.d.ts +22 -0
  84. package/dist/__tests__/production-readiness.test.d.ts.map +1 -0
  85. package/dist/__tests__/production-readiness.test.js +196 -0
  86. package/dist/__tests__/production-readiness.test.js.map +1 -0
  87. package/dist/__tests__/provider.test.d.ts +6 -0
  88. package/dist/__tests__/provider.test.d.ts.map +1 -0
  89. package/dist/__tests__/provider.test.js +122 -0
  90. package/dist/__tests__/provider.test.js.map +1 -0
  91. package/dist/__tests__/public-marker.test.d.ts +7 -0
  92. package/dist/__tests__/public-marker.test.d.ts.map +1 -0
  93. package/dist/__tests__/public-marker.test.js +54 -0
  94. package/dist/__tests__/public-marker.test.js.map +1 -0
  95. package/dist/__tests__/retry-dlq.test.d.ts +6 -0
  96. package/dist/__tests__/retry-dlq.test.d.ts.map +1 -0
  97. package/dist/__tests__/retry-dlq.test.js +68 -0
  98. package/dist/__tests__/retry-dlq.test.js.map +1 -0
  99. package/dist/__tests__/validate.test.d.ts +5 -0
  100. package/dist/__tests__/validate.test.d.ts.map +1 -0
  101. package/dist/__tests__/validate.test.js +53 -0
  102. package/dist/__tests__/validate.test.js.map +1 -0
  103. package/dist/__tests__/workflow-saga.test.d.ts +7 -0
  104. package/dist/__tests__/workflow-saga.test.d.ts.map +1 -0
  105. package/dist/__tests__/workflow-saga.test.js +239 -0
  106. package/dist/__tests__/workflow-saga.test.js.map +1 -0
  107. package/dist/actor-store.d.ts +83 -0
  108. package/dist/actor-store.d.ts.map +1 -0
  109. package/dist/actor-store.js +85 -0
  110. package/dist/actor-store.js.map +1 -0
  111. package/dist/cli-runner.d.ts +46 -0
  112. package/dist/cli-runner.d.ts.map +1 -0
  113. package/dist/cli-runner.js +164 -0
  114. package/dist/cli-runner.js.map +1 -0
  115. package/dist/create-app.d.ts +131 -0
  116. package/dist/create-app.d.ts.map +1 -0
  117. package/dist/create-app.js +593 -0
  118. package/dist/create-app.js.map +1 -0
  119. package/dist/define-action.d.ts +148 -0
  120. package/dist/define-action.d.ts.map +1 -0
  121. package/dist/define-action.js +52 -0
  122. package/dist/define-action.js.map +1 -0
  123. package/dist/define-actor.d.ts +302 -0
  124. package/dist/define-actor.d.ts.map +1 -0
  125. package/dist/define-actor.js +294 -0
  126. package/dist/define-actor.js.map +1 -0
  127. package/dist/define-app.d.ts +104 -0
  128. package/dist/define-app.d.ts.map +1 -0
  129. package/dist/define-app.js +49 -0
  130. package/dist/define-app.js.map +1 -0
  131. package/dist/define-cron.d.ts +50 -0
  132. package/dist/define-cron.d.ts.map +1 -0
  133. package/dist/define-cron.js +34 -0
  134. package/dist/define-cron.js.map +1 -0
  135. package/dist/define-error.d.ts +10 -0
  136. package/dist/define-error.d.ts.map +1 -0
  137. package/dist/define-error.js +10 -0
  138. package/dist/define-error.js.map +1 -0
  139. package/dist/define-external-call.d.ts +85 -0
  140. package/dist/define-external-call.d.ts.map +1 -0
  141. package/dist/define-external-call.js +38 -0
  142. package/dist/define-external-call.js.map +1 -0
  143. package/dist/define-handler.d.ts +98 -0
  144. package/dist/define-handler.d.ts.map +1 -0
  145. package/dist/define-handler.js +29 -0
  146. package/dist/define-handler.js.map +1 -0
  147. package/dist/define-inbound-webhook.d.ts +82 -0
  148. package/dist/define-inbound-webhook.d.ts.map +1 -0
  149. package/dist/define-inbound-webhook.js +42 -0
  150. package/dist/define-inbound-webhook.js.map +1 -0
  151. package/dist/define-inbox.d.ts +40 -0
  152. package/dist/define-inbox.d.ts.map +1 -0
  153. package/dist/define-inbox.js +31 -0
  154. package/dist/define-inbox.js.map +1 -0
  155. package/dist/define-initializer.d.ts +54 -0
  156. package/dist/define-initializer.d.ts.map +1 -0
  157. package/dist/define-initializer.js +38 -0
  158. package/dist/define-initializer.js.map +1 -0
  159. package/dist/define-middleware.d.ts +8 -0
  160. package/dist/define-middleware.d.ts.map +1 -0
  161. package/dist/define-middleware.js +8 -0
  162. package/dist/define-middleware.js.map +1 -0
  163. package/dist/define-model.d.ts +10 -0
  164. package/dist/define-model.d.ts.map +1 -0
  165. package/dist/define-model.js +13 -0
  166. package/dist/define-model.js.map +1 -0
  167. package/dist/define-module.d.ts +157 -0
  168. package/dist/define-module.d.ts.map +1 -0
  169. package/dist/define-module.js +60 -0
  170. package/dist/define-module.js.map +1 -0
  171. package/dist/define-outbox.d.ts +47 -0
  172. package/dist/define-outbox.d.ts.map +1 -0
  173. package/dist/define-outbox.js +36 -0
  174. package/dist/define-outbox.js.map +1 -0
  175. package/dist/define-plugin.d.ts +171 -0
  176. package/dist/define-plugin.d.ts.map +1 -0
  177. package/dist/define-plugin.js +134 -0
  178. package/dist/define-plugin.js.map +1 -0
  179. package/dist/define-projection.d.ts +56 -0
  180. package/dist/define-projection.d.ts.map +1 -0
  181. package/dist/define-projection.js +44 -0
  182. package/dist/define-projection.js.map +1 -0
  183. package/dist/define-provider.d.ts +49 -0
  184. package/dist/define-provider.d.ts.map +1 -0
  185. package/dist/define-provider.js +45 -0
  186. package/dist/define-provider.js.map +1 -0
  187. package/dist/define-query.d.ts +50 -0
  188. package/dist/define-query.d.ts.map +1 -0
  189. package/dist/define-query.js +33 -0
  190. package/dist/define-query.js.map +1 -0
  191. package/dist/define-resolver.d.ts +111 -0
  192. package/dist/define-resolver.d.ts.map +1 -0
  193. package/dist/define-resolver.js +146 -0
  194. package/dist/define-resolver.js.map +1 -0
  195. package/dist/define-schema.d.ts +88 -0
  196. package/dist/define-schema.d.ts.map +1 -0
  197. package/dist/define-schema.js +72 -0
  198. package/dist/define-schema.js.map +1 -0
  199. package/dist/define-workflow.d.ts +193 -0
  200. package/dist/define-workflow.d.ts.map +1 -0
  201. package/dist/define-workflow.js +345 -0
  202. package/dist/define-workflow.js.map +1 -0
  203. package/dist/dev-logger.d.ts +41 -0
  204. package/dist/dev-logger.d.ts.map +1 -0
  205. package/dist/dev-logger.js +135 -0
  206. package/dist/dev-logger.js.map +1 -0
  207. package/dist/event-message.d.ts +37 -0
  208. package/dist/event-message.d.ts.map +1 -0
  209. package/dist/event-message.js +51 -0
  210. package/dist/event-message.js.map +1 -0
  211. package/dist/foundation.d.ts +14 -0
  212. package/dist/foundation.d.ts.map +1 -0
  213. package/dist/foundation.js +14 -0
  214. package/dist/foundation.js.map +1 -0
  215. package/dist/framework-event-bus.d.ts +13 -0
  216. package/dist/framework-event-bus.d.ts.map +1 -0
  217. package/dist/framework-event-bus.js +13 -0
  218. package/dist/framework-event-bus.js.map +1 -0
  219. package/dist/framework-events.d.ts +121 -0
  220. package/dist/framework-events.d.ts.map +1 -0
  221. package/dist/framework-events.js +67 -0
  222. package/dist/framework-events.js.map +1 -0
  223. package/dist/index.d.ts +53 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +61 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/module-surface.d.ts +47 -0
  228. package/dist/module-surface.d.ts.map +1 -0
  229. package/dist/module-surface.js +65 -0
  230. package/dist/module-surface.js.map +1 -0
  231. package/dist/projection-store.d.ts +26 -0
  232. package/dist/projection-store.d.ts.map +1 -0
  233. package/dist/projection-store.js +28 -0
  234. package/dist/projection-store.js.map +1 -0
  235. package/dist/public-marker.d.ts +35 -0
  236. package/dist/public-marker.d.ts.map +1 -0
  237. package/dist/public-marker.js +45 -0
  238. package/dist/public-marker.js.map +1 -0
  239. package/dist/response.d.ts +8 -0
  240. package/dist/response.d.ts.map +1 -0
  241. package/dist/response.js +8 -0
  242. package/dist/response.js.map +1 -0
  243. package/dist/runtime.d.ts +497 -0
  244. package/dist/runtime.d.ts.map +1 -0
  245. package/dist/runtime.js +1083 -0
  246. package/dist/runtime.js.map +1 -0
  247. package/dist/validate.d.ts +33 -0
  248. package/dist/validate.d.ts.map +1 -0
  249. package/dist/validate.js +48 -0
  250. package/dist/validate.js.map +1 -0
  251. package/dist/when.d.ts +101 -0
  252. package/dist/when.d.ts.map +1 -0
  253. package/dist/when.js +57 -0
  254. package/dist/when.js.map +1 -0
  255. package/dist/workflow-timer-store.d.ts +78 -0
  256. package/dist/workflow-timer-store.d.ts.map +1 -0
  257. package/dist/workflow-timer-store.js +56 -0
  258. package/dist/workflow-timer-store.js.map +1 -0
  259. package/package.json +60 -0
@@ -0,0 +1,88 @@
1
+ /**
2
+ * `defineSchema` — the data model + lifecycle states + storage hints for an
3
+ * actor, declared once and referenced by `defineActor`.
4
+ *
5
+ * export const SubmissionData = defineSchema({
6
+ * name: "submission",
7
+ * key: "submissionId",
8
+ * fields: {
9
+ * submissionId: z.string(),
10
+ * studentId: z.string(),
11
+ * exerciseId: z.string(),
12
+ * answer: z.string(),
13
+ * confidence: z.number().optional(),
14
+ * verdict: z.string().optional(),
15
+ * submittedAt: z.string().datetime(),
16
+ * gradedAt: z.string().datetime().optional(),
17
+ * },
18
+ * states: {
19
+ * submitted: { initial: true },
20
+ * "under-review": {},
21
+ * graded: { final: true },
22
+ * },
23
+ * storage: {
24
+ * indexes: [["studentId"], ["exerciseId"]],
25
+ * unique: [["studentId", "exerciseId"]],
26
+ * },
27
+ * });
28
+ *
29
+ * Why it's separate from `defineActor`:
30
+ * - Studio can render the data model without booting the actor.
31
+ * - Persistent stores (`@nwire/store-mongo`, `@nwire/store-prisma`) read
32
+ * `indexes` + `unique` to build adapter-level constraints.
33
+ * - Projections can reference the same schema for view-typing.
34
+ *
35
+ * The schema's `states` block declares which state is `initial` (exactly one)
36
+ * and which states are `final` (zero or more). The actor's transition table
37
+ * lives on `defineActor` — the schema only tells you what states exist.
38
+ */
39
+ import { z } from "zod";
40
+ import type { ZodTypeAny } from "@nwire/messages";
41
+ /**
42
+ * Lifecycle flag for one state. `initial: true` marks the state new instances
43
+ * start in; `final: true` marks an absorbing state (no outbound transitions).
44
+ */
45
+ export interface SchemaStateSpec {
46
+ readonly initial?: boolean;
47
+ readonly final?: boolean;
48
+ }
49
+ /**
50
+ * Adapter hints. Stores honor what they can — Mongo will create real indexes,
51
+ * the in-memory store ignores them, file store ignores them, Prisma generates
52
+ * a migration. Hints, not promises.
53
+ */
54
+ export interface SchemaStorageHints {
55
+ /** Compound or single-field indexes. `[["studentId"], ["studentId", "submittedAt"]]`. */
56
+ readonly indexes?: ReadonlyArray<ReadonlyArray<string>>;
57
+ /** Compound or single-field uniqueness constraints. */
58
+ readonly unique?: ReadonlyArray<ReadonlyArray<string>>;
59
+ }
60
+ export interface SchemaOptions<TFields extends Readonly<Record<string, ZodTypeAny>>> {
61
+ readonly name: string;
62
+ /** Field path in event payloads used to look up the actor instance. */
63
+ readonly key: keyof TFields & string;
64
+ /** The data shape — a record of zod field schemas, assembled into z.object(). */
65
+ readonly fields: TFields;
66
+ /** Declared lifecycle states. Exactly one must have `initial: true`. */
67
+ readonly states: Readonly<Record<string, SchemaStateSpec>>;
68
+ /** Optional persistence hints — see SchemaStorageHints. */
69
+ readonly storage?: SchemaStorageHints;
70
+ }
71
+ export interface SchemaDefinition<TFields extends Readonly<Record<string, ZodTypeAny>> = Readonly<Record<string, ZodTypeAny>>> {
72
+ readonly $kind: "schema";
73
+ readonly name: string;
74
+ readonly key: keyof TFields & string;
75
+ readonly fields: TFields;
76
+ /** Compiled `z.object(fields)` for runtime validation. */
77
+ readonly zodSchema: z.ZodObject<TFields>;
78
+ readonly states: Readonly<Record<string, SchemaStateSpec>>;
79
+ /** The state marked `initial: true`. Computed at define time. */
80
+ readonly initial: string;
81
+ /** The names of states marked `final: true`. */
82
+ readonly finals: ReadonlyArray<string>;
83
+ readonly storage: SchemaStorageHints;
84
+ }
85
+ export declare function defineSchema<TFields extends Readonly<Record<string, ZodTypeAny>>>(options: SchemaOptions<TFields>): SchemaDefinition<TFields>;
86
+ /** Type narrow — true if `x` is a SchemaDefinition produced by `defineSchema`. */
87
+ export declare function isSchemaDefinition(x: unknown): x is SchemaDefinition;
88
+ //# sourceMappingURL=define-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schema.d.ts","sourceRoot":"","sources":["../src/define-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,aAAa,CAAC,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;IACrC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3D,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB,CAC/B,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE3F,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAC3D,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAC/E,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAC9B,gBAAgB,CAAC,OAAO,CAAC,CAmC3B;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,gBAAgB,CAEpE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * `defineSchema` — the data model + lifecycle states + storage hints for an
3
+ * actor, declared once and referenced by `defineActor`.
4
+ *
5
+ * export const SubmissionData = defineSchema({
6
+ * name: "submission",
7
+ * key: "submissionId",
8
+ * fields: {
9
+ * submissionId: z.string(),
10
+ * studentId: z.string(),
11
+ * exerciseId: z.string(),
12
+ * answer: z.string(),
13
+ * confidence: z.number().optional(),
14
+ * verdict: z.string().optional(),
15
+ * submittedAt: z.string().datetime(),
16
+ * gradedAt: z.string().datetime().optional(),
17
+ * },
18
+ * states: {
19
+ * submitted: { initial: true },
20
+ * "under-review": {},
21
+ * graded: { final: true },
22
+ * },
23
+ * storage: {
24
+ * indexes: [["studentId"], ["exerciseId"]],
25
+ * unique: [["studentId", "exerciseId"]],
26
+ * },
27
+ * });
28
+ *
29
+ * Why it's separate from `defineActor`:
30
+ * - Studio can render the data model without booting the actor.
31
+ * - Persistent stores (`@nwire/store-mongo`, `@nwire/store-prisma`) read
32
+ * `indexes` + `unique` to build adapter-level constraints.
33
+ * - Projections can reference the same schema for view-typing.
34
+ *
35
+ * The schema's `states` block declares which state is `initial` (exactly one)
36
+ * and which states are `final` (zero or more). The actor's transition table
37
+ * lives on `defineActor` — the schema only tells you what states exist.
38
+ */
39
+ import { z } from "zod";
40
+ export function defineSchema(options) {
41
+ const initials = Object.entries(options.states)
42
+ .filter(([, spec]) => spec.initial)
43
+ .map(([n]) => n);
44
+ if (initials.length === 0) {
45
+ throw new Error(`defineSchema("${options.name}"): no state declares \`initial: true\`. Exactly one state must be marked initial.`);
46
+ }
47
+ if (initials.length > 1) {
48
+ throw new Error(`defineSchema("${options.name}"): multiple states declare \`initial: true\` (${initials.join(", ")}). Exactly one must be marked initial.`);
49
+ }
50
+ if (!(options.key in options.fields)) {
51
+ throw new Error(`defineSchema("${options.name}"): key "${options.key}" is not declared in fields.`);
52
+ }
53
+ const finals = Object.entries(options.states)
54
+ .filter(([, spec]) => spec.final)
55
+ .map(([n]) => n);
56
+ return {
57
+ $kind: "schema",
58
+ name: options.name,
59
+ key: options.key,
60
+ fields: options.fields,
61
+ zodSchema: z.object(options.fields),
62
+ states: options.states,
63
+ initial: initials[0],
64
+ finals,
65
+ storage: options.storage ?? {},
66
+ };
67
+ }
68
+ /** Type narrow — true if `x` is a SchemaDefinition produced by `defineSchema`. */
69
+ export function isSchemaDefinition(x) {
70
+ return typeof x === "object" && x !== null && x.$kind === "schema";
71
+ }
72
+ //# sourceMappingURL=define-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schema.js","sourceRoot":"","sources":["../src/define-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqDxB,MAAM,UAAU,YAAY,CAC1B,OAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,CAAC,IAAI,oFAAoF,CAClH,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,CAAC,IAAI,kDAAkD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAC3I,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iBAAiB,OAAO,CAAC,IAAI,YAAY,OAAO,CAAC,GAAG,8BAA8B,CACnF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAE;QACrB,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAyB,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * `defineWorkflow` — the unified primitive for everything event-driven that
3
+ * isn't an actor. Reactions, translators, and sagas all use this same call.
4
+ *
5
+ * Three sophistication levels live in one closure:
6
+ *
7
+ * • Observer / translator — one event in → side effects out.
8
+ * • Reaction — one event in → dispatch an action.
9
+ * • Saga — multi-event correlated state machine.
10
+ *
11
+ * The framework picks the runtime path:
12
+ * • No `data` and no `states` → plain async dispatch (zero overhead).
13
+ * • `data` or `states` declared → per-correlation instance state, transitions
14
+ * via handler return values, XState-equivalent overlap semantics
15
+ * (state-scoped handlers shadow root-level ones for the current state).
16
+ *
17
+ * Example shapes appear in `packages/nwire-docs/concepts/workflow.md`.
18
+ */
19
+ import type { z } from "zod";
20
+ import type { ZodTypeAny } from "@nwire/messages";
21
+ import type { EventDefinition, EventPayload } from "@nwire/messages";
22
+ import type { ActionDefinition } from "./define-action.js";
23
+ import type { EventMessage } from "./event-message.js";
24
+ import { type PublicMarker } from "./public-marker.js";
25
+ /**
26
+ * Timer definition produced by `timeout(name, delay)`. Acts like an event
27
+ * for subscription purposes — `on(timer, handler)` registers a handler
28
+ * that fires when the timer's delay elapses. The `delay` string accepts
29
+ * the same units as actor timers (`"7d"`, `"30m"`, `"500ms"`, …).
30
+ */
31
+ export interface TimerDefinition {
32
+ readonly $kind: "workflow-timer";
33
+ readonly name: string;
34
+ readonly delay: string;
35
+ }
36
+ export interface WorkflowEffects {
37
+ send<TInput, TResult = unknown>(action: ActionDefinition, input: TInput): Promise<TResult>;
38
+ enqueue<TInput>(action: ActionDefinition, input: TInput): Promise<void>;
39
+ publish(event: EventMessage): Promise<void>;
40
+ }
41
+ export interface WorkflowOnOptions {
42
+ readonly description?: string;
43
+ readonly retry?: WorkflowRetryPolicy;
44
+ readonly idempotencyKey?: (payload: unknown) => string;
45
+ readonly dispatches?: readonly ActionDefinition[];
46
+ /**
47
+ * State filter — equivalent to placing the `on()` inside each listed
48
+ * state's body. When omitted, the subscription is always active.
49
+ */
50
+ readonly in?: readonly string[];
51
+ }
52
+ export interface WorkflowRetryPolicy {
53
+ readonly max: number;
54
+ readonly backoff?: "exponential" | "fixed";
55
+ readonly baseDelayMs?: number;
56
+ readonly maxDelayMs?: number;
57
+ }
58
+ /**
59
+ * `complete` — framework-emitted pseudo-event that fires when a stateful
60
+ * workflow enters any state marked `final: true`. Exposed on the closure
61
+ * context so `on(complete, …)` can register a finalization hook.
62
+ */
63
+ export declare const COMPLETE_EVENT_NAME = "__nwire/workflow.complete";
64
+ export interface CompleteEvent {
65
+ readonly $kind: "workflow.complete";
66
+ readonly name: string;
67
+ }
68
+ type Awaitable<T> = T | Promise<T>;
69
+ type Transition = string | void | undefined;
70
+ /**
71
+ * State callable produced for each entry in `options.states`. Calling it
72
+ * with a body registers that body as the state's onEnter handler:
73
+ *
74
+ * notified(() => {
75
+ * on(PaymentFailed, () => retrying);
76
+ * });
77
+ */
78
+ export type StateCallable = ((body: StateBody) => void) & {
79
+ readonly $name: string;
80
+ readonly $final: boolean;
81
+ };
82
+ export type StateBody = () => Awaitable<Transition>;
83
+ /**
84
+ * Stateless workflow context — no `data`, no `states`, no `complete`.
85
+ * `on()` returns are ignored (there's no state machine to transition).
86
+ */
87
+ export interface StatelessWorkflowContext extends WorkflowEffects {
88
+ on<E extends EventDefinition>(event: E, handler: (payload: EventPayload<E>) => Awaitable<Transition>, opts?: WorkflowOnOptions): void;
89
+ /** Subscribe to the `complete` pseudo-event. Fires after each handler. */
90
+ on(event: CompleteEvent, handler: () => Awaitable<void>, opts?: WorkflowOnOptions): void;
91
+ /** Subscribe to a saga timer fire. */
92
+ on(event: TimerDefinition, handler: (payload?: unknown) => Awaitable<Transition>, opts?: WorkflowOnOptions): void;
93
+ }
94
+ /**
95
+ * Stateful workflow context — adds `data`, `assign`, `states`, and the
96
+ * built-in `complete` event handle.
97
+ */
98
+ export interface StatefulWorkflowContext<TData> extends StatelessWorkflowContext {
99
+ readonly data: Readonly<TData>;
100
+ readonly states: Record<string, StateCallable>;
101
+ readonly complete: CompleteEvent;
102
+ assign(patch: Partial<TData>): Promise<void>;
103
+ /**
104
+ * Declare a named timer. Returns a `TimerDefinition` that can be used
105
+ * both as a subscription handle (`on(myTimer, …)`) and as the argument
106
+ * to `schedule(myTimer)`. Declaring a timer does NOT start the clock —
107
+ * call `schedule(timer)` to enqueue it.
108
+ */
109
+ timeout(name: string, delay: string): TimerDefinition;
110
+ /** Enqueue a previously-declared timer to fire after its delay. */
111
+ schedule(timer: TimerDefinition, payload?: unknown): Promise<void>;
112
+ }
113
+ export type WorkflowContext<TData = unknown> = StatelessWorkflowContext | StatefulWorkflowContext<TData>;
114
+ export interface WorkflowStateSpec {
115
+ readonly final?: boolean;
116
+ }
117
+ export interface WorkflowCorrelateMap {
118
+ <E extends EventDefinition>(event: E, picker: (payload: EventPayload<E>) => string): void;
119
+ }
120
+ export interface StatefulWorkflowOptions<TData extends ZodTypeAny> {
121
+ readonly description?: string;
122
+ readonly data: TData;
123
+ readonly states?: Readonly<Record<string, WorkflowStateSpec>>;
124
+ /**
125
+ * Map each subscribed event to a correlation key (a string identity
126
+ * that names the workflow instance owning that event). Without
127
+ * `correlate`, every event creates a fresh instance.
128
+ */
129
+ readonly correlate?: (map: WorkflowCorrelateMap) => void;
130
+ }
131
+ export interface StatelessWorkflowOptions {
132
+ readonly description?: string;
133
+ }
134
+ export type WorkflowOptions<TData extends ZodTypeAny = ZodTypeAny> = StatelessWorkflowOptions | StatefulWorkflowOptions<TData>;
135
+ export interface WorkflowDefinition extends PublicMarker {
136
+ readonly $kind: "workflow";
137
+ readonly name: string;
138
+ readonly description?: string;
139
+ /** Event names this workflow declares an `on()` for. */
140
+ readonly subscribedEvents: ReadonlySet<string>;
141
+ /** Action names this workflow declares it dispatches. */
142
+ readonly dispatchedActions: ReadonlySet<string>;
143
+ /** True if the workflow uses `data` or `states` — runtime picks the path. */
144
+ readonly stateful: boolean;
145
+ /** State names with `final: true` — emit `complete` on entry. */
146
+ readonly finalStates: ReadonlySet<string>;
147
+ /** Initial state name (first non-final state in declaration order). */
148
+ readonly initialState?: string;
149
+ /** Resolve the correlation key for an incoming event message. */
150
+ readonly correlate?: (event: EventMessage) => string | undefined;
151
+ /** Internal — invoked by the runtime per matching event. */
152
+ readonly _fire: (event: EventMessage, fireCtx: FireContext) => Promise<void>;
153
+ }
154
+ /**
155
+ * Runtime hooks the workflow uses to load/save per-correlation state
156
+ * and run effects. Supplied by the kernel-side runtime.
157
+ */
158
+ export interface FireContext extends WorkflowEffects {
159
+ /** Load or create the instance row for this correlation key. */
160
+ readonly load: (key: string) => WorkflowInstance | undefined;
161
+ readonly save: (key: string, instance: WorkflowInstance) => void;
162
+ readonly drop: (key: string) => void;
163
+ /**
164
+ * Optional correlation key override. Set by the runtime when firing a
165
+ * timer event back to its scheduling saga — the synthetic timer payload
166
+ * has no shape `workflow.correlate(event)` can pattern-match on, so the
167
+ * runtime hands the stored key down explicitly.
168
+ */
169
+ readonly correlationKey?: string;
170
+ /**
171
+ * Enqueue a timer with the runtime's `WorkflowTimerStore`. The runtime
172
+ * will fire the timer back into this workflow when its delay elapses.
173
+ * `workflowName` + `correlationKey` are filled by the runtime; the
174
+ * closure only sees `timeout(name, delay)` / `schedule(timer)`.
175
+ */
176
+ readonly scheduleTimer: (timerName: string, delay: string, payload?: unknown) => Promise<void>;
177
+ }
178
+ export interface WorkflowInstance {
179
+ state: string;
180
+ data: Record<string, unknown>;
181
+ /** Names of events the current state has registered handlers for. */
182
+ scopedEvents: string[];
183
+ }
184
+ /**
185
+ * Stateful overload — when `options.data` is declared, the closure
186
+ * receives a `StatefulWorkflowContext` with `data`, `assign`, `states`,
187
+ * and `complete`. Picked over the stateless overload by TypeScript's
188
+ * overload resolution when the call passes a `data` schema.
189
+ */
190
+ export declare function defineWorkflow<TData extends ZodTypeAny>(name: string, closure: (ctx: StatefulWorkflowContext<z.output<TData>>) => void, options: StatefulWorkflowOptions<TData>): WorkflowDefinition;
191
+ export declare function defineWorkflow(name: string, closure: (ctx: StatelessWorkflowContext) => void, options?: StatelessWorkflowOptions): WorkflowDefinition;
192
+ export {};
193
+ //# sourceMappingURL=define-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-workflow.d.ts","sourceRoot":"","sources":["../src/define-workflow.ts"],"names":[],"mappings":"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"}