@hyperscale0/udl 1.0.0 → 1.0.124

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 (234) hide show
  1. package/CHANGELOG.md +5 -216
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +14 -106
  5. package/dist/canonical.d.ts.map +1 -1
  6. package/dist/canonical.js +1 -29
  7. package/dist/canonical.js.map +1 -1
  8. package/dist/diagnostics.d.ts +13 -165
  9. package/dist/diagnostics.d.ts.map +1 -1
  10. package/dist/diagnostics.js +33 -157
  11. package/dist/diagnostics.js.map +1 -1
  12. package/dist/field-value.d.ts +5 -0
  13. package/dist/field-value.d.ts.map +1 -0
  14. package/dist/field-value.js +85 -0
  15. package/dist/field-value.js.map +1 -0
  16. package/dist/finance.d.ts +10 -53
  17. package/dist/finance.d.ts.map +1 -1
  18. package/dist/finance.js +252 -536
  19. package/dist/finance.js.map +1 -1
  20. package/dist/index.d.ts +9 -13
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/json.d.ts +2 -0
  25. package/dist/json.d.ts.map +1 -0
  26. package/dist/json.js +30 -0
  27. package/dist/json.js.map +1 -0
  28. package/dist/limits.d.ts +3 -28
  29. package/dist/limits.d.ts.map +1 -1
  30. package/dist/limits.js +5 -31
  31. package/dist/limits.js.map +1 -1
  32. package/dist/object-contract.d.ts +140 -0
  33. package/dist/object-contract.d.ts.map +1 -0
  34. package/dist/object-contract.js +314 -0
  35. package/dist/object-contract.js.map +1 -0
  36. package/dist/object-semantics-schema.d.ts +5710 -0
  37. package/dist/object-semantics-schema.d.ts.map +1 -0
  38. package/dist/object-semantics-schema.js +119 -0
  39. package/dist/object-semantics-schema.js.map +1 -0
  40. package/dist/object-semantics.d.ts +6 -0
  41. package/dist/object-semantics.d.ts.map +1 -0
  42. package/dist/object-semantics.js +279 -0
  43. package/dist/object-semantics.js.map +1 -0
  44. package/dist/object-structures.d.ts +4 -0
  45. package/dist/object-structures.d.ts.map +1 -0
  46. package/dist/object-structures.js +134 -0
  47. package/dist/object-structures.js.map +1 -0
  48. package/dist/reporting-validation.d.ts +8 -0
  49. package/dist/reporting-validation.d.ts.map +1 -0
  50. package/dist/reporting-validation.js +252 -0
  51. package/dist/reporting-validation.js.map +1 -0
  52. package/dist/reporting.d.ts +477 -0
  53. package/dist/reporting.d.ts.map +1 -0
  54. package/dist/reporting.js +169 -0
  55. package/dist/reporting.js.map +1 -0
  56. package/dist/schema.d.ts +5572 -2710
  57. package/dist/schema.d.ts.map +1 -1
  58. package/dist/schema.js +444 -1121
  59. package/dist/schema.js.map +1 -1
  60. package/dist/validation.d.ts +10 -73
  61. package/dist/validation.d.ts.map +1 -1
  62. package/dist/validation.js +1109 -2569
  63. package/dist/validation.js.map +1 -1
  64. package/docs/assets/brand/manifest.json +30 -0
  65. package/docs/assets/brand/udl-horizontal-white.svg +1 -0
  66. package/docs/assets/brand/udl-horizontal.svg +1 -0
  67. package/docs/assets/brand/udl-stacked-white.svg +1 -0
  68. package/docs/assets/brand/udl-stacked.svg +1 -0
  69. package/docs/assets/udl.svg +11 -0
  70. package/package.json +13 -22
  71. package/spec/README.md +300 -172
  72. package/spec/cars.udl.json +249 -0
  73. package/spec/udl.schema.json +3066 -2242
  74. package/src/canonical.ts +1 -35
  75. package/src/diagnostics.ts +76 -209
  76. package/src/field-value.ts +87 -0
  77. package/src/finance.ts +327 -832
  78. package/src/index.ts +18 -95
  79. package/src/json.ts +34 -0
  80. package/src/limits.ts +5 -31
  81. package/src/object-contract.ts +559 -0
  82. package/src/object-semantics-schema.ts +148 -0
  83. package/src/object-semantics.ts +378 -0
  84. package/src/object-structures.ts +255 -0
  85. package/src/reporting-validation.ts +383 -0
  86. package/src/reporting.ts +178 -0
  87. package/src/schema.ts +510 -1277
  88. package/src/validation.ts +1630 -4545
  89. package/LICENSE +0 -661
  90. package/LICENSING.md +0 -51
  91. package/TRADEMARKS.md +0 -35
  92. package/conformance/README.md +0 -82
  93. package/conformance/evolution/action-contract.expected.json +0 -10
  94. package/conformance/evolution/action-contract.live.udl +0 -44
  95. package/conformance/evolution/action-contract.next.udl +0 -45
  96. package/conformance/evolution/product-identity.expected.json +0 -10
  97. package/conformance/evolution/product-identity.live.udl +0 -55
  98. package/conformance/evolution/product-identity.next.udl +0 -55
  99. package/conformance/evolution/version-required.expected.json +0 -10
  100. package/conformance/evolution/version-required.live.udl +0 -55
  101. package/conformance/evolution/version-required.next.udl +0 -58
  102. package/conformance/invalid/action-without-transition.expected.json +0 -10
  103. package/conformance/invalid/action-without-transition.udl +0 -60
  104. package/conformance/invalid/agent-description-too-long.expected.json +0 -10
  105. package/conformance/invalid/agent-description-too-long.udl +0 -57
  106. package/conformance/invalid/blank-title.expected.json +0 -10
  107. package/conformance/invalid/blank-title.udl +0 -54
  108. package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
  109. package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
  110. package/conformance/invalid/depth-budget.expected.json +0 -10
  111. package/conformance/invalid/depth-budget.udl +0 -49
  112. package/conformance/invalid/duplicate-subject.expected.json +0 -10
  113. package/conformance/invalid/duplicate-subject.udl +0 -230
  114. package/conformance/invalid/forged-effects.expected.json +0 -10
  115. package/conformance/invalid/forged-effects.udl +0 -76
  116. package/conformance/invalid/format-version.expected.json +0 -10
  117. package/conformance/invalid/format-version.udl +0 -54
  118. package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
  119. package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
  120. package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
  121. package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
  122. package/conformance/invalid/invalid-check-duration.expected.json +0 -10
  123. package/conformance/invalid/invalid-check-duration.udl +0 -219
  124. package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
  125. package/conformance/invalid/invalid-dial-anchor.udl +0 -219
  126. package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
  127. package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
  128. package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
  129. package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
  130. package/conformance/invalid/invalid-remainder.expected.json +0 -10
  131. package/conformance/invalid/invalid-remainder.udl +0 -220
  132. package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
  133. package/conformance/invalid/invalid-schema-keyword.udl +0 -220
  134. package/conformance/invalid/invalid-utf8.expected.json +0 -10
  135. package/conformance/invalid/invalid-utf8.udl +0 -1
  136. package/conformance/invalid/malformed-json.expected.json +0 -10
  137. package/conformance/invalid/malformed-json.udl +0 -1
  138. package/conformance/invalid/missing-create-action.expected.json +0 -10
  139. package/conformance/invalid/missing-create-action.udl +0 -48
  140. package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
  141. package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
  142. package/conformance/invalid/missing-exception-contract.expected.json +0 -14
  143. package/conformance/invalid/missing-exception-contract.udl +0 -2523
  144. package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
  145. package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
  146. package/conformance/invalid/not-an-object.expected.json +0 -10
  147. package/conformance/invalid/not-an-object.udl +0 -1
  148. package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
  149. package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
  150. package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
  151. package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
  152. package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
  153. package/conformance/invalid/quote-named-reference-gate.udl +0 -50
  154. package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
  155. package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
  156. package/conformance/invalid/unknown-key.expected.json +0 -10
  157. package/conformance/invalid/unknown-key.udl +0 -55
  158. package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
  159. package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
  160. package/conformance/invalid/unknown-required-field.expected.json +0 -10
  161. package/conformance/invalid/unknown-required-field.udl +0 -220
  162. package/conformance/invalid/unreachable-state.expected.json +0 -10
  163. package/conformance/invalid/unreachable-state.udl +0 -55
  164. package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
  165. package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
  166. package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
  167. package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
  168. package/conformance/valid/agent-description.expected.json +0 -6
  169. package/conformance/valid/agent-description.udl +0 -66
  170. package/conformance/valid/cards.expected.json +0 -6
  171. package/conformance/valid/cards.udl +0 -1579
  172. package/conformance/valid/commerce-escrow.expected.json +0 -6
  173. package/conformance/valid/commerce-escrow.udl +0 -1512
  174. package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
  175. package/conformance/valid/compiled-crowdfunding.udl +0 -1843
  176. package/conformance/valid/compiled-watch-club.expected.json +0 -6
  177. package/conformance/valid/compiled-watch-club.udl +0 -2486
  178. package/conformance/valid/complete-contract.expected.json +0 -6
  179. package/conformance/valid/complete-contract.udl +0 -218
  180. package/conformance/valid/effect-signatures.expected.json +0 -6
  181. package/conformance/valid/effect-signatures.udl +0 -75
  182. package/conformance/valid/hand-edited.expected.json +0 -6
  183. package/conformance/valid/hand-edited.udl +0 -1
  184. package/conformance/valid/insured-car-marketplace.expected.json +0 -6
  185. package/conformance/valid/insured-car-marketplace.udl +0 -1050
  186. package/conformance/valid/insured-travel.expected.json +0 -6
  187. package/conformance/valid/insured-travel.udl +0 -3469
  188. package/conformance/valid/minimal.expected.json +0 -6
  189. package/conformance/valid/minimal.udl +0 -54
  190. package/conformance/valid/protection.expected.json +0 -6
  191. package/conformance/valid/protection.udl +0 -1551
  192. package/conformance/valid/string-escaping.expected.json +0 -6
  193. package/conformance/valid/string-escaping.udl +0 -54
  194. package/dist/check-profiles.d.ts +0 -57
  195. package/dist/check-profiles.d.ts.map +0 -1
  196. package/dist/check-profiles.js +0 -62
  197. package/dist/check-profiles.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -184
  201. package/dist/cli.js.map +0 -1
  202. package/dist/effects.d.ts +0 -41
  203. package/dist/effects.d.ts.map +0 -1
  204. package/dist/effects.js +0 -110
  205. package/dist/effects.js.map +0 -1
  206. package/dist/evolution.d.ts +0 -120
  207. package/dist/evolution.d.ts.map +0 -1
  208. package/dist/evolution.js +0 -567
  209. package/dist/evolution.js.map +0 -1
  210. package/dist/parser.d.ts +0 -4
  211. package/dist/parser.d.ts.map +0 -1
  212. package/dist/parser.js +0 -44
  213. package/dist/parser.js.map +0 -1
  214. package/docs/README.md +0 -14
  215. package/docs/guide/01-a-document.md +0 -37
  216. package/docs/guide/02-money-steps.md +0 -23
  217. package/docs/guide/03-laws.md +0 -18
  218. package/docs/guide/04-fees-and-remainder.md +0 -15
  219. package/docs/guide/05-checks-updates-dials.md +0 -7
  220. package/docs/guide/06-effects.md +0 -11
  221. package/docs/guide/07-evolution.md +0 -11
  222. package/docs/guide/08-implementing.md +0 -13
  223. package/docs/llms-full.txt +0 -1241
  224. package/docs/llms.txt +0 -14
  225. package/docs/reference/canonical.md +0 -16
  226. package/docs/reference/clauses.md +0 -986
  227. package/docs/reference/cli.md +0 -22
  228. package/docs/reference/diagnostics.md +0 -32
  229. package/skills/udl/SKILL.md +0 -28
  230. package/src/check-profiles.ts +0 -80
  231. package/src/cli.ts +0 -196
  232. package/src/effects.ts +0 -163
  233. package/src/evolution.ts +0 -965
  234. package/src/parser.ts +0 -58
