@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.
- package/dist/index.js +2227 -29
- package/dist/index.js.map +1 -1
- package/package.json +8 -2
- package/.github/workflows/ci.yml +0 -53
- package/.oxfmtrc.json +0 -16
- package/.oxlintrc.json +0 -183
- package/AGENTS.md +0 -81
- package/asconfig.json +0 -23
- package/benchmarks/fixtures.ts +0 -111
- package/benchmarks/input-fixtures.ts +0 -80
- package/benchmarks/run.ts +0 -913
- package/benchmarks/worker-pool.ts +0 -223
- package/benchmarks/worker.ts +0 -374
- package/scripts/run-all-tests.ts +0 -220
- package/src/compiler/EXPRESSION_SUBSETS.md +0 -228
- package/src/compiler/asc-compiler.ts +0 -315
- package/src/compiler/ast-types.ts +0 -215
- package/src/compiler/build.ts +0 -56
- package/src/compiler/cache.ts +0 -414
- package/src/compiler/code-generators.ts +0 -211
- package/src/compiler/codegen/index.ts +0 -15
- package/src/compiler/codegen/js-marshal.ts +0 -999
- package/src/compiler/codegen/js-validation.ts +0 -243
- package/src/compiler/codegen.ts +0 -19
- package/src/compiler/compile-time-validation.ts +0 -507
- package/src/compiler/cst-visitor.ts +0 -434
- package/src/compiler/errors.ts +0 -227
- package/src/compiler/expression-parser.ts +0 -536
- package/src/compiler/graph.ts +0 -197
- package/src/compiler/index.ts +0 -199
- package/src/compiler/input-validation.ts +0 -33
- package/src/compiler/marshal-gen.ts +0 -21
- package/src/compiler/nodes/context-resolvers.ts +0 -197
- package/src/compiler/nodes/decision-table.ts +0 -507
- package/src/compiler/nodes/decision.ts +0 -292
- package/src/compiler/nodes/expression-compiler.ts +0 -526
- package/src/compiler/nodes/expression.ts +0 -425
- package/src/compiler/nodes/function.ts +0 -316
- package/src/compiler/nodes/input.ts +0 -60
- package/src/compiler/nodes/switch.ts +0 -547
- package/src/compiler/optimizer.ts +0 -948
- package/src/compiler/orchestrator.ts +0 -352
- package/src/compiler/parser.ts +0 -115
- package/src/compiler/result-selection.ts +0 -161
- package/src/compiler/runtime/index.ts +0 -26
- package/src/compiler/runtime-codegen.ts +0 -211
- package/src/compiler/runtime-validation-codegen.ts +0 -294
- package/src/compiler/runtime.ts +0 -452
- package/src/compiler/schema.ts +0 -245
- package/src/compiler/switch-branch-detection.ts +0 -92
- package/src/compiler/types.ts +0 -136
- package/src/compiler/unary-ast-transforms.ts +0 -148
- package/src/compiler/unary-parser.ts +0 -301
- package/src/compiler/unary-transform.ts +0 -161
- package/src/compiler/utils.ts +0 -27
- package/src/compiler/virtual-fs.ts +0 -90
- package/src/compiler/wasm-instantiate.ts +0 -127
- package/src/index.ts +0 -1
- package/src/runtime/arrays.ts +0 -579
- package/src/runtime/context.ts +0 -189
- package/src/runtime/expressions.ts +0 -1811
- package/src/runtime/index.ts +0 -8
- package/src/runtime/memory.ts +0 -607
- package/src/runtime/strings.ts +0 -260
- package/src/runtime/tables.ts +0 -96
- package/src/runtime/tsconfig.json +0 -4
- package/src/runtime/values.ts +0 -209
- package/test-data/README.md +0 -83
- package/test-data/decision-tables/basic/8k.json +0 -87992
- package/test-data/decision-tables/basic/affiliate-commission-calculator.json +0 -228
- package/test-data/decision-tables/basic/airline-loyalty-points-calculations.json +0 -285
- package/test-data/decision-tables/basic/airline-upgrade-eligibility.json +0 -466
- package/test-data/decision-tables/basic/auto-insurance-premium-calculator.json +0 -412
- package/test-data/decision-tables/basic/booking-personalization-system.json +0 -553
- package/test-data/decision-tables/basic/care-team-assignment-system.json +0 -585
- package/test-data/decision-tables/basic/claim-validation-system.json +0 -307
- package/test-data/decision-tables/basic/clinical-lab-result-interpreter.json +0 -433
- package/test-data/decision-tables/basic/clinical-treatment-protocol.json +0 -474
- package/test-data/decision-tables/basic/credit-limit-adjustment.json +0 -479
- package/test-data/decision-tables/basic/customer-eligibility-engine.json +0 -551
- package/test-data/decision-tables/basic/customer-lifetime-value.json +0 -200
- package/test-data/decision-tables/basic/customer-onboarding-kyc-verification.json +0 -611
- package/test-data/decision-tables/basic/customer-service-escalation.json +0 -191
- package/test-data/decision-tables/basic/decision-table-discounts.json +0 -168
- package/test-data/decision-tables/basic/decision-table-shipping.json +0 -398
- package/test-data/decision-tables/basic/delivery-route-optimizer.json +0 -271
- package/test-data/decision-tables/basic/device-compatibility-checker.json +0 -303
- package/test-data/decision-tables/basic/disaster-relief-fund-allocation.json +0 -296
- package/test-data/decision-tables/basic/dynamic-fx-rate-pricing-system.json +0 -237
- package/test-data/decision-tables/basic/dynamic-marketplace-comission-calculator.json +0 -242
- package/test-data/decision-tables/basic/dynamic-shipping-cost-calculator.json +0 -378
- package/test-data/decision-tables/basic/dynamic-tarrif-engine.json +0 -289
- package/test-data/decision-tables/basic/dynamic-ticket-pricing.json +0 -325
- package/test-data/decision-tables/basic/empty-column-with-space.json +0 -100
- package/test-data/decision-tables/basic/empty-column-without-space.json +0 -100
- package/test-data/decision-tables/basic/environment-compliance-assessment.json +0 -386
- package/test-data/decision-tables/basic/expression-table-map.json +0 -313
- package/test-data/decision-tables/basic/flash-sale-eligibility.json +0 -366
- package/test-data/decision-tables/basic/flight-dispatch-decision-system.json +0 -455
- package/test-data/decision-tables/basic/flight-rebooking-fee-calculator.json +0 -406
- package/test-data/decision-tables/basic/government-assistance.json +0 -299
- package/test-data/decision-tables/basic/grant-funding-distribution.json +0 -307
- package/test-data/decision-tables/basic/hazardous-materials-management-system.json +0 -414
- package/test-data/decision-tables/basic/immigration-eligibility-evaluator.json +0 -765
- package/test-data/decision-tables/basic/import-duties-calculator.json +0 -318
- package/test-data/decision-tables/basic/insurance-agent-commission.json +0 -228
- package/test-data/decision-tables/basic/insurance-coverage-calculator.json +0 -362
- package/test-data/decision-tables/basic/insurance-underwriting-risk.json +0 -321
- package/test-data/decision-tables/basic/international-roaming-policy-manager.json +0 -199
- package/test-data/decision-tables/basic/legacy-plan-management.json +0 -434
- package/test-data/decision-tables/basic/marketplace-listing-verification-system.json +0 -334
- package/test-data/decision-tables/basic/medication-dosage-calculator.json +0 -318
- package/test-data/decision-tables/basic/merch-bags.json +0 -171
- package/test-data/decision-tables/basic/municipal-permit-evaluation-system.json +0 -364
- package/test-data/decision-tables/basic/mvno-partner-enablement.json +0 -313
- package/test-data/decision-tables/basic/partner-revenue-sharing.json +0 -244
- package/test-data/decision-tables/basic/payment-routing-and-fee-calculator.json +0 -475
- package/test-data/decision-tables/basic/policy-discount-calculator.json +0 -307
- package/test-data/decision-tables/basic/policy-eligibility-analyzer.json +0 -299
- package/test-data/decision-tables/basic/product-listing-scoring.json +0 -358
- package/test-data/decision-tables/basic/realtime-fraud-detection.json +0 -235
- package/test-data/decision-tables/basic/regional-compliance-manager.json +0 -278
- package/test-data/decision-tables/basic/returns-and-refund-policy.json +0 -366
- package/test-data/decision-tables/basic/returns-processing-system.json +0 -448
- package/test-data/decision-tables/basic/school-district-resource-allocation.json +0 -282
- package/test-data/decision-tables/basic/seat-map-optimization.json +0 -325
- package/test-data/decision-tables/basic/seller-fee-calculator.json +0 -307
- package/test-data/decision-tables/basic/service-level-agreement-enforcement.json +0 -575
- package/test-data/decision-tables/basic/smart-financial-product-matcher.json +0 -249
- package/test-data/decision-tables/basic/supply-chain-risk.json +0 -316
- package/test-data/decision-tables/basic/table-loop.json +0 -93
- package/test-data/decision-tables/basic/table.json +0 -76
- package/test-data/decision-tables/basic/traffic-violation-penalty-calculator.json +0 -436
- package/test-data/decision-tables/basic/transaction-compliance-classifier.json +0 -525
- package/test-data/decision-tables/basic/vehicle-claims-resolution.json +0 -310
- package/test-data/decision-tables/basic/warehouse-storage-location.json +0 -345
- package/test-data/decision-tables/hit-policy-collect/collect-multiple-matches.json +0 -127
- package/test-data/decision-tables/hit-policy-collect/collect-no-match.json +0 -95
- package/test-data/decision-tables/hit-policy-first/first-match.json +0 -103
- package/test-data/decision-tables/hit-policy-first/no-match.json +0 -95
- package/test-data/decision-tables/hit-policy-output-order/output-order-respected.json +0 -94
- package/test-data/decision-tables/hit-policy-output-order/string-output-order.json +0 -94
- package/test-data/decision-tables/hit-policy-priority/priority-respected.json +0 -86
- package/test-data/decision-tables/hit-policy-rule-order/rule-order-respected.json +0 -94
- package/test-data/decision-tables/hit-policy-unique/all-match-error.json +0 -89
- package/test-data/decision-tables/hit-policy-unique/multiple-match-error.json +0 -89
- package/test-data/decision-tables/hit-policy-unique/no-match.json +0 -88
- package/test-data/decision-tables/hit-policy-unique/unique-match.json +0 -99
- package/test-data/expressions/arithmetic/error-cyclic.json +0 -114
- package/test-data/expressions/arithmetic/error-missing-input.json +0 -54
- package/test-data/expressions/arithmetic/error-missing-output.json +0 -54
- package/test-data/expressions/arithmetic/expression-default.json +0 -93
- package/test-data/expressions/arithmetic/expression-fields.json +0 -94
- package/test-data/expressions/arithmetic/expression-loop.json +0 -94
- package/test-data/expressions/arithmetic/expression-passthrough.json +0 -108
- package/test-data/expressions/arithmetic/expression.json +0 -69
- package/test-data/expressions/arithmetic/nested-request.json +0 -125
- package/test-data/expressions/arithmetic/number-function.json +0 -58
- package/test-data/expressions/arithmetic/test-number-functions.json +0 -68
- package/test-data/expressions/functions/all.json +0 -149
- package/test-data/expressions/functions/avg.json +0 -89
- package/test-data/expressions/functions/filter.json +0 -109
- package/test-data/expressions/functions/flat.json +0 -167
- package/test-data/expressions/functions/map-strings.json +0 -65
- package/test-data/expressions/functions/map.json +0 -73
- package/test-data/expressions/functions/reduce.json +0 -49
- package/test-data/expressions/functions/some.json +0 -175
- package/test-data/expressions/functions/sort-strings.json +0 -97
- package/test-data/expressions/functions/sort.json +0 -97
- package/test-data/expressions/logical/logical-and.json +0 -116
- package/test-data/expressions/logical/logical-complex.json +0 -260
- package/test-data/expressions/logical/logical-not.json +0 -111
- package/test-data/expressions/logical/logical-or.json +0 -123
- package/test-data/expressions/string/string-comparison.json +0 -128
- package/test-data/expressions/string/string-concat.json +0 -106
- package/test-data/expressions/string/string-contains.json +0 -125
- package/test-data/expressions/string/string-endsWith.json +0 -113
- package/test-data/expressions/string/string-indexOf.json +0 -131
- package/test-data/expressions/string/string-join.json +0 -92
- package/test-data/expressions/string/string-lower.json +0 -94
- package/test-data/expressions/string/string-replace.json +0 -130
- package/test-data/expressions/string/string-split.json +0 -101
- package/test-data/expressions/string/string-startsWith.json +0 -113
- package/test-data/expressions/string/string-substring.json +0 -138
- package/test-data/expressions/string/string-trim.json +0 -100
- package/test-data/expressions/string/string-upper.json +0 -94
- package/test-data/other/custom.json +0 -51
- package/test-data/other/customer-input-schema.json +0 -34
- package/test-data/other/customer-output-schema.json +0 -34
- package/test-data/other/passthrough.json +0 -31
- package/test-data/sub-decisions/basic/$nodes-child.json +0 -31
- package/test-data/sub-decisions/basic/$nodes-parent.json +0 -49
- package/test-data/sub-decisions/basic/recursive-table1.json +0 -49
- package/test-data/sub-decisions/basic/recursive-table2.json +0 -49
- package/test-data/sub-decisions/complex-multi/approval-decision.json +0 -31
- package/test-data/sub-decisions/complex-multi/complex-dag.json +0 -175
- package/test-data/sub-decisions/complex-multi/credit-check.json +0 -31
- package/test-data/sub-decisions/complex-multi/customer-segmentation.json +0 -31
- package/test-data/sub-decisions/complex-multi/discount-eligibility.json +0 -31
- package/test-data/sub-decisions/complex-multi/eligibility-check.json +0 -31
- package/test-data/sub-decisions/complex-multi/final-offer.json +0 -31
- package/test-data/sub-decisions/complex-multi/income-verification.json +0 -31
- package/test-data/sub-decisions/complex-multi/linear-chain.json +0 -121
- package/test-data/sub-decisions/complex-multi/pricing-calculation.json +0 -31
- package/test-data/sub-decisions/complex-multi/product-eligibility.json +0 -31
- package/test-data/sub-decisions/complex-multi/risk-assessment.json +0 -31
- package/test-data/sub-decisions/complex-multi/shared-validation.json +0 -31
- package/test-data/sub-decisions/complex-multi/validation.json +0 -31
- package/test-data/sub-decisions/diamond/decision-a.json +0 -31
- package/test-data/sub-decisions/diamond/decision-b.json +0 -31
- package/test-data/sub-decisions/diamond/decision-c.json +0 -31
- package/test-data/sub-decisions/diamond/decision-shared.json +0 -31
- package/test-data/sub-decisions/diamond/diamond-pattern.json +0 -109
- package/test-data/sub-decisions/error-propagation/parent-calls-error.json +0 -44
- package/test-data/sub-decisions/error-propagation/sub-decision-with-error.json +0 -60
- package/test-data/switch-nodes/basic/account-dormancy-management.json +0 -245
- package/test-data/switch-nodes/basic/application-risk-assessment.json +0 -474
- package/test-data/switch-nodes/basic/cellular-data-rollover-system.json +0 -281
- package/test-data/switch-nodes/basic/clinical-pathway-selection.json +0 -454
- package/test-data/switch-nodes/basic/insurance-prior-authorization.json +0 -467
- package/test-data/switch-nodes/basic/last-mile-delivery-assignment.json +0 -373
- package/test-data/switch-nodes/basic/loan-approval.json +0 -469
- package/test-data/switch-nodes/basic/multi-switch.json +0 -498
- package/test-data/switch-nodes/basic/online-checkin-eligibility.json +0 -285
- package/test-data/switch-nodes/basic/order-consolidation-system.json +0 -493
- package/test-data/switch-nodes/basic/seller-approval-workflow.json +0 -383
- package/test-data/switch-nodes/basic/set-fee.json +0 -243
- package/test-data/switch-nodes/basic/shipping-carrier-selector.json +0 -379
- package/test-data/switch-nodes/basic/switch-node.json +0 -167
- package/test-data/switch-nodes/basic/switch-performance-2.json +0 -1307
- package/test-data/switch-nodes/basic/switch-performance.json +0 -691
- package/test-data/switch-nodes/basic/tax-exemption.json +0 -295
- package/test-data/switch-nodes/basic/warehouse-cross-docking.json +0 -313
- package/test-data/switch-nodes/default-cases/switch-with-default.json +0 -134
- package/test-data/zen-reference/$nodes-child.json +0 -69
- package/test-data/zen-reference/$nodes-parent.json +0 -34
- package/test-data/zen-reference/8k.json +0 -87992
- package/test-data/zen-reference/credit-analysis.json +0 -324
- package/test-data/zen-reference/custom.json +0 -51
- package/test-data/zen-reference/customer-input-schema.json +0 -34
- package/test-data/zen-reference/customer-output-schema.json +0 -34
- package/test-data/zen-reference/error-cyclic.json +0 -114
- package/test-data/zen-reference/error-missing-input.json +0 -54
- package/test-data/zen-reference/error-missing-output.json +0 -54
- package/test-data/zen-reference/expression.json +0 -69
- package/test-data/zen-reference/function-v2.json +0 -48
- package/test-data/zen-reference/function.json +0 -46
- package/test-data/zen-reference/graphs/account-dormancy-management.json +0 -245
- package/test-data/zen-reference/graphs/affiliate-commission-calculator.json +0 -228
- package/test-data/zen-reference/graphs/airline-loyalty-points-calculations.json +0 -285
- package/test-data/zen-reference/graphs/airline-upgrade-eligibility.json +0 -466
- package/test-data/zen-reference/graphs/aml.json +0 -537
- package/test-data/zen-reference/graphs/application-risk-assessment.json +0 -474
- package/test-data/zen-reference/graphs/auto-insurance-premium-calculator.json +0 -412
- package/test-data/zen-reference/graphs/booking-personalization-system.json +0 -553
- package/test-data/zen-reference/graphs/care-team-assignment-system.json +0 -585
- package/test-data/zen-reference/graphs/cellular-data-rollover-system.json +0 -281
- package/test-data/zen-reference/graphs/claim-validation-system.json +0 -307
- package/test-data/zen-reference/graphs/clinical-lab-result-interpreter.json +0 -433
- package/test-data/zen-reference/graphs/clinical-pathway-selection.json +0 -454
- package/test-data/zen-reference/graphs/clinical-treatment-protocol.json +0 -474
- package/test-data/zen-reference/graphs/company-analysis.json +0 -390
- package/test-data/zen-reference/graphs/credit-limit-adjustment.json +0 -479
- package/test-data/zen-reference/graphs/customer-eligibility-engine.json +0 -551
- package/test-data/zen-reference/graphs/customer-lifetime-value.json +0 -200
- package/test-data/zen-reference/graphs/customer-onboarding-kyc-verification.json +0 -611
- package/test-data/zen-reference/graphs/customer-service-escalation.json +0 -191
- package/test-data/zen-reference/graphs/decision-table-discounts.json +0 -168
- package/test-data/zen-reference/graphs/decision-table-shipping.json +0 -398
- package/test-data/zen-reference/graphs/delivery-route-optimizer.json +0 -271
- package/test-data/zen-reference/graphs/device-compatibility-checker.json +0 -303
- package/test-data/zen-reference/graphs/disaster-relief-fund-allocation.json +0 -296
- package/test-data/zen-reference/graphs/dynamic-fx-rate-pricing-system.json +0 -237
- package/test-data/zen-reference/graphs/dynamic-marketplace-comission-calculator.json +0 -242
- package/test-data/zen-reference/graphs/dynamic-shipping-cost-calculator.json +0 -378
- package/test-data/zen-reference/graphs/dynamic-tarrif-engine.json +0 -289
- package/test-data/zen-reference/graphs/dynamic-ticket-pricing.json +0 -325
- package/test-data/zen-reference/graphs/empty-column-with-space.json +0 -100
- package/test-data/zen-reference/graphs/empty-column-without-space.json +0 -100
- package/test-data/zen-reference/graphs/environment-compliance-assessment.json +0 -386
- package/test-data/zen-reference/graphs/expression-default.json +0 -93
- package/test-data/zen-reference/graphs/expression-fields.json +0 -94
- package/test-data/zen-reference/graphs/expression-loop.json +0 -94
- package/test-data/zen-reference/graphs/expression-passthrough.json +0 -108
- package/test-data/zen-reference/graphs/expression-table-map.json +0 -313
- package/test-data/zen-reference/graphs/flash-sale-eligibility.json +0 -366
- package/test-data/zen-reference/graphs/flight-dispatch-decision-system.json +0 -455
- package/test-data/zen-reference/graphs/flight-rebooking-fee-calculator.json +0 -406
- package/test-data/zen-reference/graphs/government-assistance.json +0 -299
- package/test-data/zen-reference/graphs/grant-funding-distribution.json +0 -307
- package/test-data/zen-reference/graphs/hazardous-materials-management-system.json +0 -414
- package/test-data/zen-reference/graphs/immigration-eligibility-evaluator.json +0 -765
- package/test-data/zen-reference/graphs/import-duties-calculator.json +0 -318
- package/test-data/zen-reference/graphs/insurance-agent-commission.json +0 -228
- package/test-data/zen-reference/graphs/insurance-breakdown.json +0 -421
- package/test-data/zen-reference/graphs/insurance-coverage-calculator.json +0 -362
- package/test-data/zen-reference/graphs/insurance-prior-authorization.json +0 -467
- package/test-data/zen-reference/graphs/insurance-underwriting-risk.json +0 -321
- package/test-data/zen-reference/graphs/international-roaming-policy-manager.json +0 -199
- package/test-data/zen-reference/graphs/last-mile-delivery-assignment.json +0 -373
- package/test-data/zen-reference/graphs/legacy-plan-management.json +0 -434
- package/test-data/zen-reference/graphs/loan-approval.json +0 -469
- package/test-data/zen-reference/graphs/marketplace-listing-verification-system.json +0 -334
- package/test-data/zen-reference/graphs/medication-dosage-calculator.json +0 -318
- package/test-data/zen-reference/graphs/merch-bags.json +0 -171
- package/test-data/zen-reference/graphs/multi-switch.json +0 -498
- package/test-data/zen-reference/graphs/municipal-permit-evaluation-system.json +0 -364
- package/test-data/zen-reference/graphs/mvno-partner-enablement.json +0 -313
- package/test-data/zen-reference/graphs/nested-request.json +0 -125
- package/test-data/zen-reference/graphs/online-checkin-eligibility.json +0 -285
- package/test-data/zen-reference/graphs/order-consolidation-system.json +0 -493
- package/test-data/zen-reference/graphs/partner-revenue-sharing.json +0 -244
- package/test-data/zen-reference/graphs/payment-routing-and-fee-calculator.json +0 -475
- package/test-data/zen-reference/graphs/policy-discount-calculator.json +0 -307
- package/test-data/zen-reference/graphs/policy-eligibility-analyzer.json +0 -299
- package/test-data/zen-reference/graphs/product-listing-scoring.json +0 -358
- package/test-data/zen-reference/graphs/realtime-fraud-detection.json +0 -235
- package/test-data/zen-reference/graphs/regional-compliance-manager.json +0 -278
- package/test-data/zen-reference/graphs/returns-and-refund-policy.json +0 -366
- package/test-data/zen-reference/graphs/returns-processing-system.json +0 -448
- package/test-data/zen-reference/graphs/school-district-resource-allocation.json +0 -282
- package/test-data/zen-reference/graphs/seat-map-optimization.json +0 -325
- package/test-data/zen-reference/graphs/seller-approval-workflow.json +0 -383
- package/test-data/zen-reference/graphs/seller-fee-calculator.json +0 -307
- package/test-data/zen-reference/graphs/service-level-agreement-enforcement.json +0 -575
- package/test-data/zen-reference/graphs/set-fee.json +0 -243
- package/test-data/zen-reference/graphs/shipping-carrier-selector.json +0 -379
- package/test-data/zen-reference/graphs/smart-financial-product-matcher.json +0 -249
- package/test-data/zen-reference/graphs/supply-chain-risk.json +0 -316
- package/test-data/zen-reference/graphs/table-loop.json +0 -93
- package/test-data/zen-reference/graphs/tax-exemption.json +0 -295
- package/test-data/zen-reference/graphs/traffic-violation-penalty-calculator.json +0 -436
- package/test-data/zen-reference/graphs/transaction-compliance-classifier.json +0 -525
- package/test-data/zen-reference/graphs/vehicle-claims-resolution.json +0 -310
- package/test-data/zen-reference/graphs/warehouse-cross-docking.json +0 -313
- package/test-data/zen-reference/graphs/warehouse-storage-location.json +0 -345
- package/test-data/zen-reference/http-function.json +0 -34
- package/test-data/zen-reference/infinite-function.json +0 -46
- package/test-data/zen-reference/js/imports.js +0 -25
- package/test-data/zen-reference/passthrough.json +0 -31
- package/test-data/zen-reference/recursive-table1.json +0 -49
- package/test-data/zen-reference/recursive-table2.json +0 -49
- package/test-data/zen-reference/sleep-function.json +0 -34
- package/test-data/zen-reference/switch-node.json +0 -167
- package/test-data/zen-reference/switch-performance-2.json +0 -1307
- package/test-data/zen-reference/switch-performance.json +0 -691
- package/test-data/zen-reference/table.json +0 -76
- package/tests/helpers/index.ts +0 -73
- package/tests/helpers/mock-context.ts +0 -231
- package/tests/helpers/round-trip.ts +0 -398
- package/tests/helpers/test-harness-comparison.ts +0 -325
- package/tests/helpers/test-harness-wasm.ts +0 -710
- package/tests/helpers/test-harness.ts +0 -28
- package/tests/helpers/wasm-test.ts +0 -659
- package/tests/integration/compilation-errors.test.ts +0 -864
- package/tests/integration/decision-tables.test.ts +0 -531
- package/tests/integration/edge-cases.test.ts +0 -787
- package/tests/integration/expressions.test.ts +0 -513
- package/tests/integration/function-node-integration.test.ts +0 -182
- package/tests/integration/sub-decisions.test.ts +0 -108
- package/tests/integration/switch-nodes.test.ts +0 -399
- package/tests/integration/unary-or-matching.test.ts +0 -53
- package/tests/integration/wasm-data-types.test.ts +0 -398
- package/tests/integration/wasm-errors.test.ts +0 -199
- package/tests/integration/wasm-execution.test.ts +0 -348
- package/tests/integration/wasm-memory.test.ts +0 -228
- package/tests/scripts/analyze-coverage.ts +0 -166
- package/tests/scripts/categorize-tests.ts +0 -396
- package/tests/scripts/coverage-analysis.ts +0 -836
- package/tests/unit/compiler/cache.test.ts +0 -238
- package/tests/unit/compiler/errors.test.ts +0 -316
- package/tests/unit/compiler/graph-scalability.test.ts +0 -510
- package/tests/unit/compiler/graph.test.ts +0 -878
- package/tests/unit/compiler/input-validation.test.ts +0 -447
- package/tests/unit/compiler/logical-and-parser.test.ts +0 -143
- package/tests/unit/compiler/logical-not-parser.test.ts +0 -107
- package/tests/unit/compiler/logical-or-parser.test.ts +0 -236
- package/tests/unit/compiler/marshal-gen/marshal-gen.test.ts +0 -97
- package/tests/unit/compiler/nodes/decision-table.test.ts +0 -103
- package/tests/unit/compiler/nodes/decision.test.ts +0 -182
- package/tests/unit/compiler/nodes/function-compile.test.ts +0 -204
- package/tests/unit/compiler/nodes/function.test.ts +0 -176
- package/tests/unit/compiler/nodes/input.test.ts +0 -30
- package/tests/unit/compiler/nodes/switch.test.ts +0 -127
- package/tests/unit/compiler/optimizer-cache.test.ts +0 -327
- package/tests/unit/compiler/optimizer-implementation.test.ts +0 -625
- package/tests/unit/compiler/parser.test.ts +0 -508
- package/tests/unit/compiler/runtime-error-cleanup.test.ts +0 -426
- package/tests/unit/compiler/runtime-validation.test.ts +0 -303
- package/tests/unit/compiler/runtime.test.ts +0 -221
- package/tests/unit/compiler/schema/schema.test.ts +0 -248
- package/tests/unit/compiler/unary-ast-transforms.test.ts +0 -245
- package/tsconfig.json +0 -27
- package/tsup.config.ts +0 -11
- package/vitest.config.ts +0 -12
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
import { ZenEngine } from '@gorules/zen-engine';
|
|
2
|
-
import type { TSchema } from '@sinclair/typebox';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { readFileSync } from 'fs';
|
|
5
|
-
import { compile as compileWasm, type CompilationResult } from '../../src/compiler';
|
|
6
|
-
import { evaluateCompiled, inferSchema } from './test-harness-wasm';
|
|
7
|
-
|
|
8
|
-
export { compileWasm as compile };
|
|
9
|
-
|
|
10
|
-
// Find the root directory based on current file location
|
|
11
|
-
const testDataRoot = path.join(process.cwd(), 'test-data');
|
|
12
|
-
|
|
13
|
-
// Create loader for sub-decision references
|
|
14
|
-
//
|
|
15
|
-
// Test fixtures are organized by feature (sub-decisions/basic, sub-decisions/diamond)
|
|
16
|
-
// and by source (zen-reference for ported tests). Multiple paths allow tests to reference
|
|
17
|
-
// sub-decisions without knowing their exact location.
|
|
18
|
-
const loader = async (key: string): Promise<Buffer> => {
|
|
19
|
-
const possiblePaths = [
|
|
20
|
-
path.join(testDataRoot, key),
|
|
21
|
-
path.join(testDataRoot, 'zen-reference', key),
|
|
22
|
-
path.join(testDataRoot, 'sub-decisions/basic', key),
|
|
23
|
-
path.join(testDataRoot, 'sub-decisions/diamond', key),
|
|
24
|
-
path.join(testDataRoot, 'sub-decisions/complex-multi', key),
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
for (const filePath of possiblePaths) {
|
|
28
|
-
try {
|
|
29
|
-
const content = readFileSync(filePath);
|
|
30
|
-
return content;
|
|
31
|
-
} catch {
|
|
32
|
-
// Try next path
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
throw new Error(
|
|
36
|
-
`Failed to load ${key}: not found in any search path (${possiblePaths.join(', ')})`,
|
|
37
|
-
);
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
// Create a new ZenEngine for each test to avoid state issues
|
|
41
|
-
function createZenEngine() {
|
|
42
|
-
return new ZenEngine({ loader });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Compare actual result against expected, but only check keys present in expected.
|
|
47
|
-
* This allows actual to have extra fields (e.g., passthrough fields).
|
|
48
|
-
*
|
|
49
|
-
* This preserves the behavior of the original assertDeepEqual which only validated
|
|
50
|
-
* keys that existed in the expected object.
|
|
51
|
-
*/
|
|
52
|
-
function expectPartialMatch(actual: unknown, expected: unknown, message: string): void {
|
|
53
|
-
if (expected === actual) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Handle matchers
|
|
58
|
-
if (isAnything(expected)) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (isAny(expected)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (typeof expected !== typeof actual) {
|
|
66
|
-
throw new Error(
|
|
67
|
-
`${message}: type mismatch (expected ${typeof expected}, got ${typeof actual})`,
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (expected === null || actual === null) {
|
|
72
|
-
if (expected !== actual) {
|
|
73
|
-
throw new Error(`${message}: null mismatch`);
|
|
74
|
-
}
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (Array.isArray(expected)) {
|
|
79
|
-
if (!Array.isArray(actual)) {
|
|
80
|
-
throw new Error(`${message}: expected array, got ${typeof actual}`);
|
|
81
|
-
}
|
|
82
|
-
if (expected.length !== actual.length) {
|
|
83
|
-
throw new Error(`${message}: array length mismatch (${expected.length} vs ${actual.length})`);
|
|
84
|
-
}
|
|
85
|
-
for (let i = 0; i < expected.length; i++) {
|
|
86
|
-
expectPartialMatch(actual[i], expected[i], `${message}[${i}]`);
|
|
87
|
-
}
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (typeof expected === 'object') {
|
|
92
|
-
if (typeof actual !== 'object') {
|
|
93
|
-
throw new Error(`${message}: expected object, got ${typeof actual}`);
|
|
94
|
-
}
|
|
95
|
-
const expectedKeys = Object.keys(expected);
|
|
96
|
-
|
|
97
|
-
for (const key of expectedKeys) {
|
|
98
|
-
const expectedValue = (expected as Record<string, unknown>)[key];
|
|
99
|
-
if (isAnything(expectedValue) || isAny(expectedValue)) {
|
|
100
|
-
// If expected is anything or any(Constructor), we don't need to check if the key exists in actual
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
if (!(key in (actual as object))) {
|
|
104
|
-
throw new Error(`${message}: missing key "${key}"`);
|
|
105
|
-
}
|
|
106
|
-
expectPartialMatch(
|
|
107
|
-
(actual as Record<string, unknown>)[key],
|
|
108
|
-
expectedValue,
|
|
109
|
-
`${message}.${key}`,
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Primitive comparison
|
|
116
|
-
if (expected !== actual) {
|
|
117
|
-
// Check if this looks like a timestamp comparison (Unix timestamps are large numbers)
|
|
118
|
-
const expectedNum = typeof expected === 'number';
|
|
119
|
-
const actualNum = typeof actual === 'number';
|
|
120
|
-
const isTimestamp =
|
|
121
|
-
expectedNum && actualNum && expected > 1_000_000_000 && actual > 1_000_000_000;
|
|
122
|
-
|
|
123
|
-
if (isTimestamp) {
|
|
124
|
-
// Skip exact timestamp comparison - just verify both are timestamps
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// For floating point numbers, allow small precision differences
|
|
129
|
-
// This handles differences in the last digits due to floating point representation
|
|
130
|
-
if (expectedNum && actualNum) {
|
|
131
|
-
const relativeError =
|
|
132
|
-
Math.abs((expected as number) - (actual as number)) /
|
|
133
|
-
Math.max(Math.abs(expected as number), Math.abs(actual as number), 1e-15);
|
|
134
|
-
if (relativeError < 1e-14) {
|
|
135
|
-
// Within floating point tolerance
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
throw new Error(`${message}: value mismatch (expected ${expected}, got ${actual})`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function isAnything(value: unknown): boolean {
|
|
145
|
-
return (
|
|
146
|
-
typeof value === 'object' &&
|
|
147
|
-
value !== null &&
|
|
148
|
-
'_is_Anything' in (value as Record<string, unknown>)
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function isAny(value: unknown): boolean {
|
|
153
|
-
return (
|
|
154
|
-
typeof value === 'object' && value !== null && '_is_Any' in (value as Record<string, unknown>)
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Run test against both zen-engine and jdm-asm
|
|
160
|
-
*/
|
|
161
|
-
export interface TestConfig {
|
|
162
|
-
skipZen?: boolean; // Skip zen-engine testing
|
|
163
|
-
name: string;
|
|
164
|
-
jdm: string | object; // JDM JSON content (string or object)
|
|
165
|
-
inputSchema: TSchema; // TypeBox schema for input
|
|
166
|
-
outputSchema: TSchema; // TypeBox schema for output
|
|
167
|
-
input?: Record<string, unknown>; // Optional - use tests array from JDM if not provided
|
|
168
|
-
expected?: Record<string, unknown> | unknown[]; // Optional - use tests array from JDM if not provided. Can be array for COLLECT hit policies.
|
|
169
|
-
unsupported?: string[]; // Features not yet implemented
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Simplified test config for tests that don't need schema.
|
|
174
|
-
* Schemas are inferred from input/expected shapes.
|
|
175
|
-
*/
|
|
176
|
-
export interface SimpleTestConfig {
|
|
177
|
-
skipZen?: boolean; // Skip zen-engine testing
|
|
178
|
-
name: string;
|
|
179
|
-
jdm: string | object;
|
|
180
|
-
input?: Record<string, unknown>; // Optional - use tests array from JDM if not provided
|
|
181
|
-
expected?: Record<string, unknown> | unknown[]; // Optional - use tests array from JDM if not provided. Can be array for COLLECT hit policies.
|
|
182
|
-
unsupported?: string[];
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export async function runCompatibilityTest(config: TestConfig): Promise<void> {
|
|
186
|
-
// Skip if tests reference unsupported features
|
|
187
|
-
if (config.unsupported?.length) {
|
|
188
|
-
console.log(`⏭️ Skipping ${config.name} (unsupported: ${config.unsupported.join(', ')})`);
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Convert string JDM to object if needed
|
|
193
|
-
const jdmContent = typeof config.jdm === 'string' ? JSON.parse(config.jdm) : config.jdm;
|
|
194
|
-
|
|
195
|
-
type TestCase = {
|
|
196
|
-
input: Record<string, unknown>;
|
|
197
|
-
output: Record<string, unknown>;
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
type JDMWithTests = typeof jdmContent & { tests?: TestCase[] };
|
|
201
|
-
|
|
202
|
-
const jdm = jdmContent as JDMWithTests;
|
|
203
|
-
|
|
204
|
-
// If JDM has embedded tests array, use those
|
|
205
|
-
const testCases = jdm.tests
|
|
206
|
-
? jdm.tests
|
|
207
|
-
: config.input && config.expected
|
|
208
|
-
? [{ input: config.input, output: config.expected }]
|
|
209
|
-
: [];
|
|
210
|
-
|
|
211
|
-
if (testCases.length === 0) {
|
|
212
|
-
console.log(`⏭️ Skipping ${config.name} (no test cases)`);
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Run with zen-engine (golden standard) - create fresh engine to avoid state issues
|
|
217
|
-
const zenDecision = config.skipZen ? null : createZenEngine().createDecision(jdm);
|
|
218
|
-
|
|
219
|
-
// WASM compilation takes ~250ms per decision, so compiling once and reusing the module
|
|
220
|
-
// for all test cases dramatically speeds up test execution (seconds vs minutes).
|
|
221
|
-
let compiled: CompilationResult | null = null;
|
|
222
|
-
let compilationError: Error | null = null;
|
|
223
|
-
try {
|
|
224
|
-
compiled = await compileWasm({
|
|
225
|
-
jdm: config.jdm as any,
|
|
226
|
-
inputSchema: config.inputSchema,
|
|
227
|
-
outputSchema: config.outputSchema,
|
|
228
|
-
debug: true,
|
|
229
|
-
});
|
|
230
|
-
// Debug: dump generated code for specific tests
|
|
231
|
-
if (config.name.includes('customer-eligibility') && compiled.assemblyScript) {
|
|
232
|
-
require('fs').writeFileSync('/tmp/eligibility-debug.ts', compiled.assemblyScript);
|
|
233
|
-
}
|
|
234
|
-
} catch (error: unknown) {
|
|
235
|
-
compilationError = error instanceof Error ? error : new Error(String(error));
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
for (let i = 0; i < testCases.length; i++) {
|
|
239
|
-
const testCase = testCases[i];
|
|
240
|
-
const testName = jdm.tests ? `${config.name} [test ${i + 1}/${testCases.length}]` : config.name;
|
|
241
|
-
|
|
242
|
-
const zenResult = config.skipZen ? null : await zenDecision!.evaluate(testCase.input);
|
|
243
|
-
|
|
244
|
-
// Run with our implementation
|
|
245
|
-
try {
|
|
246
|
-
// Handle compilation errors
|
|
247
|
-
if (compilationError) {
|
|
248
|
-
const message = compilationError.message;
|
|
249
|
-
if (message.includes('Function node')) {
|
|
250
|
-
console.log(`⏭️ Skipping ${testName} (function node not yet supported)`);
|
|
251
|
-
continue;
|
|
252
|
-
} else if (message.includes('compile() not yet implemented')) {
|
|
253
|
-
// Compilation not yet available
|
|
254
|
-
if (!config.skipZen && zenResult) {
|
|
255
|
-
expectPartialMatch(
|
|
256
|
-
zenResult.result,
|
|
257
|
-
testCase.output,
|
|
258
|
-
`${testName} - zen-engine mismatch`,
|
|
259
|
-
);
|
|
260
|
-
}
|
|
261
|
-
console.log(`⏭️ Skipping ${testName} (compile() not yet implemented)`);
|
|
262
|
-
continue;
|
|
263
|
-
} else {
|
|
264
|
-
throw compilationError;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
const asmResult = await evaluateCompiled(compiled!, testCase.input);
|
|
269
|
-
|
|
270
|
-
// Compare results - only check keys that exist in expected output (allows passthrough fields)
|
|
271
|
-
if (!config.skipZen && zenResult) {
|
|
272
|
-
expectPartialMatch(zenResult.result, testCase.output, `${testName} - zen-engine mismatch`);
|
|
273
|
-
}
|
|
274
|
-
expectPartialMatch(asmResult, testCase.output, `${testName} - jdm-asm mismatch`);
|
|
275
|
-
console.log(`✅ ${testName}`);
|
|
276
|
-
} catch (error: unknown) {
|
|
277
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
278
|
-
if (message.includes('Function node')) {
|
|
279
|
-
console.log(`⏭️ Skipping ${testName} (function node not yet supported)`);
|
|
280
|
-
} else if (message.includes('compile() not yet implemented')) {
|
|
281
|
-
// Compilation not yet available
|
|
282
|
-
if (!config.skipZen && zenResult) {
|
|
283
|
-
expectPartialMatch(
|
|
284
|
-
zenResult.result,
|
|
285
|
-
testCase.output,
|
|
286
|
-
`${testName} - zen-engine mismatch`,
|
|
287
|
-
);
|
|
288
|
-
}
|
|
289
|
-
console.log(`⏭️ Skipping ${testName} (compile() not yet implemented)`);
|
|
290
|
-
} else {
|
|
291
|
-
throw error;
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Convenience wrapper for tests without explicit schemas.
|
|
299
|
-
* Infers schemas from the input/expected shapes (less type-safe).
|
|
300
|
-
*/
|
|
301
|
-
export async function runSimpleCompatibilityTest(config: SimpleTestConfig): Promise<void> {
|
|
302
|
-
const inputSchema = inferSchema(config.input || {});
|
|
303
|
-
const outputSchema = inferSchema(config.expected || {});
|
|
304
|
-
|
|
305
|
-
return runCompatibilityTest({
|
|
306
|
-
...config,
|
|
307
|
-
inputSchema,
|
|
308
|
-
outputSchema,
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Test helpers for matching any value
|
|
314
|
-
*/
|
|
315
|
-
export const matchers = {
|
|
316
|
-
/**
|
|
317
|
-
* Matches any value (like expect.anything())
|
|
318
|
-
*/
|
|
319
|
-
anything: () => ({ _is_Anything: true }) as const,
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Matches any value of the given constructor type (like expect.any(Constructor))
|
|
323
|
-
*/
|
|
324
|
-
any: (_: unknown) => ({ _is_Any: true }) as const,
|
|
325
|
-
};
|