@divmain/jdm-asm 0.2.0 → 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,197 +0,0 @@
1
- import { DirectedGraph } from 'graphology';
2
- import { topologicalSort } from 'graphology-dag';
3
- import { type JDMNode, type JDMEdge, type JDMDecision, NodeType } from './parser';
4
- import { CompilationError, ErrorCode, type SourceLocation } from './errors';
5
-
6
- export type JDMGraph = DirectedGraph<JDMNode, JDMEdge>;
7
-
8
- export function buildGraph(jdm: JDMDecision): JDMGraph {
9
- const graph = new DirectedGraph<JDMNode, JDMEdge>();
10
-
11
- // Map provides O(1) lookups for edge validation and node existence checks
12
- const nodeMap = new Map<string, JDMNode>();
13
- for (const node of jdm.nodes) {
14
- graph.addNode(node.id, node);
15
- nodeMap.set(node.id, node);
16
- }
17
-
18
- // Switch nodes can have multiple edges to same target (different cases/handles pointing to
19
- // same node), but topological sort only needs one edge per source→target pair to establish
20
- // ordering dependencies.
21
- const addedEdges = new Set<string>();
22
-
23
- // Add edges and check for self-references
24
- for (const edge of jdm.edges) {
25
- if (!nodeMap.has(edge.sourceId) || !nodeMap.has(edge.targetId)) {
26
- const sourceNode = nodeMap.get(edge.sourceId);
27
- const targetNode = nodeMap.get(edge.targetId);
28
- throw new CompilationError(
29
- `Invalid edge "${edge.id}": references non-existent node`,
30
- ErrorCode.INVALID_EDGE,
31
- {
32
- nodeId: edge.sourceId,
33
- nodeName: sourceNode?.name ?? targetNode?.name,
34
- field: !nodeMap.has(edge.sourceId) ? 'sourceId' : 'targetId',
35
- },
36
- );
37
- }
38
-
39
- // Check for self-references (edge where source equals target)
40
- if (edge.sourceId === edge.targetId) {
41
- const node = graph.getNodeAttributes(edge.sourceId);
42
- const location: SourceLocation = { nodeId: edge.sourceId, nodeName: node.name };
43
- throw new CompilationError(
44
- `Self-reference detected: node "${node.name || edge.sourceId}" references itself through edge "${edge.id}"`,
45
- ErrorCode.CYCLE_DETECTED,
46
- location,
47
- );
48
- }
49
-
50
- // For topological ordering, we only need one edge between any two nodes.
51
- // Switch nodes may have multiple edges to the same target (via different handles).
52
- // We track the edge pair to avoid duplicates while preserving all edges in jdm.edges
53
- // for the switch node compilation to use.
54
- const edgePairKey = `${edge.sourceId}->${edge.targetId}`;
55
- if (!addedEdges.has(edgePairKey)) {
56
- graph.addEdgeWithKey(edge.id, edge.sourceId, edge.targetId, edge);
57
- addedEdges.add(edgePairKey);
58
- }
59
- }
60
-
61
- return graph;
62
- }
63
-
64
- /**
65
- * Find a cycle path in the graph using DFS. Graphology's cycle detection only returns a boolean,
66
- * but we need the actual cycle path to provide better error messages showing the problematic node
67
- * sequence to users.
68
- *
69
- * @param graph - The graph to search
70
- * @returns Array of node IDs representing the cycle, or null if no cycle
71
- */
72
- function findCyclePath(graph: JDMGraph): string[] | null {
73
- const visited = new Set<string>();
74
- const recursionStack = new Set<string>();
75
- const parentMap = new Map<string, string | null>();
76
-
77
- function dfs(nodeId: string, path: string[]): string[] | null {
78
- visited.add(nodeId);
79
- recursionStack.add(nodeId);
80
- path.push(nodeId);
81
-
82
- const neighbors = graph.outNeighbors(nodeId);
83
- for (const neighborId of neighbors) {
84
- if (!visited.has(neighborId)) {
85
- parentMap.set(neighborId, nodeId);
86
- const cycle = dfs(neighborId, path);
87
- if (cycle) {
88
- return cycle;
89
- }
90
- } else if (recursionStack.has(neighborId)) {
91
- // Found a back edge - reconstruct the cycle path
92
- // Path contains full traversal, but cycle only starts where we revisit a node.
93
- // Slicing gives just the cycle portion (e.g., A→B→C→B extracts B→C→B).
94
- const startIndex = path.indexOf(neighborId);
95
- const cycle = [...path.slice(startIndex), neighborId];
96
- return cycle;
97
- }
98
- }
99
-
100
- recursionStack.delete(nodeId);
101
- path.pop();
102
- return null;
103
- }
104
-
105
- // Start DFS from each unvisited node
106
- for (const nodeId of graph.nodes()) {
107
- if (!visited.has(nodeId)) {
108
- const cycle = dfs(nodeId, []);
109
- if (cycle) {
110
- return cycle;
111
- }
112
- }
113
- }
114
-
115
- return null;
116
- }
117
-
118
- /**
119
- * Format a cycle path as a readable string.
120
- *
121
- * @param cycle - Array of node IDs representing a cycle
122
- * @param graph - The graph to get node names from
123
- * @returns Formatted string like "Node1 -> Node2 -> Node3 -> Node1"
124
- */
125
- function formatCyclePath(cycle: string[], graph: JDMGraph): string {
126
- return cycle
127
- .map((nodeId) => {
128
- const node = graph.getNodeAttributes(nodeId);
129
- return node.name || nodeId;
130
- })
131
- .join(' -> ');
132
- }
133
-
134
- export function validateGraph(graph: JDMGraph): void {
135
- // Check for cycles using DFS to find the actual cycle path
136
- const cyclePath = findCyclePath(graph);
137
- if (cyclePath) {
138
- const formattedPath = formatCyclePath(cyclePath, graph);
139
- throw new CompilationError(
140
- `Circular dependency detected: ${formattedPath}`,
141
- ErrorCode.CYCLE_DETECTED,
142
- { nodeId: cyclePath[0], nodeName: graph.getNodeAttributes(cyclePath[0]).name },
143
- );
144
- }
145
-
146
- // Check for single input node
147
- const inputNodes: string[] = [];
148
- const outputNodes: string[] = [];
149
-
150
- graph.forEachNode((nodeId, attrs) => {
151
- if (attrs.type === NodeType.INPUT) {
152
- inputNodes.push(nodeId);
153
- }
154
- if (attrs.type === NodeType.OUTPUT) {
155
- outputNodes.push(nodeId);
156
- }
157
- });
158
-
159
- if (inputNodes.length !== 1) {
160
- // If there are multiple input nodes, include the first one in the location
161
- const firstInputNode = inputNodes.length > 0 ? graph.getNodeAttributes(inputNodes[0]) : null;
162
- throw new CompilationError(
163
- `Expected exactly 1 input node, found ${inputNodes.length}`,
164
- ErrorCode.MULTIPLE_INPUT_NODES,
165
- firstInputNode ? { nodeId: firstInputNode.id, nodeName: firstInputNode.name } : undefined,
166
- );
167
- }
168
- if (outputNodes.length === 0) {
169
- throw new CompilationError(
170
- 'Expected at least 1 output node, found 0',
171
- ErrorCode.MISSING_OUTPUT_NODE,
172
- { field: 'outputNode' },
173
- );
174
- }
175
- }
176
-
177
- /**
178
- * Get nodes in topological order for evaluation.
179
- * This ensures dependencies are evaluated before dependents.
180
- */
181
- export function getEvaluationOrder(graph: JDMGraph): string[] {
182
- return topologicalSort(graph);
183
- }
184
-
185
- /**
186
- * Get all nodes that feed into a given node.
187
- */
188
- export function getInputNodes(graph: JDMGraph, nodeId: string): JDMNode[] {
189
- return graph.inNeighbors(nodeId).map((id) => graph.getNodeAttributes(id));
190
- }
191
-
192
- /**
193
- * Get all nodes that a given node feeds into.
194
- */
195
- export function getOutputNodes(graph: JDMGraph, nodeId: string): JDMNode[] {
196
- return graph.outNeighbors(nodeId).map((id) => graph.getNodeAttributes(id));
197
- }
@@ -1,199 +0,0 @@
1
- // src/compiler/index.ts
2
- import type { TSchema } from '@sinclair/typebox';
3
- import { parseJDM, type JDMDecision } from './parser';
4
- import { compileDecision } from './codegen';
5
- import { compileAssemblyScript } from './build';
6
- import { flattenSchema, computeSchemaHash } from './schema';
7
- import { generateMarshalCode, generateValidationCode } from './marshal-gen';
8
- import type {
9
- CompilerOptions,
10
- CompilationResult,
11
- CompilationContext,
12
- NoMatchBehavior,
13
- } from './types';
14
- import { readFileSync } from 'fs';
15
- import path from 'path';
16
-
17
- /**
18
- * Type guard for Node.js file system errors.
19
- */
20
- function isFileNotFoundError(error: unknown): boolean {
21
- return error !== null && typeof error === 'object' && 'code' in error && error.code === 'ENOENT';
22
- }
23
-
24
- /**
25
- * Creates a filesystem-based loader for sub-decision JDM files.
26
- *
27
- * This loader performs I/O by reading from the filesystem and may throw filesystem errors
28
- * (e.g., ENOENT for missing files, EACCES for permission denied).
29
- *
30
- * Supports both zen-engine compatibility (flat structure in zen-reference/) and organized test
31
- * structure (nested by feature in sub-decisions/). This dual approach allows us to port
32
- * zen-engine fixtures without reorganization while providing better organization for our own
33
- * tests.
34
- *
35
- * @param testDataRoot - Optional root directory for test data. Defaults to "test-data/" in current working directory.
36
- * @returns A loader function that reads JDM files from the filesystem
37
- * @throws Error if file is not found in any search path
38
- * @throws Error for other filesystem errors (permissions, invalid content, etc.)
39
- */
40
- function createFilesystemLoader(testDataRoot?: string): (key: string) => JDMDecision {
41
- const root = testDataRoot || path.join(process.cwd(), 'test-data');
42
- const possiblePaths = [
43
- root,
44
- path.join(root, 'sub-decisions'),
45
- path.join(root, 'sub-decisions/basic'),
46
- path.join(root, 'sub-decisions/simple-multi'),
47
- path.join(root, 'sub-decisions/complex-multi'),
48
- path.join(root, 'sub-decisions/diamond'),
49
- path.join(root, 'sub-decisions/error-propagation'),
50
- path.join(root, 'zen-reference'),
51
- ];
52
-
53
- return (key: string): JDMDecision => {
54
- for (const basePath of possiblePaths) {
55
- try {
56
- const filePath = path.join(basePath, key);
57
- const content = readFileSync(filePath, 'utf-8');
58
- return parseJDM(content);
59
- } catch (error) {
60
- // Only try next path for file-not-found errors
61
- // Let other errors (parse errors, permission denied) propagate immediately
62
- if (isFileNotFoundError(error)) {
63
- continue;
64
- }
65
- throw error;
66
- }
67
- }
68
- throw new Error(
69
- `Failed to load sub-decision "${key}": not found in any search path (${possiblePaths.join(', ')})`,
70
- );
71
- };
72
- }
73
-
74
- // Re-export parser, graph, optimizer, runtime, validation, types, and errors
75
- export * from './parser';
76
- export * from './graph';
77
- export * from './types';
78
- export * from './errors';
79
- export * from './optimizer';
80
- export * from './runtime';
81
- export * from './runtime-codegen';
82
-
83
- // Validation modules - split by concern:
84
- // - compile-time-validation: Static analysis of JDM structure and references
85
- // - runtime-validation-codegen: Validation code that executes at runtime
86
- export * from './compile-time-validation';
87
- export * from './runtime-validation-codegen';
88
-
89
- // Backward compatibility: re-export from input-validation (deprecated)
90
- export * from './input-validation';
91
-
92
- // Export cache utilities for advanced usage
93
- export {
94
- clearCache,
95
- getCacheStats,
96
- pruneCache,
97
- isCacheEnabled,
98
- getCacheDirectory,
99
- getCacheHealth,
100
- } from './cache';
101
-
102
- /**
103
- * Main entry point: Compile JDM to WASM with schema-driven marshaling.
104
- *
105
- * @example
106
- * const result = await compile({
107
- * inputSchema: InputSchema,
108
- * outputSchema: OutputSchema,
109
- * jdm: jdmJson,
110
- * optimize: true,
111
- * });
112
- */
113
- export async function compile(options: {
114
- inputSchema: TSchema;
115
- outputSchema: TSchema;
116
- jdm: string | JDMDecision;
117
- optimize?: boolean;
118
- debug?: boolean;
119
- /** How to handle cases where no rules match in decision tables/switches */
120
- noMatchBehavior?: NoMatchBehavior;
121
- /** Optional loader function to load sub-decision JDM files */
122
- loadDecision?: CompilerOptions['loadDecision'];
123
- /** Optional testDataRoot path for default loader to search */
124
- testDataRoot?: string;
125
- }): Promise<CompilationResult> {
126
- const opts: CompilerOptions = {
127
- optimize: options.optimize ?? true,
128
- debug: options.debug ?? false,
129
- // Validation disabled during compilation for performance (compile-time checks).
130
- // Schema validation is generated as separate code (generateValidationCode()) that
131
- // the runtime can call before evaluation.
132
- validate: false,
133
- noMatchBehavior: options.noMatchBehavior,
134
- };
135
-
136
- // Phase 1: Parse and validate JDM
137
- const parsed = parseJDM(options.jdm);
138
-
139
- // Phase 2: Flatten schemas to memory layout
140
- const inputLayout = flattenSchema(options.inputSchema);
141
- const outputLayout = flattenSchema(options.outputSchema);
142
-
143
- // Phase 3: Compute schema hash for runtime validation
144
- const schemaHash = computeSchemaHash(options.inputSchema, options.outputSchema);
145
-
146
- // Phase 4: Build compilation context
147
- const context: CompilationContext = {
148
- jdm: parsed,
149
- inputSchema: options.inputSchema,
150
- outputSchema: options.outputSchema,
151
- inputLayout,
152
- outputLayout,
153
- schemaHash,
154
- options: opts,
155
- parseExpression: (expr) => parseStandardExpression(expr),
156
- parseUnaryExpression: (expr) => parseUnaryExpressionImpl(expr),
157
- getUniqueId: createIdGenerator(),
158
- loadDecision: options.loadDecision ?? createFilesystemLoader(options.testDataRoot),
159
- // Avoids duplicate compilation when multiple nodes reference same sub-decision
160
- compiledSubDecisions: new Map(),
161
- // Detects circular references to prevent infinite loops during compilation
162
- decisionPath: [],
163
- helperFunctions: new Map(),
164
- };
165
-
166
- // Phase 5: Generate AssemblyScript code
167
- const asCode = compileDecision(parsed, context);
168
-
169
- // Phase 6: Compile to WASM
170
- const { binary, wat } = await compileAssemblyScript(asCode, opts);
171
-
172
- // Phase 7: Generate JS marshaling code
173
- const marshalCode = generateMarshalCode(inputLayout, outputLayout, schemaHash);
174
- const validationCode = generateValidationCode(options.inputSchema);
175
-
176
- return {
177
- wasm: binary,
178
- schemaHash,
179
- marshalCode,
180
- validationCode,
181
- wat: opts.debug ? wat : undefined,
182
- assemblyScript: opts.debug ? asCode : undefined,
183
- };
184
- }
185
-
186
- function createIdGenerator(): (prefix: string) => string {
187
- const counters = new Map<string, number>();
188
- return (prefix: string) => {
189
- const count = counters.get(prefix) ?? 0;
190
- counters.set(prefix, count + 1);
191
- return `${prefix}_${count}`;
192
- };
193
- }
194
-
195
- // Import parse functions
196
- import {
197
- parseStandardExpression,
198
- parseUnaryExpression as parseUnaryExpressionImpl,
199
- } from './unary-parser';
@@ -1,33 +0,0 @@
1
- /**
2
- * Input/Output validation for decision models.
3
- *
4
- * @deprecated This module re-exports from compile-time-validation.ts and
5
- * runtime-validation-codegen.ts for backward compatibility. Import directly
6
- * from those modules instead:
7
- *
8
- * - compile-time-validation.ts: Static analysis of JDM structure and references
9
- * (collectIdentifiers, validateInputReferences, validateAllInputReferences, etc.)
10
- *
11
- * - runtime-validation-codegen.ts: Validation code that executes at runtime
12
- * (validateRuntimeInputs, validateRuntimeOutputs)
13
- */
14
-
15
- // Re-export compile-time validation functions
16
- export {
17
- collectIdentifiers,
18
- validateInputReferences,
19
- collectOutputAssignments,
20
- validateOutputReferences,
21
- validateAllInputReferences,
22
- validateAllOutputReferences,
23
- } from './compile-time-validation';
24
-
25
- // Re-export runtime validation functions and types
26
- export {
27
- validateRuntimeInputs,
28
- validateRuntimeOutputs,
29
- validateRuntimeInputsDetailed,
30
- validateRuntimeOutputsDetailed,
31
- type ValidationError,
32
- type ValidationResult,
33
- } from './runtime-validation-codegen';
@@ -1,21 +0,0 @@
1
- /**
2
- * Marshaling Code Generation - Backward Compatibility Module
3
- *
4
- * This module re-exports code generation utilities from their focused modules
5
- * for backward compatibility. New code should import directly from the specific
6
- * modules in src/compiler/codegen/:
7
- *
8
- * - codegen/js-marshal.ts: JavaScript marshaling code generation
9
- * - codegen/js-validation.ts: JavaScript validation code generation
10
- *
11
- * @deprecated Import from specific codegen modules instead:
12
- * - `import { generateMarshalCode } from "./codegen/js-marshal"`
13
- * - `import { generateValidationCode } from "./codegen/js-validation"`
14
- */
15
-
16
- // Re-export all code generation functions for backward compatibility
17
- export {
18
- generateMarshalCode,
19
- generateValidationCode,
20
- _generateUnmarshalBody,
21
- } from './codegen/index';
@@ -1,197 +0,0 @@
1
- // ============================================================================
2
- // Context Resolver Strategy Pattern
3
- // ============================================================================
4
- //
5
- // The ContextResolver interface provides a strategy for resolving identifiers
6
- // and dollar references in different compilation contexts. This replaces three
7
- // separate compilation functions with a single unified function plus small
8
- // strategy implementations.
9
- //
10
- // Three modes:
11
- // 1. Standard: $ -> ctx.get("$"), identifiers -> ctx.get("name")
12
- // 2. LocalDollar: $ -> Value.Object(dollarVar), identifiers -> ctx.get("name")
13
- // 3. Scoped: $ -> Value.Object(resultVar), identifiers -> scopedCtx.get("name")
14
-
15
- /**
16
- * Strategy interface for resolving context references during expression compilation.
17
- *
18
- * Different compilation contexts require different resolutions:
19
- * - In standard expressions, $ refers to the global context
20
- * - In expression nodes, $ refers to the local result object being built
21
- * - In scoped expressions (inputField), identifiers resolve from a scoped context
22
- */
23
- export interface ContextResolver {
24
- /** Resolve an identifier reference (e.g., "firstName") */
25
- resolveIdentifier(name: string): string;
26
-
27
- /** Resolve a $ reference */
28
- resolveDollarRef(): string;
29
-
30
- /** Resolve a # reference (current element in higher-order functions) */
31
- resolveHashRef(): string;
32
-
33
- /** Resolve a member access path rooted at $ (e.g., "$.foo.bar" returns "foo.bar") */
34
- resolveDollarPath(path: string): string;
35
-
36
- /** Resolve a $nodes.X.Y path */
37
- resolveNodesPath(path: string): string;
38
-
39
- /** Get the context variable name for use in helper functions */
40
- getContextVar(): string;
41
-
42
- /** Create a child resolver for use inside helper functions (e.g., object literals) */
43
- createChildResolver(): ContextResolver;
44
-
45
- /** Get extra parameters for generated helper function signatures */
46
- getHelperParams(): string;
47
-
48
- /** Get extra arguments for calls to generated helper functions */
49
- getHelperArgs(): string;
50
- }
51
-
52
- /**
53
- * Standard context resolver: $ and identifiers resolve from the global context.
54
- * Used in switch conditions, decision tables, and other standard expressions.
55
- */
56
- export class StandardContextResolver implements ContextResolver {
57
- resolveIdentifier(name: string): string {
58
- return `ctx.get("${name}")`;
59
- }
60
-
61
- resolveDollarRef(): string {
62
- return `ctx.get("$")`;
63
- }
64
-
65
- resolveHashRef(): string {
66
- return `ctx.get("#")`;
67
- }
68
-
69
- resolveDollarPath(path: string): string {
70
- // In standard mode, $.foo.bar -> getProperty(ctx.get("$"), "foo", "bar")
71
- // Actually use nested getProperty calls for each segment
72
- const segments = path.split('.');
73
- let result = `ctx.get("$")`;
74
- for (const segment of segments) {
75
- result = `getProperty(${result}, "${segment}")`;
76
- }
77
- return result;
78
- }
79
-
80
- resolveNodesPath(path: string): string {
81
- return `ctx.get("${path}")`;
82
- }
83
-
84
- getContextVar(): string {
85
- return 'ctx';
86
- }
87
-
88
- createChildResolver(): ContextResolver {
89
- // Child is same as parent in standard mode
90
- return this;
91
- }
92
-
93
- getHelperParams(): string {
94
- return '';
95
- }
96
-
97
- getHelperArgs(): string {
98
- return '';
99
- }
100
- }
101
-
102
- /**
103
- * Local dollar resolver: $ refers to a local Map variable (e.g., "result").
104
- * Used in expression nodes where $ references the output being built.
105
- */
106
- export class LocalDollarContextResolver implements ContextResolver {
107
- constructor(private dollarVar: string = 'result') {}
108
-
109
- resolveIdentifier(name: string): string {
110
- return `ctx.get("${name}")`;
111
- }
112
-
113
- resolveDollarRef(): string {
114
- return `Value.Object(${this.dollarVar})`;
115
- }
116
-
117
- resolveHashRef(): string {
118
- return `ctx.get("#")`;
119
- }
120
-
121
- resolveDollarPath(path: string): string {
122
- // $.foo.bar looks up "foo.bar" as a flat key in the local result map
123
- // Expression nodes store keys like "eligibility.specialOffers" as flat strings
124
- return `(${this.dollarVar}.has("${path}") ? ${this.dollarVar}.get("${path}") : Value.Null())`;
125
- }
126
-
127
- resolveNodesPath(path: string): string {
128
- return `ctx.get("${path}")`;
129
- }
130
-
131
- getContextVar(): string {
132
- return 'ctx';
133
- }
134
-
135
- createChildResolver(): ContextResolver {
136
- // Child resolver references 'parentResult' to maintain access to outer scope
137
- // Example: {a: 5, nested: {b: $.a}} - nested object's $.a refers to outer result
138
- return new LocalDollarContextResolver('parentResult');
139
- }
140
-
141
- getHelperParams(): string {
142
- return ', parentResult: Map<string, Value>';
143
- }
144
-
145
- getHelperArgs(): string {
146
- return `, ${this.dollarVar}`;
147
- }
148
- }
149
-
150
- /**
151
- * Scoped context resolver: identifiers resolve from a scoped context variable.
152
- * Used for inputField scoping and loop mode where a subset of the context is available.
153
- */
154
- export class ScopedContextResolver implements ContextResolver {
155
- constructor(
156
- private ctxVar: string = 'scopedCtx',
157
- private resultVar: string = 'itemResult',
158
- ) {}
159
-
160
- resolveIdentifier(name: string): string {
161
- return `${this.ctxVar}.get("${name}")`;
162
- }
163
-
164
- resolveDollarRef(): string {
165
- return `Value.Object(${this.resultVar})`;
166
- }
167
-
168
- resolveHashRef(): string {
169
- return `${this.ctxVar}.get("#")`;
170
- }
171
-
172
- resolveDollarPath(path: string): string {
173
- // $.foo looks up "foo" in the local result variable
174
- return `(${this.resultVar}.has("${path}") ? ${this.resultVar}.get("${path}") : Value.Null())`;
175
- }
176
-
177
- resolveNodesPath(path: string): string {
178
- return `${this.ctxVar}.get("${path}")`;
179
- }
180
-
181
- getContextVar(): string {
182
- return this.ctxVar;
183
- }
184
-
185
- createChildResolver(): ContextResolver {
186
- // In scoped context, child keeps the same context var and result var
187
- return this;
188
- }
189
-
190
- getHelperParams(): string {
191
- return `, ${this.ctxVar}: Context, ${this.resultVar}: Map<string, Value>`;
192
- }
193
-
194
- getHelperArgs(): string {
195
- return `, ${this.ctxVar}, ${this.resultVar}`;
196
- }
197
- }