@hyperscale0/hsx 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.
Files changed (255) hide show
  1. package/CHANGELOG.md +58 -9
  2. package/LICENSING.md +3 -3
  3. package/README.md +39 -149
  4. package/TRADEMARKS.md +4 -4
  5. package/bin/hsx.ts +2 -0
  6. package/dist/bin/hsx.js +2 -0
  7. package/dist/bin/hsx.js.map +1 -1
  8. package/dist/src/ast.d.ts +135 -10
  9. package/dist/src/ast.d.ts.map +1 -1
  10. package/dist/src/ast.js +24 -0
  11. package/dist/src/ast.js.map +1 -1
  12. package/dist/src/cli.d.ts +4 -1
  13. package/dist/src/cli.d.ts.map +1 -1
  14. package/dist/src/cli.js +172 -16
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/compile.d.ts +42 -7
  17. package/dist/src/compile.d.ts.map +1 -1
  18. package/dist/src/compile.js +82 -16
  19. package/dist/src/compile.js.map +1 -1
  20. package/dist/src/cost.d.ts +78 -0
  21. package/dist/src/cost.d.ts.map +1 -0
  22. package/dist/src/cost.js +369 -0
  23. package/dist/src/cost.js.map +1 -0
  24. package/dist/src/diagnostics.d.ts +11 -0
  25. package/dist/src/diagnostics.d.ts.map +1 -0
  26. package/dist/src/diagnostics.js +420 -0
  27. package/dist/src/diagnostics.js.map +1 -0
  28. package/dist/src/emit.d.ts +34 -0
  29. package/dist/src/emit.d.ts.map +1 -0
  30. package/dist/src/emit.js +137 -0
  31. package/dist/src/emit.js.map +1 -0
  32. package/dist/src/entry-overrides.d.ts +17 -3
  33. package/dist/src/entry-overrides.d.ts.map +1 -1
  34. package/dist/src/entry-overrides.js +180 -35
  35. package/dist/src/entry-overrides.js.map +1 -1
  36. package/dist/src/format.d.ts +10 -0
  37. package/dist/src/format.d.ts.map +1 -0
  38. package/dist/src/format.js +183 -0
  39. package/dist/src/format.js.map +1 -0
  40. package/dist/src/index.d.ts +11 -4
  41. package/dist/src/index.d.ts.map +1 -1
  42. package/dist/src/index.js +10 -3
  43. package/dist/src/index.js.map +1 -1
  44. package/dist/src/ir.d.ts +66 -0
  45. package/dist/src/ir.d.ts.map +1 -0
  46. package/dist/src/ir.js +15 -0
  47. package/dist/src/ir.js.map +1 -0
  48. package/dist/src/lex.d.ts +9 -1
  49. package/dist/src/lex.d.ts.map +1 -1
  50. package/dist/src/lex.js +50 -4
  51. package/dist/src/lex.js.map +1 -1
  52. package/dist/src/limits.d.ts +2 -3
  53. package/dist/src/limits.d.ts.map +1 -1
  54. package/dist/src/limits.js +2 -3
  55. package/dist/src/limits.js.map +1 -1
  56. package/dist/src/lsp/server.d.ts +32 -0
  57. package/dist/src/lsp/server.d.ts.map +1 -0
  58. package/dist/src/lsp/server.js +391 -0
  59. package/dist/src/lsp/server.js.map +1 -0
  60. package/dist/src/modules.d.ts +38 -0
  61. package/dist/src/modules.d.ts.map +1 -0
  62. package/dist/src/modules.js +368 -0
  63. package/dist/src/modules.js.map +1 -0
  64. package/dist/src/parse.d.ts.map +1 -1
  65. package/dist/src/parse.js +590 -17
  66. package/dist/src/parse.js.map +1 -1
  67. package/dist/src/std-bundle.d.ts +2 -0
  68. package/dist/src/std-bundle.d.ts.map +1 -0
  69. package/dist/src/std-bundle.js +88 -0
  70. package/dist/src/std-bundle.js.map +1 -0
  71. package/dist/src/std-library.d.ts +5 -0
  72. package/dist/src/std-library.d.ts.map +1 -0
  73. package/dist/src/std-library.js +9 -0
  74. package/dist/src/std-library.js.map +1 -0
  75. package/dist/src/typecheck.d.ts +8 -0
  76. package/dist/src/typecheck.d.ts.map +1 -0
  77. package/dist/src/typecheck.js +2958 -0
  78. package/dist/src/typecheck.js.map +1 -0
  79. package/dist/src/version.d.ts +4 -15
  80. package/dist/src/version.d.ts.map +1 -1
  81. package/dist/src/version.js +4 -15
  82. package/dist/src/version.js.map +1 -1
  83. package/docs/README.md +26 -0
  84. package/docs/guide/01-first-program.md +24 -0
  85. package/docs/guide/02-money.md +25 -0
  86. package/docs/guide/03-instruments.md +22 -0
  87. package/docs/guide/04-lifecycles.md +25 -0
  88. package/docs/guide/05-fees-and-splits.md +45 -0
  89. package/docs/guide/06-schedules.md +22 -0
  90. package/docs/guide/07-composition.md +46 -0
  91. package/docs/guide/08-writing-a-module.md +26 -0
  92. package/docs/guide/09-cost.md +24 -0
  93. package/docs/guide/10-diagnostics.md +27 -0
  94. package/docs/llms-full.txt +1739 -0
  95. package/docs/llms.txt +45 -0
  96. package/docs/playground.md +54 -0
  97. package/docs/reference/cli.md +35 -0
  98. package/docs/reference/diagnostics.md +619 -0
  99. package/docs/reference/grammar.md +39 -0
  100. package/docs/reference/std/advance.md +35 -0
  101. package/docs/reference/std/cancellable_booking.md +35 -0
  102. package/docs/reference/std/captured_payment.md +43 -0
  103. package/docs/reference/std/conditional_disbursement.md +33 -0
  104. package/docs/reference/std/credit_facility.md +35 -0
  105. package/docs/reference/std/held_payment.md +64 -0
  106. package/docs/reference/std/instant_transfer.md +30 -0
  107. package/docs/reference/std/metered.md +27 -0
  108. package/docs/reference/std/pooled_split.md +26 -0
  109. package/docs/reference/std/premium_forward.md +39 -0
  110. package/docs/reference/std/reconciled_payout.md +33 -0
  111. package/docs/reference/std/recurring_collection.md +25 -0
  112. package/docs/reference/std/rotating_pool.md +42 -0
  113. package/docs/reference/std/scheduled.md +51 -0
  114. package/docs/reference/std/security_deposit.md +46 -0
  115. package/docs/reference/std/settlement_batch.md +42 -0
  116. package/docs/reference/std/swap.md +46 -0
  117. package/docs/reference/std/threshold_pool.md +47 -0
  118. package/docs/reference/std/weighted_distribution.md +39 -0
  119. package/docs/reference/types.md +20 -0
  120. package/docs/reference/udl-output.md +13 -0
  121. package/docs/sessions/2026-09-02-two-instruments.hsx +21 -0
  122. package/docs/sessions/2026-09-02-two-instruments.md +41 -0
  123. package/examples/01-first-program/README.md +45 -0
  124. package/examples/01-first-program/tip-jar.hsx +17 -0
  125. package/examples/02-imports-and-archetypes/README.md +96 -0
  126. package/examples/02-imports-and-archetypes/photo-booth.hsx +37 -0
  127. package/examples/03-diagnostics/README.md +68 -0
  128. package/examples/03-diagnostics/corner-shop-fixed.hsx +22 -0
  129. package/examples/03-diagnostics/corner-shop.hsx +19 -0
  130. package/examples/04-complete-product/README.md +84 -0
  131. package/examples/04-complete-product/study-hall.hsx +67 -0
  132. package/examples/05-watch-club/README.md +9 -0
  133. package/examples/05-watch-club/watch-club.hsx +124 -0
  134. package/examples/README.md +18 -0
  135. package/examples/advance/README.md +3 -0
  136. package/examples/advance/advance.hsx +13 -0
  137. package/examples/advance/advance.udl +339 -0
  138. package/examples/cancellable_booking/README.md +3 -0
  139. package/examples/cancellable_booking/cancellable_booking.hsx +14 -0
  140. package/examples/cancellable_booking/cancellable_booking.udl +391 -0
  141. package/examples/captured_payment/README.md +3 -0
  142. package/examples/captured_payment/captured_payment.hsx +21 -0
  143. package/examples/captured_payment/captured_payment.udl +677 -0
  144. package/examples/conditional_disbursement/README.md +3 -0
  145. package/examples/conditional_disbursement/conditional_disbursement.hsx +17 -0
  146. package/examples/conditional_disbursement/conditional_disbursement.udl +412 -0
  147. package/examples/cost-table.json +386 -0
  148. package/examples/credit_facility/README.md +3 -0
  149. package/examples/credit_facility/credit_facility.hsx +27 -0
  150. package/examples/credit_facility/credit_facility.udl +1373 -0
  151. package/examples/held_payment/README.md +3 -0
  152. package/examples/held_payment/held_payment.hsx +13 -0
  153. package/examples/held_payment/held_payment.udl +507 -0
  154. package/examples/instant_transfer/README.md +3 -0
  155. package/examples/instant_transfer/instant_transfer.hsx +16 -0
  156. package/examples/instant_transfer/instant_transfer.udl +364 -0
  157. package/examples/metered/README.md +3 -0
  158. package/examples/metered/metered.hsx +13 -0
  159. package/examples/metered/metered.udl +247 -0
  160. package/examples/pooled_split/README.md +3 -0
  161. package/examples/pooled_split/pooled_split.hsx +15 -0
  162. package/examples/pooled_split/pooled_split.udl +425 -0
  163. package/examples/premium_forward/README.md +3 -0
  164. package/examples/premium_forward/premium_forward.hsx +19 -0
  165. package/examples/premium_forward/premium_forward.udl +594 -0
  166. package/examples/reconciled_payout/README.md +3 -0
  167. package/examples/reconciled_payout/reconciled_payout.hsx +13 -0
  168. package/examples/reconciled_payout/reconciled_payout.udl +303 -0
  169. package/examples/recurring_collection/README.md +3 -0
  170. package/examples/recurring_collection/recurring_collection.hsx +21 -0
  171. package/examples/recurring_collection/recurring_collection.udl +1130 -0
  172. package/examples/rotating_pool/README.md +3 -0
  173. package/examples/rotating_pool/rotating_pool.hsx +18 -0
  174. package/examples/rotating_pool/rotating_pool.udl +4352 -0
  175. package/examples/scheduled/README.md +3 -0
  176. package/examples/scheduled/scheduled.hsx +12 -0
  177. package/examples/scheduled/scheduled.udl +335 -0
  178. package/examples/security_deposit/README.md +3 -0
  179. package/examples/security_deposit/security_deposit.hsx +21 -0
  180. package/examples/security_deposit/security_deposit.udl +293 -0
  181. package/examples/settlement_batch/README.md +3 -0
  182. package/examples/settlement_batch/settlement_batch.hsx +19 -0
  183. package/examples/settlement_batch/settlement_batch.udl +753 -0
  184. package/examples/swap/README.md +3 -0
  185. package/examples/swap/swap.hsx +19 -0
  186. package/examples/swap/swap.udl +876 -0
  187. package/examples/threshold_pool/README.md +3 -0
  188. package/examples/threshold_pool/threshold_pool.hsx +16 -0
  189. package/examples/threshold_pool/threshold_pool.udl +667 -0
  190. package/examples/weighted_distribution/README.md +3 -0
  191. package/examples/weighted_distribution/weighted_distribution.hsx +20 -0
  192. package/examples/weighted_distribution/weighted_distribution.udl +337 -0
  193. package/package.json +27 -6
  194. package/skills/hsx/SKILL.md +483 -0
  195. package/src/ast.ts +193 -9
  196. package/src/cli.ts +191 -20
  197. package/src/compile.ts +160 -23
  198. package/src/cost.ts +579 -0
  199. package/src/diagnostics.ts +442 -0
  200. package/src/emit.ts +201 -0
  201. package/src/entry-overrides.ts +263 -48
  202. package/src/format.ts +261 -0
  203. package/src/index.ts +34 -4
  204. package/src/ir.ts +99 -0
  205. package/src/lex.ts +59 -4
  206. package/src/limits.ts +2 -3
  207. package/src/lsp/server.ts +460 -0
  208. package/src/modules.ts +446 -0
  209. package/src/parse.ts +655 -21
  210. package/src/std-bundle.ts +91 -0
  211. package/src/std-library.ts +12 -0
  212. package/src/typecheck.ts +3876 -0
  213. package/src/version.ts +4 -16
  214. package/std/SEMANTICS.md +130 -0
  215. package/std/settlements/advance.hsx +177 -0
  216. package/std/settlements/cancellable_booking.hsx +87 -0
  217. package/std/settlements/captured_payment.hsx +144 -0
  218. package/std/settlements/conditional_disbursement.hsx +185 -0
  219. package/std/settlements/credit_facility.hsx +167 -0
  220. package/std/settlements/held_payment.hsx +578 -0
  221. package/std/settlements/index.hsx +3 -0
  222. package/std/settlements/instant_transfer.hsx +190 -0
  223. package/std/settlements/metered.hsx +67 -0
  224. package/std/settlements/pooled_split.hsx +68 -0
  225. package/std/settlements/premium_forward.hsx +257 -0
  226. package/std/settlements/reconciled_payout.hsx +77 -0
  227. package/std/settlements/recurring_collection.hsx +27 -0
  228. package/std/settlements/rotating_pool.hsx +252 -0
  229. package/std/settlements/scheduled.hsx +641 -0
  230. package/std/settlements/security_deposit.hsx +166 -0
  231. package/std/settlements/settlement_batch.hsx +122 -0
  232. package/std/settlements/swap.hsx +1114 -0
  233. package/std/settlements/threshold_pool.hsx +221 -0
  234. package/std/settlements/weighted_distribution.hsx +141 -0
  235. package/dist/src/archetypes.d.ts +0 -17
  236. package/dist/src/archetypes.d.ts.map +0 -1
  237. package/dist/src/archetypes.js +0 -327
  238. package/dist/src/archetypes.js.map +0 -1
  239. package/dist/src/check.d.ts +0 -12
  240. package/dist/src/check.d.ts.map +0 -1
  241. package/dist/src/check.js +0 -1910
  242. package/dist/src/check.js.map +0 -1
  243. package/dist/src/lower.d.ts +0 -146
  244. package/dist/src/lower.d.ts.map +0 -1
  245. package/dist/src/lower.js +0 -4570
  246. package/dist/src/lower.js.map +0 -1
  247. package/dist/src/model.d.ts +0 -467
  248. package/dist/src/model.d.ts.map +0 -1
  249. package/dist/src/model.js +0 -15
  250. package/dist/src/model.js.map +0 -1
  251. package/spec/hsx-ir.schema.json +0 -920
  252. package/src/archetypes.ts +0 -340
  253. package/src/check.ts +0 -2938
  254. package/src/lower.ts +0 -5416
  255. package/src/model.ts +0 -519
