@divmain/jdm-asm 0.2.1 → 0.2.3

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 (395) hide show
  1. package/dist/index.js +2227 -29
  2. package/dist/index.js.map +1 -1
  3. package/package.json +8 -2
  4. package/.github/workflows/ci.yml +0 -53
  5. package/.oxfmtrc.json +0 -16
  6. package/.oxlintrc.json +0 -183
  7. package/AGENTS.md +0 -81
  8. package/asconfig.json +0 -23
  9. package/benchmarks/fixtures.ts +0 -111
  10. package/benchmarks/input-fixtures.ts +0 -80
  11. package/benchmarks/run.ts +0 -913
  12. package/benchmarks/worker-pool.ts +0 -223
  13. package/benchmarks/worker.ts +0 -374
  14. package/scripts/run-all-tests.ts +0 -220
  15. package/src/compiler/EXPRESSION_SUBSETS.md +0 -228
  16. package/src/compiler/asc-compiler.ts +0 -315
  17. package/src/compiler/ast-types.ts +0 -215
  18. package/src/compiler/build.ts +0 -56
  19. package/src/compiler/cache.ts +0 -414
  20. package/src/compiler/code-generators.ts +0 -211
  21. package/src/compiler/codegen/index.ts +0 -15
  22. package/src/compiler/codegen/js-marshal.ts +0 -999
  23. package/src/compiler/codegen/js-validation.ts +0 -243
  24. package/src/compiler/codegen.ts +0 -19
  25. package/src/compiler/compile-time-validation.ts +0 -507
  26. package/src/compiler/cst-visitor.ts +0 -434
  27. package/src/compiler/errors.ts +0 -227
  28. package/src/compiler/expression-parser.ts +0 -536
  29. package/src/compiler/graph.ts +0 -197
  30. package/src/compiler/index.ts +0 -199
  31. package/src/compiler/input-validation.ts +0 -33
  32. package/src/compiler/marshal-gen.ts +0 -21
  33. package/src/compiler/nodes/context-resolvers.ts +0 -197
  34. package/src/compiler/nodes/decision-table.ts +0 -507
  35. package/src/compiler/nodes/decision.ts +0 -292
  36. package/src/compiler/nodes/expression-compiler.ts +0 -526
  37. package/src/compiler/nodes/expression.ts +0 -425
  38. package/src/compiler/nodes/function.ts +0 -316
  39. package/src/compiler/nodes/input.ts +0 -60
  40. package/src/compiler/nodes/switch.ts +0 -547
  41. package/src/compiler/optimizer.ts +0 -948
  42. package/src/compiler/orchestrator.ts +0 -352
  43. package/src/compiler/parser.ts +0 -115
  44. package/src/compiler/result-selection.ts +0 -161
  45. package/src/compiler/runtime/index.ts +0 -26
  46. package/src/compiler/runtime-codegen.ts +0 -211
  47. package/src/compiler/runtime-validation-codegen.ts +0 -294
  48. package/src/compiler/runtime.ts +0 -452
  49. package/src/compiler/schema.ts +0 -245
  50. package/src/compiler/switch-branch-detection.ts +0 -92
  51. package/src/compiler/types.ts +0 -136
  52. package/src/compiler/unary-ast-transforms.ts +0 -148
  53. package/src/compiler/unary-parser.ts +0 -301
  54. package/src/compiler/unary-transform.ts +0 -161
  55. package/src/compiler/utils.ts +0 -27
  56. package/src/compiler/virtual-fs.ts +0 -90
  57. package/src/compiler/wasm-instantiate.ts +0 -127
  58. package/src/index.ts +0 -1
  59. package/src/runtime/arrays.ts +0 -579
  60. package/src/runtime/context.ts +0 -189
  61. package/src/runtime/expressions.ts +0 -1811
  62. package/src/runtime/index.ts +0 -8
  63. package/src/runtime/memory.ts +0 -607
  64. package/src/runtime/strings.ts +0 -260
  65. package/src/runtime/tables.ts +0 -96
  66. package/src/runtime/tsconfig.json +0 -4
  67. package/src/runtime/values.ts +0 -209
  68. package/test-data/README.md +0 -83
  69. package/test-data/decision-tables/basic/8k.json +0 -87992
  70. package/test-data/decision-tables/basic/affiliate-commission-calculator.json +0 -228
  71. package/test-data/decision-tables/basic/airline-loyalty-points-calculations.json +0 -285
  72. package/test-data/decision-tables/basic/airline-upgrade-eligibility.json +0 -466
  73. package/test-data/decision-tables/basic/auto-insurance-premium-calculator.json +0 -412
  74. package/test-data/decision-tables/basic/booking-personalization-system.json +0 -553
  75. package/test-data/decision-tables/basic/care-team-assignment-system.json +0 -585
  76. package/test-data/decision-tables/basic/claim-validation-system.json +0 -307
  77. package/test-data/decision-tables/basic/clinical-lab-result-interpreter.json +0 -433
  78. package/test-data/decision-tables/basic/clinical-treatment-protocol.json +0 -474
  79. package/test-data/decision-tables/basic/credit-limit-adjustment.json +0 -479
  80. package/test-data/decision-tables/basic/customer-eligibility-engine.json +0 -551
  81. package/test-data/decision-tables/basic/customer-lifetime-value.json +0 -200
  82. package/test-data/decision-tables/basic/customer-onboarding-kyc-verification.json +0 -611
  83. package/test-data/decision-tables/basic/customer-service-escalation.json +0 -191
  84. package/test-data/decision-tables/basic/decision-table-discounts.json +0 -168
  85. package/test-data/decision-tables/basic/decision-table-shipping.json +0 -398
  86. package/test-data/decision-tables/basic/delivery-route-optimizer.json +0 -271
  87. package/test-data/decision-tables/basic/device-compatibility-checker.json +0 -303
  88. package/test-data/decision-tables/basic/disaster-relief-fund-allocation.json +0 -296
  89. package/test-data/decision-tables/basic/dynamic-fx-rate-pricing-system.json +0 -237
  90. package/test-data/decision-tables/basic/dynamic-marketplace-comission-calculator.json +0 -242
  91. package/test-data/decision-tables/basic/dynamic-shipping-cost-calculator.json +0 -378
  92. package/test-data/decision-tables/basic/dynamic-tarrif-engine.json +0 -289
  93. package/test-data/decision-tables/basic/dynamic-ticket-pricing.json +0 -325
  94. package/test-data/decision-tables/basic/empty-column-with-space.json +0 -100
  95. package/test-data/decision-tables/basic/empty-column-without-space.json +0 -100
  96. package/test-data/decision-tables/basic/environment-compliance-assessment.json +0 -386
  97. package/test-data/decision-tables/basic/expression-table-map.json +0 -313
  98. package/test-data/decision-tables/basic/flash-sale-eligibility.json +0 -366
  99. package/test-data/decision-tables/basic/flight-dispatch-decision-system.json +0 -455
  100. package/test-data/decision-tables/basic/flight-rebooking-fee-calculator.json +0 -406
  101. package/test-data/decision-tables/basic/government-assistance.json +0 -299
  102. package/test-data/decision-tables/basic/grant-funding-distribution.json +0 -307
  103. package/test-data/decision-tables/basic/hazardous-materials-management-system.json +0 -414
  104. package/test-data/decision-tables/basic/immigration-eligibility-evaluator.json +0 -765
  105. package/test-data/decision-tables/basic/import-duties-calculator.json +0 -318
  106. package/test-data/decision-tables/basic/insurance-agent-commission.json +0 -228
  107. package/test-data/decision-tables/basic/insurance-coverage-calculator.json +0 -362
  108. package/test-data/decision-tables/basic/insurance-underwriting-risk.json +0 -321
  109. package/test-data/decision-tables/basic/international-roaming-policy-manager.json +0 -199
  110. package/test-data/decision-tables/basic/legacy-plan-management.json +0 -434
  111. package/test-data/decision-tables/basic/marketplace-listing-verification-system.json +0 -334
  112. package/test-data/decision-tables/basic/medication-dosage-calculator.json +0 -318
  113. package/test-data/decision-tables/basic/merch-bags.json +0 -171
  114. package/test-data/decision-tables/basic/municipal-permit-evaluation-system.json +0 -364
  115. package/test-data/decision-tables/basic/mvno-partner-enablement.json +0 -313
  116. package/test-data/decision-tables/basic/partner-revenue-sharing.json +0 -244
  117. package/test-data/decision-tables/basic/payment-routing-and-fee-calculator.json +0 -475
  118. package/test-data/decision-tables/basic/policy-discount-calculator.json +0 -307
  119. package/test-data/decision-tables/basic/policy-eligibility-analyzer.json +0 -299
  120. package/test-data/decision-tables/basic/product-listing-scoring.json +0 -358
  121. package/test-data/decision-tables/basic/realtime-fraud-detection.json +0 -235
  122. package/test-data/decision-tables/basic/regional-compliance-manager.json +0 -278
  123. package/test-data/decision-tables/basic/returns-and-refund-policy.json +0 -366
  124. package/test-data/decision-tables/basic/returns-processing-system.json +0 -448
  125. package/test-data/decision-tables/basic/school-district-resource-allocation.json +0 -282
  126. package/test-data/decision-tables/basic/seat-map-optimization.json +0 -325
  127. package/test-data/decision-tables/basic/seller-fee-calculator.json +0 -307
  128. package/test-data/decision-tables/basic/service-level-agreement-enforcement.json +0 -575
  129. package/test-data/decision-tables/basic/smart-financial-product-matcher.json +0 -249
  130. package/test-data/decision-tables/basic/supply-chain-risk.json +0 -316
  131. package/test-data/decision-tables/basic/table-loop.json +0 -93
  132. package/test-data/decision-tables/basic/table.json +0 -76
  133. package/test-data/decision-tables/basic/traffic-violation-penalty-calculator.json +0 -436
  134. package/test-data/decision-tables/basic/transaction-compliance-classifier.json +0 -525
  135. package/test-data/decision-tables/basic/vehicle-claims-resolution.json +0 -310
  136. package/test-data/decision-tables/basic/warehouse-storage-location.json +0 -345
  137. package/test-data/decision-tables/hit-policy-collect/collect-multiple-matches.json +0 -127
  138. package/test-data/decision-tables/hit-policy-collect/collect-no-match.json +0 -95
  139. package/test-data/decision-tables/hit-policy-first/first-match.json +0 -103
  140. package/test-data/decision-tables/hit-policy-first/no-match.json +0 -95
  141. package/test-data/decision-tables/hit-policy-output-order/output-order-respected.json +0 -94
  142. package/test-data/decision-tables/hit-policy-output-order/string-output-order.json +0 -94
  143. package/test-data/decision-tables/hit-policy-priority/priority-respected.json +0 -86
  144. package/test-data/decision-tables/hit-policy-rule-order/rule-order-respected.json +0 -94
  145. package/test-data/decision-tables/hit-policy-unique/all-match-error.json +0 -89
  146. package/test-data/decision-tables/hit-policy-unique/multiple-match-error.json +0 -89
  147. package/test-data/decision-tables/hit-policy-unique/no-match.json +0 -88
  148. package/test-data/decision-tables/hit-policy-unique/unique-match.json +0 -99
  149. package/test-data/expressions/arithmetic/error-cyclic.json +0 -114
  150. package/test-data/expressions/arithmetic/error-missing-input.json +0 -54
  151. package/test-data/expressions/arithmetic/error-missing-output.json +0 -54
  152. package/test-data/expressions/arithmetic/expression-default.json +0 -93
  153. package/test-data/expressions/arithmetic/expression-fields.json +0 -94
  154. package/test-data/expressions/arithmetic/expression-loop.json +0 -94
  155. package/test-data/expressions/arithmetic/expression-passthrough.json +0 -108
  156. package/test-data/expressions/arithmetic/expression.json +0 -69
  157. package/test-data/expressions/arithmetic/nested-request.json +0 -125
  158. package/test-data/expressions/arithmetic/number-function.json +0 -58
  159. package/test-data/expressions/arithmetic/test-number-functions.json +0 -68
  160. package/test-data/expressions/functions/all.json +0 -149
  161. package/test-data/expressions/functions/avg.json +0 -89
  162. package/test-data/expressions/functions/filter.json +0 -109
  163. package/test-data/expressions/functions/flat.json +0 -167
  164. package/test-data/expressions/functions/map-strings.json +0 -65
  165. package/test-data/expressions/functions/map.json +0 -73
  166. package/test-data/expressions/functions/reduce.json +0 -49
  167. package/test-data/expressions/functions/some.json +0 -175
  168. package/test-data/expressions/functions/sort-strings.json +0 -97
  169. package/test-data/expressions/functions/sort.json +0 -97
  170. package/test-data/expressions/logical/logical-and.json +0 -116
  171. package/test-data/expressions/logical/logical-complex.json +0 -260
  172. package/test-data/expressions/logical/logical-not.json +0 -111
  173. package/test-data/expressions/logical/logical-or.json +0 -123
  174. package/test-data/expressions/string/string-comparison.json +0 -128
  175. package/test-data/expressions/string/string-concat.json +0 -106
  176. package/test-data/expressions/string/string-contains.json +0 -125
  177. package/test-data/expressions/string/string-endsWith.json +0 -113
  178. package/test-data/expressions/string/string-indexOf.json +0 -131
  179. package/test-data/expressions/string/string-join.json +0 -92
  180. package/test-data/expressions/string/string-lower.json +0 -94
  181. package/test-data/expressions/string/string-replace.json +0 -130
  182. package/test-data/expressions/string/string-split.json +0 -101
  183. package/test-data/expressions/string/string-startsWith.json +0 -113
  184. package/test-data/expressions/string/string-substring.json +0 -138
  185. package/test-data/expressions/string/string-trim.json +0 -100
  186. package/test-data/expressions/string/string-upper.json +0 -94
  187. package/test-data/other/custom.json +0 -51
  188. package/test-data/other/customer-input-schema.json +0 -34
  189. package/test-data/other/customer-output-schema.json +0 -34
  190. package/test-data/other/passthrough.json +0 -31
  191. package/test-data/sub-decisions/basic/$nodes-child.json +0 -31
  192. package/test-data/sub-decisions/basic/$nodes-parent.json +0 -49
  193. package/test-data/sub-decisions/basic/recursive-table1.json +0 -49
  194. package/test-data/sub-decisions/basic/recursive-table2.json +0 -49
  195. package/test-data/sub-decisions/complex-multi/approval-decision.json +0 -31
  196. package/test-data/sub-decisions/complex-multi/complex-dag.json +0 -175
  197. package/test-data/sub-decisions/complex-multi/credit-check.json +0 -31
  198. package/test-data/sub-decisions/complex-multi/customer-segmentation.json +0 -31
  199. package/test-data/sub-decisions/complex-multi/discount-eligibility.json +0 -31
  200. package/test-data/sub-decisions/complex-multi/eligibility-check.json +0 -31
  201. package/test-data/sub-decisions/complex-multi/final-offer.json +0 -31
  202. package/test-data/sub-decisions/complex-multi/income-verification.json +0 -31
  203. package/test-data/sub-decisions/complex-multi/linear-chain.json +0 -121
  204. package/test-data/sub-decisions/complex-multi/pricing-calculation.json +0 -31
  205. package/test-data/sub-decisions/complex-multi/product-eligibility.json +0 -31
  206. package/test-data/sub-decisions/complex-multi/risk-assessment.json +0 -31
  207. package/test-data/sub-decisions/complex-multi/shared-validation.json +0 -31
  208. package/test-data/sub-decisions/complex-multi/validation.json +0 -31
  209. package/test-data/sub-decisions/diamond/decision-a.json +0 -31
  210. package/test-data/sub-decisions/diamond/decision-b.json +0 -31
  211. package/test-data/sub-decisions/diamond/decision-c.json +0 -31
  212. package/test-data/sub-decisions/diamond/decision-shared.json +0 -31
  213. package/test-data/sub-decisions/diamond/diamond-pattern.json +0 -109
  214. package/test-data/sub-decisions/error-propagation/parent-calls-error.json +0 -44
  215. package/test-data/sub-decisions/error-propagation/sub-decision-with-error.json +0 -60
  216. package/test-data/switch-nodes/basic/account-dormancy-management.json +0 -245
  217. package/test-data/switch-nodes/basic/application-risk-assessment.json +0 -474
  218. package/test-data/switch-nodes/basic/cellular-data-rollover-system.json +0 -281
  219. package/test-data/switch-nodes/basic/clinical-pathway-selection.json +0 -454
  220. package/test-data/switch-nodes/basic/insurance-prior-authorization.json +0 -467
  221. package/test-data/switch-nodes/basic/last-mile-delivery-assignment.json +0 -373
  222. package/test-data/switch-nodes/basic/loan-approval.json +0 -469
  223. package/test-data/switch-nodes/basic/multi-switch.json +0 -498
  224. package/test-data/switch-nodes/basic/online-checkin-eligibility.json +0 -285
  225. package/test-data/switch-nodes/basic/order-consolidation-system.json +0 -493
  226. package/test-data/switch-nodes/basic/seller-approval-workflow.json +0 -383
  227. package/test-data/switch-nodes/basic/set-fee.json +0 -243
  228. package/test-data/switch-nodes/basic/shipping-carrier-selector.json +0 -379
  229. package/test-data/switch-nodes/basic/switch-node.json +0 -167
  230. package/test-data/switch-nodes/basic/switch-performance-2.json +0 -1307
  231. package/test-data/switch-nodes/basic/switch-performance.json +0 -691
  232. package/test-data/switch-nodes/basic/tax-exemption.json +0 -295
  233. package/test-data/switch-nodes/basic/warehouse-cross-docking.json +0 -313
  234. package/test-data/switch-nodes/default-cases/switch-with-default.json +0 -134
  235. package/test-data/zen-reference/$nodes-child.json +0 -69
  236. package/test-data/zen-reference/$nodes-parent.json +0 -34
  237. package/test-data/zen-reference/8k.json +0 -87992
  238. package/test-data/zen-reference/credit-analysis.json +0 -324
  239. package/test-data/zen-reference/custom.json +0 -51
  240. package/test-data/zen-reference/customer-input-schema.json +0 -34
  241. package/test-data/zen-reference/customer-output-schema.json +0 -34
  242. package/test-data/zen-reference/error-cyclic.json +0 -114
  243. package/test-data/zen-reference/error-missing-input.json +0 -54
  244. package/test-data/zen-reference/error-missing-output.json +0 -54
  245. package/test-data/zen-reference/expression.json +0 -69
  246. package/test-data/zen-reference/function-v2.json +0 -48
  247. package/test-data/zen-reference/function.json +0 -46
  248. package/test-data/zen-reference/graphs/account-dormancy-management.json +0 -245
  249. package/test-data/zen-reference/graphs/affiliate-commission-calculator.json +0 -228
  250. package/test-data/zen-reference/graphs/airline-loyalty-points-calculations.json +0 -285
  251. package/test-data/zen-reference/graphs/airline-upgrade-eligibility.json +0 -466
  252. package/test-data/zen-reference/graphs/aml.json +0 -537
  253. package/test-data/zen-reference/graphs/application-risk-assessment.json +0 -474
  254. package/test-data/zen-reference/graphs/auto-insurance-premium-calculator.json +0 -412
  255. package/test-data/zen-reference/graphs/booking-personalization-system.json +0 -553
  256. package/test-data/zen-reference/graphs/care-team-assignment-system.json +0 -585
  257. package/test-data/zen-reference/graphs/cellular-data-rollover-system.json +0 -281
  258. package/test-data/zen-reference/graphs/claim-validation-system.json +0 -307
  259. package/test-data/zen-reference/graphs/clinical-lab-result-interpreter.json +0 -433
  260. package/test-data/zen-reference/graphs/clinical-pathway-selection.json +0 -454
  261. package/test-data/zen-reference/graphs/clinical-treatment-protocol.json +0 -474
  262. package/test-data/zen-reference/graphs/company-analysis.json +0 -390
  263. package/test-data/zen-reference/graphs/credit-limit-adjustment.json +0 -479
  264. package/test-data/zen-reference/graphs/customer-eligibility-engine.json +0 -551
  265. package/test-data/zen-reference/graphs/customer-lifetime-value.json +0 -200
  266. package/test-data/zen-reference/graphs/customer-onboarding-kyc-verification.json +0 -611
  267. package/test-data/zen-reference/graphs/customer-service-escalation.json +0 -191
  268. package/test-data/zen-reference/graphs/decision-table-discounts.json +0 -168
  269. package/test-data/zen-reference/graphs/decision-table-shipping.json +0 -398
  270. package/test-data/zen-reference/graphs/delivery-route-optimizer.json +0 -271
  271. package/test-data/zen-reference/graphs/device-compatibility-checker.json +0 -303
  272. package/test-data/zen-reference/graphs/disaster-relief-fund-allocation.json +0 -296
  273. package/test-data/zen-reference/graphs/dynamic-fx-rate-pricing-system.json +0 -237
  274. package/test-data/zen-reference/graphs/dynamic-marketplace-comission-calculator.json +0 -242
  275. package/test-data/zen-reference/graphs/dynamic-shipping-cost-calculator.json +0 -378
  276. package/test-data/zen-reference/graphs/dynamic-tarrif-engine.json +0 -289
  277. package/test-data/zen-reference/graphs/dynamic-ticket-pricing.json +0 -325
  278. package/test-data/zen-reference/graphs/empty-column-with-space.json +0 -100
  279. package/test-data/zen-reference/graphs/empty-column-without-space.json +0 -100
  280. package/test-data/zen-reference/graphs/environment-compliance-assessment.json +0 -386
  281. package/test-data/zen-reference/graphs/expression-default.json +0 -93
  282. package/test-data/zen-reference/graphs/expression-fields.json +0 -94
  283. package/test-data/zen-reference/graphs/expression-loop.json +0 -94
  284. package/test-data/zen-reference/graphs/expression-passthrough.json +0 -108
  285. package/test-data/zen-reference/graphs/expression-table-map.json +0 -313
  286. package/test-data/zen-reference/graphs/flash-sale-eligibility.json +0 -366
  287. package/test-data/zen-reference/graphs/flight-dispatch-decision-system.json +0 -455
  288. package/test-data/zen-reference/graphs/flight-rebooking-fee-calculator.json +0 -406
  289. package/test-data/zen-reference/graphs/government-assistance.json +0 -299
  290. package/test-data/zen-reference/graphs/grant-funding-distribution.json +0 -307
  291. package/test-data/zen-reference/graphs/hazardous-materials-management-system.json +0 -414
  292. package/test-data/zen-reference/graphs/immigration-eligibility-evaluator.json +0 -765
  293. package/test-data/zen-reference/graphs/import-duties-calculator.json +0 -318
  294. package/test-data/zen-reference/graphs/insurance-agent-commission.json +0 -228
  295. package/test-data/zen-reference/graphs/insurance-breakdown.json +0 -421
  296. package/test-data/zen-reference/graphs/insurance-coverage-calculator.json +0 -362
  297. package/test-data/zen-reference/graphs/insurance-prior-authorization.json +0 -467
  298. package/test-data/zen-reference/graphs/insurance-underwriting-risk.json +0 -321
  299. package/test-data/zen-reference/graphs/international-roaming-policy-manager.json +0 -199
  300. package/test-data/zen-reference/graphs/last-mile-delivery-assignment.json +0 -373
  301. package/test-data/zen-reference/graphs/legacy-plan-management.json +0 -434
  302. package/test-data/zen-reference/graphs/loan-approval.json +0 -469
  303. package/test-data/zen-reference/graphs/marketplace-listing-verification-system.json +0 -334
  304. package/test-data/zen-reference/graphs/medication-dosage-calculator.json +0 -318
  305. package/test-data/zen-reference/graphs/merch-bags.json +0 -171
  306. package/test-data/zen-reference/graphs/multi-switch.json +0 -498
  307. package/test-data/zen-reference/graphs/municipal-permit-evaluation-system.json +0 -364
  308. package/test-data/zen-reference/graphs/mvno-partner-enablement.json +0 -313
  309. package/test-data/zen-reference/graphs/nested-request.json +0 -125
  310. package/test-data/zen-reference/graphs/online-checkin-eligibility.json +0 -285
  311. package/test-data/zen-reference/graphs/order-consolidation-system.json +0 -493
  312. package/test-data/zen-reference/graphs/partner-revenue-sharing.json +0 -244
  313. package/test-data/zen-reference/graphs/payment-routing-and-fee-calculator.json +0 -475
  314. package/test-data/zen-reference/graphs/policy-discount-calculator.json +0 -307
  315. package/test-data/zen-reference/graphs/policy-eligibility-analyzer.json +0 -299
  316. package/test-data/zen-reference/graphs/product-listing-scoring.json +0 -358
  317. package/test-data/zen-reference/graphs/realtime-fraud-detection.json +0 -235
  318. package/test-data/zen-reference/graphs/regional-compliance-manager.json +0 -278
  319. package/test-data/zen-reference/graphs/returns-and-refund-policy.json +0 -366
  320. package/test-data/zen-reference/graphs/returns-processing-system.json +0 -448
  321. package/test-data/zen-reference/graphs/school-district-resource-allocation.json +0 -282
  322. package/test-data/zen-reference/graphs/seat-map-optimization.json +0 -325
  323. package/test-data/zen-reference/graphs/seller-approval-workflow.json +0 -383
  324. package/test-data/zen-reference/graphs/seller-fee-calculator.json +0 -307
  325. package/test-data/zen-reference/graphs/service-level-agreement-enforcement.json +0 -575
  326. package/test-data/zen-reference/graphs/set-fee.json +0 -243
  327. package/test-data/zen-reference/graphs/shipping-carrier-selector.json +0 -379
  328. package/test-data/zen-reference/graphs/smart-financial-product-matcher.json +0 -249
  329. package/test-data/zen-reference/graphs/supply-chain-risk.json +0 -316
  330. package/test-data/zen-reference/graphs/table-loop.json +0 -93
  331. package/test-data/zen-reference/graphs/tax-exemption.json +0 -295
  332. package/test-data/zen-reference/graphs/traffic-violation-penalty-calculator.json +0 -436
  333. package/test-data/zen-reference/graphs/transaction-compliance-classifier.json +0 -525
  334. package/test-data/zen-reference/graphs/vehicle-claims-resolution.json +0 -310
  335. package/test-data/zen-reference/graphs/warehouse-cross-docking.json +0 -313
  336. package/test-data/zen-reference/graphs/warehouse-storage-location.json +0 -345
  337. package/test-data/zen-reference/http-function.json +0 -34
  338. package/test-data/zen-reference/infinite-function.json +0 -46
  339. package/test-data/zen-reference/js/imports.js +0 -25
  340. package/test-data/zen-reference/passthrough.json +0 -31
  341. package/test-data/zen-reference/recursive-table1.json +0 -49
  342. package/test-data/zen-reference/recursive-table2.json +0 -49
  343. package/test-data/zen-reference/sleep-function.json +0 -34
  344. package/test-data/zen-reference/switch-node.json +0 -167
  345. package/test-data/zen-reference/switch-performance-2.json +0 -1307
  346. package/test-data/zen-reference/switch-performance.json +0 -691
  347. package/test-data/zen-reference/table.json +0 -76
  348. package/tests/helpers/index.ts +0 -73
  349. package/tests/helpers/mock-context.ts +0 -231
  350. package/tests/helpers/round-trip.ts +0 -398
  351. package/tests/helpers/test-harness-comparison.ts +0 -325
  352. package/tests/helpers/test-harness-wasm.ts +0 -710
  353. package/tests/helpers/test-harness.ts +0 -28
  354. package/tests/helpers/wasm-test.ts +0 -659
  355. package/tests/integration/compilation-errors.test.ts +0 -864
  356. package/tests/integration/decision-tables.test.ts +0 -531
  357. package/tests/integration/edge-cases.test.ts +0 -787
  358. package/tests/integration/expressions.test.ts +0 -513
  359. package/tests/integration/function-node-integration.test.ts +0 -182
  360. package/tests/integration/sub-decisions.test.ts +0 -108
  361. package/tests/integration/switch-nodes.test.ts +0 -399
  362. package/tests/integration/unary-or-matching.test.ts +0 -53
  363. package/tests/integration/wasm-data-types.test.ts +0 -398
  364. package/tests/integration/wasm-errors.test.ts +0 -199
  365. package/tests/integration/wasm-execution.test.ts +0 -348
  366. package/tests/integration/wasm-memory.test.ts +0 -228
  367. package/tests/scripts/analyze-coverage.ts +0 -166
  368. package/tests/scripts/categorize-tests.ts +0 -396
  369. package/tests/scripts/coverage-analysis.ts +0 -836
  370. package/tests/unit/compiler/cache.test.ts +0 -238
  371. package/tests/unit/compiler/errors.test.ts +0 -316
  372. package/tests/unit/compiler/graph-scalability.test.ts +0 -510
  373. package/tests/unit/compiler/graph.test.ts +0 -878
  374. package/tests/unit/compiler/input-validation.test.ts +0 -447
  375. package/tests/unit/compiler/logical-and-parser.test.ts +0 -143
  376. package/tests/unit/compiler/logical-not-parser.test.ts +0 -107
  377. package/tests/unit/compiler/logical-or-parser.test.ts +0 -236
  378. package/tests/unit/compiler/marshal-gen/marshal-gen.test.ts +0 -97
  379. package/tests/unit/compiler/nodes/decision-table.test.ts +0 -103
  380. package/tests/unit/compiler/nodes/decision.test.ts +0 -182
  381. package/tests/unit/compiler/nodes/function-compile.test.ts +0 -204
  382. package/tests/unit/compiler/nodes/function.test.ts +0 -176
  383. package/tests/unit/compiler/nodes/input.test.ts +0 -30
  384. package/tests/unit/compiler/nodes/switch.test.ts +0 -127
  385. package/tests/unit/compiler/optimizer-cache.test.ts +0 -327
  386. package/tests/unit/compiler/optimizer-implementation.test.ts +0 -625
  387. package/tests/unit/compiler/parser.test.ts +0 -508
  388. package/tests/unit/compiler/runtime-error-cleanup.test.ts +0 -426
  389. package/tests/unit/compiler/runtime-validation.test.ts +0 -303
  390. package/tests/unit/compiler/runtime.test.ts +0 -221
  391. package/tests/unit/compiler/schema/schema.test.ts +0 -248
  392. package/tests/unit/compiler/unary-ast-transforms.test.ts +0 -245
  393. package/tsconfig.json +0 -27
  394. package/tsup.config.ts +0 -11
  395. package/vitest.config.ts +0 -12
