@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,398 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Round-trip testing utilities for marshaling/unmarshaling.
|
|
3
|
-
*
|
|
4
|
-
* These helpers verify that data can be marshaled to WASM memory format
|
|
5
|
-
* and unmarshaled back to the original JavaScript value without data loss.
|
|
6
|
-
*
|
|
7
|
-
* @module tests/helpers/round-trip
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { TSchema } from '@sinclair/typebox';
|
|
11
|
-
import { expect } from 'vitest';
|
|
12
|
-
import { flattenSchema, computeSchemaHash } from '../../src/compiler/schema';
|
|
13
|
-
import { generateMarshalCode } from '../../src/compiler/marshal-gen';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Type for the marshal function generated by generateMarshalCode.
|
|
17
|
-
*
|
|
18
|
-
* Generated code uses 3-arg signature (data, memory, allocate) for flexibility, while the
|
|
19
|
-
* exported runtime wrapper uses 2-arg signature (data, memory) with internal allocator.
|
|
20
|
-
* This separation allows testing the raw generated code without wrapper overhead.
|
|
21
|
-
*/
|
|
22
|
-
type GeneratedMarshalFn = (
|
|
23
|
-
data: Record<string, unknown>,
|
|
24
|
-
memory: WebAssembly.Memory,
|
|
25
|
-
allocate: (size: number) => number,
|
|
26
|
-
) => number;
|
|
27
|
-
|
|
28
|
-
type GeneratedUnmarshalFn = (ptr: number, memory: WebAssembly.Memory) => Record<string, unknown>;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Load marshal and unmarshal functions from generated code string.
|
|
32
|
-
*
|
|
33
|
-
* This is a simplified version of loadGeneratedMarshaling from runtime.ts
|
|
34
|
-
* that correctly handles the 3-argument marshal function signature.
|
|
35
|
-
*/
|
|
36
|
-
function loadMarshalFunctions(code: string): {
|
|
37
|
-
marshal: GeneratedMarshalFn;
|
|
38
|
-
unmarshal: GeneratedUnmarshalFn;
|
|
39
|
-
} {
|
|
40
|
-
// Generated code has exports for bundler usage, but we need plain functions for eval() in
|
|
41
|
-
// tests. We rename to avoid naming conflicts and preserve test isolation.
|
|
42
|
-
const cleanedCode = code
|
|
43
|
-
.replace(/^export function marshalInput/gm, 'function marshalInputHelper')
|
|
44
|
-
.replace(/^export function unmarshalOutput/gm, 'function unmarshalOutputHelper')
|
|
45
|
-
.replace(/^export const SCHEMA_HASH/gm, 'const SCHEMA_HASH')
|
|
46
|
-
.replace(/^export const INPUT_FIXED_SIZE/gm, 'const INPUT_FIXED_SIZE')
|
|
47
|
-
.replace(/^export const OUTPUT_FIXED_SIZE/gm, 'const OUTPUT_FIXED_SIZE')
|
|
48
|
-
.replace(/^export function writeString/gm, 'function writeStringHelper')
|
|
49
|
-
.replace(/^export function readString/gm, 'function readStringHelper')
|
|
50
|
-
.replace(/^export function writeArray/gm, 'function writeArrayHelper')
|
|
51
|
-
.replace(/^export function readArray/gm, 'function readArrayHelper')
|
|
52
|
-
.replace(/^export function calculateInputSize/gm, 'function calculateInputSizeHelper');
|
|
53
|
-
|
|
54
|
-
// Helper function to extract nested values
|
|
55
|
-
const helperCode = `
|
|
56
|
-
function getNestedValue(obj, path) {
|
|
57
|
-
const parts = path.split('.');
|
|
58
|
-
let current = obj;
|
|
59
|
-
for (const part of parts) {
|
|
60
|
-
if (current == null) return undefined;
|
|
61
|
-
if (typeof current !== 'object') return undefined;
|
|
62
|
-
current = current[part];
|
|
63
|
-
}
|
|
64
|
-
return current;
|
|
65
|
-
}
|
|
66
|
-
`;
|
|
67
|
-
|
|
68
|
-
const module: { marshalInput?: GeneratedMarshalFn; unmarshalOutput?: GeneratedUnmarshalFn } = {};
|
|
69
|
-
|
|
70
|
-
const setupFn = new Function(
|
|
71
|
-
'module',
|
|
72
|
-
helperCode +
|
|
73
|
-
cleanedCode +
|
|
74
|
-
`
|
|
75
|
-
module.marshalInput = marshalInputHelper;
|
|
76
|
-
module.unmarshalOutput = unmarshalOutputHelper;
|
|
77
|
-
`,
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
setupFn(module);
|
|
81
|
-
|
|
82
|
-
if (!module.marshalInput || !module.unmarshalOutput) {
|
|
83
|
-
throw new Error('Generated marshaling code did not export required functions');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
marshal: module.marshalInput,
|
|
88
|
-
unmarshal: module.unmarshalOutput,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Options for round-trip testing.
|
|
94
|
-
*/
|
|
95
|
-
export interface RoundTripOptions {
|
|
96
|
-
/**
|
|
97
|
-
* Custom equality comparison function.
|
|
98
|
-
* By default uses deep equality with floating point tolerance.
|
|
99
|
-
*/
|
|
100
|
-
compare?: (expected: unknown, actual: unknown) => boolean;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Whether to log debug information on failure.
|
|
104
|
-
* @default false
|
|
105
|
-
*/
|
|
106
|
-
debug?: boolean;
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Custom memory size in bytes.
|
|
110
|
-
* @default 65536 (64KB)
|
|
111
|
-
*/
|
|
112
|
-
memorySize?: number;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Result of a round-trip test.
|
|
117
|
-
*/
|
|
118
|
-
export interface RoundTripResult<T> {
|
|
119
|
-
/** The original value that was marshaled */
|
|
120
|
-
original: T;
|
|
121
|
-
/** The value after unmarshaling */
|
|
122
|
-
recovered: unknown;
|
|
123
|
-
/** Whether the round-trip was successful (values match) */
|
|
124
|
-
success: boolean;
|
|
125
|
-
/** Time taken to marshal in milliseconds */
|
|
126
|
-
marshalTime: number;
|
|
127
|
-
/** Time taken to unmarshal in milliseconds */
|
|
128
|
-
unmarshalTime: number;
|
|
129
|
-
/** Total bytes used in memory */
|
|
130
|
-
bytesUsed: number;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Test that a value can be marshaled and unmarshaled without data loss.
|
|
135
|
-
*
|
|
136
|
-
* This function marshals a value to WASM memory format using the generated
|
|
137
|
-
* marshaling code for the given schema, then unmarshals it back and verifies
|
|
138
|
-
* the result matches the original value.
|
|
139
|
-
*
|
|
140
|
-
* @param schema - TypeBox schema describing the value structure
|
|
141
|
-
* @param value - The value to test
|
|
142
|
-
* @param options - Optional configuration
|
|
143
|
-
* @throws AssertionError if the round-trip fails
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```typescript
|
|
147
|
-
* import { Type } from '@sinclair/typebox';
|
|
148
|
-
* import { testMarshalRoundTrip } from './round-trip';
|
|
149
|
-
*
|
|
150
|
-
* // Test a simple object
|
|
151
|
-
* await testMarshalRoundTrip(
|
|
152
|
-
* Type.Object({ name: Type.String(), age: Type.Number() }),
|
|
153
|
-
* { name: 'Alice', age: 30 }
|
|
154
|
-
* );
|
|
155
|
-
*
|
|
156
|
-
* // Test with custom comparison
|
|
157
|
-
* await testMarshalRoundTrip(schema, value, {
|
|
158
|
-
* compare: (a, b) => JSON.stringify(a) === JSON.stringify(b)
|
|
159
|
-
* });
|
|
160
|
-
* ```
|
|
161
|
-
*/
|
|
162
|
-
export async function testMarshalRoundTrip<T>(
|
|
163
|
-
schema: TSchema,
|
|
164
|
-
value: T,
|
|
165
|
-
options: RoundTripOptions = {},
|
|
166
|
-
): Promise<void> {
|
|
167
|
-
const result = await executeRoundTrip(schema, value, options);
|
|
168
|
-
|
|
169
|
-
if (!result.success) {
|
|
170
|
-
const message = [
|
|
171
|
-
'Round-trip test failed:',
|
|
172
|
-
` Original: ${JSON.stringify(result.original, null, 2)}`,
|
|
173
|
-
` Recovered: ${JSON.stringify(result.recovered, null, 2)}`,
|
|
174
|
-
].join('\n');
|
|
175
|
-
|
|
176
|
-
if (options.debug) {
|
|
177
|
-
console.error(message);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
expect(result.recovered).toEqual(result.original);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Execute a round-trip test and return detailed results.
|
|
186
|
-
*
|
|
187
|
-
* Unlike `testMarshalRoundTrip`, this function does not throw on failure.
|
|
188
|
-
* Instead, it returns detailed results that can be used for debugging
|
|
189
|
-
* or custom assertions.
|
|
190
|
-
*
|
|
191
|
-
* @param schema - TypeBox schema describing the value structure
|
|
192
|
-
* @param value - The value to test
|
|
193
|
-
* @param options - Optional configuration
|
|
194
|
-
* @returns Detailed round-trip test results
|
|
195
|
-
*
|
|
196
|
-
* @example
|
|
197
|
-
* ```typescript
|
|
198
|
-
* const result = await executeRoundTrip(schema, complexValue);
|
|
199
|
-
* console.log(`Marshal time: ${result.marshalTime}ms`);
|
|
200
|
-
* console.log(`Memory used: ${result.bytesUsed} bytes`);
|
|
201
|
-
* if (!result.success) {
|
|
202
|
-
* console.error('Mismatch:', result.original, result.recovered);
|
|
203
|
-
* }
|
|
204
|
-
* ```
|
|
205
|
-
*/
|
|
206
|
-
export async function executeRoundTrip<T>(
|
|
207
|
-
schema: TSchema,
|
|
208
|
-
value: T,
|
|
209
|
-
options: RoundTripOptions = {},
|
|
210
|
-
): Promise<RoundTripResult<T>> {
|
|
211
|
-
const { memorySize = 65536 } = options;
|
|
212
|
-
|
|
213
|
-
// Generate marshaling code from schema
|
|
214
|
-
const layout = flattenSchema(schema);
|
|
215
|
-
const hash = computeSchemaHash(schema, schema);
|
|
216
|
-
const marshalCode = generateMarshalCode(layout, layout, hash);
|
|
217
|
-
|
|
218
|
-
// Load the generated functions
|
|
219
|
-
const { marshal, unmarshal } = loadMarshalFunctions(marshalCode);
|
|
220
|
-
|
|
221
|
-
// Create WASM memory
|
|
222
|
-
const memory = new WebAssembly.Memory({
|
|
223
|
-
initial: Math.ceil(memorySize / 65536),
|
|
224
|
-
maximum: 256,
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
// Simple bump allocator
|
|
228
|
-
// The 1024 offset reserves space for potential WASM static data (globals, tables, etc.)
|
|
229
|
-
// which typically occupy low memory addresses. Starting at 1KB provides safe separation.
|
|
230
|
-
let heapOffset = 1024; // Start after static data area
|
|
231
|
-
const allocate = (size: number): number => {
|
|
232
|
-
const ptr = heapOffset;
|
|
233
|
-
heapOffset += size;
|
|
234
|
-
return ptr;
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
// Marshal
|
|
238
|
-
const marshalStart = performance.now();
|
|
239
|
-
const ptr = marshal(value as Record<string, unknown>, memory, allocate);
|
|
240
|
-
const marshalTime = performance.now() - marshalStart;
|
|
241
|
-
|
|
242
|
-
// Unmarshal
|
|
243
|
-
const unmarshalStart = performance.now();
|
|
244
|
-
const recovered = unmarshal(ptr, memory);
|
|
245
|
-
const unmarshalTime = performance.now() - unmarshalStart;
|
|
246
|
-
|
|
247
|
-
// Compare
|
|
248
|
-
const compare = options.compare ?? deepEqual;
|
|
249
|
-
const success = compare(value, recovered);
|
|
250
|
-
|
|
251
|
-
return {
|
|
252
|
-
original: value,
|
|
253
|
-
recovered,
|
|
254
|
-
success,
|
|
255
|
-
marshalTime,
|
|
256
|
-
unmarshalTime,
|
|
257
|
-
bytesUsed: heapOffset,
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Test multiple values with the same schema.
|
|
263
|
-
*
|
|
264
|
-
* Useful for testing various edge cases or data shapes with a single schema.
|
|
265
|
-
*
|
|
266
|
-
* @param schema - TypeBox schema describing the value structure
|
|
267
|
-
* @param values - Array of values to test
|
|
268
|
-
* @param options - Optional configuration
|
|
269
|
-
* @throws AssertionError if any round-trip fails
|
|
270
|
-
*
|
|
271
|
-
* @example
|
|
272
|
-
* ```typescript
|
|
273
|
-
* await testMarshalRoundTripBatch(
|
|
274
|
-
* Type.Object({ x: Type.Number() }),
|
|
275
|
-
* [
|
|
276
|
-
* { x: 0 },
|
|
277
|
-
* { x: -1 },
|
|
278
|
-
* { x: Number.MAX_SAFE_INTEGER },
|
|
279
|
-
* { x: 0.1 + 0.2 }, // floating point
|
|
280
|
-
* ]
|
|
281
|
-
* );
|
|
282
|
-
* ```
|
|
283
|
-
*/
|
|
284
|
-
export async function testMarshalRoundTripBatch<T>(
|
|
285
|
-
schema: TSchema,
|
|
286
|
-
values: T[],
|
|
287
|
-
options: RoundTripOptions = {},
|
|
288
|
-
): Promise<void> {
|
|
289
|
-
for (let i = 0; i < values.length; i++) {
|
|
290
|
-
try {
|
|
291
|
-
await testMarshalRoundTrip(schema, values[i], options);
|
|
292
|
-
} catch (error) {
|
|
293
|
-
throw new Error(
|
|
294
|
-
`Round-trip failed for value at index ${i}: ${JSON.stringify(values[i])}\n` +
|
|
295
|
-
(error instanceof Error ? error.message : String(error)),
|
|
296
|
-
);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Deep equality comparison with floating point tolerance.
|
|
303
|
-
*
|
|
304
|
-
* Handles:
|
|
305
|
-
* - Null/undefined
|
|
306
|
-
* - Primitives (with floating point tolerance for numbers)
|
|
307
|
-
* - Arrays (recursive comparison)
|
|
308
|
-
* - Objects (recursive comparison)
|
|
309
|
-
*
|
|
310
|
-
* @param a - First value
|
|
311
|
-
* @param b - Second value
|
|
312
|
-
* @returns true if values are equal
|
|
313
|
-
*/
|
|
314
|
-
export function deepEqual(a: unknown, b: unknown): boolean {
|
|
315
|
-
// Handle null/undefined
|
|
316
|
-
if (a === b) {
|
|
317
|
-
return true;
|
|
318
|
-
}
|
|
319
|
-
if (a === null || b === null) {
|
|
320
|
-
return false;
|
|
321
|
-
}
|
|
322
|
-
if (a === undefined || b === undefined) {
|
|
323
|
-
return false;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Handle different types
|
|
327
|
-
if (typeof a !== typeof b) {
|
|
328
|
-
return false;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Handle numbers with floating point tolerance
|
|
332
|
-
if (typeof a === 'number' && typeof b === 'number') {
|
|
333
|
-
if (Number.isNaN(a) && Number.isNaN(b)) {
|
|
334
|
-
return true;
|
|
335
|
-
}
|
|
336
|
-
if (!Number.isFinite(a) || !Number.isFinite(b)) {
|
|
337
|
-
return a === b;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// Use relative tolerance for large numbers, absolute for small
|
|
341
|
-
const tolerance = 1e-14;
|
|
342
|
-
const diff = Math.abs(a - b);
|
|
343
|
-
const maxAbs = Math.max(Math.abs(a), Math.abs(b), 1);
|
|
344
|
-
return diff / maxAbs < tolerance || diff < Number.EPSILON;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Handle arrays
|
|
348
|
-
if (Array.isArray(a)) {
|
|
349
|
-
if (!Array.isArray(b)) {
|
|
350
|
-
return false;
|
|
351
|
-
}
|
|
352
|
-
if (a.length !== b.length) {
|
|
353
|
-
return false;
|
|
354
|
-
}
|
|
355
|
-
return a.every((val, i) => deepEqual(val, b[i]));
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// Handle objects
|
|
359
|
-
if (typeof a === 'object' && typeof b === 'object') {
|
|
360
|
-
const aObj = a as Record<string, unknown>;
|
|
361
|
-
const bObj = b as Record<string, unknown>;
|
|
362
|
-
const aKeys = Object.keys(aObj);
|
|
363
|
-
const bKeys = Object.keys(bObj);
|
|
364
|
-
|
|
365
|
-
if (aKeys.length !== bKeys.length) {
|
|
366
|
-
return false;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
return aKeys.every((key) => deepEqual(aObj[key], bObj[key]));
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// Primitive comparison
|
|
373
|
-
return a === b;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Create a custom round-trip tester with preset options.
|
|
378
|
-
*
|
|
379
|
-
* Useful for creating test-specific testers with consistent configuration.
|
|
380
|
-
*
|
|
381
|
-
* @param defaultOptions - Default options for all tests
|
|
382
|
-
* @returns A tester function with preset options
|
|
383
|
-
*
|
|
384
|
-
* @example
|
|
385
|
-
* ```typescript
|
|
386
|
-
* const debugTester = createRoundTripTester({ debug: true });
|
|
387
|
-
*
|
|
388
|
-
* // Now all tests will log debug info
|
|
389
|
-
* await debugTester(schema, value);
|
|
390
|
-
* ```
|
|
391
|
-
*/
|
|
392
|
-
export function createRoundTripTester(
|
|
393
|
-
defaultOptions: RoundTripOptions = {},
|
|
394
|
-
): <T>(schema: TSchema, value: T, options?: RoundTripOptions) => Promise<void> {
|
|
395
|
-
return async <T>(schema: TSchema, value: T, options: RoundTripOptions = {}): Promise<void> => {
|
|
396
|
-
return testMarshalRoundTrip(schema, value, { ...defaultOptions, ...options });
|
|
397
|
-
};
|
|
398
|
-
}
|