@@ -0,0 +1,78 @@
1
+ import { type UdlDocument, type UdlEffectKind } from "@hyperscale0/udl";
2
+ import type { GeneralDiagnostic, TypedProgram } from "./ir.ts";
3
+ export type HsxEffectKind = UdlEffectKind;
4
+ export interface UdlCostTable {
5
+ readonly version: string;
6
+ /** Digest of the effective prices and fixed anchors after overrides. */
7
+ readonly effectiveTableDigest: string;
8
+ readonly currency: string;
9
+ /** Billable runtime meters the platform's operation contract can emit. */
10
+ readonly declaredMeters: readonly string[];
11
+ readonly rows: readonly {
12
+ readonly signature: string;
13
+ readonly perEventMinor: string;
14
+ readonly bps: number;
15
+ readonly payer: "product" | "end_customer";
16
+ /** Collection policy. Runtime resolves movement rows to execution or invoice. */
17
+ readonly settlement: "per_event" | "invoice";
18
+ readonly meter: string;
19
+ readonly volumeMeter?: string;
20
+ }[];
21
+ readonly fixed: {
22
+ readonly weights: Readonly<Record<string, number>>;
23
+ readonly monthlyBaseMinor: string;
24
+ readonly monthlyPerPointMinor: string;
25
+ readonly activationBaseMinor: string;
26
+ readonly activationPerPointMinor: string;
27
+ };
28
+ }
29
+ export interface UdlCostManifest {
30
+ readonly costTableVersion: string;
31
+ readonly effectiveTableDigest: string;
32
+ readonly currency: string;
33
+ /** Complete runtime meter allowlist, independent of clause effects and payer. */
34
+ readonly declaredMeters: readonly string[];
35
+ readonly fixed: {
36
+ readonly complexityScore: number;
37
+ readonly monthlyMinor: string;
38
+ readonly activationMinor: string;
39
+ readonly components: readonly {
40
+ readonly weight: string;
41
+ readonly count: number;
42
+ }[];
43
+ };
44
+ readonly actions: readonly {
45
+ readonly instrument: string;
46
+ readonly action: string;
47
+ readonly components: readonly {
48
+ readonly signature: string;
49
+ readonly count: number;
50
+ readonly perEventMinor: string;
51
+ readonly bps: number;
52
+ readonly payer: "product" | "end_customer";
53
+ readonly settlement: "per_event" | "invoice";
54
+ readonly meter: string;
55
+ readonly volumeMeter?: string;
56
+ }[];
57
+ readonly perEventMinor: string;
58
+ readonly endCustomerPerEventMinor: string;
59
+ }[];
60
+ /** Frozen list prices for every declared runtime meter. */
61
+ readonly meterPrices: readonly UdlCostTable["rows"][number][];
62
+ readonly monthlyEstimate: {
63
+ readonly expression: string;
64
+ readonly variables: readonly string[];
65
+ };
66
+ }
67
+ export type CostManifestResult = {
68
+ readonly diagnostics: readonly GeneralDiagnostic[];
69
+ readonly ok: false;
70
+ } | {
71
+ readonly manifest: UdlCostManifest;
72
+ readonly ok: true;
73
+ };
74
+ export declare function buildCostManifest(program: TypedProgram, table: UdlCostTable | undefined, composesCatalogBlueprint: boolean): CostManifestResult;
75
+ export declare function computeUdlFixedCost(document: UdlDocument, table: UdlCostTable, composesCatalogBlueprint: boolean): UdlCostManifest["fixed"];
76
+ export declare function buildUdlCostManifest(document: UdlDocument, table: UdlCostTable, composesCatalogBlueprint: boolean): UdlCostManifest;
77
+ export declare function evaluateUdlCostManifest(costManifest: UdlCostManifest, readings: Readonly<Record<string, string>>): string;
78
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,369 @@
1
+ import { udlEffectKinds, } from "@hyperscale0/udl";
2
+ export function buildCostManifest(program, table, composesCatalogBlueprint) {
3
+ if (!table) {
4
+ return {
5
+ diagnostics: [
6
+ {
7
+ code: "HSX1301",
8
+ fix: "supply the versioned UDL cost table to the compiler",
9
+ message: "the compiler cannot price this program without a cost table",
10
+ severity: "error",
11
+ span: program.origin,
12
+ },
13
+ ],
14
+ ok: false,
15
+ };
16
+ }
17
+ if (!/^[A-Z]{3}$/.test(table.currency)) {
18
+ return {
19
+ diagnostics: [
20
+ {
21
+ code: "HSX1303",
22
+ fix: "name one three-letter uppercase billing currency on the cost table",
23
+ message: `cost table ${table.version} has invalid billing currency ${table.currency}`,
24
+ severity: "error",
25
+ span: program.origin,
26
+ },
27
+ ],
28
+ ok: false,
29
+ };
30
+ }
31
+ const diagnostics = [];
32
+ const rowsBySignature = new Map();
33
+ for (const row of table.rows) {
34
+ rowsBySignature.set(row.signature, [
35
+ ...(rowsBySignature.get(row.signature) ?? []),
36
+ row,
37
+ ]);
38
+ }
39
+ const actions = [];
40
+ for (const instrument of program.instruments) {
41
+ for (const action of instrument.actions) {
42
+ const components = [];
43
+ let productPerEvent = 0n;
44
+ let endCustomerPerEvent = 0n;
45
+ for (const [signature, count] of effectCounts(action.effects)) {
46
+ const rows = rowsBySignature.get(signature) ?? [];
47
+ if (rows.length === 0) {
48
+ diagnostics.push({
49
+ code: "HSX1301",
50
+ fix: `add ${signature} to cost table ${table.version}`,
51
+ message: `${instrument.id}.${action.name} has unpriced effect signature ${signature}`,
52
+ severity: "error",
53
+ span: action.origin,
54
+ });
55
+ continue;
56
+ }
57
+ for (const row of rows) {
58
+ if (!validPrice(row)) {
59
+ diagnostics.push({
60
+ code: "HSX1302",
61
+ fix: `store ${signature} prices as nonnegative integers and name a volume meter for bps`,
62
+ message: `cost table ${table.version} has an invalid ${signature} price`,
63
+ severity: "error",
64
+ span: action.origin,
65
+ });
66
+ continue;
67
+ }
68
+ const eventTotal = BigInt(row.perEventMinor) * BigInt(count);
69
+ if (row.payer === "product")
70
+ productPerEvent += eventTotal;
71
+ else
72
+ endCustomerPerEvent += eventTotal;
73
+ components.push({
74
+ bps: row.bps,
75
+ count,
76
+ meter: row.meter,
77
+ payer: row.payer,
78
+ perEventMinor: row.perEventMinor,
79
+ settlement: row.settlement,
80
+ signature,
81
+ ...(row.volumeMeter ? { volumeMeter: row.volumeMeter } : {}),
82
+ });
83
+ }
84
+ }
85
+ actions.push({
86
+ action: action.name,
87
+ components,
88
+ endCustomerPerEventMinor: endCustomerPerEvent.toString(),
89
+ instrument: instrument.id,
90
+ perEventMinor: productPerEvent.toString(),
91
+ });
92
+ }
93
+ }
94
+ const fixed = fixedCost(typedStructuralCounts(program, composesCatalogBlueprint), table, program.origin, diagnostics);
95
+ if (diagnostics.length > 0)
96
+ return { diagnostics, ok: false };
97
+ return { manifest: manifest(table, fixed, actions), ok: true };
98
+ }
99
+ export function computeUdlFixedCost(document, table, composesCatalogBlueprint) {
100
+ const diagnostics = [];
101
+ const fixed = fixedCost(udlStructuralCounts(document, composesCatalogBlueprint), table, { start: 0, end: 0 }, diagnostics);
102
+ if (diagnostics.length > 0)
103
+ throw new Error(diagnostics[0]?.message);
104
+ return fixed;
105
+ }
106
+ export function buildUdlCostManifest(document, table, composesCatalogBlueprint) {
107
+ if (!/^[A-Z]{3}$/.test(table.currency)) {
108
+ throw new Error(`cost table ${table.version} has invalid billing currency ${table.currency}`);
109
+ }
110
+ const rowsBySignature = new Map();
111
+ for (const row of table.rows) {
112
+ rowsBySignature.set(row.signature, [
113
+ ...(rowsBySignature.get(row.signature) ?? []),
114
+ row,
115
+ ]);
116
+ }
117
+ const actions = [];
118
+ for (const instrument of document.instruments) {
119
+ for (const [actionName, action] of Object.entries(instrument.actions)) {
120
+ const components = [];
121
+ let productPerEvent = 0n;
122
+ let endCustomerPerEvent = 0n;
123
+ const effects = (action.effects ?? {});
124
+ for (const [signature, count] of effectCounts(effects)) {
125
+ const rows = rowsBySignature.get(signature) ?? [];
126
+ if (rows.length === 0)
127
+ throw new Error(`${instrument.id}.${actionName} has unpriced effect signature ${signature}`);
128
+ for (const row of rows) {
129
+ if (!validPrice(row))
130
+ throw new Error(`cost table ${table.version} has an invalid ${signature} price`);
131
+ const eventTotal = BigInt(row.perEventMinor) * BigInt(count);
132
+ if (row.payer === "product")
133
+ productPerEvent += eventTotal;
134
+ else
135
+ endCustomerPerEvent += eventTotal;
136
+ components.push({
137
+ bps: row.bps,
138
+ count,
139
+ meter: row.meter,
140
+ payer: row.payer,
141
+ perEventMinor: row.perEventMinor,
142
+ settlement: row.settlement,
143
+ signature,
144
+ ...(row.volumeMeter ? { volumeMeter: row.volumeMeter } : {}),
145
+ });
146
+ }
147
+ }
148
+ actions.push({
149
+ action: actionName,
150
+ components,
151
+ endCustomerPerEventMinor: endCustomerPerEvent.toString(),
152
+ instrument: instrument.id,
153
+ perEventMinor: productPerEvent.toString(),
154
+ });
155
+ }
156
+ }
157
+ return manifest(table, computeUdlFixedCost(document, table, composesCatalogBlueprint), actions);
158
+ }
159
+ export function evaluateUdlCostManifest(costManifest, readings) {
160
+ let total = BigInt(costManifest.fixed.monthlyMinor);
161
+ const priced = new Set();
162
+ for (const price of costManifest.meterPrices) {
163
+ if (price.payer !== "product")
164
+ continue;
165
+ const key = pricingKey(price);
166
+ if (priced.has(key))
167
+ continue;
168
+ priced.add(key);
169
+ const count = scaledDecimal(readings[price.meter] ?? "0");
170
+ total += (BigInt(price.perEventMinor) * count) / 1000000n;
171
+ if (price.bps > 0 && price.volumeMeter) {
172
+ const volume = scaledDecimal(readings[price.volumeMeter] ?? "0");
173
+ total += (volume * BigInt(price.bps)) / 10000n / 1000000n;
174
+ }
175
+ }
176
+ return total.toString();
177
+ }
178
+ function manifest(table, fixed, actions) {
179
+ const declaredMeters = [...new Set(table.declaredMeters)].sort();
180
+ const declaredMeterSet = new Set(declaredMeters);
181
+ const meterPrices = table.rows.filter((row) => (row.perEventMinor !== "0" || row.bps > 0) &&
182
+ (declaredMeterSet.has(row.meter) ||
183
+ (row.volumeMeter !== undefined &&
184
+ declaredMeterSet.has(row.volumeMeter))));
185
+ const variables = new Set();
186
+ const terms = [fixed.monthlyMinor];
187
+ const priced = new Set();
188
+ for (const price of meterPrices) {
189
+ if (price.payer !== "product")
190
+ continue;
191
+ const key = pricingKey(price);
192
+ if (priced.has(key))
193
+ continue;
194
+ priced.add(key);
195
+ variables.add(price.meter);
196
+ if (price.perEventMinor !== "0")
197
+ terms.push(`${price.perEventMinor} * ${price.meter}`);
198
+ if (price.bps > 0 && price.volumeMeter) {
199
+ variables.add(price.volumeMeter);
200
+ terms.push(`${price.bps} / 10000 * ${price.volumeMeter}`);
201
+ }
202
+ }
203
+ return {
204
+ actions,
205
+ costTableVersion: table.version,
206
+ currency: table.currency,
207
+ declaredMeters,
208
+ effectiveTableDigest: table.effectiveTableDigest,
209
+ fixed,
210
+ meterPrices,
211
+ monthlyEstimate: {
212
+ expression: terms.join(" + "),
213
+ variables: [...variables].sort(),
214
+ },
215
+ };
216
+ }
217
+ function pricingKey(component) {
218
+ return [
219
+ component.signature,
220
+ component.meter,
221
+ component.volumeMeter ?? "",
222
+ component.perEventMinor,
223
+ String(component.bps),
224
+ component.payer,
225
+ component.settlement,
226
+ ].join("\u0000");
227
+ }
228
+ function effectCounts(effects) {
229
+ const counts = new Map();
230
+ for (const kind of udlEffectKinds) {
231
+ for (const effect of effects[kind] ?? [])
232
+ counts.set(effect.signature, (counts.get(effect.signature) ?? 0) + 1);
233
+ }
234
+ return [...counts.entries()].sort(([left], [right]) => left.localeCompare(right));
235
+ }
236
+ function fixedCost(counts, table, span, diagnostics) {
237
+ const components = [];
238
+ let complexityScore = 0;
239
+ for (const [weight, count] of Object.entries(counts)) {
240
+ if (count === 0)
241
+ continue;
242
+ const value = table.fixed.weights[weight];
243
+ if (value === undefined || !Number.isSafeInteger(value) || value < 0) {
244
+ diagnostics.push({
245
+ code: "HSX1302",
246
+ fix: `add a nonnegative integer ${weight} weight to cost table ${table.version}`,
247
+ message: `cost table ${table.version} has an invalid ${weight} complexity weight`,
248
+ severity: "error",
249
+ span,
250
+ });
251
+ continue;
252
+ }
253
+ complexityScore += value * count;
254
+ components.push({ count, weight });
255
+ }
256
+ for (const [field, value] of Object.entries(table.fixed).filter(([key]) => key !== "weights")) {
257
+ if (typeof value === "string" && nonnegativeInteger(value))
258
+ continue;
259
+ diagnostics.push({
260
+ code: "HSX1302",
261
+ fix: `store fixed.${field} as a nonnegative decimal integer`,
262
+ message: `cost table ${table.version} has an invalid fixed ${field} price`,
263
+ severity: "error",
264
+ span,
265
+ });
266
+ }
267
+ return {
268
+ activationMinor: (integerOrZero(table.fixed.activationBaseMinor) +
269
+ integerOrZero(table.fixed.activationPerPointMinor) *
270
+ BigInt(complexityScore)).toString(),
271
+ complexityScore,
272
+ components,
273
+ monthlyMinor: (integerOrZero(table.fixed.monthlyBaseMinor) +
274
+ integerOrZero(table.fixed.monthlyPerPointMinor) * BigInt(complexityScore)).toString(),
275
+ };
276
+ }
277
+ function typedStructuralCounts(program, blueprint) {
278
+ const subjectKinds = new Set();
279
+ const decisions = new Set();
280
+ let flow = 0, move = 0, unwind = 0, aggregate = 0, gate = 0, timer = 0;
281
+ for (const instrument of program.instruments) {
282
+ for (const kind of arrayValue(objectValue(instrument.slots.subject)?.kinds))
283
+ if (typeof kind === "string")
284
+ subjectKinds.add(kind);
285
+ if (instrument.actions.some((action) => action.slots.quote !== undefined))
286
+ unwind += 1;
287
+ aggregate += arrayValue(instrument.slots.aggregateInvariants).length;
288
+ for (const action of instrument.actions) {
289
+ flow += 1;
290
+ move += arrayValue(action.slots.moves).length;
291
+ gate += arrayValue(action.slots.requiresRefs).length;
292
+ if (action.slots.deadline !== undefined)
293
+ timer += 1;
294
+ if (action.slots.due !== undefined)
295
+ timer += 1;
296
+ const capability = objectValue(action.slots.decision)?.capability;
297
+ if (typeof capability === "string")
298
+ decisions.add(capability);
299
+ }
300
+ }
301
+ return countRecord(program.instruments.length, subjectKinds.size, flow, move, decisions.size, unwind, aggregate, gate, timer, blueprint);
302
+ }
303
+ function udlStructuralCounts(document, blueprint) {
304
+ const subjectKinds = new Set();
305
+ const decisions = new Set();
306
+ let flow = 0, move = 0, unwind = 0, aggregate = 0, gate = 0, timer = 0;
307
+ for (const instrument of document.instruments) {
308
+ for (const kind of instrument.subject?.kinds ?? [])
309
+ subjectKinds.add(kind);
310
+ if (Object.values(instrument.actions).some((action) => action.quote))
311
+ unwind += 1;
312
+ aggregate += instrument.aggregateInvariants?.length ?? 0;
313
+ for (const action of Object.values(instrument.actions)) {
314
+ flow += 1;
315
+ move += action.moves.length;
316
+ gate += action.requiresRefs?.length ?? 0;
317
+ if (action.deadline)
318
+ timer += 1;
319
+ if (action.due)
320
+ timer += 1;
321
+ if (action.decision)
322
+ decisions.add(action.decision.capability);
323
+ }
324
+ }
325
+ return countRecord(document.instruments.length, subjectKinds.size, flow, move, decisions.size, unwind, aggregate, gate, timer, blueprint);
326
+ }
327
+ function countRecord(instrument, subjectKind, flow, move, providerDecision, unwind, aggregateInvariant, gate, timer, blueprint) {
328
+ return {
329
+ instrument,
330
+ subject_kind: subjectKind,
331
+ flow,
332
+ move,
333
+ provider_decision: providerDecision,
334
+ unwind,
335
+ aggregate_invariant: aggregateInvariant,
336
+ gate,
337
+ timer,
338
+ blueprint: blueprint ? 1 : 0,
339
+ };
340
+ }
341
+ function validPrice(row) {
342
+ return (nonnegativeInteger(row.perEventMinor) &&
343
+ Number.isSafeInteger(row.bps) &&
344
+ row.bps >= 0 &&
345
+ (row.settlement === "per_event" || row.settlement === "invoice") &&
346
+ (row.bps === 0 || row.volumeMeter !== undefined));
347
+ }
348
+ function arrayValue(value) {
349
+ return Array.isArray(value) ? value : [];
350
+ }
351
+ function objectValue(value) {
352
+ return value !== null && typeof value === "object" && !Array.isArray(value)
353
+ ? value
354
+ : undefined;
355
+ }
356
+ function nonnegativeInteger(value) {
357
+ return /^(0|[1-9][0-9]*)$/.test(value);
358
+ }
359
+ function integerOrZero(value) {
360
+ return nonnegativeInteger(value) ? BigInt(value) : 0n;
361
+ }
362
+ function scaledDecimal(value) {
363
+ const match = /^(0|[1-9][0-9]*)(?:\.([0-9]{1,6}))?$/.exec(value);
364
+ if (!match)
365
+ throw new Error(`invalid meter reading ${value}`);
366
+ return (BigInt(match[1] ?? "0") * 1000000n +
367
+ BigInt((match[2] ?? "").padEnd(6, "0")));
368
+ }
369
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/cost.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface HsxDiagnosticCatalogEntry {
2
+ readonly code: `HSX${number}`;
3
+ readonly stage: "bind" | "lower" | "parse" | "typecheck";
4
+ readonly title: string;
5
+ readonly fix: string;
6
+ readonly example: string | null;
7
+ readonly reason?: string;
8
+ }
9
+ /** Stable public descriptions for every diagnostic code emitted by HSX. */
10
+ export declare const hsxDiagnostics: readonly HsxDiagnosticCatalogEntry[];
11
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAYD,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,SAAS,yBAAyB,EAqarD,CAAC"}