@@ -1,507 +0,0 @@
1
- /**
2
- * Compile-time validation for decision models.
3
- *
4
- * This module provides functions to perform static analysis of JDM structure
5
- * and references at compile time. These checks detect missing references,
6
- * undeclared identifiers, and unassigned outputs before code generation.
7
- *
8
- * These functions operate on ASTs and CompilationContext - they do NOT
9
- * execute at runtime. For runtime data validation, see runtime-validation-codegen.ts.
10
- */
11
-
12
- import type { ExpressionAST, Identifier } from './ast-types';
13
- import { CompilationError, ErrorCode, ErrorCollector, type SourceLocation } from './errors';
14
- import type { CompilationContext } from './types';
15
-
16
- /**
17
- * Collect all identifier references from an expression AST.
18
- *
19
- * This function walks the AST and collects all variable/field references
20
- * that need to be resolved from the context. It handles:
21
- * - Simple identifiers: `age`, `name`
22
- * - Member access: `customer.age`, `order.items[0].price`
23
- *
24
- * @param ast - The expression AST to analyze
25
- * @returns Set of all identifier names referenced in the expression
26
- */
27
- export function collectIdentifiers(ast: ExpressionAST): Set<string> {
28
- const identifiers = new Set<string>();
29
- collectIdentifiersRecursive(ast, identifiers);
30
- return identifiers;
31
- }
32
-
33
- /**
34
- * Recursively collect identifiers from an AST node.
35
- */
36
- function collectIdentifiersRecursive(ast: ExpressionAST, identifiers: Set<string>): void {
37
- switch (ast.type) {
38
- case 'Identifier': {
39
- const ident = ast as Identifier;
40
- identifiers.add(ident.name);
41
- break;
42
- }
43
-
44
- case 'MemberAccess':
45
- // For member access like `customer.age`, we need to track the base object `customer`
46
- collectIdentifiersRecursive((ast as any).object, identifiers);
47
- // The property name is a literal, not an identifier
48
- break;
49
-
50
- case 'IndexAccess':
51
- // For index access like `items[0]`, we need the base object
52
- collectIdentifiersRecursive((ast as any).object, identifiers);
53
- // The index is an expression that may contain identifiers
54
- collectIdentifiersRecursive((ast as any).index, identifiers);
55
- break;
56
-
57
- case 'BinaryOp':
58
- collectIdentifiersRecursive((ast as any).left, identifiers);
59
- collectIdentifiersRecursive((ast as any).right, identifiers);
60
- break;
61
-
62
- case 'UnaryOp':
63
- collectIdentifiersRecursive((ast as any).operand, identifiers);
64
- break;
65
-
66
- case 'TernaryOp':
67
- collectIdentifiersRecursive((ast as any).condition, identifiers);
68
- collectIdentifiersRecursive((ast as any).consequent, identifiers);
69
- collectIdentifiersRecursive((ast as any).alternate, identifiers);
70
- break;
71
-
72
- case 'FunctionCall':
73
- collectIdentifiersRecursive((ast as any).callee, identifiers);
74
- for (const arg of (ast as any).args) {
75
- collectIdentifiersRecursive(arg, identifiers);
76
- }
77
- break;
78
-
79
- case 'ArrayLiteral':
80
- for (const element of (ast as any).elements) {
81
- collectIdentifiersRecursive(element, identifiers);
82
- }
83
- break;
84
-
85
- case 'ObjectLiteral':
86
- for (const [_key, value] of Object.entries((ast as any).properties)) {
87
- collectIdentifiersRecursive(value as ExpressionAST, identifiers);
88
- }
89
- break;
90
-
91
- case 'TemplateLiteral':
92
- for (const part of (ast as any).parts) {
93
- if (typeof part === 'object') {
94
- // It's an expression
95
- collectIdentifiersRecursive(part as ExpressionAST, identifiers);
96
- }
97
- // String literals are ignored
98
- }
99
- break;
100
-
101
- case 'Interval':
102
- collectIdentifiersRecursive((ast as any).start, identifiers);
103
- collectIdentifiersRecursive((ast as any).end, identifiers);
104
- break;
105
-
106
- // Literals don't reference identifiers
107
- case 'NumberLiteral':
108
- case 'StringLiteral':
109
- case 'BooleanLiteral':
110
- case 'NullLiteral':
111
- case 'DollarRef':
112
- case 'HashRef':
113
- // No identifiers to collect
114
- break;
115
-
116
- default:
117
- throw new Error(`Unknown AST node type: ${(ast as any).type}`);
118
- }
119
- }
120
-
121
- /**
122
- * Validate that all referenced identifiers exist in the input schema.
123
- *
124
- * This function checks that all input references in expressions are declared
125
- * in the input schema. It builds a set of expected input fields from the
126
- * flattened layout and compares it against the identifiers used in expressions.
127
- *
128
- * @param referencedIdentifiers - Set of identifiers used in expressions
129
- * @param context - The compilation context containing the input schema
130
- * @param location - Source location for error reporting
131
- * @throws CompilationError if any referenced input is not declared
132
- */
133
- export function validateInputReferences(
134
- referencedIdentifiers: Set<string>,
135
- context: CompilationContext,
136
- location?: SourceLocation,
137
- ): void {
138
- // Build a set of all expected input fields from the flattened layout
139
- const expectedInputs = new Set<string>();
140
-
141
- // Add all top-level fields (e.g., "age", "name", "customer")
142
- for (const field of context.inputLayout.fields) {
143
- const parts = field.path.split('.');
144
- expectedInputs.add(parts[0]); // Add the top-level field name
145
-
146
- // Also add the full path for cases like "customer.age"
147
- expectedInputs.add(field.path);
148
- }
149
-
150
- // Check each referenced identifier
151
- const missingInputs: string[] = [];
152
-
153
- for (const identifier of referencedIdentifiers) {
154
- // $ is the unary context variable in decision table cells, # is the iteration variable
155
- // in higher-order functions (map, filter, etc.). Both are implicit and don't need schema
156
- // declaration.
157
- if (identifier === '$' || identifier === '#') {
158
- continue;
159
- }
160
-
161
- // Check if this identifier is declared
162
- let found = false;
163
- // Check exact match first
164
- if (expectedInputs.has(identifier)) {
165
- found = true;
166
- } else {
167
- // Check if it's a prefix match (e.g., "customer" matches "customer.age")
168
- for (const expected of expectedInputs) {
169
- if (expected.startsWith(identifier + '.')) {
170
- found = true;
171
- break;
172
- }
173
- }
174
- }
175
-
176
- if (!found) {
177
- missingInputs.push(identifier);
178
- }
179
- }
180
-
181
- // If we found missing inputs, throw an error
182
- if (missingInputs.length > 0) {
183
- const missingList = missingInputs
184
- .sort()
185
- .map((id) => `"${id}"`)
186
- .join(', ');
187
- const message =
188
- missingInputs.length === 1
189
- ? `Input reference "${missingInputs[0]}" is not declared in the input schema`
190
- : `Input references are not declared in the input schema: ${missingList}`;
191
-
192
- throw new CompilationError(
193
- message,
194
- ErrorCode.UNKNOWN_FIELD,
195
- {
196
- ...location,
197
- field: 'inputs',
198
- },
199
- { missingInputs: missingInputs as any },
200
- );
201
- }
202
- }
203
-
204
- /**
205
- * Collect all output assignments from a decision.
206
- *
207
- * This function walks through all nodes in the decision and collects
208
- * the output paths that are assigned by expression nodes and decision table nodes.
209
- *
210
- * @param context - The compilation context
211
- * @returns Set of all output paths assigned by the decision
212
- */
213
- export function collectOutputAssignments(
214
- context: CompilationContext,
215
- errorCollector?: ErrorCollector,
216
- ): Set<string> {
217
- const assignedOutputs = new Set<string>();
218
-
219
- for (const node of context.jdm.nodes) {
220
- const nodeType = node.type;
221
-
222
- try {
223
- if (nodeType === 'expressionNode') {
224
- // Collect output assignments from expression nodes
225
- const expressions = node.content.expressions as Array<{ key: string; value: string }>;
226
- for (const expr of expressions) {
227
- assignedOutputs.add(expr.key);
228
- }
229
- } else if (nodeType === 'decisionTableNode') {
230
- // Collect output fields from decision table nodes
231
- const content = node.content as any;
232
- if (content.outputs) {
233
- for (const output of content.outputs) {
234
- if (output.field) {
235
- assignedOutputs.add(output.field);
236
- }
237
- }
238
- }
239
- }
240
- // Switch nodes and sub-decision nodes delegate to other nodes which will be processed
241
- // separately, so their outputs will be collected from those target nodes.
242
- } catch (error) {
243
- // Collect errors for batch reporting rather than swallowing them silently
244
- if (errorCollector) {
245
- const err =
246
- error instanceof CompilationError
247
- ? error
248
- : new CompilationError(
249
- `Failed to collect output assignments from node "${node.name || node.id}": ${error instanceof Error ? error.message : String(error)}`,
250
- ErrorCode.PARSE_ERROR,
251
- { nodeId: node.id, nodeName: node.name },
252
- );
253
- errorCollector.add(err);
254
- }
255
- }
256
- }
257
-
258
- return assignedOutputs;
259
- }
260
-
261
- /**
262
- * Validate that all expected outputs from the schema are assigned.
263
- *
264
- * This function checks that all output fields defined in the output schema
265
- * are actually assigned by the decision logic. It builds a set of expected
266
- * output fields from the flattened layout and compares it against the
267
- * outputs that are assigned by expression nodes and decision table nodes.
268
- *
269
- * @param assignedOutputs - Set of output paths assigned by the decision
270
- * @param context - The compilation context containing the output schema
271
- * @param location - Source location for error reporting
272
- * @throws CompilationError if any expected output is not assigned
273
- */
274
- export function validateOutputReferences(
275
- assignedOutputs: Set<string>,
276
- context: CompilationContext,
277
- location?: SourceLocation,
278
- ): void {
279
- // Build a set of all expected output fields from the flattened layout
280
- const expectedOutputs = new Set<string>();
281
-
282
- // Add all output fields from the layout
283
- for (const field of context.outputLayout.fields) {
284
- expectedOutputs.add(field.path);
285
- }
286
-
287
- // Check each expected output
288
- const missingOutputs: string[] = [];
289
-
290
- for (const output of expectedOutputs) {
291
- // Prefix matching handles nested object assignment - if schema expects "customer" but decision
292
- // assigns "customer.name" and "customer.age", those partial assignments satisfy the requirement
293
- let found = false;
294
-
295
- // Check exact match
296
- if (assignedOutputs.has(output)) {
297
- found = true;
298
- } else {
299
- // Check if any assigned output is a nested field of the expected output
300
- // e.g., if "customer" is expected and "customer.name" is assigned
301
- for (const assigned of assignedOutputs) {
302
- if (assigned.startsWith(output + '.')) {
303
- found = true;
304
- break;
305
- }
306
- }
307
- }
308
-
309
- if (!found) {
310
- missingOutputs.push(output);
311
- }
312
- }
313
-
314
- // If we found missing outputs, throw an error
315
- if (missingOutputs.length > 0) {
316
- const missingList = missingOutputs
317
- .sort()
318
- .map((field) => `"${field}"`)
319
- .join(', ');
320
- const message =
321
- missingOutputs.length === 1
322
- ? `Output field "${missingOutputs[0]}" is declared in the output schema but not assigned by the decision`
323
- : `Output fields are declared in the output schema but not assigned by the decision: ${missingList}`;
324
-
325
- throw new CompilationError(
326
- message,
327
- ErrorCode.UNKNOWN_FIELD,
328
- {
329
- ...location,
330
- field: 'outputs',
331
- },
332
- { missingOutputs: missingOutputs as any },
333
- );
334
- }
335
- }
336
-
337
- /**
338
- * Validate output assignments for all nodes in a decision.
339
- *
340
- * This is a convenience function that validates that all expected outputs
341
- * from the output schema are actually assigned by the decision logic.
342
- *
343
- * @param context - The compilation context
344
- * @throws CompilationError if any expected output is not assigned or if errors occur during collection
345
- */
346
- export function validateAllOutputReferences(context: CompilationContext): void {
347
- const errorCollector = new ErrorCollector();
348
-
349
- // Collect all output assignments, gathering any errors
350
- const assignedOutputs = collectOutputAssignments(context, errorCollector);
351
-
352
- // Validate that all expected outputs are assigned
353
- try {
354
- validateOutputReferences(assignedOutputs, context);
355
- } catch (error) {
356
- if (error instanceof CompilationError) {
357
- errorCollector.add(error);
358
- } else {
359
- throw error;
360
- }
361
- }
362
-
363
- // Throw all collected errors (parse errors + validation errors)
364
- errorCollector.throwIfErrors();
365
- }
366
-
367
- /**
368
- * Validate input references for all expression nodes in a decision.
369
- *
370
- * This is a convenience function that validates all expressions in the decision
371
- * at once, collecting all errors before throwing.
372
- *
373
- * @param context - The compilation context
374
- * @throws CompilationError if any expression references an undeclared input or contains parse errors
375
- */
376
- export function validateAllInputReferences(context: CompilationContext): void {
377
- const errorCollector = new ErrorCollector();
378
- const inputLayout = context.inputLayout;
379
- const expectedInputs = new Set<string>();
380
-
381
- // Build set of expected inputs
382
- for (const field of inputLayout.fields) {
383
- const parts = field.path.split('.');
384
- expectedInputs.add(parts[0]);
385
- expectedInputs.add(field.path);
386
- }
387
-
388
- // Collect all references and validate them
389
- const allIdentifiers = new Set<string>();
390
-
391
- // Helper to create a parse error with location context
392
- const createParseError = (
393
- nodeId: string,
394
- nodeName: string | undefined,
395
- expression: string,
396
- error: unknown,
397
- ): CompilationError => {
398
- if (error instanceof CompilationError) {
399
- // Preserve original error but add node context if missing
400
- if (!error.location?.nodeId) {
401
- return new CompilationError(error.message, error.code, { nodeId, nodeName }, error.context);
402
- }
403
- return error;
404
- }
405
- return new CompilationError(
406
- `Failed to parse expression "${expression}": ${error instanceof Error ? error.message : String(error)}`,
407
- ErrorCode.PARSE_ERROR,
408
- { nodeId, nodeName },
409
- );
410
- };
411
-
412
- // Process all nodes that contain expressions
413
- for (const node of context.jdm.nodes) {
414
- const nodeType = node.type;
415
-
416
- try {
417
- if (nodeType === 'expressionNode') {
418
- // Collect identifiers from all expressions in the node
419
- const expressions = node.content.expressions as Array<{ key: string; value: string }>;
420
- for (const expr of expressions) {
421
- try {
422
- const ast = context.parseExpression(expr.value);
423
- const identifiers = collectIdentifiers(ast);
424
- for (const id of identifiers) {
425
- allIdentifiers.add(id);
426
- }
427
- } catch (error) {
428
- errorCollector.add(createParseError(node.id, node.name, expr.value, error));
429
- }
430
- }
431
- } else if (nodeType === 'decisionTableNode') {
432
- // Collect identifiers from decision table conditions
433
- const content = node.content as any;
434
- if (content.rules) {
435
- for (const rule of content.rules) {
436
- if (rule.input) {
437
- for (const [_key, value] of Object.entries(rule.input as Record<string, string>)) {
438
- if (
439
- value &&
440
- typeof value === 'string' &&
441
- !['true', 'false', 'null'].includes(value.toLowerCase())
442
- ) {
443
- try {
444
- const ast = context.parseExpression(value);
445
- const identifiers = collectIdentifiers(ast);
446
- for (const id of identifiers) {
447
- allIdentifiers.add(id);
448
- }
449
- } catch (error) {
450
- // Collect parse errors for batch reporting
451
- errorCollector.add(createParseError(node.id, node.name, value, error));
452
- }
453
- }
454
- }
455
- }
456
- }
457
- }
458
- } else if (nodeType === 'switchNode') {
459
- // Collect identifiers from switch conditions
460
- const content = node.content as any;
461
- if (content.cases) {
462
- for (const switchCase of content.cases) {
463
- if (switchCase.condition && switchCase.condition.expression) {
464
- try {
465
- const ast = context.parseExpression(switchCase.condition.expression);
466
- const identifiers = collectIdentifiers(ast);
467
- for (const id of identifiers) {
468
- allIdentifiers.add(id);
469
- }
470
- } catch (error) {
471
- // Collect parse errors for batch reporting
472
- errorCollector.add(
473
- createParseError(node.id, node.name, switchCase.condition.expression, error),
474
- );
475
- }
476
- }
477
- }
478
- }
479
- }
480
- } catch (error) {
481
- // Collect errors from node processing for batch reporting
482
- const err =
483
- error instanceof CompilationError
484
- ? error
485
- : new CompilationError(
486
- `Failed to process node "${node.name || node.id}": ${error instanceof Error ? error.message : String(error)}`,
487
- ErrorCode.PARSE_ERROR,
488
- { nodeId: node.id, nodeName: node.name },
489
- );
490
- errorCollector.add(err);
491
- }
492
- }
493
-
494
- // Validate all collected identifiers
495
- try {
496
- validateInputReferences(allIdentifiers, context);
497
- } catch (error) {
498
- if (error instanceof CompilationError) {
499
- errorCollector.add(error);
500
- } else {
501
- throw error;
502
- }
503
- }
504
-
505
- // Throw all collected errors (parse errors + validation errors)
506
- errorCollector.throwIfErrors();
507
- }