@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,292 +0,0 @@
|
|
|
1
|
-
import type { JDMNode, JDMDecision } from '../parser';
|
|
2
|
-
import type { CompilationContext, AssemblyScriptCode } from '../types';
|
|
3
|
-
import { sanitizeId } from '../utils';
|
|
4
|
-
import { compileDecisionTableNode } from './decision-table';
|
|
5
|
-
import { compileSwitchNode } from './switch';
|
|
6
|
-
import { compileInputNode } from './input';
|
|
7
|
-
import { compileExpressionNode } from './expression';
|
|
8
|
-
import { compileFunctionNode } from './function';
|
|
9
|
-
import { buildGraph, getEvaluationOrder } from '../graph';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Generate a unique prefix for sub-decision node IDs to avoid naming conflicts.
|
|
13
|
-
*/
|
|
14
|
-
function decisionNodePrefix(nodeId: string): string {
|
|
15
|
-
return `sub_${sanitizeId(nodeId)}_`;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Generate the sub-decision entry point function that contains the actual evaluation logic.
|
|
20
|
-
*/
|
|
21
|
-
function generateSubDecisionEntryPoint(
|
|
22
|
-
node: JDMNode,
|
|
23
|
-
context: CompilationContext,
|
|
24
|
-
subDecision: JDMDecision,
|
|
25
|
-
prefix: string,
|
|
26
|
-
): AssemblyScriptCode {
|
|
27
|
-
const sanitizedId = sanitizeId(node.id);
|
|
28
|
-
|
|
29
|
-
// Build the sub-decision graph and get evaluation order
|
|
30
|
-
const graph = buildGraph(subDecision);
|
|
31
|
-
// Catches circular sub-decision references at compile time for better error messages and
|
|
32
|
-
// fail-fast behavior, rather than discovering cycles at runtime with stack overflow.
|
|
33
|
-
const evaluationOrder = getEvaluationOrder(graph);
|
|
34
|
-
|
|
35
|
-
// Create a node lookup for quick access
|
|
36
|
-
const nodeMap = new Map(subDecision.nodes.map((n) => [n.id, n]));
|
|
37
|
-
|
|
38
|
-
// Generate evaluation code for each node in topological order
|
|
39
|
-
// Skip output nodes - they mark graph termination but don't perform computation
|
|
40
|
-
// Skip input nodes (input just passes context through)
|
|
41
|
-
const evaluationCode = evaluationOrder
|
|
42
|
-
.map((nodeId) => {
|
|
43
|
-
const subNode = nodeMap.get(nodeId);
|
|
44
|
-
if (!subNode || subNode.type === 'outputNode' || subNode.type === 'inputNode') {
|
|
45
|
-
return '';
|
|
46
|
-
}
|
|
47
|
-
const prefixedId = prefix + sanitizeId(nodeId);
|
|
48
|
-
// Store node result in context under $nodes.<nodeName>
|
|
49
|
-
return ` ctx.set("$nodes.${subNode.name}", evaluateNode_${prefixedId}(ctx));`;
|
|
50
|
-
})
|
|
51
|
-
.filter(Boolean)
|
|
52
|
-
.join('\n');
|
|
53
|
-
|
|
54
|
-
// Find the last non-input, non-output node that was evaluated to return its result
|
|
55
|
-
const evaluatedNodes = evaluationOrder.filter((id) => {
|
|
56
|
-
const subNode = nodeMap.get(id);
|
|
57
|
-
if (!subNode) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
return subNode.type !== 'inputNode' && subNode.type !== 'outputNode';
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Determine what to return:
|
|
64
|
-
// - If there are evaluated nodes, return the last one's result
|
|
65
|
-
// - Otherwise, return an empty object for passthrough graphs
|
|
66
|
-
let resultCode: string;
|
|
67
|
-
if (evaluatedNodes.length > 0) {
|
|
68
|
-
const lastNodeId = evaluatedNodes[evaluatedNodes.length - 1];
|
|
69
|
-
const lastNode = nodeMap.get(lastNodeId)!;
|
|
70
|
-
resultCode = ` let result = ctx.get("$nodes.${lastNode.name}");`;
|
|
71
|
-
} else {
|
|
72
|
-
// For passthrough graphs (input->output with no intermediate nodes),
|
|
73
|
-
// return an empty object to indicate "no transformation"
|
|
74
|
-
//
|
|
75
|
-
// Can't return ctx.toValue: Returning ctx as-is would create circular reference when the
|
|
76
|
-
// result is merged back into parent context. Empty object signals "pass through unchanged".
|
|
77
|
-
resultCode = ` let result = Value.Object(new Map<string, Value>());`;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return `
|
|
81
|
-
// Sub-decision entry point function for ${node.id}
|
|
82
|
-
export function evaluateSubDecision_${sanitizedId}(ctx: Context): Value {
|
|
83
|
-
// Evaluate the sub-decision graph
|
|
84
|
-
${evaluationCode}
|
|
85
|
-
|
|
86
|
-
// Get the final result
|
|
87
|
-
${resultCode}
|
|
88
|
-
|
|
89
|
-
return result;
|
|
90
|
-
}
|
|
91
|
-
`;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Generate a wrapper function that handles caching, recursion detection, and delegates to the sub-decision entry point.
|
|
96
|
-
*/
|
|
97
|
-
function generateDecisionNodeWrapper(
|
|
98
|
-
node: JDMNode,
|
|
99
|
-
subDecisionFunctionName: string,
|
|
100
|
-
): AssemblyScriptCode {
|
|
101
|
-
const sanitizedId = sanitizeId(node.id);
|
|
102
|
-
const cacheKey = `"evaluateNode_${sanitizedId}"`;
|
|
103
|
-
|
|
104
|
-
return `
|
|
105
|
-
// Wrapper function to evaluate sub-decision ${node.id}
|
|
106
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
107
|
-
// Check cache first to avoid redundant evaluation
|
|
108
|
-
if (ctx.decisionResults.has(${cacheKey})) {
|
|
109
|
-
return ctx.decisionResults.get(${cacheKey});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Compile-time detection catches static cycles, but runtime detection is needed for dynamic
|
|
113
|
-
// sub-decision loading or conditional recursion based on input data.
|
|
114
|
-
if (ctx.decisionStack.includes("${sanitizedId}")) {
|
|
115
|
-
const recursionPath = ctx.decisionStack.join(' -> ') + ' -> ' + "${sanitizedId}";
|
|
116
|
-
SetLastError(RuntimeErrorCode.EVALUATION_ERROR);
|
|
117
|
-
return Value.Null();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Add to decision stack before evaluation
|
|
121
|
-
ctx.decisionStack.push("${sanitizedId}");
|
|
122
|
-
|
|
123
|
-
// Evaluate the sub-decision
|
|
124
|
-
let result = ${subDecisionFunctionName}(ctx);
|
|
125
|
-
|
|
126
|
-
// Check for errors from sub-decision evaluation
|
|
127
|
-
if (hasError()) {
|
|
128
|
-
// Error occurred in sub-decision - propagate it up
|
|
129
|
-
// Remove from decision stack
|
|
130
|
-
const stackIndex = ctx.decisionStack.indexOf("${sanitizedId}");
|
|
131
|
-
if (stackIndex >= 0) {
|
|
132
|
-
ctx.decisionStack.splice(stackIndex, 1);
|
|
133
|
-
}
|
|
134
|
-
return Value.Null();
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Store result in cache
|
|
138
|
-
ctx.decisionResults.set(${cacheKey}, result);
|
|
139
|
-
|
|
140
|
-
// Remove from decision stack after evaluation
|
|
141
|
-
const stackIndex = ctx.decisionStack.indexOf("${sanitizedId}");
|
|
142
|
-
if (stackIndex >= 0) {
|
|
143
|
-
ctx.decisionStack.splice(stackIndex, 1);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return result;
|
|
147
|
-
}
|
|
148
|
-
`;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Compile a sub-decision node.
|
|
153
|
-
*
|
|
154
|
-
* Sub-decision nodes allow a decision to call another decision as part of its
|
|
155
|
-
* evaluation. This function generates code that:
|
|
156
|
-
* 1. Loads the referenced sub-decision JDM
|
|
157
|
-
* 2. Recursively compiles all nodes in the sub-decision
|
|
158
|
-
* 3. Creates a wrapper function to invoke the sub-decision
|
|
159
|
-
* 4. Returns the code for both the wrapper and the sub-decision logic
|
|
160
|
-
*
|
|
161
|
-
* @param node - The JDM sub-decision node
|
|
162
|
-
* @param context - The compilation context
|
|
163
|
-
* @returns Generated AssemblyScript code for the sub-decision
|
|
164
|
-
*/
|
|
165
|
-
export function compileDecisionNode(
|
|
166
|
-
node: JDMNode,
|
|
167
|
-
context: CompilationContext,
|
|
168
|
-
): AssemblyScriptCode {
|
|
169
|
-
// Check for cycles in the decision graph
|
|
170
|
-
if (context.decisionPath.includes(node.id)) {
|
|
171
|
-
throw new Error(
|
|
172
|
-
`Circular dependency detected in decision graph: ${context.decisionPath.join(' -> ')} -> ${node.id}`,
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Extract the sub-decision reference key from the decision node content
|
|
177
|
-
const subDecisionKey = node.content?.key;
|
|
178
|
-
if (!subDecisionKey) {
|
|
179
|
-
throw new Error(
|
|
180
|
-
`Decision node ${node.id} has no content.key - cannot determine which decision to call`,
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Check if this sub-decision JDM has already been loaded (caching the parsed JDM)
|
|
185
|
-
// We don't cache the generated code because each reference needs its own function names
|
|
186
|
-
// But we can cache the parsed JDM to avoid re-parsing
|
|
187
|
-
let subDecision: JDMDecision;
|
|
188
|
-
|
|
189
|
-
// Add to decision path for cycle detection
|
|
190
|
-
context.decisionPath.push(node.id);
|
|
191
|
-
|
|
192
|
-
try {
|
|
193
|
-
// Load the sub-decision JDM using the loader
|
|
194
|
-
subDecision = context.loadDecision(subDecisionKey);
|
|
195
|
-
|
|
196
|
-
// Find the input and output nodes in the sub-decision
|
|
197
|
-
const inputNode = subDecision.nodes.find((n) => n.type === 'inputNode');
|
|
198
|
-
const outputNodes = subDecision.nodes.filter((n) => n.type === 'outputNode');
|
|
199
|
-
|
|
200
|
-
if (!inputNode) {
|
|
201
|
-
throw new Error(`Sub-decision ${subDecisionKey} has no input node`);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if (outputNodes.length === 0) {
|
|
205
|
-
throw new Error(`Sub-decision ${subDecisionKey} has no output nodes`);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// Check if this sub-decision has already been compiled (for caching)
|
|
209
|
-
const cachedFunctionName = context.compiledSubDecisions.get(subDecisionKey);
|
|
210
|
-
if (cachedFunctionName) {
|
|
211
|
-
// Sub-decision was already compiled, just generate a wrapper that calls the cached entry point
|
|
212
|
-
const wrapperCode = generateDecisionNodeWrapper(node, cachedFunctionName);
|
|
213
|
-
return wrapperCode;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Add unique prefix to sub-decision node IDs to avoid conflicts
|
|
217
|
-
const prefix = decisionNodePrefix(node.id);
|
|
218
|
-
const sanitizedId = sanitizeId(node.id);
|
|
219
|
-
const subDecisionFunctionName = `evaluateSubDecision_${sanitizedId}`;
|
|
220
|
-
|
|
221
|
-
// Cache the entry point function name for reuse
|
|
222
|
-
context.compiledSubDecisions.set(subDecisionKey, subDecisionFunctionName);
|
|
223
|
-
|
|
224
|
-
// Create a modified context for recursive compilation. Sub-decisions need isolated compilation
|
|
225
|
-
// state (separate decision path, separate compiled cache) to avoid conflicts with parent decision
|
|
226
|
-
// while sharing global settings.
|
|
227
|
-
const subContext: CompilationContext = {
|
|
228
|
-
...context,
|
|
229
|
-
decisionPath: [...context.decisionPath],
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
// Compile each node in the sub-decision
|
|
233
|
-
let subCompiled = '';
|
|
234
|
-
for (const subNode of subDecision.nodes) {
|
|
235
|
-
const nodeType = subNode.type;
|
|
236
|
-
|
|
237
|
-
// Skip output nodes - they're just markers
|
|
238
|
-
if (nodeType === 'outputNode') {
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Create a prefixed version of the node to avoid ID conflicts
|
|
243
|
-
const prefixedNode = {
|
|
244
|
-
...subNode,
|
|
245
|
-
id: prefix + subNode.id,
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
// Compile the node based on its type
|
|
249
|
-
switch (nodeType) {
|
|
250
|
-
case 'inputNode':
|
|
251
|
-
subCompiled += compileInputNode(prefixedNode, context);
|
|
252
|
-
break;
|
|
253
|
-
case 'decisionTableNode':
|
|
254
|
-
subCompiled += compileDecisionTableNode(prefixedNode, context);
|
|
255
|
-
break;
|
|
256
|
-
case 'switchNode':
|
|
257
|
-
subCompiled += compileSwitchNode(prefixedNode, context);
|
|
258
|
-
break;
|
|
259
|
-
case 'expressionNode':
|
|
260
|
-
subCompiled += compileExpressionNode(prefixedNode, context);
|
|
261
|
-
break;
|
|
262
|
-
case 'functionNode':
|
|
263
|
-
subCompiled += compileFunctionNode(prefixedNode, context);
|
|
264
|
-
break;
|
|
265
|
-
case 'decisionNode':
|
|
266
|
-
// Recursive sub-decision
|
|
267
|
-
subCompiled += compileDecisionNode(prefixedNode, subContext);
|
|
268
|
-
break;
|
|
269
|
-
default:
|
|
270
|
-
// Output nodes don't need compilation
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// Generate the sub-decision entry point function
|
|
276
|
-
const entryPointCode = generateSubDecisionEntryPoint(node, context, subDecision, prefix);
|
|
277
|
-
|
|
278
|
-
// Generate the wrapper function that handles caching, recursion detection, and delegates
|
|
279
|
-
const wrapperCode = generateDecisionNodeWrapper(node, subDecisionFunctionName);
|
|
280
|
-
|
|
281
|
-
const completeCode = wrapperCode + entryPointCode + subCompiled;
|
|
282
|
-
|
|
283
|
-
// Return the complete code (wrapper + entry point + sub-decision node functions)
|
|
284
|
-
return completeCode;
|
|
285
|
-
} finally {
|
|
286
|
-
// Remove from decision path (backtracking)
|
|
287
|
-
const pathIndex = context.decisionPath.indexOf(node.id);
|
|
288
|
-
if (pathIndex !== -1) {
|
|
289
|
-
context.decisionPath.splice(pathIndex, 1);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|