@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,260 +0,0 @@
1
- // assembly/runtime/strings.ts (AssemblyScript)
2
- // UTF-16 string handling for WASM linear memory
3
-
4
- import { heapAlloc } from './memory';
5
-
6
- // ============================================================================
7
- // String Memory Format
8
- // ============================================================================
9
-
10
- /**
11
- * String memory layout: [length: u32][utf16 chars...]
12
- *
13
- * We use a length-prefixed format; this allows O(1) length checks and efficient substring
14
- * operations without scanning for null terminators. Also matches AssemblyScript's native
15
- * string representation. The first 4 bytes contain the length (number of UTF-16 code units).
16
- * Following that are the UTF-16 code units, each 2 bytes.
17
- */
18
-
19
- // ============================================================================
20
- // String Constants
21
- // ============================================================================
22
-
23
- /**
24
- * Size of the length field header in bytes.
25
- */
26
- export const STRING_LENGTH_SIZE: usize = 4;
27
-
28
- /**
29
- * Size of each UTF-16 code unit in bytes.
30
- */
31
- export const UTF16_CODE_UNIT_SIZE: usize = 2;
32
-
33
- /**
34
- * Minimum string length to use bulk memory operations.
35
- * For strings shorter than this, character-by-character writes are used
36
- * as the setup overhead dominates. For longer strings, bulk operations
37
- * provide significant performance benefits.
38
- */
39
- const MIN_BULK_COPY_STRING_LENGTH: usize = 32;
40
-
41
- // ============================================================================
42
- // String Writing
43
- // ============================================================================
44
-
45
- /**
46
- * Write a string to memory and return its pointer.
47
- *
48
- * Memory is allocated from the runtime heap using heapAlloc().
49
- * The memory is aligned to 4 bytes for efficient access.
50
- *
51
- * @param s - The string to write to memory
52
- * @returns Pointer to the allocated string data, or 0 if allocation failed
53
- */
54
- export function writeString(s: string): usize {
55
- const len: usize = <usize>s.length;
56
-
57
- // Calculate total size: length field (4 bytes) + UTF-16 characters (2 bytes each)
58
- const totalSize = STRING_LENGTH_SIZE + len * UTF16_CODE_UNIT_SIZE;
59
-
60
- // Four-byte alignment ensures proper alignment for u32 loads/stores, avoiding unaligned access
61
- // penalties on some architectures. WASM requires aligned memory access for multi-byte types.
62
- // Allocate memory from heap
63
- const ptr = heapAlloc(totalSize);
64
-
65
- // Return 0 if allocation failed
66
- if (ptr == 0) {
67
- return 0;
68
- }
69
-
70
- // Write length (number of UTF-16 code units)
71
- store<u32>(ptr, len);
72
-
73
- // Handle empty string case (len == 0)
74
- if (len == 0) {
75
- return ptr;
76
- }
77
-
78
- // For long strings, use bulk memory copy for better performance.
79
- // AssemblyScript strings are internally UTF-16, matching our memory format.
80
- if (len >= MIN_BULK_COPY_STRING_LENGTH) {
81
- // Get pointer to the string's internal UTF-16 data
82
- const srcPtr = changetype<usize>(s);
83
- // Copy the UTF-16 data directly
84
- memory.copy(ptr + STRING_LENGTH_SIZE, srcPtr, len * UTF16_CODE_UNIT_SIZE);
85
- } else {
86
- // For short strings, character-by-character writes avoid bulk operation overhead
87
- for (let i: usize = 0; i < len; i++) {
88
- const codeUnit: u16 = unchecked(<u16>s.charCodeAt(<i32>i));
89
- store<u16>(ptr + STRING_LENGTH_SIZE + i * UTF16_CODE_UNIT_SIZE, codeUnit);
90
- }
91
- }
92
-
93
- return ptr;
94
- }
95
-
96
- // ============================================================================
97
- // String Reading
98
- // ============================================================================
99
-
100
- /**
101
- * Read a string from memory.
102
- *
103
- * @param ptr - Pointer to the string data in memory
104
- * @returns The read string, or empty string if pointer is null
105
- */
106
- export function readString(ptr: usize): string {
107
- // Return empty string for null pointer
108
- if (ptr == 0) {
109
- return '';
110
- }
111
-
112
- // Read length (number of UTF-16 code units)
113
- const len: usize = <usize>load<u32>(ptr);
114
-
115
- // Handle empty string case
116
- if (len == 0) {
117
- return '';
118
- }
119
-
120
- // Use bulk memory read for O(n) performance instead of O(n²) string concatenation.
121
- // String.UTF16.decodeUnsafe reads UTF-16 data directly from memory in a single allocation,
122
- // avoiding the repeated string allocations that occur with character-by-character concatenation.
123
- return String.UTF16.decodeUnsafe(ptr + STRING_LENGTH_SIZE, len * UTF16_CODE_UNIT_SIZE);
124
- }
125
-
126
- // ============================================================================
127
- // String Utility Functions
128
- // ============================================================================
129
-
130
- /**
131
- * Calculate the size in bytes needed to store a string in memory.
132
- *
133
- * @param len - The length of the string (number of UTF-16 code units)
134
- * @returns The total size in bytes including the length header
135
- */
136
- export function getStringSize(len: usize): usize {
137
- return STRING_LENGTH_SIZE + len * UTF16_CODE_UNIT_SIZE;
138
- }
139
-
140
- /**
141
- * Calculate the length of a string from its pointer in memory.
142
- *
143
- * @param ptr - Pointer to the string data in memory
144
- * @returns The length of the string (number of UTF-16 code units), or 0 if null
145
- */
146
- export function getStringLength(ptr: usize): usize {
147
- if (ptr == 0) {
148
- return 0;
149
- }
150
- return load<u32>(ptr);
151
- }
152
-
153
- /**
154
- * Check if a string pointer points to an empty string.
155
- *
156
- * @param ptr - Pointer to the string data in memory
157
- * @returns true if the string is empty or pointer is null, false otherwise
158
- */
159
- export function isStringEmpty(ptr: usize): bool {
160
- if (ptr == 0) {
161
- return true;
162
- }
163
- return load<u32>(ptr) == 0;
164
- }
165
-
166
- /**
167
- * Compare two strings in memory.
168
- *
169
- * @param ptr1 - Pointer to the first string
170
- * @param ptr2 - Pointer to the second string
171
- * @returns true if the strings are equal, false otherwise
172
- */
173
- export function stringsEqual(ptr1: usize, ptr2: usize): bool {
174
- // If both are null, they're equal
175
- if (ptr1 == 0 && ptr2 == 0) {
176
- return true;
177
- }
178
-
179
- // If only one is null, they're not equal
180
- if (ptr1 == 0 || ptr2 == 0) {
181
- return false;
182
- }
183
-
184
- // Compare lengths
185
- const len1 = load<u32>(ptr1);
186
- const len2 = load<u32>(ptr2);
187
-
188
- if (len1 != len2) {
189
- return false;
190
- }
191
-
192
- // Compare each UTF-16 code unit
193
- for (let i: usize = 0; i < <usize>len1; i++) {
194
- const offset = STRING_LENGTH_SIZE + i * UTF16_CODE_UNIT_SIZE;
195
- const char1 = load<u16>(ptr1 + offset);
196
- const char2 = load<u16>(ptr2 + offset);
197
- if (char1 != char2) {
198
- return false;
199
- }
200
- }
201
-
202
- return true;
203
- }
204
-
205
- /**
206
- * Calculate a simple hash of a string in memory.
207
- *
208
- * This can be used for quick comparisons or deduplication.
209
- * Uses a simple polynomial rolling hash algorithm.
210
- *
211
- * @param ptr - Pointer to the string data in memory
212
- * @returns A hash value for the string (0 if null)
213
- */
214
- export function hashString(ptr: usize): u32 {
215
- if (ptr == 0) {
216
- return 0;
217
- }
218
-
219
- const len: usize = <usize>load<u32>(ptr);
220
- let hash: u32 = 5381;
221
-
222
- for (let i: usize = 0; i < len; i++) {
223
- const charCode = load<u16>(ptr + STRING_LENGTH_SIZE + i * UTF16_CODE_UNIT_SIZE);
224
- hash = unchecked((hash << 5) + hash + unchecked(charCode)); // hash * 33 + charCode
225
- }
226
-
227
- return hash;
228
- }
229
-
230
- /**
231
- * Copy a string within memory.
232
- *
233
- * Creates a new copy of the string at a new location in the heap.
234
- *
235
- * @param srcPtr - Pointer to the source string
236
- * @returns Pointer to the newly allocated copy, or 0 if allocation failed
237
- */
238
- export function copyString(srcPtr: usize): usize {
239
- if (srcPtr == 0) {
240
- return 0;
241
- }
242
-
243
- // Get the length of the source string
244
- const len: usize = <usize>load<u32>(srcPtr);
245
-
246
- // Calculate total size
247
- const totalSize = STRING_LENGTH_SIZE + len * UTF16_CODE_UNIT_SIZE;
248
-
249
- // Allocate new memory
250
- const dstPtr = heapAlloc(totalSize);
251
-
252
- if (dstPtr == 0) {
253
- return 0;
254
- }
255
-
256
- // Copy the entire string data (length header + UTF-16 code units)
257
- memory.copy(dstPtr, srcPtr, totalSize);
258
-
259
- return dstPtr;
260
- }
@@ -1,96 +0,0 @@
1
- // assembly/runtime/tables.ts (AssemblyScript)
2
- import { Value } from './values';
3
- import { Context } from './context';
4
- import { valuesEqual } from './expressions';
5
-
6
- /**
7
- * Condition for decision table row evaluation.
8
- * Uses Value tagged union consistently.
9
- */
10
- export class Condition {
11
- field: string;
12
- op: string;
13
- value: Value;
14
-
15
- constructor(field: string, op: string, value: Value) {
16
- this.field = field;
17
- this.op = op;
18
- this.value = value;
19
- }
20
-
21
- evaluate(ctx: Context): bool {
22
- const actual = ctx.get(this.field);
23
- const expected = this.value;
24
-
25
- // Handle null cases
26
- if (actual.isNull()) {
27
- if (this.op == '==' && expected.isNull()) return true;
28
- if (this.op == '!=' && !expected.isNull()) return true;
29
- return false;
30
- }
31
-
32
- // Numeric comparisons
33
- if (actual.isNumber() && expected.isNumber()) {
34
- const a = actual.asFloat();
35
- const e = expected.asFloat();
36
-
37
- if (this.op == '==') return a == e;
38
- if (this.op == '!=') return a != e;
39
- if (this.op == '<') return a < e;
40
- if (this.op == '<=') return a <= e;
41
- if (this.op == '>') return a > e;
42
- if (this.op == '>=') return a >= e;
43
- }
44
-
45
- // String comparisons
46
- if (actual.isString() && expected.isString()) {
47
- const a = actual.asString();
48
- const e = expected.asString();
49
-
50
- if (this.op == '==') return a == e;
51
- if (this.op == '!=') return a != e;
52
- // Lexicographic comparison for strings
53
- if (this.op == '<') return a < e;
54
- if (this.op == '<=') return a <= e;
55
- if (this.op == '>') return a > e;
56
- if (this.op == '>=') return a >= e;
57
- }
58
-
59
- // Boolean equality
60
- if (actual.isBool() && expected.isBool()) {
61
- if (this.op == '==') return actual.boolVal == expected.boolVal;
62
- if (this.op == '!=') return actual.boolVal != expected.boolVal;
63
- }
64
-
65
- // Generic equality via valuesEqual
66
- if (this.op == '==') return valuesEqual(actual, expected);
67
- if (this.op == '!=') return !valuesEqual(actual, expected);
68
-
69
- return false;
70
- }
71
- }
72
-
73
- /**
74
- * Check if a value is within an interval (range).
75
- * Supports open/closed boundaries: [a..b], (a..b), [a..b), (a..b]
76
- */
77
- export function inInterval(
78
- val: Value,
79
- start: Value,
80
- end: Value,
81
- startInclusive: bool,
82
- endInclusive: bool,
83
- ): bool {
84
- if (!val.isNumber() || !start.isNumber() || !end.isNumber()) {
85
- return false;
86
- }
87
-
88
- const v = val.asFloat();
89
- const s = start.asFloat();
90
- const e = end.asFloat();
91
-
92
- const aboveStart = startInclusive ? v >= s : v > s;
93
- const belowEnd = endInclusive ? v <= e : v < e;
94
-
95
- return aboveStart && belowEnd;
96
- }
@@ -1,4 +0,0 @@
1
- {
2
- "extends": "assemblyscript/std/assembly.json",
3
- "include": ["./**/*.ts"]
4
- }
@@ -1,209 +0,0 @@
1
- // assembly/runtime/values.ts
2
- // Type tags for runtime type checking
3
- export const TYPE_NULL: i32 = 0;
4
- export const TYPE_BOOL: i32 = 1;
5
- export const TYPE_INT: i32 = 2;
6
- export const TYPE_FLOAT: i32 = 3;
7
- export const TYPE_STRING: i32 = 4;
8
- export const TYPE_ARRAY: i32 = 5;
9
- export const TYPE_OBJECT: i32 = 6;
10
-
11
- // Pre-allocated singleton values for frequently used immutable types.
12
- // This avoids allocations in hot paths for null/boolean/small integer/common float values.
13
- let _nullSingleton: Value | null = null;
14
- let _trueSingleton: Value | null = null;
15
- let _falseSingleton: Value | null = null;
16
- let _emptyStringSingleton: Value | null = null;
17
- let _zeroFloatSingleton: Value | null = null;
18
- let _oneFloatSingleton: Value | null = null;
19
-
20
- // Cache for small integers (-1 to 10) - covers common array indices, loop counters, etc.
21
- // Using 12-element array: index 0 = -1, index 1 = 0, ..., index 11 = 10
22
- const SMALL_INT_CACHE_MIN: i64 = -1;
23
- const SMALL_INT_CACHE_MAX: i64 = 10;
24
- const SMALL_INT_CACHE_SIZE: i32 = 12;
25
- let _smallIntCache: StaticArray<Value | null> | null = null;
26
-
27
- /**
28
- * Tagged union for dynamic JSON-like values.
29
- * Only one field is valid based on the `type` tag.
30
- */
31
- export class Value {
32
- type: i32 = TYPE_NULL;
33
- boolVal: bool = false;
34
- intVal: i64 = 0;
35
- floatVal: f64 = 0.0;
36
- stringVal: string | null = null;
37
- arrayVal: Array<Value> | null = null;
38
- objectVal: Map<string, Value> | null = null;
39
-
40
- static Null(): Value {
41
- // Return singleton null value to avoid allocations
42
- if (_nullSingleton === null) {
43
- const v = new Value();
44
- v.type = TYPE_NULL;
45
- _nullSingleton = v;
46
- }
47
- return _nullSingleton!;
48
- }
49
-
50
- static Bool(val: bool): Value {
51
- // Return singleton boolean values to avoid allocations
52
- if (val) {
53
- if (_trueSingleton === null) {
54
- const v = new Value();
55
- v.type = TYPE_BOOL;
56
- v.boolVal = true;
57
- _trueSingleton = v;
58
- }
59
- return _trueSingleton!;
60
- } else {
61
- if (_falseSingleton === null) {
62
- const v = new Value();
63
- v.type = TYPE_BOOL;
64
- v.boolVal = false;
65
- _falseSingleton = v;
66
- }
67
- return _falseSingleton!;
68
- }
69
- }
70
-
71
- static Int(val: i64): Value {
72
- // Fast path for common small integers to avoid allocations
73
- if (val >= SMALL_INT_CACHE_MIN && val <= SMALL_INT_CACHE_MAX) {
74
- if (_smallIntCache === null) {
75
- _smallIntCache = new StaticArray<Value | null>(SMALL_INT_CACHE_SIZE);
76
- }
77
- const idx = <i32>(val - SMALL_INT_CACHE_MIN);
78
- if (unchecked(_smallIntCache![idx]) === null) {
79
- const v = new Value();
80
- v.type = TYPE_INT;
81
- v.intVal = val;
82
- unchecked((_smallIntCache![idx] = v));
83
- }
84
- return unchecked(_smallIntCache![idx])!;
85
- }
86
- const v = new Value();
87
- v.type = TYPE_INT;
88
- v.intVal = val;
89
- return v;
90
- }
91
-
92
- static Float(val: f64): Value {
93
- // Fast path for common float values (0.0, 1.0) to avoid allocations
94
- if (val == 0.0) {
95
- if (_zeroFloatSingleton === null) {
96
- const v = new Value();
97
- v.type = TYPE_FLOAT;
98
- v.floatVal = 0.0;
99
- _zeroFloatSingleton = v;
100
- }
101
- return _zeroFloatSingleton!;
102
- }
103
- if (val == 1.0) {
104
- if (_oneFloatSingleton === null) {
105
- const v = new Value();
106
- v.type = TYPE_FLOAT;
107
- v.floatVal = 1.0;
108
- _oneFloatSingleton = v;
109
- }
110
- return _oneFloatSingleton!;
111
- }
112
- const v = new Value();
113
- v.type = TYPE_FLOAT;
114
- v.floatVal = val;
115
- return v;
116
- }
117
-
118
- static String(val: string): Value {
119
- // Fast path for empty string to avoid allocations
120
- if (val.length == 0) {
121
- if (_emptyStringSingleton === null) {
122
- const v = new Value();
123
- v.type = TYPE_STRING;
124
- v.stringVal = '';
125
- _emptyStringSingleton = v;
126
- }
127
- return _emptyStringSingleton!;
128
- }
129
- const v = new Value();
130
- v.type = TYPE_STRING;
131
- v.stringVal = val;
132
- return v;
133
- }
134
-
135
- static Array(val: Array<Value>): Value {
136
- const v = new Value();
137
- v.type = TYPE_ARRAY;
138
- v.arrayVal = val;
139
- return v;
140
- }
141
-
142
- static Object(val: Map<string, Value>): Value {
143
- const v = new Value();
144
- v.type = TYPE_OBJECT;
145
- v.objectVal = val;
146
- return v;
147
- }
148
-
149
- // Type checking
150
- isNull(): bool {
151
- return this.type == TYPE_NULL;
152
- }
153
- isBool(): bool {
154
- return this.type == TYPE_BOOL;
155
- }
156
- isNumber(): bool {
157
- return this.type == TYPE_INT || this.type == TYPE_FLOAT;
158
- }
159
- isString(): bool {
160
- return this.type == TYPE_STRING;
161
- }
162
- isArray(): bool {
163
- return this.type == TYPE_ARRAY;
164
- }
165
- isObject(): bool {
166
- return this.type == TYPE_OBJECT;
167
- }
168
-
169
- // Returning defaults (0, false, "") instead of throwing errors provides more
170
- // forgiving evaluation semantics matching JavaScript's type coercion behavior.
171
- asBool(): bool {
172
- return this.type == TYPE_BOOL ? this.boolVal : false;
173
- }
174
- asInt(): i64 {
175
- return this.type == TYPE_INT ? this.intVal : 0;
176
- }
177
- asFloat(): f64 {
178
- if (this.type == TYPE_FLOAT) return this.floatVal;
179
- if (this.type == TYPE_INT) return <f64>this.intVal;
180
- return 0.0;
181
- }
182
- asString(): string {
183
- // Convert value to string representation
184
- if (this.type == TYPE_STRING && this.stringVal != null) return this.stringVal!;
185
- if (this.type == TYPE_NULL) return '';
186
- if (this.type == TYPE_BOOL) return this.boolVal ? 'true' : 'false';
187
- if (this.type == TYPE_INT) return this.intVal.toString();
188
- if (this.type == TYPE_FLOAT) {
189
- // JavaScript developers expect "3" not "3.0" for integer-valued floats. We check if
190
- // the float is exactly representable as i64 (no fractional part, within range) and
191
- // format as integer in that case. Otherwise use AS's default float formatting.
192
- const f = this.floatVal;
193
- // Check if it's an integer
194
- if (f == <f64>(<i64>f) && f >= <f64>i64.MIN_VALUE && f <= <f64>i64.MAX_VALUE) {
195
- return (<i64>f).toString();
196
- }
197
- return f.toString();
198
- }
199
- return '';
200
- }
201
- asArray(): Array<Value> {
202
- return this.arrayVal != null ? this.arrayVal! : new Array<Value>();
203
- }
204
- asObject(): Map<string, Value> {
205
- return this.objectVal != null ? this.objectVal! : new Map<string, Value>();
206
- }
207
- }
208
-
209
- export type Result = Map<string, Value>;
@@ -1,83 +0,0 @@
1
- # Test Data Organization
2
-
3
- This directory contains test fixtures ported from `@gorules/zen-engine` to ensure compatibility and validate the correctness of the JDM-ASM compiler.
4
-
5
- ## Test Porting Strategy
6
-
7
- The test porting process follows a structured approach:
8
-
9
- 1. **Clone Reference Tests**: Tests are cloned from the `gorules/zen` repository to `test-data/zen-reference/`
10
- 2. **Analyze Coverage**: The `analyze-coverage.ts` script analyzes JDM files to understand node types and features
11
- 3. **Categorize Tests**: The `categorize-tests.ts` script automatically categorizes tests based on their node types:
12
- - Expression nodes → `expressions/`
13
- - Decision table nodes → `decision-tables/`
14
- - Switch nodes → `switch-nodes/`
15
- - Decision nodes (sub-decision references) → `sub-decisions/`
16
- - Function nodes are currently skipped (not yet supported)
17
- - Other node types are placed in `other/`
18
- 4. **Further Organization**: Within each category, tests are organized by feature subsets (e.g., arithmetic, logical, string for expressions)
19
-
20
-
21
-
22
- ## Directory Structure
23
-
24
- ### expressions/
25
- Tests for the ZEN expression language parser and evaluation, including:
26
- - Arithmetic operations
27
- - Logical operations
28
- - String operations
29
- - Comparisons
30
- - Function calls
31
-
32
- ### decision-tables/
33
- Tests for decision table nodes, including:
34
- - Simple decision tables
35
- - Multiple input/output columns
36
- - Hit policies (First, Collect Sum, Collect Count, etc.)
37
- - Priority rules
38
-
39
- ### switch-nodes/
40
- Tests for switch/case logic, including:
41
- - String matching
42
- - Number ranges
43
- - Multiple conditions
44
- - Default cases
45
-
46
- ### sub-decisions/
47
- Tests for sub-decision nodes and complex decision graphs:
48
- - Nested decisions
49
- - Decision calls
50
- - Result propagation
51
-
52
- ### other/
53
- Tests that don't fit into standard categories:
54
- - Custom node types
55
- - Simple Input/Output tests
56
- - Schema-related tests
57
-
58
- ## Running Test Analysis
59
-
60
- To analyze test coverage:
61
- ```bash
62
- npx tsx tests/scripts/analyze-coverage.ts > test-data/analysis.md
63
- ```
64
-
65
- To categorize and organize tests:
66
- ```bash
67
- npx tsx tests/scripts/categorize-tests.ts test-data/zen-reference test-data
68
- ```
69
-
70
- ## Test Format
71
-
72
- Each test consists of:
73
- 1. **JDM JSON**: The decision model definition
74
- 2. **Input data**: Sample input values (typically from zen-engine test harness)
75
- 3. **Expected output**: The expected result structure
76
- 4. (Optional) **Schema**: TypeBox schema for type-safe marshaling
77
-
78
- See individual test files for examples.
79
-
80
- ## Reference Source
81
-
82
- Tests are ported from: https://github.com/gorules/zen
83
- Reference tests located in: `test-data/zen-reference/`