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.
- package/README.md +195 -0
- package/bin/dopespec.mjs +26 -0
- package/dist/__tests__/codegen.test.d.ts +2 -0
- package/dist/__tests__/codegen.test.d.ts.map +1 -0
- package/dist/__tests__/codegen.test.js +713 -0
- package/dist/__tests__/codegen.test.js.map +1 -0
- package/dist/__tests__/e2e-proof.test.d.ts +2 -0
- package/dist/__tests__/e2e-proof.test.d.ts.map +1 -0
- package/dist/__tests__/e2e-proof.test.js +153 -0
- package/dist/__tests__/e2e-proof.test.js.map +1 -0
- package/dist/__tests__/schema.test.d.ts +2 -0
- package/dist/__tests__/schema.test.d.ts.map +1 -0
- package/dist/__tests__/schema.test.js +822 -0
- package/dist/__tests__/schema.test.js.map +1 -0
- package/dist/__tests__/type-errors.d.ts +2 -0
- package/dist/__tests__/type-errors.d.ts.map +1 -0
- package/dist/__tests__/type-errors.js +128 -0
- package/dist/__tests__/type-errors.js.map +1 -0
- package/dist/cli/generate.d.ts +2 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +250 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/codegen/commands.d.ts +4 -0
- package/dist/codegen/commands.d.ts.map +1 -0
- package/dist/codegen/commands.js +25 -0
- package/dist/codegen/commands.js.map +1 -0
- package/dist/codegen/decisions-evaluate.d.ts +3 -0
- package/dist/codegen/decisions-evaluate.d.ts.map +1 -0
- package/dist/codegen/decisions-evaluate.js +50 -0
- package/dist/codegen/decisions-evaluate.js.map +1 -0
- package/dist/codegen/decisions-table.d.ts +3 -0
- package/dist/codegen/decisions-table.d.ts.map +1 -0
- package/dist/codegen/decisions-table.js +27 -0
- package/dist/codegen/decisions-table.js.map +1 -0
- package/dist/codegen/decisions-tests.d.ts +3 -0
- package/dist/codegen/decisions-tests.d.ts.map +1 -0
- package/dist/codegen/decisions-tests.js +43 -0
- package/dist/codegen/decisions-tests.js.map +1 -0
- package/dist/codegen/e2e-stubs.d.ts +4 -0
- package/dist/codegen/e2e-stubs.d.ts.map +1 -0
- package/dist/codegen/e2e-stubs.js +21 -0
- package/dist/codegen/e2e-stubs.js.map +1 -0
- package/dist/codegen/events.d.ts +8 -0
- package/dist/codegen/events.d.ts.map +1 -0
- package/dist/codegen/events.js +36 -0
- package/dist/codegen/events.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +18 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/invariants.d.ts +4 -0
- package/dist/codegen/invariants.d.ts.map +1 -0
- package/dist/codegen/invariants.js +53 -0
- package/dist/codegen/invariants.js.map +1 -0
- package/dist/codegen/mermaid.d.ts +4 -0
- package/dist/codegen/mermaid.d.ts.map +1 -0
- package/dist/codegen/mermaid.js +21 -0
- package/dist/codegen/mermaid.js.map +1 -0
- package/dist/codegen/orchestrators.d.ts +7 -0
- package/dist/codegen/orchestrators.d.ts.map +1 -0
- package/dist/codegen/orchestrators.js +32 -0
- package/dist/codegen/orchestrators.js.map +1 -0
- package/dist/codegen/policy-index.d.ts +7 -0
- package/dist/codegen/policy-index.d.ts.map +1 -0
- package/dist/codegen/policy-index.js +40 -0
- package/dist/codegen/policy-index.js.map +1 -0
- package/dist/codegen/policy-mermaid.d.ts +7 -0
- package/dist/codegen/policy-mermaid.d.ts.map +1 -0
- package/dist/codegen/policy-mermaid.js +30 -0
- package/dist/codegen/policy-mermaid.js.map +1 -0
- package/dist/codegen/policy-tests.d.ts +8 -0
- package/dist/codegen/policy-tests.d.ts.map +1 -0
- package/dist/codegen/policy-tests.js +167 -0
- package/dist/codegen/policy-tests.js.map +1 -0
- package/dist/codegen/policy-validator.d.ts +8 -0
- package/dist/codegen/policy-validator.d.ts.map +1 -0
- package/dist/codegen/policy-validator.js +69 -0
- package/dist/codegen/policy-validator.js.map +1 -0
- package/dist/codegen/tests.d.ts +4 -0
- package/dist/codegen/tests.d.ts.map +1 -0
- package/dist/codegen/tests.js +125 -0
- package/dist/codegen/tests.js.map +1 -0
- package/dist/codegen/transitions.d.ts +4 -0
- package/dist/codegen/transitions.d.ts.map +1 -0
- package/dist/codegen/transitions.js +41 -0
- package/dist/codegen/transitions.js.map +1 -0
- package/dist/codegen/types.d.ts +4 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/codegen/types.js +48 -0
- package/dist/codegen/types.js.map +1 -0
- package/dist/codegen/utils.d.ts +85 -0
- package/dist/codegen/utils.d.ts.map +1 -0
- package/dist/codegen/utils.js +357 -0
- package/dist/codegen/utils.js.map +1 -0
- package/dist/codegen/zod.d.ts +4 -0
- package/dist/codegen/zod.d.ts.map +1 -0
- package/dist/codegen/zod.js +32 -0
- package/dist/codegen/zod.js.map +1 -0
- package/dist/examples/generated/customer.types.d.ts +7 -0
- package/dist/examples/generated/customer.types.d.ts.map +1 -0
- package/dist/examples/generated/customer.types.js +2 -0
- package/dist/examples/generated/customer.types.js.map +1 -0
- package/dist/examples/generated/order.types.d.ts +9 -0
- package/dist/examples/generated/order.types.d.ts.map +1 -0
- package/dist/examples/generated/order.types.js +2 -0
- package/dist/examples/generated/order.types.js.map +1 -0
- package/dist/examples/generated/pet.types.d.ts +11 -0
- package/dist/examples/generated/pet.types.d.ts.map +1 -0
- package/dist/examples/generated/pet.types.js +2 -0
- package/dist/examples/generated/pet.types.js.map +1 -0
- package/dist/examples/pet-store.d.ts +137 -0
- package/dist/examples/pet-store.d.ts.map +1 -0
- package/dist/examples/pet-store.js +139 -0
- package/dist/examples/pet-store.js.map +1 -0
- package/dist/examples/src/customer.e2e.d.ts +2 -0
- package/dist/examples/src/customer.e2e.d.ts.map +1 -0
- package/dist/examples/src/customer.e2e.js +17 -0
- package/dist/examples/src/customer.e2e.js.map +1 -0
- package/dist/examples/src/customer.orchestrators.d.ts +5 -0
- package/dist/examples/src/customer.orchestrators.d.ts.map +1 -0
- package/dist/examples/src/customer.orchestrators.js +5 -0
- package/dist/examples/src/customer.orchestrators.js.map +1 -0
- package/dist/examples/src/order.e2e.d.ts +2 -0
- package/dist/examples/src/order.e2e.d.ts.map +1 -0
- package/dist/examples/src/order.e2e.js +22 -0
- package/dist/examples/src/order.e2e.js.map +1 -0
- package/dist/examples/src/order.orchestrators.d.ts +9 -0
- package/dist/examples/src/order.orchestrators.d.ts.map +1 -0
- package/dist/examples/src/order.orchestrators.js +10 -0
- package/dist/examples/src/order.orchestrators.js.map +1 -0
- package/dist/examples/src/pet.e2e.d.ts +2 -0
- package/dist/examples/src/pet.e2e.d.ts.map +1 -0
- package/dist/examples/src/pet.e2e.js +17 -0
- package/dist/examples/src/pet.e2e.js.map +1 -0
- package/dist/examples/src/pet.orchestrators.d.ts +8 -0
- package/dist/examples/src/pet.orchestrators.d.ts.map +1 -0
- package/dist/examples/src/pet.orchestrators.js +9 -0
- package/dist/examples/src/pet.orchestrators.js.map +1 -0
- package/dist/schema/actions.d.ts +37 -0
- package/dist/schema/actions.d.ts.map +1 -0
- package/dist/schema/actions.js +35 -0
- package/dist/schema/actions.js.map +1 -0
- package/dist/schema/constraints.d.ts +20 -0
- package/dist/schema/constraints.d.ts.map +1 -0
- package/dist/schema/constraints.js +15 -0
- package/dist/schema/constraints.js.map +1 -0
- package/dist/schema/decisions.d.ts +29 -0
- package/dist/schema/decisions.d.ts.map +1 -0
- package/dist/schema/decisions.js +56 -0
- package/dist/schema/decisions.js.map +1 -0
- package/dist/schema/index.d.ts +17 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/model.d.ts +65 -0
- package/dist/schema/model.d.ts.map +1 -0
- package/dist/schema/model.js +30 -0
- package/dist/schema/model.js.map +1 -0
- package/dist/schema/policy.d.ts +25 -0
- package/dist/schema/policy.d.ts.map +1 -0
- package/dist/schema/policy.js +53 -0
- package/dist/schema/policy.js.map +1 -0
- package/dist/schema/props.d.ts +57 -0
- package/dist/schema/props.d.ts.map +1 -0
- package/dist/schema/props.js +53 -0
- package/dist/schema/props.js.map +1 -0
- package/dist/schema/relations.d.ts +9 -0
- package/dist/schema/relations.d.ts.map +1 -0
- package/dist/schema/relations.js +9 -0
- package/dist/schema/relations.js.map +1 -0
- package/dist/schema/transitions.d.ts +34 -0
- package/dist/schema/transitions.d.ts.map +1 -0
- package/dist/schema/transitions.js +25 -0
- package/dist/schema/transitions.js.map +1 -0
- package/dist/schema/types.d.ts +18 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +11 -0
- package/dist/schema/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|