@hyperscale0/udl 1.0.0-beta.1 → 1.0.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.
- package/CHANGELOG.md +78 -25
- package/README.md +37 -99
- package/conformance/README.md +44 -41
- package/conformance/evolution/action-contract.expected.json +10 -0
- package/conformance/evolution/action-contract.live.udl +44 -0
- package/conformance/evolution/action-contract.next.udl +45 -0
- package/conformance/evolution/product-identity.expected.json +10 -0
- package/conformance/evolution/product-identity.live.udl +55 -0
- package/conformance/evolution/product-identity.next.udl +55 -0
- package/conformance/evolution/version-required.expected.json +10 -0
- package/conformance/evolution/version-required.live.udl +55 -0
- package/conformance/evolution/version-required.next.udl +58 -0
- package/conformance/invalid/action-without-transition.expected.json +10 -0
- package/conformance/invalid/{verb-without-transition.udl → action-without-transition.udl} +7 -2
- package/conformance/invalid/agent-description-too-long.expected.json +10 -0
- package/conformance/invalid/agent-description-too-long.udl +57 -0
- package/conformance/invalid/blank-title.expected.json +1 -1
- package/conformance/invalid/blank-title.udl +6 -2
- package/conformance/invalid/composition-dial-duplicate-key.expected.json +10 -0
- package/conformance/invalid/composition-dial-duplicate-key.udl +73 -0
- package/conformance/invalid/depth-budget.expected.json +1 -1
- package/conformance/invalid/duplicate-subject.expected.json +10 -0
- package/conformance/invalid/duplicate-subject.udl +230 -0
- package/conformance/invalid/forged-effects.expected.json +10 -0
- package/conformance/invalid/forged-effects.udl +76 -0
- package/conformance/invalid/format-version.expected.json +1 -1
- package/conformance/invalid/format-version.udl +6 -2
- package/conformance/invalid/instrument-id-not-snake-case.expected.json +10 -0
- package/conformance/invalid/{noun-id-not-snake-case.udl → instrument-id-not-snake-case.udl} +6 -2
- package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +10 -0
- package/conformance/invalid/invalid-aggregate-gate-shape.udl +1819 -0
- package/conformance/invalid/invalid-check-duration.expected.json +10 -0
- package/conformance/invalid/invalid-check-duration.udl +219 -0
- package/conformance/invalid/invalid-dial-anchor.expected.json +10 -0
- package/conformance/invalid/invalid-dial-anchor.udl +219 -0
- package/conformance/invalid/invalid-exception-parent-ref.expected.json +10 -0
- package/conformance/invalid/invalid-exception-parent-ref.udl +2487 -0
- package/conformance/invalid/invalid-exposure-shape.expected.json +10 -0
- package/conformance/invalid/invalid-exposure-shape.udl +1819 -0
- package/conformance/invalid/invalid-remainder.expected.json +10 -0
- package/conformance/invalid/invalid-remainder.udl +220 -0
- package/conformance/invalid/invalid-schema-keyword.expected.json +10 -0
- package/conformance/invalid/invalid-schema-keyword.udl +220 -0
- package/conformance/invalid/invalid-utf8.expected.json +1 -1
- package/conformance/invalid/malformed-json.expected.json +1 -1
- package/conformance/invalid/missing-create-action.expected.json +10 -0
- package/conformance/invalid/{missing-create-verb.udl → missing-create-action.udl} +5 -2
- package/conformance/invalid/missing-exception-amount-field.expected.json +10 -0
- package/conformance/invalid/missing-exception-amount-field.udl +2487 -0
- package/conformance/invalid/missing-exception-contract.expected.json +14 -0
- package/conformance/invalid/missing-exception-contract.udl +2523 -0
- package/conformance/invalid/missing-exception-reason-field.expected.json +10 -0
- package/conformance/invalid/missing-exception-reason-field.udl +2487 -0
- package/conformance/invalid/not-an-object.expected.json +1 -1
- package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +10 -0
- package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +259 -0
- package/conformance/invalid/quote-freeze-set-incomplete.expected.json +10 -0
- package/conformance/invalid/quote-freeze-set-incomplete.udl +261 -0
- package/conformance/invalid/quote-named-reference-gate.expected.json +10 -0
- package/conformance/invalid/quote-named-reference-gate.udl +50 -0
- package/conformance/invalid/reconcile-named-reference-gate.expected.json +10 -0
- package/conformance/invalid/reconcile-named-reference-gate.udl +50 -0
- package/conformance/invalid/unknown-key.expected.json +1 -1
- package/conformance/invalid/unknown-key.udl +6 -2
- package/conformance/invalid/unknown-reference-gate-field.expected.json +10 -0
- package/conformance/invalid/unknown-reference-gate-field.udl +1819 -0
- package/conformance/invalid/unknown-required-field.expected.json +10 -0
- package/conformance/invalid/unknown-required-field.udl +220 -0
- package/conformance/invalid/unreachable-state.expected.json +2 -2
- package/conformance/invalid/unreachable-state.udl +6 -2
- package/conformance/invalid/wrong-exception-amount-field.expected.json +10 -0
- package/conformance/invalid/wrong-exception-amount-field.udl +2487 -0
- package/conformance/invalid/wrong-exception-reason-field.expected.json +10 -0
- package/conformance/invalid/wrong-exception-reason-field.udl +2487 -0
- package/conformance/valid/agent-description.expected.json +6 -0
- package/conformance/valid/agent-description.udl +66 -0
- package/conformance/valid/cards.expected.json +1 -0
- package/conformance/valid/cards.udl +843 -356
- package/conformance/valid/commerce-escrow.expected.json +1 -0
- package/conformance/valid/commerce-escrow.udl +792 -291
- package/conformance/valid/compiled-crowdfunding.expected.json +6 -0
- package/conformance/valid/compiled-crowdfunding.udl +1843 -0
- package/conformance/valid/compiled-watch-club.expected.json +6 -0
- package/conformance/valid/compiled-watch-club.udl +2486 -0
- package/conformance/valid/complete-contract.expected.json +6 -0
- package/conformance/valid/complete-contract.udl +218 -0
- package/conformance/valid/effect-signatures.expected.json +6 -0
- package/conformance/valid/effect-signatures.udl +75 -0
- package/conformance/valid/hand-edited.expected.json +1 -0
- package/conformance/valid/hand-edited.udl +1 -1
- package/conformance/valid/insured-car-marketplace.expected.json +1 -0
- package/conformance/valid/insured-car-marketplace.udl +534 -315
- package/conformance/valid/insured-travel.expected.json +2 -1
- package/conformance/valid/insured-travel.udl +1489 -641
- package/conformance/valid/minimal.expected.json +1 -0
- package/conformance/valid/minimal.udl +18 -14
- package/conformance/valid/protection.expected.json +1 -0
- package/conformance/valid/protection.udl +719 -304
- package/conformance/valid/string-escaping.expected.json +6 -0
- package/conformance/valid/string-escaping.udl +54 -0
- package/dist/canonical.d.ts +2 -0
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +7 -0
- package/dist/canonical.js.map +1 -1
- package/dist/check-profiles.d.ts +57 -0
- package/dist/check-profiles.d.ts.map +1 -0
- package/dist/check-profiles.js +62 -0
- package/dist/check-profiles.js.map +1 -0
- package/dist/cli.js +48 -4
- package/dist/cli.js.map +1 -1
- package/dist/diagnostics.d.ts +168 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +164 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/effects.d.ts +41 -0
- package/dist/effects.d.ts.map +1 -0
- package/dist/effects.js +110 -0
- package/dist/effects.js.map +1 -0
- package/dist/evolution.d.ts +51 -18
- package/dist/evolution.d.ts.map +1 -1
- package/dist/evolution.js +244 -102
- package/dist/evolution.js.map +1 -1
- package/dist/finance.d.ts +17 -13
- package/dist/finance.d.ts.map +1 -1
- package/dist/finance.js +165 -109
- package/dist/finance.js.map +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/limits.d.ts +2 -2
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +4 -3
- package/dist/limits.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +6 -16
- package/dist/parser.js.map +1 -1
- package/dist/schema.d.ts +2059 -135
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +759 -73
- package/dist/schema.js.map +1 -1
- package/dist/validation.d.ts +22 -9
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1463 -457
- package/dist/validation.js.map +1 -1
- package/docs/README.md +14 -0
- package/docs/guide/01-a-document.md +37 -0
- package/docs/guide/02-money-steps.md +23 -0
- package/docs/guide/03-laws.md +18 -0
- package/docs/guide/04-fees-and-remainder.md +15 -0
- package/docs/guide/05-checks-updates-dials.md +7 -0
- package/docs/guide/06-effects.md +11 -0
- package/docs/guide/07-evolution.md +11 -0
- package/docs/guide/08-implementing.md +13 -0
- package/docs/llms-full.txt +1241 -0
- package/docs/llms.txt +14 -0
- package/docs/reference/canonical.md +16 -0
- package/docs/reference/clauses.md +986 -0
- package/docs/reference/cli.md +22 -0
- package/docs/reference/diagnostics.md +32 -0
- package/package.json +6 -2
- package/skills/udl/SKILL.md +28 -0
- package/spec/README.md +82 -51
- package/spec/udl.schema.json +1191 -119
- package/src/canonical.ts +11 -0
- package/src/check-profiles.ts +80 -0
- package/src/cli.ts +49 -3
- package/src/diagnostics.ts +221 -0
- package/src/effects.ts +163 -0
- package/src/evolution.ts +375 -125
- package/src/finance.ts +255 -160
- package/src/index.ts +50 -14
- package/src/limits.ts +4 -3
- package/src/parser.ts +15 -18
- package/src/schema.ts +855 -81
- package/src/validation.ts +2666 -560
- package/conformance/invalid/missing-create-verb.expected.json +0 -10
- package/conformance/invalid/noun-id-not-snake-case.expected.json +0 -10
- package/conformance/invalid/verb-without-transition.expected.json +0 -10
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
const diagnosticDefinitions = {
|
|
2
|
+
UDL1001: {
|
|
3
|
+
category: "invalid_utf8",
|
|
4
|
+
family: "admission",
|
|
5
|
+
title: "Invalid UTF-8",
|
|
6
|
+
fix: "Encode the document as valid UTF-8.",
|
|
7
|
+
},
|
|
8
|
+
UDL1002: {
|
|
9
|
+
category: "invalid_json",
|
|
10
|
+
family: "admission",
|
|
11
|
+
title: "Invalid JSON",
|
|
12
|
+
fix: "Repair the JSON syntax before validation.",
|
|
13
|
+
},
|
|
14
|
+
UDL1003: {
|
|
15
|
+
category: "invalid_shape",
|
|
16
|
+
family: "admission",
|
|
17
|
+
title: "Invalid document shape",
|
|
18
|
+
fix: "Match the published UDL JSON Schema.",
|
|
19
|
+
},
|
|
20
|
+
UDL1004: {
|
|
21
|
+
category: "resource_limit",
|
|
22
|
+
family: "admission",
|
|
23
|
+
title: "Resource limit exceeded",
|
|
24
|
+
fix: "Reduce the source size, nesting, values, strings, references, or financial paths named by the message.",
|
|
25
|
+
},
|
|
26
|
+
UDL2001: {
|
|
27
|
+
category: "invalid_semantics",
|
|
28
|
+
family: "document",
|
|
29
|
+
title: "Duplicate declaration",
|
|
30
|
+
fix: "Give each declaration a unique name.",
|
|
31
|
+
},
|
|
32
|
+
UDL2002: {
|
|
33
|
+
category: "invalid_semantics",
|
|
34
|
+
family: "document",
|
|
35
|
+
title: "Document law violation",
|
|
36
|
+
fix: "Repair the declaration, subject contract, or derived effects named by the message.",
|
|
37
|
+
},
|
|
38
|
+
UDL2005: {
|
|
39
|
+
category: "invalid_semantics",
|
|
40
|
+
family: "document",
|
|
41
|
+
title: "Derived effects mismatch",
|
|
42
|
+
fix: "Regenerate the action effects from its clauses.",
|
|
43
|
+
},
|
|
44
|
+
UDL3001: {
|
|
45
|
+
category: "invalid_semantics",
|
|
46
|
+
family: "lifecycle",
|
|
47
|
+
title: "Lifecycle is not closed",
|
|
48
|
+
fix: "Declare every state and action transition, and make every state reachable.",
|
|
49
|
+
},
|
|
50
|
+
UDL4001: {
|
|
51
|
+
category: "invalid_semantics",
|
|
52
|
+
family: "finance",
|
|
53
|
+
title: "Money graph violation",
|
|
54
|
+
fix: "Balance every funded amount and close every hold on each lifecycle path.",
|
|
55
|
+
},
|
|
56
|
+
UDL5001: {
|
|
57
|
+
category: "invalid_semantics",
|
|
58
|
+
family: "gates",
|
|
59
|
+
title: "Reference gate violation",
|
|
60
|
+
fix: "Point the gate at a declared instrument, action, state, field, and reference.",
|
|
61
|
+
},
|
|
62
|
+
UDL5002: {
|
|
63
|
+
category: "invalid_semantics",
|
|
64
|
+
family: "gates",
|
|
65
|
+
title: "Check requirement violation",
|
|
66
|
+
fix: "Use a declared check with compatible evidence and recurrence.",
|
|
67
|
+
},
|
|
68
|
+
UDL5003: {
|
|
69
|
+
category: "invalid_semantics",
|
|
70
|
+
family: "gates",
|
|
71
|
+
title: "Exposure gate violation",
|
|
72
|
+
fix: "Use declared account and money fields for the exposure gate.",
|
|
73
|
+
},
|
|
74
|
+
UDL5004: {
|
|
75
|
+
category: "invalid_semantics",
|
|
76
|
+
family: "gates",
|
|
77
|
+
title: "Aggregate law violation",
|
|
78
|
+
fix: "Point the aggregate at compatible parent and child fields.",
|
|
79
|
+
},
|
|
80
|
+
UDL5005: {
|
|
81
|
+
category: "invalid_semantics",
|
|
82
|
+
family: "gates",
|
|
83
|
+
title: "Settlement or payout violation",
|
|
84
|
+
fix: "Use a declared settlement account and a compatible payout statement line.",
|
|
85
|
+
},
|
|
86
|
+
UDL5006: {
|
|
87
|
+
category: "invalid_semantics",
|
|
88
|
+
family: "gates",
|
|
89
|
+
title: "Quote and commit violation",
|
|
90
|
+
fix: "Declare one complete quote freeze set and one matching commit action.",
|
|
91
|
+
},
|
|
92
|
+
UDL5007: {
|
|
93
|
+
category: "invalid_semantics",
|
|
94
|
+
family: "gates",
|
|
95
|
+
title: "Reconcile exception child violation",
|
|
96
|
+
fix: "Name a declared child whose reference points back to this instrument.",
|
|
97
|
+
},
|
|
98
|
+
UDL5008: {
|
|
99
|
+
category: "invalid_semantics",
|
|
100
|
+
family: "gates",
|
|
101
|
+
title: "Action clause violation",
|
|
102
|
+
fix: "Repair the clause fields and keep incompatible clauses separate.",
|
|
103
|
+
},
|
|
104
|
+
UDL5009: {
|
|
105
|
+
category: "invalid_semantics",
|
|
106
|
+
family: "gates",
|
|
107
|
+
title: "Reconcile exception amount field is missing or optional",
|
|
108
|
+
fix: "Name the exception child's required money field in amountField.",
|
|
109
|
+
},
|
|
110
|
+
UDL5010: {
|
|
111
|
+
category: "invalid_semantics",
|
|
112
|
+
family: "gates",
|
|
113
|
+
title: "Reconcile exception amount field has the wrong type",
|
|
114
|
+
fix: "Point amountField at a money field declared by the exception child.",
|
|
115
|
+
},
|
|
116
|
+
UDL5011: {
|
|
117
|
+
category: "invalid_semantics",
|
|
118
|
+
family: "gates",
|
|
119
|
+
title: "Reconcile exception reason field is missing or optional",
|
|
120
|
+
fix: "Name the exception child's required text field in reasonField.",
|
|
121
|
+
},
|
|
122
|
+
UDL5012: {
|
|
123
|
+
category: "invalid_semantics",
|
|
124
|
+
family: "gates",
|
|
125
|
+
title: "Reconcile exception reason field has the wrong type",
|
|
126
|
+
fix: "Point reasonField at a required plain text field declared by the exception child.",
|
|
127
|
+
},
|
|
128
|
+
UDL6001: {
|
|
129
|
+
category: "invalid_semantics",
|
|
130
|
+
family: "schema",
|
|
131
|
+
title: "Unsupported JSON Schema",
|
|
132
|
+
fix: "Use only the sealed UDL JSON Schema subset.",
|
|
133
|
+
},
|
|
134
|
+
UDL7001: {
|
|
135
|
+
category: "invalid_evolution",
|
|
136
|
+
family: "evolution",
|
|
137
|
+
title: "Stored contract changed",
|
|
138
|
+
fix: "Keep stored identities and contracts unchanged, and add only allowed optional declarations.",
|
|
139
|
+
},
|
|
140
|
+
UDL7002: {
|
|
141
|
+
category: "invalid_evolution",
|
|
142
|
+
family: "evolution",
|
|
143
|
+
title: "Version was not increased",
|
|
144
|
+
fix: "Increase the product version for every semantic change.",
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
export const udlDiagnostics = Object.entries(diagnosticDefinitions).map(([code, diagnostic]) => ({
|
|
148
|
+
code: code,
|
|
149
|
+
...diagnostic,
|
|
150
|
+
}));
|
|
151
|
+
export function udlDiagnostic(code) {
|
|
152
|
+
return udlDiagnostics.find((diagnostic) => diagnostic.code === code);
|
|
153
|
+
}
|
|
154
|
+
export function issue(code, path, messageDetail) {
|
|
155
|
+
const diagnostic = diagnosticDefinitions[code];
|
|
156
|
+
return {
|
|
157
|
+
category: diagnostic.category,
|
|
158
|
+
code,
|
|
159
|
+
fix: diagnostic.fix,
|
|
160
|
+
message: messageDetail ?? diagnostic.title,
|
|
161
|
+
path,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const udlEffectKinds: readonly ["decides", "holds", "moves", "notifies", "reads", "schedules"];
|
|
2
|
+
export type UdlEffectKind = (typeof udlEffectKinds)[number];
|
|
3
|
+
type EffectDescriptor = {
|
|
4
|
+
readonly kind: UdlEffectKind;
|
|
5
|
+
readonly per: "clause" | "element";
|
|
6
|
+
readonly signature: {
|
|
7
|
+
readonly fixed: string;
|
|
8
|
+
} | {
|
|
9
|
+
readonly fromField: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly movementClass: true;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
type ActionClauseDescriptor = {
|
|
15
|
+
readonly effects?: readonly EffectDescriptor[];
|
|
16
|
+
readonly scope: "action" | "instrument";
|
|
17
|
+
readonly target: string;
|
|
18
|
+
};
|
|
19
|
+
type EffectRow = {
|
|
20
|
+
readonly channel?: string;
|
|
21
|
+
readonly role?: string;
|
|
22
|
+
readonly signature: string;
|
|
23
|
+
readonly source: string;
|
|
24
|
+
};
|
|
25
|
+
export type DerivedUdlEffects = Partial<Readonly<Record<UdlEffectKind, readonly EffectRow[]>>>;
|
|
26
|
+
export type UdlMovementClass = "collection.pay_in" | "deposit.attributed" | "payout.external" | "transfer.internal";
|
|
27
|
+
interface Movement {
|
|
28
|
+
readonly bind?: Readonly<Record<string, unknown>>;
|
|
29
|
+
readonly operation: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Maps a UDL money operation to the meter and pricing class that owns it.
|
|
33
|
+
* Internal-transfer endpoint bindings are product accounts by construction.
|
|
34
|
+
* External collection, deposit, and payout operations carry their role in the
|
|
35
|
+
* operation family because their remote endpoint is not a UDL account binding.
|
|
36
|
+
*/
|
|
37
|
+
export declare function movementClass(move: Movement): UdlMovementClass;
|
|
38
|
+
/** Derive the ABI effect rows declared by the action-clause vocabulary. */
|
|
39
|
+
export declare function deriveUdlActionEffects(action: Readonly<Record<string, unknown>>, vocabulary: readonly ActionClauseDescriptor[]): DerivedUdlEffects;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,0EAOjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EACd;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC1B;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC9B;QAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;KAAE,CAAC;CACtC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,mBAAmB,CAAC;AAExB,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAsB9D;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC5C,iBAAiB,CAqCnB"}
|
package/dist/effects.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export const udlEffectKinds = [
|
|
2
|
+
"decides",
|
|
3
|
+
"holds",
|
|
4
|
+
"moves",
|
|
5
|
+
"notifies",
|
|
6
|
+
"reads",
|
|
7
|
+
"schedules",
|
|
8
|
+
];
|
|
9
|
+
function boundPath(move, endpoint) {
|
|
10
|
+
const binding = move.bind?.[endpoint];
|
|
11
|
+
if (binding === null || typeof binding !== "object")
|
|
12
|
+
return undefined;
|
|
13
|
+
const path = binding.path;
|
|
14
|
+
return typeof path === "string" ? path : undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Maps a UDL money operation to the meter and pricing class that owns it.
|
|
18
|
+
* Internal-transfer endpoint bindings are product accounts by construction.
|
|
19
|
+
* External collection, deposit, and payout operations carry their role in the
|
|
20
|
+
* operation family because their remote endpoint is not a UDL account binding.
|
|
21
|
+
*/
|
|
22
|
+
export function movementClass(move) {
|
|
23
|
+
if (move.operation.startsWith("internal_transfer.")) {
|
|
24
|
+
const source = boundPath(move, "sourceAccountId");
|
|
25
|
+
const destination = boundPath(move, "destinationAccountId");
|
|
26
|
+
if (source?.startsWith("fields.") &&
|
|
27
|
+
destination === "refs.escrowAccountId") {
|
|
28
|
+
return "collection.pay_in";
|
|
29
|
+
}
|
|
30
|
+
return "transfer.internal";
|
|
31
|
+
}
|
|
32
|
+
if (move.operation.startsWith("collection.pay_in.")) {
|
|
33
|
+
return "collection.pay_in";
|
|
34
|
+
}
|
|
35
|
+
if (move.operation.startsWith("deposit.")) {
|
|
36
|
+
return "deposit.attributed";
|
|
37
|
+
}
|
|
38
|
+
if (move.operation.startsWith("payout.")) {
|
|
39
|
+
return "payout.external";
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`cannot classify UDL movement operation ${move.operation}`);
|
|
42
|
+
}
|
|
43
|
+
/** Derive the ABI effect rows declared by the action-clause vocabulary. */
|
|
44
|
+
export function deriveUdlActionEffects(action, vocabulary) {
|
|
45
|
+
const effects = {};
|
|
46
|
+
for (const clause of vocabulary) {
|
|
47
|
+
if (clause.scope !== "action" || !clause.effects)
|
|
48
|
+
continue;
|
|
49
|
+
const value = actionClauseValue(action, clause.target);
|
|
50
|
+
if (value === undefined)
|
|
51
|
+
continue;
|
|
52
|
+
for (const descriptor of clause.effects) {
|
|
53
|
+
const values = descriptor.per === "element" && Array.isArray(value) ? value : [value];
|
|
54
|
+
for (const [index, candidate] of values.entries()) {
|
|
55
|
+
const object = recordValue(candidate);
|
|
56
|
+
if (descriptor.kind === "holds" &&
|
|
57
|
+
"fixed" in descriptor.signature &&
|
|
58
|
+
descriptor.signature.fixed === "reserve" &&
|
|
59
|
+
object?.operation !== "internal_transfer.reserve") {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const suffix = effectSignatureSuffix(descriptor, object);
|
|
63
|
+
if (!suffix)
|
|
64
|
+
continue;
|
|
65
|
+
(effects[descriptor.kind] ??= []).push({
|
|
66
|
+
signature: `${descriptor.kind}.${suffix}`,
|
|
67
|
+
source: descriptor.per === "element"
|
|
68
|
+
? `${clause.target}[${index}]`
|
|
69
|
+
: clause.target,
|
|
70
|
+
...(descriptor.kind === "notifies" &&
|
|
71
|
+
typeof object?.channel === "string" &&
|
|
72
|
+
typeof object.role === "string"
|
|
73
|
+
? { channel: object.channel, role: object.role }
|
|
74
|
+
: {}),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return effects;
|
|
80
|
+
}
|
|
81
|
+
function actionClauseValue(action, target) {
|
|
82
|
+
const [head, tail] = target.split(".");
|
|
83
|
+
if (!head)
|
|
84
|
+
return undefined;
|
|
85
|
+
const value = action[head];
|
|
86
|
+
if (!tail)
|
|
87
|
+
return value;
|
|
88
|
+
return recordValue(value)?.[tail];
|
|
89
|
+
}
|
|
90
|
+
function effectSignatureSuffix(descriptor, value) {
|
|
91
|
+
if ("fixed" in descriptor.signature)
|
|
92
|
+
return descriptor.signature.fixed;
|
|
93
|
+
if ("fromField" in descriptor.signature) {
|
|
94
|
+
const field = value?.[descriptor.signature.fromField];
|
|
95
|
+
return typeof field === "string" ? field : undefined;
|
|
96
|
+
}
|
|
97
|
+
if (!value || !("movementClass" in descriptor.signature))
|
|
98
|
+
return undefined;
|
|
99
|
+
const operation = value.operation;
|
|
100
|
+
const bind = recordValue(value.bind);
|
|
101
|
+
return typeof operation === "string"
|
|
102
|
+
? movementClass({ ...(bind ? { bind } : {}), operation })
|
|
103
|
+
: undefined;
|
|
104
|
+
}
|
|
105
|
+
function recordValue(value) {
|
|
106
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
107
|
+
? value
|
|
108
|
+
: undefined;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.js","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}
|
package/dist/evolution.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { UdlDocument,
|
|
1
|
+
import type { UdlDocument, UdlInstrument } from "./schema.js";
|
|
2
|
+
import { type UdlIssue } from "./diagnostics.js";
|
|
2
3
|
export interface EvolutionFieldSnapshot {
|
|
3
4
|
readonly required: boolean;
|
|
4
5
|
readonly schema: unknown;
|
|
@@ -11,35 +12,50 @@ export interface EvolutionStepSnapshot {
|
|
|
11
12
|
export interface EvolutionMoveSnapshot extends EvolutionStepSnapshot {
|
|
12
13
|
readonly key: string;
|
|
13
14
|
}
|
|
14
|
-
export interface
|
|
15
|
+
export interface EvolutionActionSnapshot {
|
|
15
16
|
/** Missing on snapshots written before receipt-input capture existed. */
|
|
16
17
|
readonly captureInput?: unknown;
|
|
17
18
|
readonly deadline: unknown;
|
|
18
19
|
readonly decision: unknown;
|
|
20
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
21
|
+
readonly principal?: string | null;
|
|
22
|
+
/** Missing on snapshots written before quote-commit existed. */
|
|
23
|
+
readonly commit?: string | null;
|
|
24
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
25
|
+
readonly remainder?: unknown;
|
|
26
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
27
|
+
readonly requiresChecks?: unknown;
|
|
28
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
29
|
+
readonly sandboxFailurePoint?: string | null;
|
|
30
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
31
|
+
readonly updates?: readonly string[];
|
|
19
32
|
/** Missing on snapshots written before weighted distribution existed. */
|
|
20
33
|
readonly distribute?: unknown;
|
|
21
34
|
readonly due: unknown;
|
|
22
35
|
readonly earnable: boolean;
|
|
36
|
+
/** Missing on snapshots written before derived effect rows entered UDL. */
|
|
37
|
+
readonly effects?: unknown;
|
|
23
38
|
readonly eventName: string | null;
|
|
24
39
|
readonly input: Readonly<Record<string, EvolutionFieldSnapshot>> | null;
|
|
25
40
|
/**
|
|
26
41
|
* Every top-level input schema keyword EXCEPT properties/required (those are
|
|
27
|
-
* diffed field by field). additionalProperties,
|
|
28
|
-
*
|
|
42
|
+
* diffed field by field). additionalProperties, string and array bounds,
|
|
43
|
+
* numeric bounds, enum, const, pattern, and format change what callers may
|
|
44
|
+
* send, so they are frozen once live.
|
|
29
45
|
*/
|
|
30
46
|
readonly inputConstraints: unknown;
|
|
31
47
|
/** Missing on snapshots written before payout intents existed. */
|
|
32
48
|
readonly payout?: unknown;
|
|
33
49
|
readonly port: unknown;
|
|
34
|
-
/** Missing on snapshots written before public
|
|
35
|
-
readonly
|
|
50
|
+
/** Missing on snapshots written before public action metadata existed. */
|
|
51
|
+
readonly publicAction?: string | null;
|
|
36
52
|
readonly requiresAggregate: unknown;
|
|
37
53
|
readonly requiresDrainedAccount: unknown;
|
|
38
54
|
/** Missing on snapshots written before exposure gates entered open UDL. */
|
|
39
55
|
readonly requiresExposure?: unknown;
|
|
40
56
|
readonly requiresRefs: unknown;
|
|
41
|
-
/** Missing on snapshots written before
|
|
42
|
-
readonly
|
|
57
|
+
/** Missing on snapshots written before reconcile expectations existed. */
|
|
58
|
+
readonly reconcile?: unknown;
|
|
43
59
|
readonly setsAt: unknown;
|
|
44
60
|
/** Missing on snapshots written before signed child sums existed. */
|
|
45
61
|
readonly signedSum?: unknown;
|
|
@@ -51,28 +67,45 @@ export interface EvolutionTransitionSnapshot {
|
|
|
51
67
|
readonly to: string;
|
|
52
68
|
}
|
|
53
69
|
/** The complete serializable algebra protected by append-only evolution. */
|
|
54
|
-
export interface
|
|
70
|
+
export interface InstrumentEvolutionSnapshot {
|
|
71
|
+
/** Missing on snapshots written before UDL carried authored action order. */
|
|
72
|
+
readonly actionOrder?: readonly string[];
|
|
55
73
|
readonly aggregateInvariants: readonly string[];
|
|
56
|
-
/** Missing on snapshots written before
|
|
57
|
-
readonly
|
|
74
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
75
|
+
readonly callerParkedStates?: Readonly<Record<string, string>>;
|
|
58
76
|
readonly derivedAmounts: readonly string[];
|
|
77
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
78
|
+
readonly dials?: unknown;
|
|
59
79
|
readonly distinctParties?: true;
|
|
80
|
+
/** Missing on snapshots written before unified fee rules entered UDL. */
|
|
81
|
+
readonly feeRules?: unknown;
|
|
60
82
|
readonly fields: Readonly<Record<string, EvolutionFieldSnapshot>>;
|
|
61
83
|
readonly id: string;
|
|
62
84
|
readonly idPrefix: string;
|
|
63
85
|
readonly initial: string;
|
|
86
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
87
|
+
readonly nav?: readonly string[];
|
|
64
88
|
readonly parties: Readonly<Record<string, string>>;
|
|
65
89
|
readonly partitions: readonly string[];
|
|
66
90
|
readonly states: readonly string[];
|
|
67
91
|
readonly subjects: readonly string[];
|
|
92
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
93
|
+
readonly subjectExtensible?: boolean;
|
|
94
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
95
|
+
readonly surfaceVisibility?: string | null;
|
|
96
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
97
|
+
readonly templateId?: string | null;
|
|
68
98
|
readonly transitions: Readonly<Record<string, EvolutionTransitionSnapshot>>;
|
|
69
|
-
|
|
99
|
+
/** Every quote-commit pair, keyed by quoting action. */
|
|
100
|
+
readonly quotes: unknown;
|
|
70
101
|
readonly updateFields: readonly string[];
|
|
102
|
+
/** Missing on snapshots written before UDL completeness. */
|
|
103
|
+
readonly updateExamples?: unknown;
|
|
71
104
|
readonly updateStates: readonly string[];
|
|
72
|
-
readonly
|
|
105
|
+
readonly actions: Readonly<Record<string, EvolutionActionSnapshot>>;
|
|
73
106
|
}
|
|
74
|
-
/** Project an open .udl
|
|
75
|
-
export declare function
|
|
107
|
+
/** Project an open .udl instrument into the evolution engine's exact semantic shape. */
|
|
108
|
+
export declare function snapshotUdlInstrument(instrument: UdlInstrument): InstrumentEvolutionSnapshot;
|
|
76
109
|
/**
|
|
77
110
|
* Compare two product definitions under the append-only evolution law.
|
|
78
111
|
*
|
|
@@ -81,7 +114,7 @@ export declare function snapshotUdlNoun(noun: UdlNoun): NounEvolutionSnapshot;
|
|
|
81
114
|
* it throws a RangeError out of here where the validator would have returned a
|
|
82
115
|
* clean `resource_limit` issue: parse first, then diff.
|
|
83
116
|
*/
|
|
84
|
-
export declare function diffValidatedUdlEvolution(previous: UdlDocument, next: UdlDocument): readonly
|
|
85
|
-
/** Diff one
|
|
86
|
-
export declare function
|
|
117
|
+
export declare function diffValidatedUdlEvolution(previous: UdlDocument, next: UdlDocument): readonly UdlIssue[];
|
|
118
|
+
/** Diff one instrument snapshot. An empty result means the change is additive. */
|
|
119
|
+
export declare function diffInstrumentEvolution(previous: InstrumentEvolutionSnapshot, next: InstrumentEvolutionSnapshot): readonly UdlIssue[];
|
|
87
120
|
//# sourceMappingURL=evolution.d.ts.map
|
package/dist/evolution.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evolution.d.ts","sourceRoot":"","sources":["../src/evolution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evolution.d.ts","sourceRoot":"","sources":["../src/evolution.ts"],"names":[],"mappings":"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"}
|