@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.
- 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,513 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Expression Evaluation Tests
|
|
3
|
-
*
|
|
4
|
-
* Test suite for expression node evaluation, organized by subset:
|
|
5
|
-
* - Subset 1: Basic Arithmetic & Comparisons
|
|
6
|
-
* - Subset 2: Logical Operators
|
|
7
|
-
* - Subset 3: String Operations
|
|
8
|
-
* - Subset 4: Built-in Functions (coming later)
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { describe, it, expect } from 'vitest';
|
|
12
|
-
import { readFileSync } from 'fs';
|
|
13
|
-
import { runSimpleCompatibilityTest, type SimpleTestConfig } from '../helpers/test-harness';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Load a test fixture from file
|
|
17
|
-
*/
|
|
18
|
-
function loadFixture(filePath: string): string {
|
|
19
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
20
|
-
return content;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Load a complete test configuration including input and expected values
|
|
25
|
-
* Uses SimpleTestConfig to avoid TypeBox schema requirements
|
|
26
|
-
*/
|
|
27
|
-
function loadTestWithFixture(
|
|
28
|
-
fixturePath: string,
|
|
29
|
-
input?: Record<string, unknown>,
|
|
30
|
-
expected?: Record<string, unknown>,
|
|
31
|
-
unsupported?: string[],
|
|
32
|
-
skipZen?: boolean,
|
|
33
|
-
): SimpleTestConfig {
|
|
34
|
-
const jdm = loadFixture(fixturePath);
|
|
35
|
-
return {
|
|
36
|
-
name: fixturePath.split('/').pop() || 'unknown',
|
|
37
|
-
jdm,
|
|
38
|
-
input,
|
|
39
|
-
expected,
|
|
40
|
-
unsupported,
|
|
41
|
-
skipZen,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
describe('Expression Evaluation', () => {
|
|
46
|
-
// Subset 1: Basic Arithmetic & Comparisons
|
|
47
|
-
describe('Subset 1: Basic Arithmetic & Comparisons', () => {
|
|
48
|
-
const testDir = 'test-data/expressions/arithmetic';
|
|
49
|
-
|
|
50
|
-
it('should evaluate arithmetic expressions', async () => {
|
|
51
|
-
const test = loadTestWithFixture(`${testDir}/expression.json`);
|
|
52
|
-
await runSimpleCompatibilityTest(test);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should handle expression passthrough', async () => {
|
|
56
|
-
const test = loadTestWithFixture(`${testDir}/expression-passthrough.json`);
|
|
57
|
-
await runSimpleCompatibilityTest(test);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('should evaluate expressions with defaults', async () => {
|
|
61
|
-
const test = loadTestWithFixture(`${testDir}/expression-default.json`);
|
|
62
|
-
await runSimpleCompatibilityTest(test);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('should handle nested requests', async () => {
|
|
66
|
-
const test = loadTestWithFixture(`${testDir}/nested-request.json`);
|
|
67
|
-
await runSimpleCompatibilityTest(test);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// inputField/outputPath scoping - expressions resolve from within the specified sub-object
|
|
71
|
-
it('should evaluate expression fields', async () => {
|
|
72
|
-
const test = loadTestWithFixture(`${testDir}/expression-fields.json`);
|
|
73
|
-
await runSimpleCompatibilityTest(test);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
// executionMode:'loop' - evaluate expressions for each item in an array
|
|
77
|
-
it('should handle expression loops', async () => {
|
|
78
|
-
const test = loadTestWithFixture(`${testDir}/expression-loop.json`);
|
|
79
|
-
await runSimpleCompatibilityTest(test);
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it('should test number functions', async () => {
|
|
83
|
-
const test = loadTestWithFixture(`${testDir}/test-number-functions.json`);
|
|
84
|
-
await runSimpleCompatibilityTest(test);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
// Note: This test was a duplicate (same as "should handle expression loops")
|
|
88
|
-
// Now testing that loop also works with the same fixture
|
|
89
|
-
it('should handle expression loops (duplicate fixture)', async () => {
|
|
90
|
-
const test = loadTestWithFixture(`${testDir}/expression-loop.json`);
|
|
91
|
-
await runSimpleCompatibilityTest(test);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
describe('Error Cases', () => {
|
|
95
|
-
// Error detection tests verify proper handling of:
|
|
96
|
-
// - Missing input nodes
|
|
97
|
-
// - Missing output nodes
|
|
98
|
-
// - Cyclic dependencies
|
|
99
|
-
|
|
100
|
-
it('should detect missing input errors', async () => {
|
|
101
|
-
const jdm = loadFixture('test-data/expressions/arithmetic/error-missing-input.json');
|
|
102
|
-
|
|
103
|
-
// Define a schema that doesn't include all referenced inputs
|
|
104
|
-
const inputSchema = {
|
|
105
|
-
type: 'object',
|
|
106
|
-
properties: {
|
|
107
|
-
numbers: { type: 'array', items: { type: 'number' } },
|
|
108
|
-
},
|
|
109
|
-
} as any;
|
|
110
|
-
|
|
111
|
-
const outputSchema = {
|
|
112
|
-
type: 'object',
|
|
113
|
-
properties: {
|
|
114
|
-
result: { type: 'number' },
|
|
115
|
-
},
|
|
116
|
-
} as any;
|
|
117
|
-
|
|
118
|
-
// Create a compile function with validation enabled
|
|
119
|
-
// Note: validation is disabled by default in compile(), so we need to patch it
|
|
120
|
-
// For now, we'll test by directly calling the compileDecision function with validation
|
|
121
|
-
|
|
122
|
-
// First, let's test that the validation module works correctly
|
|
123
|
-
const { parseStandardExpression } = await import('../../src/compiler/unary-parser');
|
|
124
|
-
const { collectIdentifiers, validateInputReferences } =
|
|
125
|
-
await import('../../src/compiler/input-validation');
|
|
126
|
-
|
|
127
|
-
// Compile expressions and collect identifiers
|
|
128
|
-
const identifiers = new Set<string>();
|
|
129
|
-
const jdmObj = JSON.parse(jdm);
|
|
130
|
-
for (const node of jdmObj.nodes) {
|
|
131
|
-
if (node.type === 'expressionNode' && node.content?.expressions) {
|
|
132
|
-
for (const expr of node.content.expressions) {
|
|
133
|
-
const ast = parseStandardExpression(expr.value);
|
|
134
|
-
const exprIds = collectIdentifiers(ast);
|
|
135
|
-
exprIds.forEach((id) => identifiers.add(id));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Check that we collected the expected identifiers
|
|
141
|
-
expect(identifiers.has('numbers')).toBe(true);
|
|
142
|
-
expect(identifiers.has('firstName')).toBe(true);
|
|
143
|
-
expect(identifiers.has('lastName')).toBe(true);
|
|
144
|
-
|
|
145
|
-
// Now create a mock context and validate
|
|
146
|
-
const mockContext = {
|
|
147
|
-
inputLayout: {
|
|
148
|
-
fields: [
|
|
149
|
-
{ path: 'numbers', flatName: 'numbers', type: 'array' as any, offset: 0, size: 8 },
|
|
150
|
-
],
|
|
151
|
-
},
|
|
152
|
-
jdm: jdmObj,
|
|
153
|
-
inputSchema: inputSchema,
|
|
154
|
-
outputSchema: outputSchema,
|
|
155
|
-
outputLayout: { fields: [] },
|
|
156
|
-
schemaHash: 0n,
|
|
157
|
-
options: {},
|
|
158
|
-
parseExpression: parseStandardExpression as any,
|
|
159
|
-
parseUnaryExpression: parseStandardExpression as any,
|
|
160
|
-
getUniqueId: ((prefix: string) => prefix) as any,
|
|
161
|
-
loadDecision: ((_key: string) => {
|
|
162
|
-
throw new Error('Not implemented');
|
|
163
|
-
}) as any,
|
|
164
|
-
compiledSubDecisions: new Map(),
|
|
165
|
-
decisionPath: [],
|
|
166
|
-
helperFunctions: new Map(),
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
// This should throw an error about missing inputs
|
|
170
|
-
expect(() => validateInputReferences(identifiers, mockContext)).toThrow();
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('should detect missing output errors', async () => {
|
|
174
|
-
const jdm = loadFixture('test-data/expressions/arithmetic/error-missing-output.json');
|
|
175
|
-
|
|
176
|
-
// Define input schema that matches the used inputs
|
|
177
|
-
const inputSchema = {
|
|
178
|
-
type: 'object',
|
|
179
|
-
properties: {
|
|
180
|
-
numbers: { type: 'array', items: { type: 'number' } },
|
|
181
|
-
firstName: { type: 'string' },
|
|
182
|
-
lastName: { type: 'string' },
|
|
183
|
-
},
|
|
184
|
-
} as any;
|
|
185
|
-
|
|
186
|
-
// Define output schema that includes outputs NOT assigned by the expression node
|
|
187
|
-
// The expression node assigns: deep.nested.sum, fullName, largeNumbers, smallNumbers
|
|
188
|
-
// But we'll also require: result, timestamp (which are NOT assigned)
|
|
189
|
-
const outputSchema = {
|
|
190
|
-
type: 'object',
|
|
191
|
-
properties: {
|
|
192
|
-
result: { type: 'number' }, // NOT assigned
|
|
193
|
-
timestamp: { type: 'number' }, // NOT assigned
|
|
194
|
-
'deep.nested.sum': { type: 'number' }, // assigned
|
|
195
|
-
fullName: { type: 'string' }, // assigned
|
|
196
|
-
largeNumbers: { type: 'array', items: { type: 'number' } }, // assigned
|
|
197
|
-
smallNumbers: { type: 'array', items: { type: 'number' } }, // assigned
|
|
198
|
-
},
|
|
199
|
-
} as any;
|
|
200
|
-
|
|
201
|
-
// Create mock layout directly
|
|
202
|
-
const outputLayout = {
|
|
203
|
-
fields: [
|
|
204
|
-
{ path: 'result', flatName: 'result', type: 'f64' as const, offset: 0, size: 8 },
|
|
205
|
-
{ path: 'timestamp', flatName: 'timestamp', type: 'f64' as const, offset: 8, size: 8 },
|
|
206
|
-
{
|
|
207
|
-
path: 'deep.nested.sum',
|
|
208
|
-
flatName: 'deep_nested_sum',
|
|
209
|
-
type: 'f64' as const,
|
|
210
|
-
offset: 16,
|
|
211
|
-
size: 8,
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
path: 'fullName',
|
|
215
|
-
flatName: 'fullName',
|
|
216
|
-
type: 'string' as const,
|
|
217
|
-
offset: 24,
|
|
218
|
-
size: -1,
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
path: 'largeNumbers',
|
|
222
|
-
flatName: 'largeNumbers',
|
|
223
|
-
type: 'array' as const,
|
|
224
|
-
offset: 32,
|
|
225
|
-
size: -1,
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
path: 'smallNumbers',
|
|
229
|
-
flatName: 'smallNumbers',
|
|
230
|
-
type: 'array' as const,
|
|
231
|
-
offset: 40,
|
|
232
|
-
size: -1,
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
// Create a mock context
|
|
238
|
-
const mockContext = {
|
|
239
|
-
inputLayout: {
|
|
240
|
-
fields: [
|
|
241
|
-
{ path: 'numbers', flatName: 'numbers', type: 'array' as any, offset: 0, size: 8 },
|
|
242
|
-
{
|
|
243
|
-
path: 'firstName',
|
|
244
|
-
flatName: 'firstName',
|
|
245
|
-
type: 'string' as any,
|
|
246
|
-
offset: 8,
|
|
247
|
-
size: 24,
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
path: 'lastName',
|
|
251
|
-
flatName: 'lastName',
|
|
252
|
-
type: 'string' as any,
|
|
253
|
-
offset: 32,
|
|
254
|
-
size: 24,
|
|
255
|
-
},
|
|
256
|
-
],
|
|
257
|
-
},
|
|
258
|
-
jdm: JSON.parse(jdm),
|
|
259
|
-
inputSchema: inputSchema,
|
|
260
|
-
outputSchema: outputSchema,
|
|
261
|
-
outputLayout: outputLayout,
|
|
262
|
-
schemaHash: 0n,
|
|
263
|
-
options: {},
|
|
264
|
-
parseExpression: ((expr: string) => {
|
|
265
|
-
const { parseStandardExpression } = require('../../src/compiler/unary-parser');
|
|
266
|
-
return parseStandardExpression(expr);
|
|
267
|
-
}) as any,
|
|
268
|
-
parseUnaryExpression: ((expr: string) => {
|
|
269
|
-
const { parseStandardExpression } = require('../../src/compiler/unary-parser');
|
|
270
|
-
return parseStandardExpression(expr);
|
|
271
|
-
}) as any,
|
|
272
|
-
getUniqueId: ((prefix: string) => prefix) as any,
|
|
273
|
-
loadDecision: ((_key: string) => {
|
|
274
|
-
throw new Error('Not implemented');
|
|
275
|
-
}) as any,
|
|
276
|
-
compiledSubDecisions: new Map(),
|
|
277
|
-
decisionPath: [],
|
|
278
|
-
helperFunctions: new Map(),
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
// Test using the validation module directly
|
|
282
|
-
const { collectOutputAssignments, validateOutputReferences } =
|
|
283
|
-
await import('../../src/compiler/input-validation');
|
|
284
|
-
|
|
285
|
-
// Collect assigned outputs
|
|
286
|
-
const assignedOutputs = collectOutputAssignments(mockContext);
|
|
287
|
-
|
|
288
|
-
// Check that we collected the expected outputs
|
|
289
|
-
expect(assignedOutputs.has('deep.nested.sum')).toBe(true);
|
|
290
|
-
expect(assignedOutputs.has('fullName')).toBe(true);
|
|
291
|
-
expect(assignedOutputs.has('largeNumbers')).toBe(true);
|
|
292
|
-
expect(assignedOutputs.has('smallNumbers')).toBe(true);
|
|
293
|
-
|
|
294
|
-
// This should throw an error about missing outputs
|
|
295
|
-
expect(() => validateOutputReferences(assignedOutputs, mockContext)).toThrow();
|
|
296
|
-
});
|
|
297
|
-
it.todo('should detect cyclic dependencies');
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
// Subset 2: Logical Operators
|
|
302
|
-
describe('Subset 2: Logical Operators', () => {
|
|
303
|
-
const testDir = 'test-data/expressions/logical';
|
|
304
|
-
|
|
305
|
-
it('should evaluate logical AND operators', async () => {
|
|
306
|
-
const test = loadTestWithFixture(`${testDir}/logical-and.json`);
|
|
307
|
-
await runSimpleCompatibilityTest(test);
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
it('should evaluate logical OR operators', async () => {
|
|
311
|
-
const test = loadTestWithFixture(`${testDir}/logical-or.json`);
|
|
312
|
-
await runSimpleCompatibilityTest(test);
|
|
313
|
-
});
|
|
314
|
-
it('should evaluate logical NOT operators', async () => {
|
|
315
|
-
const test = loadTestWithFixture(`${testDir}/logical-not.json`);
|
|
316
|
-
await runSimpleCompatibilityTest(test);
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
it('should handle complex logical expressions', async () => {
|
|
320
|
-
const test = loadTestWithFixture(`${testDir}/logical-complex.json`);
|
|
321
|
-
await runSimpleCompatibilityTest(test);
|
|
322
|
-
});
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
// Subset 3: String Operations
|
|
326
|
-
describe('Subset 3: String Operations', () => {
|
|
327
|
-
const testDir = 'test-data/expressions/string';
|
|
328
|
-
|
|
329
|
-
// Tests will be added progressively as we implement string operation support
|
|
330
|
-
|
|
331
|
-
it('should concatenate strings', async () => {
|
|
332
|
-
const test = loadTestWithFixture(
|
|
333
|
-
`${testDir}/string-concat.json`,
|
|
334
|
-
undefined,
|
|
335
|
-
undefined,
|
|
336
|
-
undefined,
|
|
337
|
-
true,
|
|
338
|
-
);
|
|
339
|
-
await runSimpleCompatibilityTest(test);
|
|
340
|
-
});
|
|
341
|
-
it('should handle string comparison operators', async () => {
|
|
342
|
-
const test = loadTestWithFixture(
|
|
343
|
-
`${testDir}/string-comparison.json`,
|
|
344
|
-
undefined,
|
|
345
|
-
undefined,
|
|
346
|
-
undefined,
|
|
347
|
-
true,
|
|
348
|
-
);
|
|
349
|
-
await runSimpleCompatibilityTest(test);
|
|
350
|
-
});
|
|
351
|
-
it('should evaluate upper() string function', async () => {
|
|
352
|
-
const test = loadTestWithFixture(
|
|
353
|
-
`${testDir}/string-upper.json`,
|
|
354
|
-
undefined,
|
|
355
|
-
undefined,
|
|
356
|
-
undefined,
|
|
357
|
-
true,
|
|
358
|
-
);
|
|
359
|
-
await runSimpleCompatibilityTest(test);
|
|
360
|
-
});
|
|
361
|
-
it('should evaluate lower() string function', async () => {
|
|
362
|
-
const test = loadTestWithFixture(
|
|
363
|
-
`${testDir}/string-lower.json`,
|
|
364
|
-
undefined,
|
|
365
|
-
undefined,
|
|
366
|
-
undefined,
|
|
367
|
-
true,
|
|
368
|
-
);
|
|
369
|
-
await runSimpleCompatibilityTest(test);
|
|
370
|
-
});
|
|
371
|
-
it('should evaluate trim() string function', async () => {
|
|
372
|
-
const test = loadTestWithFixture(
|
|
373
|
-
`${testDir}/string-trim.json`,
|
|
374
|
-
undefined,
|
|
375
|
-
undefined,
|
|
376
|
-
undefined,
|
|
377
|
-
true,
|
|
378
|
-
);
|
|
379
|
-
await runSimpleCompatibilityTest(test);
|
|
380
|
-
});
|
|
381
|
-
it('should evaluate substring() string function', async () => {
|
|
382
|
-
const test = loadTestWithFixture(
|
|
383
|
-
`${testDir}/string-substring.json`,
|
|
384
|
-
undefined,
|
|
385
|
-
undefined,
|
|
386
|
-
undefined,
|
|
387
|
-
true,
|
|
388
|
-
);
|
|
389
|
-
await runSimpleCompatibilityTest(test);
|
|
390
|
-
});
|
|
391
|
-
it('should evaluate indexOf() string function', async () => {
|
|
392
|
-
const test = loadTestWithFixture(
|
|
393
|
-
`${testDir}/string-indexOf.json`,
|
|
394
|
-
undefined,
|
|
395
|
-
undefined,
|
|
396
|
-
undefined,
|
|
397
|
-
true,
|
|
398
|
-
);
|
|
399
|
-
await runSimpleCompatibilityTest(test);
|
|
400
|
-
});
|
|
401
|
-
it('should evaluate startsWith() string function', async () => {
|
|
402
|
-
const test = loadTestWithFixture(
|
|
403
|
-
`${testDir}/string-startsWith.json`,
|
|
404
|
-
undefined,
|
|
405
|
-
undefined,
|
|
406
|
-
undefined,
|
|
407
|
-
true,
|
|
408
|
-
);
|
|
409
|
-
await runSimpleCompatibilityTest(test);
|
|
410
|
-
});
|
|
411
|
-
it('should evaluate endsWith() string function', async () => {
|
|
412
|
-
const test = loadTestWithFixture(
|
|
413
|
-
`${testDir}/string-endsWith.json`,
|
|
414
|
-
undefined,
|
|
415
|
-
undefined,
|
|
416
|
-
undefined,
|
|
417
|
-
true,
|
|
418
|
-
);
|
|
419
|
-
await runSimpleCompatibilityTest(test);
|
|
420
|
-
});
|
|
421
|
-
it('should evaluate contains() string function', async () => {
|
|
422
|
-
const test = loadTestWithFixture(
|
|
423
|
-
`${testDir}/string-contains.json`,
|
|
424
|
-
undefined,
|
|
425
|
-
undefined,
|
|
426
|
-
undefined,
|
|
427
|
-
true,
|
|
428
|
-
);
|
|
429
|
-
await runSimpleCompatibilityTest(test);
|
|
430
|
-
});
|
|
431
|
-
it('should evaluate split() string function', async () => {
|
|
432
|
-
const test = loadTestWithFixture(
|
|
433
|
-
`${testDir}/string-split.json`,
|
|
434
|
-
undefined,
|
|
435
|
-
undefined,
|
|
436
|
-
undefined,
|
|
437
|
-
true,
|
|
438
|
-
);
|
|
439
|
-
await runSimpleCompatibilityTest(test);
|
|
440
|
-
});
|
|
441
|
-
it('should evaluate join() string function', async () => {
|
|
442
|
-
const test = loadTestWithFixture(
|
|
443
|
-
`${testDir}/string-join.json`,
|
|
444
|
-
undefined,
|
|
445
|
-
undefined,
|
|
446
|
-
undefined,
|
|
447
|
-
true,
|
|
448
|
-
);
|
|
449
|
-
await runSimpleCompatibilityTest(test);
|
|
450
|
-
});
|
|
451
|
-
it('should evaluate replace() and replaceAll() string functions', async () => {
|
|
452
|
-
const test = loadTestWithFixture(
|
|
453
|
-
`${testDir}/string-replace.json`,
|
|
454
|
-
undefined,
|
|
455
|
-
undefined,
|
|
456
|
-
undefined,
|
|
457
|
-
true,
|
|
458
|
-
);
|
|
459
|
-
await runSimpleCompatibilityTest(test);
|
|
460
|
-
});
|
|
461
|
-
it.todo('should evaluate string built-in functions');
|
|
462
|
-
});
|
|
463
|
-
|
|
464
|
-
// Subset 4: Built-in Functions
|
|
465
|
-
describe('Subset 4: Built-in Functions', () => {
|
|
466
|
-
const testDir = 'test-data/expressions/functions';
|
|
467
|
-
|
|
468
|
-
// Tests will be added progressively as we implement built-in functions
|
|
469
|
-
|
|
470
|
-
it.todo('should evaluate sum() function');
|
|
471
|
-
it.todo('should evaluate count() function');
|
|
472
|
-
it('should evaluate avg() function', async () => {
|
|
473
|
-
const test = loadTestWithFixture(`${testDir}/avg.json`);
|
|
474
|
-
await runSimpleCompatibilityTest(test);
|
|
475
|
-
});
|
|
476
|
-
it('should evaluate filter() function', async () => {
|
|
477
|
-
const test = loadTestWithFixture(`${testDir}/filter.json`);
|
|
478
|
-
await runSimpleCompatibilityTest(test);
|
|
479
|
-
});
|
|
480
|
-
it('should evaluate map() function', async () => {
|
|
481
|
-
const test = loadTestWithFixture(`${testDir}/map.json`);
|
|
482
|
-
await runSimpleCompatibilityTest(test);
|
|
483
|
-
});
|
|
484
|
-
it('should evaluate map() with string transformations', async () => {
|
|
485
|
-
const test = loadTestWithFixture(`${testDir}/map-strings.json`);
|
|
486
|
-
await runSimpleCompatibilityTest(test);
|
|
487
|
-
});
|
|
488
|
-
it('should evaluate reduce() function', async () => {
|
|
489
|
-
const test = loadTestWithFixture(`${testDir}/reduce.json`);
|
|
490
|
-
await runSimpleCompatibilityTest({ ...test, skipZen: true });
|
|
491
|
-
});
|
|
492
|
-
it('should evaluate all() function', async () => {
|
|
493
|
-
const test = loadTestWithFixture(`${testDir}/all.json`);
|
|
494
|
-
await runSimpleCompatibilityTest(test);
|
|
495
|
-
});
|
|
496
|
-
it('should evaluate some() function', async () => {
|
|
497
|
-
const test = loadTestWithFixture(`${testDir}/some.json`);
|
|
498
|
-
await runSimpleCompatibilityTest(test);
|
|
499
|
-
});
|
|
500
|
-
it('should evaluate sort() function', async () => {
|
|
501
|
-
const test = loadTestWithFixture(`${testDir}/sort.json`);
|
|
502
|
-
await runSimpleCompatibilityTest({ ...test, skipZen: true });
|
|
503
|
-
});
|
|
504
|
-
it('should evaluate sort() with strings', async () => {
|
|
505
|
-
const test = loadTestWithFixture(`${testDir}/sort-strings.json`);
|
|
506
|
-
await runSimpleCompatibilityTest({ ...test, skipZen: true });
|
|
507
|
-
});
|
|
508
|
-
it('should evaluate flat() function', async () => {
|
|
509
|
-
const test = loadTestWithFixture(`${testDir}/flat.json`);
|
|
510
|
-
await runSimpleCompatibilityTest({ ...test, skipZen: true });
|
|
511
|
-
}, 15000); // Increase timeout for 14 test cases
|
|
512
|
-
});
|
|
513
|
-
});
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { Type } from '@sinclair/typebox';
|
|
3
|
-
import { compile, type JDMDecision } from '../../src/compiler';
|
|
4
|
-
|
|
5
|
-
describe('Function Node Integration Tests', () => {
|
|
6
|
-
it('should compile a decision with function node', async () => {
|
|
7
|
-
const jdm: JDMDecision = {
|
|
8
|
-
nodes: [
|
|
9
|
-
{
|
|
10
|
-
id: 'input-1',
|
|
11
|
-
type: 'inputNode' as any,
|
|
12
|
-
position: { x: 0, y: 0 },
|
|
13
|
-
name: 'Request',
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
id: 'func-1',
|
|
17
|
-
type: 'functionNode' as any,
|
|
18
|
-
position: { x: 200, y: 0 },
|
|
19
|
-
name: 'CustomFunction',
|
|
20
|
-
content: {
|
|
21
|
-
source: 'export const handler = (input) => ({ output: input.input * 2 })',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
id: 'output-1',
|
|
26
|
-
type: 'outputNode' as any,
|
|
27
|
-
position: { x: 400, y: 0 },
|
|
28
|
-
name: 'Response',
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
edges: [
|
|
32
|
-
{ id: 'edge-1', sourceId: 'input-1', targetId: 'func-1', type: 'edge' },
|
|
33
|
-
{ id: 'edge-2', sourceId: 'func-1', targetId: 'output-1', type: 'edge' },
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
const InputSchema = Type.Object({
|
|
38
|
-
input: Type.Number(),
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
const OutputSchema = Type.Object({
|
|
42
|
-
output: Type.Number(),
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Should compile without errors
|
|
46
|
-
const result = await compile({
|
|
47
|
-
inputSchema: InputSchema,
|
|
48
|
-
outputSchema: OutputSchema,
|
|
49
|
-
jdm,
|
|
50
|
-
optimize: false,
|
|
51
|
-
debug: true,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
expect(result.wasm).toBeDefined();
|
|
55
|
-
expect(result.wasm.length).toBeGreaterThan(0);
|
|
56
|
-
expect(result.schemaHash).toBeDefined();
|
|
57
|
-
expect(result.marshalCode).toBeDefined();
|
|
58
|
-
expect(result.validationCode).toBeDefined();
|
|
59
|
-
|
|
60
|
-
// Check that function sources are stored in the compilation context
|
|
61
|
-
// (This is important for future JavaScript bridge implementation)
|
|
62
|
-
if (result.assemblyScript) {
|
|
63
|
-
expect(result.assemblyScript).toContain('evaluateNode_func_1');
|
|
64
|
-
expect(result.assemblyScript).toContain('_isFunctionNode');
|
|
65
|
-
}
|
|
66
|
-
}, 10000);
|
|
67
|
-
|
|
68
|
-
it('should compile a decision with function node with multiple parameters', async () => {
|
|
69
|
-
const jdm: JDMDecision = {
|
|
70
|
-
nodes: [
|
|
71
|
-
{
|
|
72
|
-
id: 'input-1',
|
|
73
|
-
type: 'inputNode' as any,
|
|
74
|
-
position: { x: 0, y: 0 },
|
|
75
|
-
name: 'Request',
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: 'func-2',
|
|
79
|
-
type: 'functionNode' as any,
|
|
80
|
-
position: { x: 200, y: 0 },
|
|
81
|
-
name: 'MultiParamFunction',
|
|
82
|
-
content: {
|
|
83
|
-
source:
|
|
84
|
-
'export const handler = (input, context) => ({ result: input.value + context.offset })',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: 'output-1',
|
|
89
|
-
type: 'outputNode' as any,
|
|
90
|
-
position: { x: 400, y: 0 },
|
|
91
|
-
name: 'Response',
|
|
92
|
-
},
|
|
93
|
-
],
|
|
94
|
-
edges: [
|
|
95
|
-
{ id: 'edge-1', sourceId: 'input-1', targetId: 'func-2', type: 'edge' },
|
|
96
|
-
{ id: 'edge-2', sourceId: 'func-2', targetId: 'output-1', type: 'edge' },
|
|
97
|
-
],
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
const InputSchema = Type.Object({
|
|
101
|
-
value: Type.Number(),
|
|
102
|
-
offset: Type.Number(),
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const OutputSchema = Type.Object({
|
|
106
|
-
result: Type.Number(),
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
const result = await compile({
|
|
110
|
-
inputSchema: InputSchema,
|
|
111
|
-
outputSchema: OutputSchema,
|
|
112
|
-
jdm,
|
|
113
|
-
optimize: false,
|
|
114
|
-
debug: true,
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
expect(result.wasm).toBeDefined();
|
|
118
|
-
if (result.assemblyScript) {
|
|
119
|
-
const as = result.assemblyScript;
|
|
120
|
-
expect(as).toContain('evaluateNode_func_2');
|
|
121
|
-
expect(as).toContain('let input = ctx.get("input");');
|
|
122
|
-
expect(as).toContain('let context = ctx.get("context");');
|
|
123
|
-
}
|
|
124
|
-
}, 10000);
|
|
125
|
-
|
|
126
|
-
it('should compile a decision with function node v2 format', async () => {
|
|
127
|
-
const jdm: JDMDecision = {
|
|
128
|
-
nodes: [
|
|
129
|
-
{
|
|
130
|
-
id: 'input-1',
|
|
131
|
-
type: 'inputNode' as any,
|
|
132
|
-
position: { x: 100, y: 95 },
|
|
133
|
-
name: 'request',
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
id: 'output-1',
|
|
137
|
-
type: 'outputNode' as any,
|
|
138
|
-
position: { x: 515, y: 255 },
|
|
139
|
-
name: 'response',
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
id: 'func-3',
|
|
143
|
-
type: 'functionNode' as any,
|
|
144
|
-
content: {
|
|
145
|
-
source:
|
|
146
|
-
'export const handler = async (input) => ({ hello: "world", multiplied: input.input * 2 })',
|
|
147
|
-
},
|
|
148
|
-
position: { x: 210, y: 285 },
|
|
149
|
-
name: 'function1',
|
|
150
|
-
},
|
|
151
|
-
],
|
|
152
|
-
edges: [
|
|
153
|
-
{ id: 'edge-1', sourceId: 'input-1', targetId: 'func-3', type: 'edge' },
|
|
154
|
-
{ id: 'edge-2', sourceId: 'func-3', targetId: 'output-1', type: 'edge' },
|
|
155
|
-
],
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
const InputSchema = Type.Object({
|
|
159
|
-
input: Type.Number(),
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
const OutputSchema = Type.Object({
|
|
163
|
-
hello: Type.String(),
|
|
164
|
-
multiplied: Type.Number(),
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
const result = await compile({
|
|
168
|
-
inputSchema: InputSchema,
|
|
169
|
-
outputSchema: OutputSchema,
|
|
170
|
-
jdm,
|
|
171
|
-
optimize: false,
|
|
172
|
-
debug: true,
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
expect(result.wasm).toBeDefined();
|
|
176
|
-
if (result.assemblyScript) {
|
|
177
|
-
const as = result.assemblyScript;
|
|
178
|
-
expect(as).toContain('evaluateNode_func_3');
|
|
179
|
-
expect(as).toContain('function1'); // check the function name is in the comments
|
|
180
|
-
}
|
|
181
|
-
}, 10000);
|
|
182
|
-
});
|