dopespec 0.0.1

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 (179) hide show
  1. package/README.md +195 -0
  2. package/bin/dopespec.mjs +26 -0
  3. package/dist/__tests__/codegen.test.d.ts +2 -0
  4. package/dist/__tests__/codegen.test.d.ts.map +1 -0
  5. package/dist/__tests__/codegen.test.js +713 -0
  6. package/dist/__tests__/codegen.test.js.map +1 -0
  7. package/dist/__tests__/e2e-proof.test.d.ts +2 -0
  8. package/dist/__tests__/e2e-proof.test.d.ts.map +1 -0
  9. package/dist/__tests__/e2e-proof.test.js +153 -0
  10. package/dist/__tests__/e2e-proof.test.js.map +1 -0
  11. package/dist/__tests__/schema.test.d.ts +2 -0
  12. package/dist/__tests__/schema.test.d.ts.map +1 -0
  13. package/dist/__tests__/schema.test.js +822 -0
  14. package/dist/__tests__/schema.test.js.map +1 -0
  15. package/dist/__tests__/type-errors.d.ts +2 -0
  16. package/dist/__tests__/type-errors.d.ts.map +1 -0
  17. package/dist/__tests__/type-errors.js +128 -0
  18. package/dist/__tests__/type-errors.js.map +1 -0
  19. package/dist/cli/generate.d.ts +2 -0
  20. package/dist/cli/generate.d.ts.map +1 -0
  21. package/dist/cli/generate.js +250 -0
  22. package/dist/cli/generate.js.map +1 -0
  23. package/dist/codegen/commands.d.ts +4 -0
  24. package/dist/codegen/commands.d.ts.map +1 -0
  25. package/dist/codegen/commands.js +25 -0
  26. package/dist/codegen/commands.js.map +1 -0
  27. package/dist/codegen/decisions-evaluate.d.ts +3 -0
  28. package/dist/codegen/decisions-evaluate.d.ts.map +1 -0
  29. package/dist/codegen/decisions-evaluate.js +50 -0
  30. package/dist/codegen/decisions-evaluate.js.map +1 -0
  31. package/dist/codegen/decisions-table.d.ts +3 -0
  32. package/dist/codegen/decisions-table.d.ts.map +1 -0
  33. package/dist/codegen/decisions-table.js +27 -0
  34. package/dist/codegen/decisions-table.js.map +1 -0
  35. package/dist/codegen/decisions-tests.d.ts +3 -0
  36. package/dist/codegen/decisions-tests.d.ts.map +1 -0
  37. package/dist/codegen/decisions-tests.js +43 -0
  38. package/dist/codegen/decisions-tests.js.map +1 -0
  39. package/dist/codegen/e2e-stubs.d.ts +4 -0
  40. package/dist/codegen/e2e-stubs.d.ts.map +1 -0
  41. package/dist/codegen/e2e-stubs.js +21 -0
  42. package/dist/codegen/e2e-stubs.js.map +1 -0
  43. package/dist/codegen/events.d.ts +8 -0
  44. package/dist/codegen/events.d.ts.map +1 -0
  45. package/dist/codegen/events.js +36 -0
  46. package/dist/codegen/events.js.map +1 -0
  47. package/dist/codegen/index.d.ts +18 -0
  48. package/dist/codegen/index.d.ts.map +1 -0
  49. package/dist/codegen/index.js +18 -0
  50. package/dist/codegen/index.js.map +1 -0
  51. package/dist/codegen/invariants.d.ts +4 -0
  52. package/dist/codegen/invariants.d.ts.map +1 -0
  53. package/dist/codegen/invariants.js +53 -0
  54. package/dist/codegen/invariants.js.map +1 -0
  55. package/dist/codegen/mermaid.d.ts +4 -0
  56. package/dist/codegen/mermaid.d.ts.map +1 -0
  57. package/dist/codegen/mermaid.js +21 -0
  58. package/dist/codegen/mermaid.js.map +1 -0
  59. package/dist/codegen/orchestrators.d.ts +7 -0
  60. package/dist/codegen/orchestrators.d.ts.map +1 -0
  61. package/dist/codegen/orchestrators.js +32 -0
  62. package/dist/codegen/orchestrators.js.map +1 -0
  63. package/dist/codegen/policy-index.d.ts +7 -0
  64. package/dist/codegen/policy-index.d.ts.map +1 -0
  65. package/dist/codegen/policy-index.js +40 -0
  66. package/dist/codegen/policy-index.js.map +1 -0
  67. package/dist/codegen/policy-mermaid.d.ts +7 -0
  68. package/dist/codegen/policy-mermaid.d.ts.map +1 -0
  69. package/dist/codegen/policy-mermaid.js +30 -0
  70. package/dist/codegen/policy-mermaid.js.map +1 -0
  71. package/dist/codegen/policy-tests.d.ts +8 -0
  72. package/dist/codegen/policy-tests.d.ts.map +1 -0
  73. package/dist/codegen/policy-tests.js +167 -0
  74. package/dist/codegen/policy-tests.js.map +1 -0
  75. package/dist/codegen/policy-validator.d.ts +8 -0
  76. package/dist/codegen/policy-validator.d.ts.map +1 -0
  77. package/dist/codegen/policy-validator.js +69 -0
  78. package/dist/codegen/policy-validator.js.map +1 -0
  79. package/dist/codegen/tests.d.ts +4 -0
  80. package/dist/codegen/tests.d.ts.map +1 -0
  81. package/dist/codegen/tests.js +125 -0
  82. package/dist/codegen/tests.js.map +1 -0
  83. package/dist/codegen/transitions.d.ts +4 -0
  84. package/dist/codegen/transitions.d.ts.map +1 -0
  85. package/dist/codegen/transitions.js +41 -0
  86. package/dist/codegen/transitions.js.map +1 -0
  87. package/dist/codegen/types.d.ts +4 -0
  88. package/dist/codegen/types.d.ts.map +1 -0
  89. package/dist/codegen/types.js +48 -0
  90. package/dist/codegen/types.js.map +1 -0
  91. package/dist/codegen/utils.d.ts +85 -0
  92. package/dist/codegen/utils.d.ts.map +1 -0
  93. package/dist/codegen/utils.js +357 -0
  94. package/dist/codegen/utils.js.map +1 -0
  95. package/dist/codegen/zod.d.ts +4 -0
  96. package/dist/codegen/zod.d.ts.map +1 -0
  97. package/dist/codegen/zod.js +32 -0
  98. package/dist/codegen/zod.js.map +1 -0
  99. package/dist/examples/generated/customer.types.d.ts +7 -0
  100. package/dist/examples/generated/customer.types.d.ts.map +1 -0
  101. package/dist/examples/generated/customer.types.js +2 -0
  102. package/dist/examples/generated/customer.types.js.map +1 -0
  103. package/dist/examples/generated/order.types.d.ts +9 -0
  104. package/dist/examples/generated/order.types.d.ts.map +1 -0
  105. package/dist/examples/generated/order.types.js +2 -0
  106. package/dist/examples/generated/order.types.js.map +1 -0
  107. package/dist/examples/generated/pet.types.d.ts +11 -0
  108. package/dist/examples/generated/pet.types.d.ts.map +1 -0
  109. package/dist/examples/generated/pet.types.js +2 -0
  110. package/dist/examples/generated/pet.types.js.map +1 -0
  111. package/dist/examples/pet-store.d.ts +137 -0
  112. package/dist/examples/pet-store.d.ts.map +1 -0
  113. package/dist/examples/pet-store.js +139 -0
  114. package/dist/examples/pet-store.js.map +1 -0
  115. package/dist/examples/src/customer.e2e.d.ts +2 -0
  116. package/dist/examples/src/customer.e2e.d.ts.map +1 -0
  117. package/dist/examples/src/customer.e2e.js +17 -0
  118. package/dist/examples/src/customer.e2e.js.map +1 -0
  119. package/dist/examples/src/customer.orchestrators.d.ts +5 -0
  120. package/dist/examples/src/customer.orchestrators.d.ts.map +1 -0
  121. package/dist/examples/src/customer.orchestrators.js +5 -0
  122. package/dist/examples/src/customer.orchestrators.js.map +1 -0
  123. package/dist/examples/src/order.e2e.d.ts +2 -0
  124. package/dist/examples/src/order.e2e.d.ts.map +1 -0
  125. package/dist/examples/src/order.e2e.js +22 -0
  126. package/dist/examples/src/order.e2e.js.map +1 -0
  127. package/dist/examples/src/order.orchestrators.d.ts +9 -0
  128. package/dist/examples/src/order.orchestrators.d.ts.map +1 -0
  129. package/dist/examples/src/order.orchestrators.js +10 -0
  130. package/dist/examples/src/order.orchestrators.js.map +1 -0
  131. package/dist/examples/src/pet.e2e.d.ts +2 -0
  132. package/dist/examples/src/pet.e2e.d.ts.map +1 -0
  133. package/dist/examples/src/pet.e2e.js +17 -0
  134. package/dist/examples/src/pet.e2e.js.map +1 -0
  135. package/dist/examples/src/pet.orchestrators.d.ts +8 -0
  136. package/dist/examples/src/pet.orchestrators.d.ts.map +1 -0
  137. package/dist/examples/src/pet.orchestrators.js +9 -0
  138. package/dist/examples/src/pet.orchestrators.js.map +1 -0
  139. package/dist/schema/actions.d.ts +37 -0
  140. package/dist/schema/actions.d.ts.map +1 -0
  141. package/dist/schema/actions.js +35 -0
  142. package/dist/schema/actions.js.map +1 -0
  143. package/dist/schema/constraints.d.ts +20 -0
  144. package/dist/schema/constraints.d.ts.map +1 -0
  145. package/dist/schema/constraints.js +15 -0
  146. package/dist/schema/constraints.js.map +1 -0
  147. package/dist/schema/decisions.d.ts +29 -0
  148. package/dist/schema/decisions.d.ts.map +1 -0
  149. package/dist/schema/decisions.js +56 -0
  150. package/dist/schema/decisions.js.map +1 -0
  151. package/dist/schema/index.d.ts +17 -0
  152. package/dist/schema/index.d.ts.map +1 -0
  153. package/dist/schema/index.js +8 -0
  154. package/dist/schema/index.js.map +1 -0
  155. package/dist/schema/model.d.ts +65 -0
  156. package/dist/schema/model.d.ts.map +1 -0
  157. package/dist/schema/model.js +30 -0
  158. package/dist/schema/model.js.map +1 -0
  159. package/dist/schema/policy.d.ts +25 -0
  160. package/dist/schema/policy.d.ts.map +1 -0
  161. package/dist/schema/policy.js +53 -0
  162. package/dist/schema/policy.js.map +1 -0
  163. package/dist/schema/props.d.ts +57 -0
  164. package/dist/schema/props.d.ts.map +1 -0
  165. package/dist/schema/props.js +53 -0
  166. package/dist/schema/props.js.map +1 -0
  167. package/dist/schema/relations.d.ts +9 -0
  168. package/dist/schema/relations.d.ts.map +1 -0
  169. package/dist/schema/relations.js +9 -0
  170. package/dist/schema/relations.js.map +1 -0
  171. package/dist/schema/transitions.d.ts +34 -0
  172. package/dist/schema/transitions.d.ts.map +1 -0
  173. package/dist/schema/transitions.js +25 -0
  174. package/dist/schema/transitions.js.map +1 -0
  175. package/dist/schema/types.d.ts +18 -0
  176. package/dist/schema/types.d.ts.map +1 -0
  177. package/dist/schema/types.js +11 -0
  178. package/dist/schema/types.js.map +1 -0
  179. package/package.json +55 -0