@@ -1,6 +0,0 @@
1
- {
2
- "canonical": "string-escaping.udl",
3
- "digest": "78fbab9336ae8ae8b092ef1b238d86a1621f50891634b99f7bb630f9019f522f",
4
- "summary": "Canonical strings escape lone surrogates and retain U+2028 and U+007F as literal code points.",
5
- "verdict": "valid"
6
- }
@@ -1,54 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "moves": [],
11
- "steps": [],
12
- "summary": "Close the note."
13
- },
14
- "create": {
15
- "moves": [],
16
- "steps": [],
17
- "summary": "File the note."
18
- }
19
- },
20
- "fields": {
21
- "reference": {
22
- "type": "string"
23
- }
24
- },
25
- "id": "note",
26
- "idPrefix": "note",
27
- "lifecycle": {
28
- "initial": "open",
29
- "states": [
30
- "open",
31
- "closed"
32
- ],
33
- "transitions": {
34
- "close": {
35
- "from": [
36
- "open"
37
- ],
38
- "to": "closed"
39
- }
40
- }
41
- },
42
- "required": [
43
- "reference"
44
- ],
45
- "summary": "A lone surrogate \ud800 stays escaped; U+2028 
 and U+007F  stay literal.",
46
- "title": "Canonical string escaping"
47
- }
48
- ],
49
- "product": "canonical_string_escaping",
50
- "subjects": [],
51
- "title": "Canonical string escaping",
52
- "udl": 1,
53
- "version": 1
54
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * Evidence profiles that an instrument action may require before it runs.
3
- * The public grammar and the runtime both read this table. A pair absent here
4
- * cannot gate an action.
5
- */
6
- export interface UdlCheckEvidenceProfile {
7
- readonly family: string;
8
- readonly checkKind: string;
9
- readonly kindField?: string;
10
- readonly statusField: string;
11
- readonly statuses: readonly string[];
12
- }
13
- export declare const udlCheckEvidenceProfiles: readonly [{
14
- readonly family: "national_identity";
15
- readonly checkKind: "identity_verification";
16
- readonly kindField: "checkKind";
17
- readonly statusField: "verificationStatus";
18
- readonly statuses: readonly ["requested", "waiting", "completed", "rejected", "expired", "error"];
19
- }, {
20
- readonly family: "national_identity";
21
- readonly checkKind: "contact_ownership_verification";
22
- readonly kindField: "checkKind";
23
- readonly statusField: "matchResult";
24
- readonly statuses: readonly ["match", "no_match"];
25
- }, {
26
- readonly family: "credit_bureau";
27
- readonly checkKind: "consumer_inquiry";
28
- readonly kindField: "inquiryType";
29
- readonly statusField: "bureauStatus";
30
- readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
31
- }, {
32
- readonly family: "credit_bureau";
33
- readonly checkKind: "commercial_inquiry";
34
- readonly kindField: "inquiryType";
35
- readonly statusField: "bureauStatus";
36
- readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
37
- }, {
38
- readonly family: "credit_bureau";
39
- readonly checkKind: "facility_report";
40
- readonly kindField: "inquiryType";
41
- readonly statusField: "bureauStatus";
42
- readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
43
- }, {
44
- readonly family: "sanctions_screening";
45
- readonly checkKind: "screen";
46
- readonly kindField: "checkKind";
47
- readonly statusField: "screeningStatus";
48
- readonly statuses: readonly ["clear", "hit", "manual_review"];
49
- }, {
50
- readonly family: "enforcement_instrument";
51
- readonly checkKind: "note_request";
52
- readonly statusField: "requestStatus";
53
- readonly statuses: readonly ["debtor_approved", "debtor_rejected", "auto_cancelled"];
54
- }];
55
- /** Returns the tenant-gateable evidence profile for one family and check. */
56
- export declare function udlCheckEvidenceProfile(family: string, checkKind: string): UdlCheckEvidenceProfile | undefined;
57
- //# sourceMappingURL=check-profiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-profiles.d.ts","sourceRoot":"","sources":["../src/check-profiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDkB,CAAC;AAExD,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,uBAAuB,GAAG,SAAS,CAIrC"}
@@ -1,62 +0,0 @@
1
- export const udlCheckEvidenceProfiles = [
2
- {
3
- family: "national_identity",
4
- checkKind: "identity_verification",
5
- kindField: "checkKind",
6
- statusField: "verificationStatus",
7
- statuses: [
8
- "requested",
9
- "waiting",
10
- "completed",
11
- "rejected",
12
- "expired",
13
- "error",
14
- ],
15
- },
16
- {
17
- family: "national_identity",
18
- checkKind: "contact_ownership_verification",
19
- kindField: "checkKind",
20
- statusField: "matchResult",
21
- statuses: ["match", "no_match"],
22
- },
23
- {
24
- family: "credit_bureau",
25
- checkKind: "consumer_inquiry",
26
- kindField: "inquiryType",
27
- statusField: "bureauStatus",
28
- statuses: ["returned", "acknowledged", "correction_required"],
29
- },
30
- {
31
- family: "credit_bureau",
32
- checkKind: "commercial_inquiry",
33
- kindField: "inquiryType",
34
- statusField: "bureauStatus",
35
- statuses: ["returned", "acknowledged", "correction_required"],
36
- },
37
- {
38
- family: "credit_bureau",
39
- checkKind: "facility_report",
40
- kindField: "inquiryType",
41
- statusField: "bureauStatus",
42
- statuses: ["returned", "acknowledged", "correction_required"],
43
- },
44
- {
45
- family: "sanctions_screening",
46
- checkKind: "screen",
47
- kindField: "checkKind",
48
- statusField: "screeningStatus",
49
- statuses: ["clear", "hit", "manual_review"],
50
- },
51
- {
52
- family: "enforcement_instrument",
53
- checkKind: "note_request",
54
- statusField: "requestStatus",
55
- statuses: ["debtor_approved", "debtor_rejected", "auto_cancelled"],
56
- },
57
- ];
58
- /** Returns the tenant-gateable evidence profile for one family and check. */
59
- export function udlCheckEvidenceProfile(family, checkKind) {
60
- return udlCheckEvidenceProfiles.find((profile) => profile.family === family && profile.checkKind === checkKind);
61
- }
62
- //# sourceMappingURL=check-profiles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-profiles.js","sourceRoot":"","sources":["../src/check-profiles.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC;QACE,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,uBAAuB;QAClC,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;YACT,WAAW;YACX,UAAU;YACV,SAAS;YACT,OAAO;SACR;KACF;IACD;QACE,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;KAChC;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,kBAAkB;QAC7B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC;KAC5C;IACD;QACE,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;KACnE;CACoD,CAAC;AAExD,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,SAAiB;IAEjB,OAAO,wBAAwB,CAAC,IAAI,CAClC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAC1E,CAAC;AACJ,CAAC"}
package/dist/cli.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js DELETED
@@ -1,184 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * The `udl` command. Actions over the same library the compiler uses:
4
- * `validate` answers whether a document is admissible, `fmt` writes the
5
- * canonical bytes, and `diff` answers whether a change is legal against a
6
- * document that already has live instances.
7
- */
8
- import { readFile, writeFile } from "node:fs/promises";
9
- import { canonicalizeUdl, canonicalDigest, diffValidatedUdlEvolution, parseUdl, UdlError, udlDiagnostic, } from "./index.js";
10
- const USAGE = `udl - the Universal Domain Language toolchain
11
-
12
- usage:
13
- udl validate <file> parse <file> and report every issue found
14
- udl fmt <file> [--write] print the canonical form, or rewrite the file
15
- udl canon <file> [--digest] print canonical bytes, or their SHA-256 digest
16
- udl diff <live> <next> check <next> against the append-only law
17
- udl explain UDL#### explain one stable diagnostic code
18
- udl help print this
19
-
20
- exit codes:
21
- 0 the document is admissible, or the change is additive
22
- 1 the document was refused, or the change breaks the append-only law
23
- 2 the command line was wrong, or a file could not be read`;
24
- async function main(argv) {
25
- const [command, ...rest] = argv;
26
- switch (command) {
27
- case "help":
28
- case "-h":
29
- case "--help":
30
- console.log(USAGE);
31
- return 0;
32
- case "validate":
33
- return validateCommand(rest);
34
- case "fmt":
35
- return formatCommand(rest);
36
- case "canon":
37
- return canonCommand(rest);
38
- case "diff":
39
- return diffCommand(rest);
40
- case "explain":
41
- return explainCommand(rest);
42
- case undefined:
43
- return usageError("udl: no command given");
44
- default:
45
- return usageError(`udl: unknown command ${command}`);
46
- }
47
- }
48
- async function canonCommand(args) {
49
- const digest = args.includes("--digest");
50
- const [file, ...extra] = args.filter((argument) => argument !== "--digest");
51
- if (file === undefined || extra.length > 0) {
52
- return usageError("usage: udl canon <file> [--digest]");
53
- }
54
- const bytes = await readDocument(file);
55
- if (bytes === null)
56
- return 2;
57
- let document;
58
- try {
59
- document = parseUdl(bytes);
60
- }
61
- catch (error) {
62
- return reportIssues(file, error);
63
- }
64
- if (digest)
65
- console.log(await canonicalDigest(document));
66
- else
67
- process.stdout.write(canonicalizeUdl(bytes));
68
- return 0;
69
- }
70
- function explainCommand(args) {
71
- const [code, ...extra] = args;
72
- if (code === undefined || extra.length > 0) {
73
- return usageError("usage: udl explain UDL####");
74
- }
75
- const diagnostic = udlDiagnostic(code);
76
- if (!diagnostic) {
77
- return usageError(`udl: unknown diagnostic code ${code}`);
78
- }
79
- console.log(`${code} ${diagnostic.title}`);
80
- console.log(`category: ${diagnostic.category}`);
81
- console.log(`family: ${diagnostic.family}`);
82
- console.log(`fix: ${diagnostic.fix}`);
83
- return 0;
84
- }
85
- async function validateCommand(args) {
86
- const [file, ...extra] = args;
87
- if (file === undefined || extra.length > 0) {
88
- return usageError("usage: udl validate <file>");
89
- }
90
- const bytes = await readDocument(file);
91
- if (bytes === null)
92
- return 2;
93
- if (parseDocument(file, bytes) === null)
94
- return 1;
95
- console.log(`${file}: ok`);
96
- return 0;
97
- }
98
- async function formatCommand(args) {
99
- const write = args.includes("--write");
100
- const [file, ...extra] = args.filter((argument) => argument !== "--write");
101
- if (file === undefined || extra.length > 0) {
102
- return usageError("usage: udl fmt <file> [--write]");
103
- }
104
- const bytes = await readDocument(file);
105
- if (bytes === null)
106
- return 2;
107
- let canonical;
108
- try {
109
- canonical = canonicalizeUdl(bytes);
110
- }
111
- catch (error) {
112
- return reportIssues(file, error);
113
- }
114
- if (!write) {
115
- process.stdout.write(canonical);
116
- return 0;
117
- }
118
- // The bytes decoded cleanly already: canonicalizeUdl refuses anything else.
119
- if (new TextDecoder().decode(bytes) === canonical)
120
- return 0;
121
- await writeFile(file, canonical);
122
- console.log(`${file}: formatted`);
123
- return 0;
124
- }
125
- async function diffCommand(args) {
126
- const [livePath, nextPath, ...extra] = args;
127
- if (livePath === undefined || nextPath === undefined || extra.length > 0) {
128
- return usageError("usage: udl diff <live> <next>");
129
- }
130
- const liveBytes = await readDocument(livePath);
131
- const nextBytes = await readDocument(nextPath);
132
- if (liveBytes === null || nextBytes === null)
133
- return 2;
134
- const live = parseDocument(livePath, liveBytes);
135
- const next = parseDocument(nextPath, nextBytes);
136
- if (live === null || next === null)
137
- return 1;
138
- // `parseDocument` already validated both, so take the door that does not
139
- // validate a second time.
140
- const violations = diffValidatedUdlEvolution(live, next);
141
- if (violations.length === 0) {
142
- console.log(`${nextPath}: additive`);
143
- return 0;
144
- }
145
- for (const violation of violations) {
146
- console.error(`${nextPath}: ${violation.code} ${violation.path}: ${violation.message}`);
147
- }
148
- return 1;
149
- }
150
- async function readDocument(file) {
151
- try {
152
- return await readFile(file);
153
- }
154
- catch (error) {
155
- const reason = error instanceof Error ? error.message : String(error);
156
- console.error(`udl: cannot read ${file}: ${reason}`);
157
- return null;
158
- }
159
- }
160
- /** Parses one document, printing its issues. Null means the document was refused. */
161
- function parseDocument(file, bytes) {
162
- try {
163
- return parseUdl(bytes);
164
- }
165
- catch (error) {
166
- reportIssues(file, error);
167
- return null;
168
- }
169
- }
170
- function reportIssues(file, error) {
171
- if (!(error instanceof UdlError))
172
- throw error;
173
- for (const issue of error.issues) {
174
- console.error(`${file}: ${issue.code} ${issue.path}: ${issue.message}`);
175
- }
176
- return 1;
177
- }
178
- function usageError(message) {
179
- console.error(message);
180
- console.error(USAGE);
181
- return 2;
182
- }
183
- process.exitCode = await main(process.argv.slice(2));
184
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/effects.d.ts DELETED
@@ -1,41 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,110 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"effects.js","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}