@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,28 +0,0 @@
1
- /**
2
- * Legacy test-harness.ts - Re-exports for backward compatibility
3
- *
4
- * This file has been split into focused helpers:
5
- * - test-harness-wasm.ts: WASM-only testing (compilation, execution, marshaling)
6
- * - test-harness-comparison.ts: zen-engine compatibility testing
7
- *
8
- * All exports are preserved for backward compatibility with existing tests.
9
- */
10
-
11
- // Re-export everything from the new focused modules
12
- export {
13
- compile,
14
- evaluateCompiled,
15
- inferSchema,
16
- runWasmTest,
17
- runSimpleWasmTest,
18
- type WasmTestConfig,
19
- type SimpleWasmTestConfig,
20
- } from './test-harness-wasm';
21
-
22
- export {
23
- runCompatibilityTest,
24
- runSimpleCompatibilityTest,
25
- matchers,
26
- type TestConfig,
27
- type SimpleTestConfig,
28
- } from './test-harness-comparison';
@@ -1,659 +0,0 @@
1
- /**
2
- * WASM test utilities for compiling and evaluating JDM decisions.
3
- *
4
- * These helpers simplify the process of compiling JDM to WASM and
5
- * evaluating decisions in tests, reducing boilerplate and ensuring
6
- * consistent test patterns.
7
- *
8
- * @module tests/helpers/wasm-test
9
- */
10
-
11
- import { readFileSync } from 'fs';
12
- import { type TSchema, Type } from '@sinclair/typebox';
13
- import { compile, type JDMDecision, type CompilationResult } from '../../src/compiler';
14
- import { createCompiledDecision, type CompiledDecision } from '../../src/compiler/runtime';
15
-
16
- /**
17
- * Options for compiling and evaluating JDM.
18
- */
19
- export interface CompileAndEvaluateOptions {
20
- /**
21
- * Input schema for the decision.
22
- * If not provided, will be inferred from the input value.
23
- */
24
- inputSchema?: TSchema;
25
-
26
- /**
27
- * Output schema for the decision.
28
- * If not provided, will be inferred from expected shape or use a generic object.
29
- */
30
- outputSchema?: TSchema;
31
-
32
- /**
33
- * Enable debug mode for compilation (includes AssemblyScript source and WAT in result).
34
- * @default false
35
- */
36
- debug?: boolean;
37
-
38
- /**
39
- * Skip input validation during evaluation.
40
- * @default false
41
- */
42
- skipValidation?: boolean;
43
- }
44
-
45
- /**
46
- * Result of compileAndEvaluate operations.
47
- */
48
- export interface EvaluationResult<T = unknown> {
49
- /** The evaluation result */
50
- result: T;
51
- /** The compiled decision (can be reused for additional evaluations) */
52
- decision: CompiledDecision;
53
- /** The raw compilation result */
54
- compilation: CompilationResult;
55
- }
56
-
57
- /**
58
- * Compile a JDM file and evaluate with the given input.
59
- *
60
- * This is the primary helper for file-based JDM tests. It handles:
61
- * - Loading the JDM file
62
- * - Schema inference if not provided
63
- * - Compilation to WASM
64
- * - Evaluation with the input
65
- *
66
- * @param jdmPath - Path to the JDM JSON file
67
- * @param input - Input data for evaluation
68
- * @param options - Optional compilation/evaluation options
69
- * @returns The evaluation result
70
- *
71
- * @example
72
- * ```typescript
73
- * // Simple usage
74
- * const result = await compileAndEvaluate(
75
- * 'test-data/simple-decision.json',
76
- * { age: 25, income: 50000 }
77
- * );
78
- * expect(result).toEqual({ eligible: true });
79
- *
80
- * // With explicit schemas
81
- * const result = await compileAndEvaluate(
82
- * 'path/to/decision.json',
83
- * { x: 10 },
84
- * {
85
- * inputSchema: Type.Object({ x: Type.Number() }),
86
- * outputSchema: Type.Object({ y: Type.Number() }),
87
- * }
88
- * );
89
- * ```
90
- */
91
- export async function compileAndEvaluate<I extends Record<string, unknown>, O = unknown>(
92
- jdmPath: string,
93
- input: I,
94
- options: CompileAndEvaluateOptions = {},
95
- ): Promise<O> {
96
- const jdmContent = readFileSync(jdmPath, 'utf-8');
97
- const jdm = JSON.parse(jdmContent) as JDMDecision;
98
- return compileAndEvaluateInline(jdm, input, options);
99
- }
100
-
101
- /**
102
- * Compile an inline JDM object and evaluate with the given input.
103
- *
104
- * Use this when you want to define the JDM directly in your test
105
- * without a separate file.
106
- *
107
- * @param jdm - The JDM decision object
108
- * @param input - Input data for evaluation
109
- * @param options - Optional compilation/evaluation options
110
- * @returns The evaluation result
111
- *
112
- * @example
113
- * ```typescript
114
- * const jdm = createExpressionJDM([
115
- * { key: 'doubled', value: 'x * 2' }
116
- * ]);
117
- * const result = await compileAndEvaluateInline(jdm, { x: 21 });
118
- * expect(result).toEqual({ doubled: 42 });
119
- * ```
120
- */
121
- export async function compileAndEvaluateInline<I extends Record<string, unknown>, O = unknown>(
122
- jdm: JDMDecision | object,
123
- input: I,
124
- options: CompileAndEvaluateOptions = {},
125
- ): Promise<O> {
126
- const { debug = false } = options;
127
-
128
- // Infer schemas if not provided
129
- const inputSchema = options.inputSchema ?? inferSchema(input);
130
- const outputSchema = options.outputSchema ?? Type.Object({});
131
-
132
- // Compile to WASM
133
- const compiled = await compile({
134
- jdm: jdm as JDMDecision,
135
- inputSchema,
136
- outputSchema,
137
- debug,
138
- });
139
-
140
- // Create decision instance and evaluate
141
- const decision = await createCompiledDecision(
142
- compiled,
143
- // FIXME: Double undefined - second param should be validation schema or options object
144
- options.skipValidation ? undefined : undefined,
145
- );
146
-
147
- const result = await decision.evaluate<I, O>(input);
148
- return result;
149
- }
150
-
151
- /**
152
- * Compile and evaluate with full result details.
153
- *
154
- * Returns the compiled decision for potential reuse, along with
155
- * the compilation result for debugging.
156
- *
157
- * @param jdm - The JDM decision object or path to file
158
- * @param input - Input data for evaluation
159
- * @param options - Optional compilation/evaluation options
160
- * @returns Full evaluation result including decision and compilation
161
- *
162
- * @example
163
- * ```typescript
164
- * const { result, decision, compilation } = await compileAndEvaluateFull(
165
- * jdm,
166
- * input,
167
- * { debug: true }
168
- * );
169
- *
170
- * // Reuse decision for multiple evaluations
171
- * const result2 = await decision.evaluate({ x: 100 });
172
- *
173
- * // Debug: inspect generated code
174
- * console.log(compilation.assemblyScript);
175
- * ```
176
- */
177
- export async function compileAndEvaluateFull<I extends Record<string, unknown>, O = unknown>(
178
- jdm: JDMDecision | object | string,
179
- input: I,
180
- options: CompileAndEvaluateOptions = {},
181
- ): Promise<EvaluationResult<O>> {
182
- const { debug = false } = options;
183
-
184
- // Load JDM if path provided
185
- const jdmObj =
186
- typeof jdm === 'string'
187
- ? (JSON.parse(readFileSync(jdm, 'utf-8')) as JDMDecision)
188
- : (jdm as JDMDecision);
189
-
190
- // Infer schemas if not provided
191
- const inputSchema = options.inputSchema ?? inferSchema(input);
192
- const outputSchema = options.outputSchema ?? Type.Object({});
193
-
194
- // Compile to WASM
195
- const compiled = await compile({
196
- jdm: jdmObj,
197
- inputSchema,
198
- outputSchema,
199
- debug,
200
- });
201
-
202
- // Create decision instance and evaluate
203
- const decision = await createCompiledDecision(compiled);
204
- const result = await decision.evaluate<I, O>(input);
205
-
206
- return {
207
- result,
208
- decision,
209
- compilation: compiled,
210
- };
211
- }
212
-
213
- /**
214
- * Create a minimal JDM decision with expression nodes.
215
- *
216
- * This helper creates a simple JDM structure for testing expression
217
- * evaluation without needing to define the full JDM JSON.
218
- *
219
- * @param expressions - Array of key-value expressions to evaluate
220
- * @returns A complete JDM decision object
221
- *
222
- * @example
223
- * ```typescript
224
- * // Single expression
225
- * const jdm = createExpressionJDM([{ key: 'result', value: 'x + y' }]);
226
- *
227
- * // Multiple expressions
228
- * const jdm = createExpressionJDM([
229
- * { key: 'sum', value: 'a + b' },
230
- * { key: 'product', value: 'a * b' },
231
- * { key: 'isPositive', value: 'a > 0 and b > 0' },
232
- * ]);
233
- * ```
234
- */
235
- export function createExpressionJDM(
236
- expressions: Array<{ key: string; value: string }>,
237
- ): JDMDecision {
238
- return {
239
- nodes: [
240
- {
241
- id: 'input-1',
242
- type: 'inputNode' as any,
243
- position: { x: 0, y: 0 },
244
- name: 'Request',
245
- },
246
- {
247
- id: 'expr-1',
248
- type: 'expressionNode' as any,
249
- position: { x: 200, y: 0 },
250
- name: 'Expression',
251
- content: {
252
- expressions: expressions.map((e, i) => ({
253
- id: `expr-${i}`,
254
- key: e.key,
255
- value: e.value,
256
- })),
257
- },
258
- },
259
- {
260
- id: 'output-1',
261
- type: 'outputNode' as any,
262
- position: { x: 400, y: 0 },
263
- name: 'Response',
264
- },
265
- ],
266
- edges: [
267
- {
268
- id: 'edge-1',
269
- sourceId: 'input-1',
270
- targetId: 'expr-1',
271
- type: 'edge',
272
- },
273
- {
274
- id: 'edge-2',
275
- sourceId: 'expr-1',
276
- targetId: 'output-1',
277
- type: 'edge',
278
- },
279
- ],
280
- };
281
- }
282
-
283
- /**
284
- * Create a JDM decision with a decision table.
285
- *
286
- * This helper creates a JDM with a decision table for testing
287
- * rule-based decision logic.
288
- *
289
- * @param rules - Array of rules with inputs and outputs
290
- * @param hitPolicy - Hit policy for the decision table
291
- * @returns A complete JDM decision object
292
- *
293
- * @example
294
- * ```typescript
295
- * const jdm = createDecisionTableJDM(
296
- * [
297
- * { inputs: { age: '>= 18' }, outputs: { category: '"adult"' } },
298
- * { inputs: { age: '< 18' }, outputs: { category: '"minor"' } },
299
- * ],
300
- * 'first'
301
- * );
302
- * ```
303
- */
304
- export function createDecisionTableJDM(
305
- rules: Array<{
306
- inputs: Record<string, string>;
307
- outputs: Record<string, string>;
308
- }>,
309
- hitPolicy: 'first' | 'collect' = 'first',
310
- ): JDMDecision {
311
- // Extract input and output field names from rules
312
- const inputFields = new Set<string>();
313
- const outputFields = new Set<string>();
314
-
315
- for (const rule of rules) {
316
- Object.keys(rule.inputs).forEach((k) => inputFields.add(k));
317
- Object.keys(rule.outputs).forEach((k) => outputFields.add(k));
318
- }
319
-
320
- // Create input columns
321
- const inputs = Array.from(inputFields).map((field, i) => ({
322
- id: `input-col-${i}`,
323
- name: field,
324
- field,
325
- type: 'expression' as const,
326
- }));
327
-
328
- // Create output columns
329
- const outputs = Array.from(outputFields).map((field, i) => ({
330
- id: `output-col-${i}`,
331
- name: field,
332
- field,
333
- type: 'expression' as const,
334
- }));
335
-
336
- // Create rules
337
- const tableRules = rules.map((rule, i) => ({
338
- _id: `rule-${i}`,
339
- ...Object.fromEntries(inputs.map((inp) => [inp.id, rule.inputs[inp.field] ?? ''])),
340
- ...Object.fromEntries(outputs.map((out) => [out.id, rule.outputs[out.field] ?? ''])),
341
- }));
342
-
343
- return {
344
- nodes: [
345
- {
346
- id: 'input-1',
347
- type: 'inputNode' as any,
348
- position: { x: 0, y: 0 },
349
- name: 'Request',
350
- },
351
- {
352
- id: 'table-1',
353
- type: 'decisionTableNode' as any,
354
- position: { x: 200, y: 0 },
355
- name: 'Decision Table',
356
- content: {
357
- hitPolicy,
358
- inputs,
359
- outputs,
360
- rules: tableRules,
361
- },
362
- },
363
- {
364
- id: 'output-1',
365
- type: 'outputNode' as any,
366
- position: { x: 400, y: 0 },
367
- name: 'Response',
368
- },
369
- ],
370
- edges: [
371
- {
372
- id: 'edge-1',
373
- sourceId: 'input-1',
374
- targetId: 'table-1',
375
- type: 'edge',
376
- },
377
- {
378
- id: 'edge-2',
379
- sourceId: 'table-1',
380
- targetId: 'output-1',
381
- type: 'edge',
382
- },
383
- ],
384
- };
385
- }
386
-
387
- /**
388
- * Create a JDM decision with a switch node.
389
- *
390
- * @param conditions - Array of condition/content pairs
391
- * @returns A complete JDM decision object
392
- *
393
- * @example
394
- * ```typescript
395
- * const jdm = createSwitchJDM([
396
- * { condition: 'score >= 90', expressions: [{ key: 'grade', value: '"A"' }] },
397
- * { condition: 'score >= 80', expressions: [{ key: 'grade', value: '"B"' }] },
398
- * { condition: 'true', expressions: [{ key: 'grade', value: '"C"' }] }, // default
399
- * ]);
400
- * ```
401
- */
402
- export function createSwitchJDM(
403
- conditions: Array<{
404
- condition: string;
405
- expressions: Array<{ key: string; value: string }>;
406
- }>,
407
- ): JDMDecision {
408
- const nodes: any[] = [
409
- {
410
- id: 'input-1',
411
- type: 'inputNode',
412
- position: { x: 0, y: 0 },
413
- name: 'Request',
414
- },
415
- {
416
- id: 'switch-1',
417
- type: 'switchNode',
418
- position: { x: 200, y: 0 },
419
- name: 'Switch',
420
- content: {
421
- hitPolicy: 'first',
422
- statements: conditions.map((c, i) => ({
423
- id: `stmt-${i}`,
424
- condition: c.condition,
425
- })),
426
- },
427
- },
428
- {
429
- id: 'output-1',
430
- type: 'outputNode',
431
- position: { x: 600, y: 0 },
432
- name: 'Response',
433
- },
434
- ];
435
-
436
- const edges: any[] = [
437
- {
438
- id: 'edge-input-switch',
439
- sourceId: 'input-1',
440
- targetId: 'switch-1',
441
- type: 'edge',
442
- },
443
- ];
444
-
445
- // Create expression nodes for each condition
446
- conditions.forEach((c, i) => {
447
- const exprNodeId = `expr-${i}`;
448
- nodes.push({
449
- id: exprNodeId,
450
- type: 'expressionNode',
451
- position: { x: 400, y: i * 100 },
452
- name: `Expression ${i + 1}`,
453
- content: {
454
- expressions: c.expressions.map((e, j) => ({
455
- id: `expr-${i}-${j}`,
456
- key: e.key,
457
- value: e.value,
458
- })),
459
- },
460
- });
461
-
462
- // Edge from switch to expression (with sourceHandle for the statement)
463
- edges.push({
464
- id: `edge-switch-expr-${i}`,
465
- sourceId: 'switch-1',
466
- sourceHandle: `stmt-${i}`,
467
- targetId: exprNodeId,
468
- type: 'edge',
469
- });
470
-
471
- // Edge from expression to output
472
- edges.push({
473
- id: `edge-expr-output-${i}`,
474
- sourceId: exprNodeId,
475
- targetId: 'output-1',
476
- type: 'edge',
477
- });
478
- });
479
-
480
- return { nodes, edges };
481
- }
482
-
483
- /**
484
- * Infer a TypeBox schema from a value.
485
- *
486
- * This is a simple schema inference for testing purposes.
487
- * For production use, prefer explicit schemas.
488
- *
489
- * @param value - The value to infer schema from
490
- * @returns A TypeBox schema matching the value structure
491
- */
492
- export function inferSchema(value: unknown): TSchema {
493
- if (value === null) {
494
- return Type.Null();
495
- }
496
- if (value === undefined) {
497
- return Type.Unknown();
498
- }
499
- if (typeof value === 'boolean') {
500
- return Type.Boolean();
501
- }
502
- if (typeof value === 'number') {
503
- return Type.Number();
504
- }
505
- if (typeof value === 'string') {
506
- return Type.String();
507
- }
508
-
509
- if (Array.isArray(value)) {
510
- if (value.length === 0) {
511
- return Type.Array(Type.Unknown());
512
- }
513
- // Use first element to infer array type
514
- return Type.Array(inferSchema(value[0]));
515
- }
516
-
517
- if (typeof value === 'object') {
518
- const properties: Record<string, TSchema> = {};
519
- for (const [key, val] of Object.entries(value)) {
520
- properties[key] = inferSchema(val);
521
- }
522
- return Type.Object(properties);
523
- }
524
-
525
- return Type.Unknown();
526
- }
527
-
528
- /**
529
- * Compile a JDM decision and return the compiled result.
530
- *
531
- * Use this when you need access to the compilation result
532
- * without immediately evaluating.
533
- *
534
- * @param jdm - The JDM decision object or path to file
535
- * @param options - Compilation options
536
- * @returns The compilation result
537
- *
538
- * @example
539
- * ```typescript
540
- * const compiled = await compileJDM(jdm, {
541
- * inputSchema: MyInputSchema,
542
- * outputSchema: MyOutputSchema,
543
- * debug: true,
544
- * });
545
- *
546
- * // Inspect generated code
547
- * console.log(compiled.assemblyScript);
548
- *
549
- * // Create multiple decision instances
550
- * const decision1 = await createCompiledDecision(compiled);
551
- * const decision2 = await createCompiledDecision(compiled);
552
- * ```
553
- */
554
- export async function compileJDM(
555
- jdm: JDMDecision | object | string,
556
- options: {
557
- inputSchema?: TSchema;
558
- outputSchema?: TSchema;
559
- debug?: boolean;
560
- } = {},
561
- ): Promise<CompilationResult> {
562
- const { debug = false } = options;
563
-
564
- // Load JDM if path provided
565
- const jdmObj =
566
- typeof jdm === 'string'
567
- ? (JSON.parse(readFileSync(jdm, 'utf-8')) as JDMDecision)
568
- : (jdm as JDMDecision);
569
-
570
- // Default schemas
571
- const inputSchema = options.inputSchema ?? Type.Object({});
572
- const outputSchema = options.outputSchema ?? Type.Object({});
573
-
574
- return compile({
575
- jdm: jdmObj,
576
- inputSchema,
577
- outputSchema,
578
- debug,
579
- });
580
- }
581
-
582
- /**
583
- * Test assertion helper for comparing evaluation results.
584
- *
585
- * Handles floating point comparison and nested object comparison.
586
- *
587
- * @param actual - The actual evaluation result
588
- * @param expected - The expected result
589
- * @param message - Optional error message prefix
590
- */
591
- export function assertEvaluationResult(
592
- actual: unknown,
593
- expected: unknown,
594
- message = 'Evaluation result mismatch',
595
- ): void {
596
- const compare = (a: unknown, b: unknown, path: string): void => {
597
- if (a === b) {
598
- return;
599
- }
600
-
601
- // Handle null/undefined
602
- if (a === null || b === null || a === undefined || b === undefined) {
603
- if (a !== b) {
604
- throw new Error(`${message} at ${path}: expected ${b}, got ${a}`);
605
- }
606
- return;
607
- }
608
-
609
- // Handle numbers with floating point tolerance
610
- if (typeof a === 'number' && typeof b === 'number') {
611
- const tolerance = 1e-10;
612
- if (Math.abs(a - b) > tolerance) {
613
- throw new Error(`${message} at ${path}: expected ${b}, got ${a}`);
614
- }
615
- return;
616
- }
617
-
618
- // Handle arrays
619
- if (Array.isArray(a) && Array.isArray(b)) {
620
- if (a.length !== b.length) {
621
- throw new Error(
622
- `${message} at ${path}: array length mismatch (expected ${b.length}, got ${a.length})`,
623
- );
624
- }
625
- for (let i = 0; i < a.length; i++) {
626
- compare(a[i], b[i], `${path}[${i}]`);
627
- }
628
- return;
629
- }
630
-
631
- // Handle objects
632
- if (typeof a === 'object' && typeof b === 'object') {
633
- const aObj = a as Record<string, unknown>;
634
- const bObj = b as Record<string, unknown>;
635
- const aKeys = Object.keys(aObj);
636
- const bKeys = Object.keys(bObj);
637
-
638
- // Check for missing keys
639
- for (const key of bKeys) {
640
- if (!(key in aObj)) {
641
- throw new Error(`${message} at ${path}: missing key "${key}"`);
642
- }
643
- }
644
-
645
- // Compare values
646
- for (const key of aKeys) {
647
- compare(aObj[key], bObj[key], `${path}.${key}`);
648
- }
649
- return;
650
- }
651
-
652
- // Direct comparison for primitives
653
- if (a !== b) {
654
- throw new Error(`${message} at ${path}: expected ${b}, got ${a}`);
655
- }
656
- };
657
-
658
- compare(actual, expected, 'root');
659
- }