@@ -0,0 +1,139 @@
1
+ import { action, belongsTo, boolean, date, decisions, hasMany, lifecycle, model, number, oneOf, optional, policy, string, } from "../schema/index.js";
2
+ // --- Customer ---
3
+ const customerStates = lifecycle.states("active", "suspended", "deleted");
4
+ const Customer = model("Customer", {
5
+ actions: {
6
+ updateEmail: action({ email: string() }),
7
+ },
8
+ props: {
9
+ email: string(),
10
+ name: string(),
11
+ status: lifecycle(customerStates),
12
+ },
13
+ transitions: ({ from }) => ({
14
+ delete: from(customerStates.active).to(customerStates.deleted),
15
+ reactivate: from(customerStates.suspended).to(customerStates.active),
16
+ suspend: from(customerStates.active).to(customerStates.suspended),
17
+ }),
18
+ });
19
+ // --- Pet ---
20
+ const petStates = lifecycle.states("available", "reserved", "sold");
21
+ const petProps = {
22
+ name: string(),
23
+ nickname: optional(string()),
24
+ price: number(),
25
+ species: oneOf(["dog", "cat", "bird", "fish"]),
26
+ status: lifecycle(petStates),
27
+ vaccinated: boolean(),
28
+ };
29
+ const Pet = model("Pet", {
30
+ actions: {
31
+ updatePrice: action({ price: number() }),
32
+ vaccinate: action({ date: string() }),
33
+ },
34
+ constraints: ({ rule }) => ({
35
+ nicknameTooLong: rule()
36
+ .when((ctx) => ctx.nickname !== undefined && ctx.nickname.length > 20)
37
+ .prevent("vaccinate"),
38
+ }),
39
+ props: petProps,
40
+ transitions: ({ from }) => ({
41
+ release: from(petStates.reserved)
42
+ .to(petStates.available)
43
+ .scenario({ price: 25 }, petStates.available),
44
+ reserve: from(petStates.available)
45
+ .to(petStates.reserved)
46
+ .when((ctx) => ctx.vaccinated === true)
47
+ .scenario({ vaccinated: true }, petStates.reserved)
48
+ .scenario({ vaccinated: false }, petStates.available),
49
+ sell: from(petStates.reserved)
50
+ .to(petStates.sold)
51
+ .when((ctx) => ctx.price > 0)
52
+ .scenario({ price: 50, vaccinated: true }, petStates.sold)
53
+ .scenario({ price: 0, vaccinated: true }, petStates.reserved),
54
+ }),
55
+ });
56
+ // --- Order ---
57
+ const orderStates = lifecycle.states("pending", "paid", "shipped", "delivered", "cancelled");
58
+ const Order = model("Order", {
59
+ actions: {
60
+ addItem: action({
61
+ productId: string(),
62
+ quantity: number(),
63
+ }),
64
+ removeItem: action({ itemId: string() }),
65
+ },
66
+ constraints: ({ rule }) => ({
67
+ cannotAddWhenCancelled: rule()
68
+ .when((ctx) => ctx.status === orderStates.cancelled)
69
+ .prevent("addItem"),
70
+ cannotRemoveWhenEmpty: rule()
71
+ .when((ctx) => ctx.total === 0)
72
+ .prevent("removeItem"),
73
+ }),
74
+ props: {
75
+ createdAt: date(),
76
+ status: lifecycle(orderStates),
77
+ total: number(),
78
+ },
79
+ relations: {
80
+ customer: belongsTo(Customer),
81
+ item: hasMany(Pet),
82
+ },
83
+ transitions: ({ from }) => ({
84
+ cancel: from(orderStates.pending).to(orderStates.cancelled),
85
+ deliver: from(orderStates.shipped).to(orderStates.delivered),
86
+ pay: from(orderStates.pending)
87
+ .to(orderStates.paid)
88
+ .when((ctx) => ctx.total > 0)
89
+ .scenario({ total: 100 }, orderStates.paid)
90
+ .scenario({ total: 0 }, orderStates.pending),
91
+ ship: from(orderStates.paid).to(orderStates.shipped),
92
+ }),
93
+ });
94
+ // --- CreditTier (decision table) ---
95
+ const CreditTier = decisions("CreditTier", {
96
+ inputs: { amount: number(), extraItemId: string() },
97
+ outputs: { credits: number() },
98
+ rules: [
99
+ { then: { credits: 5 }, when: { extraItemId: "tier_3" } },
100
+ { then: { credits: 10 }, when: { extraItemId: "tier_5" } },
101
+ { then: { credits: 30 }, when: { extraItemId: "tier_12" } },
102
+ ],
103
+ });
104
+ // --- PetAdoptionFee (decisions linked to model props) ---
105
+ // species comes from Pet.props — oneOf(["dog", "cat", "bird", "fish"]).
106
+ // Adding/removing a species in Pet forces this table to be reviewed.
107
+ // Using "typo" in when would be a compile error.
108
+ const PetAdoptionFee = decisions("PetAdoptionFee", {
109
+ inputs: { species: petProps.species, vaccinated: petProps.vaccinated },
110
+ outputs: { fee: number() },
111
+ rules: [
112
+ { then: { fee: 50 }, when: { species: "dog", vaccinated: true } },
113
+ { then: { fee: 75 }, when: { species: "dog", vaccinated: false } },
114
+ { then: { fee: 30 }, when: { species: "cat", vaccinated: true } },
115
+ { then: { fee: 45 }, when: { species: "cat", vaccinated: false } },
116
+ { then: { fee: 20 }, when: { species: "bird" } },
117
+ { then: { fee: 15 }, when: { species: "fish" } },
118
+ ],
119
+ });
120
+ // --- NoSuspendedCustomerOrders (policy: cross-model rule) ---
121
+ // Prevents adding items to orders when the customer is suspended or deleted.
122
+ const NoSuspendedCustomerOrders = policy("NoSuspendedCustomerOrders", {
123
+ on: { action: "addItem", model: Order },
124
+ requires: {
125
+ customer: belongsTo(Customer),
126
+ },
127
+ rules: [
128
+ {
129
+ effect: "prevent",
130
+ when: (ctx) => ctx.customer.status === customerStates.suspended,
131
+ },
132
+ {
133
+ effect: "warn",
134
+ when: (ctx) => ctx.customer.status === customerStates.deleted,
135
+ },
136
+ ],
137
+ });
138
+ export { CreditTier, Customer, NoSuspendedCustomerOrders, Order, Pet, PetAdoptionFee, };
139
+ //# sourceMappingURL=pet-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pet-store.js","sourceRoot":"","sources":["../../src/examples/pet-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=customer.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customer.e2e.d.ts","sourceRoot":"","sources":["../../../src/examples/src/customer.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { test } from "vitest";
2
+ test("Customer: delete flow (active → deleted)", async () => {
3
+ // TODO: setup — create Customer in 'active' state
4
+ // TODO: act — trigger delete
5
+ // TODO: assert — verify state is 'deleted'
6
+ });
7
+ test("Customer: reactivate flow (suspended → active)", async () => {
8
+ // TODO: setup — create Customer in 'suspended' state
9
+ // TODO: act — trigger reactivate
10
+ // TODO: assert — verify state is 'active'
11
+ });
12
+ test("Customer: suspend flow (active → suspended)", async () => {
13
+ // TODO: setup — create Customer in 'active' state
14
+ // TODO: act — trigger suspend
15
+ // TODO: assert — verify state is 'suspended'
16
+ });
17
+ //# sourceMappingURL=customer.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customer.e2e.js","sourceRoot":"","sources":["../../../src/examples/src/customer.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,kDAAkD;IAClD,6BAA6B;IAC7B,2CAA2C;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;IAChE,qDAAqD;IACrD,iCAAiC;IACjC,0CAA0C;AAC5C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,kDAAkD;IAClD,8BAA8B;IAC9B,6CAA6C;AAC/C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CustomerProps } from "../generated/customer.types.js";
2
+ export declare function handleCustomerUpdateEmail(ctx: CustomerProps, _payload: {
3
+ email: string;
4
+ }): CustomerProps;
5
+ //# sourceMappingURL=customer.orchestrators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customer.orchestrators.d.ts","sourceRoot":"","sources":["../../../src/examples/src/customer.orchestrators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B,aAAa,CAGf"}
@@ -0,0 +1,5 @@
1
+ export function handleCustomerUpdateEmail(ctx, _payload) {
2
+ // TODO: implement updateEmail
3
+ return ctx;
4
+ }
5
+ //# sourceMappingURL=customer.orchestrators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customer.orchestrators.js","sourceRoot":"","sources":["../../../src/examples/src/customer.orchestrators.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CACvC,GAAkB,EAClB,QAA2B;IAE3B,8BAA8B;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=order.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.e2e.d.ts","sourceRoot":"","sources":["../../../src/examples/src/order.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { test } from "vitest";
2
+ test("Order: cancel flow (pending → cancelled)", async () => {
3
+ // TODO: setup — create Order in 'pending' state
4
+ // TODO: act — trigger cancel
5
+ // TODO: assert — verify state is 'cancelled'
6
+ });
7
+ test("Order: deliver flow (shipped → delivered)", async () => {
8
+ // TODO: setup — create Order in 'shipped' state
9
+ // TODO: act — trigger deliver
10
+ // TODO: assert — verify state is 'delivered'
11
+ });
12
+ test("Order: pay flow (pending → paid)", async () => {
13
+ // TODO: setup — create Order in 'pending' state
14
+ // TODO: act — trigger pay
15
+ // TODO: assert — verify state is 'paid'
16
+ });
17
+ test("Order: ship flow (paid → shipped)", async () => {
18
+ // TODO: setup — create Order in 'paid' state
19
+ // TODO: act — trigger ship
20
+ // TODO: assert — verify state is 'shipped'
21
+ });
22
+ //# sourceMappingURL=order.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.e2e.js","sourceRoot":"","sources":["../../../src/examples/src/order.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,gDAAgD;IAChD,6BAA6B;IAC7B,6CAA6C;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IAC3D,gDAAgD;IAChD,8BAA8B;IAC9B,6CAA6C;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;IAClD,gDAAgD;IAChD,0BAA0B;IAC1B,wCAAwC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACnD,6CAA6C;IAC7C,2BAA2B;IAC3B,2CAA2C;AAC7C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { OrderProps } from "../generated/order.types.js";
2
+ export declare function handleOrderAddItem(ctx: OrderProps, _payload: {
3
+ productId: string;
4
+ quantity: number;
5
+ }): OrderProps;
6
+ export declare function handleOrderRemoveItem(ctx: OrderProps, _payload: {
7
+ itemId: string;
8
+ }): OrderProps;
9
+ //# sourceMappingURL=order.orchestrators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.orchestrators.d.ts","sourceRoot":"","sources":["../../../src/examples/src/order.orchestrators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAChD,UAAU,CAIZ;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3B,UAAU,CAGZ"}
@@ -0,0 +1,10 @@
1
+ export function handleOrderAddItem(ctx, _payload) {
2
+ // TODO: validate policies (NoSuspendedCustomerOrders)
3
+ // TODO: implement addItem
4
+ return ctx;
5
+ }
6
+ export function handleOrderRemoveItem(ctx, _payload) {
7
+ // TODO: implement removeItem
8
+ return ctx;
9
+ }
10
+ //# sourceMappingURL=order.orchestrators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.orchestrators.js","sourceRoot":"","sources":["../../../src/examples/src/order.orchestrators.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAChC,GAAe,EACf,QAAiD;IAEjD,sDAAsD;IACtD,0BAA0B;IAC1B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,GAAe,EACf,QAA4B;IAE5B,6BAA6B;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pet.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pet.e2e.d.ts","sourceRoot":"","sources":["../../../src/examples/src/pet.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { test } from "vitest";
2
+ test("Pet: release flow (reserved → available)", async () => {
3
+ // TODO: setup — create Pet in 'reserved' state
4
+ // TODO: act — trigger release
5
+ // TODO: assert — verify state is 'available'
6
+ });
7
+ test("Pet: reserve flow (available → reserved)", async () => {
8
+ // TODO: setup — create Pet in 'available' state
9
+ // TODO: act — trigger reserve
10
+ // TODO: assert — verify state is 'reserved'
11
+ });
12
+ test("Pet: sell flow (reserved → sold)", async () => {
13
+ // TODO: setup — create Pet in 'reserved' state
14
+ // TODO: act — trigger sell
15
+ // TODO: assert — verify state is 'sold'
16
+ });
17
+ //# sourceMappingURL=pet.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pet.e2e.js","sourceRoot":"","sources":["../../../src/examples/src/pet.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,+CAA+C;IAC/C,8BAA8B;IAC9B,6CAA6C;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,gDAAgD;IAChD,8BAA8B;IAC9B,4CAA4C;AAC9C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;IAClD,+CAA+C;IAC/C,2BAA2B;IAC3B,wCAAwC;AAC1C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PetProps } from "../generated/pet.types.js";
2
+ export declare function handlePetUpdatePrice(ctx: PetProps, _payload: {
3
+ price: number;
4
+ }): PetProps;
5
+ export declare function handlePetVaccinate(ctx: PetProps, _payload: {
6
+ date: string;
7
+ }): PetProps;
8
+ //# sourceMappingURL=pet.orchestrators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pet.orchestrators.d.ts","sourceRoot":"","sources":["../../../src/examples/src/pet.orchestrators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B,QAAQ,CAGV;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB,QAAQ,CAGV"}
@@ -0,0 +1,9 @@
1
+ export function handlePetUpdatePrice(ctx, _payload) {
2
+ // TODO: implement updatePrice
3
+ return ctx;
4
+ }
5
+ export function handlePetVaccinate(ctx, _payload) {
6
+ // TODO: implement vaccinate
7
+ return ctx;
8
+ }
9
+ //# sourceMappingURL=pet.orchestrators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pet.orchestrators.js","sourceRoot":"","sources":["../../../src/examples/src/pet.orchestrators.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,GAAa,EACb,QAA2B;IAE3B,8BAA8B;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAa,EACb,QAA0B;IAE1B,4BAA4B;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { BooleanProp, DateProp, NumberProp, PropDef, StringProp } from "./props.js";
2
+ declare const ACTION_PAYLOAD: unique symbol;
3
+ /**
4
+ * Typed action definition. The Payload generic is carried at compile time
5
+ * via a phantom symbol brand — codegen extracts it to generate command types.
6
+ * The optional `fields` property carries payload metadata at runtime for codegen.
7
+ */
8
+ export type ActionDef<Payload = unknown> = {
9
+ readonly [ACTION_PAYLOAD]: Payload;
10
+ readonly fields?: Record<string, PropDef>;
11
+ readonly kind: "action";
12
+ };
13
+ /**
14
+ * Maps a Payload type to a record of PropDef fields, enforcing that
15
+ * each key in Payload has the correctly-typed PropDef descriptor.
16
+ */
17
+ type FieldsOf<P> = {
18
+ [K in keyof P]: PropDefFor<P[K]>;
19
+ };
20
+ /**
21
+ * Maps a TypeScript type to the corresponding PropDef variant.
22
+ * Used by FieldsOf to enforce compile-time validation between Payload and fields.
23
+ */
24
+ type PropDefFor<T> = T extends string ? StringProp : T extends number ? NumberProp : T extends boolean ? BooleanProp : T extends Date ? DateProp : PropDef;
25
+ /**
26
+ * Create a typed action definition with optional runtime payload metadata.
27
+ *
28
+ * When Payload is specified, fields are compile-time validated to match:
29
+ * action<{ name: string }>({ name: string() }) // OK
30
+ * action<{ name: string }>({ name: number() }) // compile error
31
+ * action<{ name: string }>({ wrong: string() }) // compile error
32
+ *
33
+ * Fields are also runtime-validated to ensure each value is a valid PropDef.
34
+ */
35
+ export declare const action: <Payload = unknown>(fields?: unknown extends Payload ? Record<string, PropDef> : FieldsOf<Payload>) => ActionDef<Payload>;
36
+ export {};
37
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/schema/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,OAAO,GAAG,OAAO,IAAI;IACzC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,KAAK,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAExD;;;GAGG;AACH,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACjC,UAAU,GACV,CAAC,SAAS,MAAM,GACd,UAAU,GACV,CAAC,SAAS,OAAO,GACf,WAAW,GACX,CAAC,SAAS,IAAI,GACZ,QAAQ,GACR,OAAO,CAAC;AA0BlB;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,GAAG,OAAO,EACtC,SAAS,OAAO,SAAS,OAAO,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,QAAQ,CAAC,OAAO,CAAC,KACpB,SAAS,CAAC,OAAO,CAQnB,CAAC"}
@@ -0,0 +1,35 @@
1
+ const VALID_PROP_KINDS = new Set([
2
+ "boolean",
3
+ "date",
4
+ "lifecycle",
5
+ "number",
6
+ "oneOf",
7
+ "string",
8
+ ]);
9
+ const validateFields = (fields) => {
10
+ for (const [key, value] of Object.entries(fields)) {
11
+ if (!value ||
12
+ typeof value !== "object" ||
13
+ !VALID_PROP_KINDS.has(value.kind)) {
14
+ throw new Error(`action() field "${key}" must be a PropDef (string(), number(), etc.). ` +
15
+ `Got: ${JSON.stringify(value)}`);
16
+ }
17
+ }
18
+ };
19
+ /**
20
+ * Create a typed action definition with optional runtime payload metadata.
21
+ *
22
+ * When Payload is specified, fields are compile-time validated to match:
23
+ * action<{ name: string }>({ name: string() }) // OK
24
+ * action<{ name: string }>({ name: number() }) // compile error
25
+ * action<{ name: string }>({ wrong: string() }) // compile error
26
+ *
27
+ * Fields are also runtime-validated to ensure each value is a valid PropDef.
28
+ */
29
+ export const action = (fields) => {
30
+ if (fields) {
31
+ validateFields(fields);
32
+ }
33
+ return (fields ? { fields, kind: "action" } : { kind: "action" });
34
+ };
35
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/schema/actions.ts"],"names":[],"mappings":"AAyCA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,SAAS;IACT,MAAM;IACN,WAAW;IACX,QAAQ;IACR,OAAO;IACP,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,MAA+B,EAAQ,EAAE;IAC/D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IACE,CAAC,KAAK;YACN,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EACjC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,kDAAkD;gBACtE,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAClC,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,MAEqB,EACD,EAAE;IACtB,IAAI,MAAM,EAAE,CAAC;QACX,cAAc,CAAC,MAAiC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CACL,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnC,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** Builder — returned during model definition for chaining .when()/.prevent(). */
2
+ export type ConstraintBuilder<Ctx = Record<string, unknown>, ActionKeys extends string = string> = {
3
+ /** Replaces previous prevented action (last-wins semantics). */
4
+ prevent(actionName: ActionKeys): ConstraintBuilder<Ctx, ActionKeys>;
5
+ /**
6
+ * Replaces previous guard (last-wins semantics).
7
+ * Guards on optional props must handle undefined values — no automatic null checks are added.
8
+ */
9
+ when(fn: (ctx: Ctx) => boolean): ConstraintBuilder<Ctx, ActionKeys>;
10
+ } & ConstraintData<Ctx, ActionKeys>;
11
+ /** Plain data — stored in ModelDef, consumed by codegen. No builder methods. */
12
+ export type ConstraintData<Ctx = Record<string, unknown>, ActionKeys extends string = string> = {
13
+ readonly guard: ((ctx: Ctx) => boolean) | null;
14
+ readonly kind: "constraint";
15
+ readonly preventedAction: ActionKeys | null;
16
+ };
17
+ export declare const rule: () => ConstraintBuilder;
18
+ /** @internal Used by model() to create typed rule() factories. Phantom generics — type-level only, erased at runtime. */
19
+ export declare const createTypedRule: <Ctx, ActionKeys extends string>() => () => ConstraintBuilder<Ctx, ActionKeys>;
20
+ //# sourceMappingURL=constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/schema/constraints.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,CAC3B,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,SAAS,MAAM,GAAG,MAAM,IAChC;IACF,gEAAgE;IAChE,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpE;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;CACrE,GAAG,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAEpC,gFAAgF;AAChF,MAAM,MAAM,cAAc,CACxB,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,SAAS,MAAM,GAAG,MAAM,IAChC;IACF,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;CAC7C,CAAC;AAoBF,eAAO,MAAM,IAAI,QAAO,iBACa,CAAC;AAEtC,yHAAyH;AACzH,eAAO,MAAM,eAAe,GACzB,GAAG,EAAE,UAAU,SAAS,MAAM,aAC3B,iBAAiB,CAAC,GAAG,EAAE,UAAU,CACiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ const createConstraintBuilder = (guard, preventedAction) => ({
2
+ guard,
3
+ kind: "constraint",
4
+ prevent(actionName) {
5
+ return createConstraintBuilder(guard, actionName);
6
+ },
7
+ preventedAction,
8
+ when(fn) {
9
+ return createConstraintBuilder(fn, preventedAction);
10
+ },
11
+ });
12
+ export const rule = () => createConstraintBuilder(null, null);
13
+ /** @internal Used by model() to create typed rule() factories. Phantom generics — type-level only, erased at runtime. */
14
+ export const createTypedRule = () => () => createConstraintBuilder(null, null);
15
+ //# sourceMappingURL=constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/schema/constraints.ts"],"names":[],"mappings":"AAwBA,MAAM,uBAAuB,GAAG,CAI9B,KAAqC,EACrC,eAAkC,EACE,EAAE,CAAC,CAAC;IACxC,KAAK;IACL,IAAI,EAAE,YAAY;IAClB,OAAO,CAAC,UAAU;QAChB,OAAO,uBAAuB,CAAkB,KAAK,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;IACD,eAAe;IACf,IAAI,CAAC,EAAE;QACL,OAAO,uBAAuB,CAAkB,EAAE,EAAE,eAAe,CAAC,CAAC;IACvE,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,GAAsB,EAAE,CAC1C,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEtC,yHAAyH;AACzH,MAAM,CAAC,MAAM,eAAe,GAC1B,GAAmC,EAAE,CACrC,GAAuC,EAAE,CACvC,uBAAuB,CAAkB,IAAI,EAAE,IAAI,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { InferPropType, PropDef } from "./props.js";
2
+ export type DecisionDef<Name extends string = string, I extends Record<string, PropDef> = Record<string, PropDef>, O extends Record<string, PropDef> = Record<string, PropDef>> = {
3
+ readonly inputs: I;
4
+ readonly kind: "decision";
5
+ readonly name: Name;
6
+ readonly outputs: O;
7
+ readonly rules: readonly DecisionRule<I, O>[];
8
+ };
9
+ export type DecisionRule<I extends Record<string, PropDef> = Record<string, PropDef>, O extends Record<string, PropDef> = Record<string, PropDef>> = {
10
+ readonly then: InferValues<O>;
11
+ readonly when: Partial<InferValues<I>>;
12
+ };
13
+ /**
14
+ * Maps a PropDef record to a plain value record.
15
+ * Unlike InferContext, does not handle optional — decision inputs/outputs are always required.
16
+ */
17
+ type InferValues<P extends Record<string, PropDef>> = InferValuesRaw<P> extends infer T ? {
18
+ [K in keyof T]: T[K];
19
+ } & {} : never;
20
+ type InferValuesRaw<P extends Record<string, PropDef>> = {
21
+ [K in keyof P]: InferPropType<P[K]>;
22
+ };
23
+ export declare function decisions<const Name extends string, const I extends Record<string, PropDef>, const O extends Record<string, PropDef>>(name: Name, config: {
24
+ readonly inputs: I;
25
+ readonly outputs: O;
26
+ readonly rules: readonly DecisionRule<I, O>[];
27
+ }): DecisionDef<Name, I, O>;
28
+ export {};
29
+ //# sourceMappingURL=decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../src/schema/decisions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzD,MAAM,MAAM,WAAW,CACrB,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD;IACF,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD;IACF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAChD,cAAc,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAE5E,KAAK,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KACtD,CAAC,IAAI,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,CAAC;AAqDF,wBAAgB,SAAS,CACvB,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEvC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE;IACN,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CAC/C,GACA,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { isOptional } from "./props.js";
2
+ const validateProp = (key, prop, label) => {
3
+ if (prop.kind === "lifecycle")
4
+ throw new Error(`decisions() ${label} "${key}" cannot be a lifecycle prop — use oneOf() instead`);
5
+ if (isOptional(prop))
6
+ throw new Error(`decisions() ${label} "${key}" cannot be optional — all ${label}s are required`);
7
+ };
8
+ const validateRuleWhen = (rule, index, inputKeys) => {
9
+ for (const key of Object.keys(rule.when)) {
10
+ if (!inputKeys.includes(key))
11
+ throw new Error(`decisions() rule[${String(index)}].when key "${key}" is not a defined input`);
12
+ }
13
+ };
14
+ const validateRuleThen = (rule, index, outputKeys) => {
15
+ const thenKeys = Object.keys(rule.then);
16
+ for (const key of thenKeys) {
17
+ if (!outputKeys.includes(key))
18
+ throw new Error(`decisions() rule[${String(index)}].then key "${key}" is not a defined output`);
19
+ }
20
+ for (const key of outputKeys) {
21
+ if (!thenKeys.includes(key))
22
+ throw new Error(`decisions() rule[${String(index)}].then is missing output key "${key}"`);
23
+ }
24
+ };
25
+ // Implementation — callers see the public overload's return type, not this one.
26
+ // eslint-disable-next-line padding-line-between-statements -- overload implementation must be adjacent
27
+ export function decisions(name, config) {
28
+ const trimmed = name.trim();
29
+ if (!trimmed)
30
+ throw new Error("decisions() requires a non-empty name");
31
+ const cfg = config;
32
+ const inputKeys = Object.keys(cfg.inputs);
33
+ const outputKeys = Object.keys(cfg.outputs);
34
+ if (inputKeys.length === 0)
35
+ throw new Error("decisions() requires at least one input");
36
+ if (outputKeys.length === 0)
37
+ throw new Error("decisions() requires at least one output");
38
+ if (!cfg.rules || cfg.rules.length === 0)
39
+ throw new Error("decisions() requires at least one rule");
40
+ for (const [key, prop] of Object.entries(cfg.inputs))
41
+ validateProp(key, prop, "input");
42
+ for (const [key, prop] of Object.entries(cfg.outputs))
43
+ validateProp(key, prop, "output");
44
+ for (const [i, rule] of cfg.rules.entries()) {
45
+ validateRuleWhen(rule, i, inputKeys);
46
+ validateRuleThen(rule, i, outputKeys);
47
+ }
48
+ return {
49
+ inputs: cfg.inputs,
50
+ kind: "decision",
51
+ name: trimmed,
52
+ outputs: cfg.outputs,
53
+ rules: cfg.rules,
54
+ };
55
+ }
56
+ //# sourceMappingURL=decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../../src/schema/decisions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { action } from "./actions.js";
2
+ export type { ActionDef } from "./actions.js";
3
+ export type { ConstraintBuilder, ConstraintData } from "./constraints.js";
4
+ export { decisions } from "./decisions.js";
5
+ export type { DecisionDef, DecisionRule } from "./decisions.js";
6
+ export { model } from "./model.js";
7
+ export type { ConstraintHelpers, ModelDef, StatesOf, TransitionHelpers, } from "./model.js";
8
+ export { policy } from "./policy.js";
9
+ export type { PolicyDef, PolicyRule } from "./policy.js";
10
+ export { boolean, date, lifecycle, number, oneOf, optional, string, } from "./props.js";
11
+ export type { BooleanProp, DateProp, InferContext, InferPropType, LifecycleProp, NumberProp, OneOfProp, OptionalPropDef, PropDef, PropKind, StringProp, } from "./props.js";
12
+ export { belongsTo, hasMany } from "./relations.js";
13
+ export type { RelationDef, RelationKind } from "./relations.js";
14
+ export type { Scenario, TransitionBuilder, TransitionData, } from "./transitions.js";
15
+ export { ref } from "./types.js";
16
+ export type { ModelRef } from "./types.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EACV,QAAQ,EACR,iBAAiB,EACjB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { action } from "./actions.js";
2
+ export { decisions } from "./decisions.js";
3
+ export { model } from "./model.js";
4
+ export { policy } from "./policy.js";
5
+ export { boolean, date, lifecycle, number, oneOf, optional, string, } from "./props.js";
6
+ export { belongsTo, hasMany } from "./relations.js";
7
+ export { ref } from "./types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAOnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,GACP,MAAM,YAAY,CAAC;AAcpB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAOpD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC"}