@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,315 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AssemblyScript compilation to WebAssembly.
|
|
3
|
-
* Handles compiler invocation, optimization levels, and memory configuration.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as fs from 'fs';
|
|
7
|
-
import * as path from 'path';
|
|
8
|
-
import type { CompilerOptions } from './types';
|
|
9
|
-
import { CompilationError, ErrorCode } from './errors';
|
|
10
|
-
import { createVirtualFS, createASCFileSystemCallbacks, getCompilationOutput } from './virtual-fs';
|
|
11
|
-
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// Compilation Thresholds and Memory Constants
|
|
14
|
-
// ============================================================================
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Threshold for determining if a module is "large" (40KB of source code).
|
|
18
|
-
*
|
|
19
|
-
* Empirically determined based on decision table compilation patterns:
|
|
20
|
-
* - Tables with 1000+ rules generate >40KB of code
|
|
21
|
-
* - These create deeply nested if/else chains that stress the optimizer
|
|
22
|
-
* - Larger modules need more initial memory to avoid runtime growth overhead
|
|
23
|
-
*
|
|
24
|
-
* Large modules require:
|
|
25
|
-
* 1. More initial memory pages (16 vs 4) for string allocations
|
|
26
|
-
* 2. Lower optimization level (O2 vs O3) to avoid stack overflow in Binaryen
|
|
27
|
-
* 3. Skipping WAT generation to avoid O(n²) memory complexity
|
|
28
|
-
*/
|
|
29
|
-
const LARGE_MODULE_THRESHOLD_BYTES = 40000;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Threshold for "very large" modules (1MB of source code).
|
|
33
|
-
* These modules skip optimization entirely to avoid Binaryen crashes.
|
|
34
|
-
*/
|
|
35
|
-
const VERY_LARGE_MODULE_THRESHOLD_BYTES = 1_000_000;
|
|
36
|
-
|
|
37
|
-
// Normal module memory configuration (for modules < 40KB)
|
|
38
|
-
/** Initial memory pages for normal modules (256KB total) */
|
|
39
|
-
const NORMAL_MODULE_INITIAL_PAGES = 4;
|
|
40
|
-
/** Maximum memory pages for normal modules (1MB total) */
|
|
41
|
-
const NORMAL_MODULE_MAX_PAGES = 16;
|
|
42
|
-
|
|
43
|
-
// Large module memory configuration (for modules >= 40KB)
|
|
44
|
-
/** Initial memory pages for large modules (1MB total) */
|
|
45
|
-
const LARGE_MODULE_INITIAL_PAGES = 16;
|
|
46
|
-
/** Maximum memory pages for large modules (16MB total) */
|
|
47
|
-
const LARGE_MODULE_MAX_PAGES = 256;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Compilation settings based on code size.
|
|
51
|
-
* Large modules need different optimization and memory settings.
|
|
52
|
-
*/
|
|
53
|
-
export interface CompilationSettings {
|
|
54
|
-
/** Whether the module is considered large (>40KB) */
|
|
55
|
-
isLargeModule: boolean;
|
|
56
|
-
/** Initial WebAssembly memory pages (64KB each) */
|
|
57
|
-
initialMemoryPages: number;
|
|
58
|
-
/** Maximum WebAssembly memory pages */
|
|
59
|
-
maxMemoryPages: number;
|
|
60
|
-
/** Binaryen optimization level (0-3) */
|
|
61
|
-
optimizeLevel: number;
|
|
62
|
-
/** Binaryen shrink level (0-2) */
|
|
63
|
-
shrinkLevel: number;
|
|
64
|
-
/** Whether to generate WAT text format */
|
|
65
|
-
generateWat: boolean;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Determine compilation settings based on code size.
|
|
70
|
-
*
|
|
71
|
-
* Memory pages are 64KB each (WASM_PAGE_SIZE_BYTES). Large modules need more
|
|
72
|
-
* initial memory to avoid runtime allocation overhead during string operations
|
|
73
|
-
* and table lookups.
|
|
74
|
-
* - Normal modules: NORMAL_MODULE_INITIAL_PAGES (256KB), max NORMAL_MODULE_MAX_PAGES (1MB)
|
|
75
|
-
* - Large modules: LARGE_MODULE_INITIAL_PAGES (1MB), max LARGE_MODULE_MAX_PAGES (16MB)
|
|
76
|
-
*
|
|
77
|
-
* Large modules (>LARGE_MODULE_THRESHOLD_BYTES) need more memory because:
|
|
78
|
-
* (1) decision tables generate many string allocations during lookup,
|
|
79
|
-
* (2) each string requires heap allocation at runtime, and
|
|
80
|
-
* (3) insufficient initial memory causes frequent growth operations which are slow.
|
|
81
|
-
*
|
|
82
|
-
* Optimization levels scaled by module size because:
|
|
83
|
-
* (1) Binaryen's optimizer recursively traverses deeply nested if/else chains,
|
|
84
|
-
* (2) decision tables with 1000+ rules create nesting depth that exceeds stack limits at O3,
|
|
85
|
-
* (3) O2 uses iterative algorithms that handle deep nesting,
|
|
86
|
-
* (4) very large modules (>1MB) disable optimization entirely to avoid 10+ minute compile times.
|
|
87
|
-
*
|
|
88
|
-
* WAT generation skipped for large modules because Binaryen's text emitter has O(n²)
|
|
89
|
-
* memory complexity and crashes with OOM on modules >LARGE_MODULE_THRESHOLD_BYTES source.
|
|
90
|
-
*
|
|
91
|
-
* @param codeLength - Length of the AssemblyScript source code
|
|
92
|
-
* @returns Compilation settings appropriate for the code size
|
|
93
|
-
*/
|
|
94
|
-
export function getCompilationSettings(codeLength: number): CompilationSettings {
|
|
95
|
-
const isLargeModule = codeLength > LARGE_MODULE_THRESHOLD_BYTES;
|
|
96
|
-
const isVeryLargeModule = codeLength > VERY_LARGE_MODULE_THRESHOLD_BYTES;
|
|
97
|
-
|
|
98
|
-
let optimizeLevel: number;
|
|
99
|
-
let shrinkLevel: number;
|
|
100
|
-
|
|
101
|
-
if (isVeryLargeModule) {
|
|
102
|
-
// Very large module (>1MB source) - skip optimization to avoid Binaryen crash
|
|
103
|
-
optimizeLevel = 0;
|
|
104
|
-
shrinkLevel = 0;
|
|
105
|
-
} else if (isLargeModule) {
|
|
106
|
-
// Medium-large module (40KB-1MB) - use moderate optimization
|
|
107
|
-
optimizeLevel = 2;
|
|
108
|
-
shrinkLevel = 1;
|
|
109
|
-
} else {
|
|
110
|
-
// Small module (<40KB) - use full optimization
|
|
111
|
-
optimizeLevel = 3;
|
|
112
|
-
shrinkLevel = 2;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return {
|
|
116
|
-
isLargeModule,
|
|
117
|
-
initialMemoryPages: isLargeModule ? LARGE_MODULE_INITIAL_PAGES : NORMAL_MODULE_INITIAL_PAGES,
|
|
118
|
-
maxMemoryPages: isLargeModule ? LARGE_MODULE_MAX_PAGES : NORMAL_MODULE_MAX_PAGES,
|
|
119
|
-
optimizeLevel,
|
|
120
|
-
shrinkLevel,
|
|
121
|
-
generateWat: !isLargeModule,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Create a secure temporary debug file with restricted permissions.
|
|
127
|
-
*
|
|
128
|
-
* Creates a temporary directory with a random name and writes the code to a file
|
|
129
|
-
* with 0o600 permissions (owner read/write only).
|
|
130
|
-
*
|
|
131
|
-
* This function only writes files if a debug output path is provided via options
|
|
132
|
-
* or the JDM_ASM_DEBUG_OUTPUT environment variable.
|
|
133
|
-
*
|
|
134
|
-
* @param code - The code content to write
|
|
135
|
-
* @param basePath - Base directory for debug output (from options or env var)
|
|
136
|
-
* @param suffix - Optional suffix for the filename (e.g., "-no-binary")
|
|
137
|
-
* @returns Path to the created debug file, or null if debug output is disabled or write fails
|
|
138
|
-
*/
|
|
139
|
-
function createSecureDebugFile(
|
|
140
|
-
code: string,
|
|
141
|
-
basePath: string | undefined,
|
|
142
|
-
suffix = '',
|
|
143
|
-
): string | null {
|
|
144
|
-
// Only write debug files if explicitly requested
|
|
145
|
-
if (!basePath) {
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
// Create a secure temporary directory with random name
|
|
151
|
-
const tmpDir = fs.mkdtempSync(path.join(basePath, 'jdm-asm-debug-'));
|
|
152
|
-
|
|
153
|
-
// Create debug file path
|
|
154
|
-
const debugFile = path.join(tmpDir, `assembly-debug${suffix}.ts`);
|
|
155
|
-
|
|
156
|
-
// Write file with restricted permissions (owner read/write only)
|
|
157
|
-
fs.writeFileSync(debugFile, code, { mode: 0o600 });
|
|
158
|
-
|
|
159
|
-
return debugFile;
|
|
160
|
-
} catch (error) {
|
|
161
|
-
// Debug output is best-effort: warn but don't break compilation
|
|
162
|
-
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
163
|
-
console.warn(`[jdm-asm] Warning: Failed to write debug output to ${basePath}: ${errorMsg}`);
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Build compiler arguments based on options and settings.
|
|
170
|
-
*
|
|
171
|
-
* @param options - User-provided compiler options
|
|
172
|
-
* @param settings - Size-based compilation settings
|
|
173
|
-
* @returns Array of command-line arguments for the ASC compiler
|
|
174
|
-
*/
|
|
175
|
-
export function buildCompilerArgs(
|
|
176
|
-
options: CompilerOptions,
|
|
177
|
-
settings: CompilationSettings,
|
|
178
|
-
): string[] {
|
|
179
|
-
const args = [
|
|
180
|
-
'src/runtime/index.ts',
|
|
181
|
-
'--outFile',
|
|
182
|
-
'output.wasm',
|
|
183
|
-
'--runtime',
|
|
184
|
-
'incremental', // Use incremental GC runtime for memory reuse across evaluations
|
|
185
|
-
'--exportRuntime', // Export __new, __pin, __collect, etc.
|
|
186
|
-
'--initialMemory',
|
|
187
|
-
String(settings.initialMemoryPages),
|
|
188
|
-
'--maximumMemory',
|
|
189
|
-
String(settings.maxMemoryPages),
|
|
190
|
-
];
|
|
191
|
-
|
|
192
|
-
// Only generate WAT for smaller modules (large ones crash Binaryen's text emitter)
|
|
193
|
-
if (settings.generateWat) {
|
|
194
|
-
args.push('--textFile', 'output.wat');
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// Add optimization flags if requested
|
|
198
|
-
if (options.optimize) {
|
|
199
|
-
if (settings.optimizeLevel > 0) {
|
|
200
|
-
args.push('--optimize');
|
|
201
|
-
}
|
|
202
|
-
args.push('--optimizeLevel', String(settings.optimizeLevel));
|
|
203
|
-
args.push('--shrinkLevel', String(settings.shrinkLevel));
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Add debug flags if requested
|
|
207
|
-
if (options.debug) {
|
|
208
|
-
args.push('--debug', '--sourceMap');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Disable assertions in production (non-debug) mode
|
|
212
|
-
if (!options.debug) {
|
|
213
|
-
args.push('--noAssert');
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return args;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Compile AssemblyScript code to WebAssembly.
|
|
221
|
-
*
|
|
222
|
-
* This function uses the AssemblyScript compiler to generate WASM from
|
|
223
|
-
* the generated AssemblyScript source code using a virtual filesystem.
|
|
224
|
-
*
|
|
225
|
-
* **Filesystem Side Effects:**
|
|
226
|
-
* If `options.debugOutputPath` is set or the `JDM_ASM_DEBUG_OUTPUT` environment
|
|
227
|
-
* variable is defined, compilation failures will write the generated AssemblyScript
|
|
228
|
-
* code to disk for debugging. Files are written to secure temporary directories
|
|
229
|
-
* with restricted permissions (0o600) and are NOT automatically cleaned up.
|
|
230
|
-
*
|
|
231
|
-
* Note: This is the internal compilation function without caching.
|
|
232
|
-
* Use compileAssemblyScript() from build.ts for cached compilation.
|
|
233
|
-
*
|
|
234
|
-
* @param code - The AssemblyScript source code to compile
|
|
235
|
-
* @param options - Compiler options (optimize, debug, debugOutputPath, etc.)
|
|
236
|
-
* @returns An object with the compiled binary and WAT text
|
|
237
|
-
*/
|
|
238
|
-
export async function compileAssemblyScriptInternal(
|
|
239
|
-
code: string,
|
|
240
|
-
options: CompilerOptions,
|
|
241
|
-
): Promise<{ binary: Uint8Array; wat: string }> {
|
|
242
|
-
// Import the AssemblyScript compiler
|
|
243
|
-
const ascModule = await import('assemblyscript/asc');
|
|
244
|
-
|
|
245
|
-
// Determine debug output path: explicit option takes precedence over environment variable
|
|
246
|
-
const debugOutputPath = options.debugOutputPath ?? process.env.JDM_ASM_DEBUG_OUTPUT;
|
|
247
|
-
|
|
248
|
-
// Save generated code before compilation so it's available for debugging even if
|
|
249
|
-
// compilation crashes the process (Binaryen can segfault on malformed input).
|
|
250
|
-
// Only write if debug output is explicitly enabled.
|
|
251
|
-
const debugFile = createSecureDebugFile(code, debugOutputPath);
|
|
252
|
-
|
|
253
|
-
// Set up virtual filesystem
|
|
254
|
-
const virtualFS = createVirtualFS(code);
|
|
255
|
-
|
|
256
|
-
// Get size-based compilation settings
|
|
257
|
-
const settings = getCompilationSettings(code.length);
|
|
258
|
-
|
|
259
|
-
// Build compiler arguments
|
|
260
|
-
const compilerArgs = buildCompilerArgs(options, settings);
|
|
261
|
-
|
|
262
|
-
// Get filesystem callbacks for ASC
|
|
263
|
-
const fsCallbacks = createASCFileSystemCallbacks(virtualFS);
|
|
264
|
-
|
|
265
|
-
// Create an in-memory stderr stream
|
|
266
|
-
let stderrOutput = '';
|
|
267
|
-
const stderrStream = ascModule.createMemoryStream((chunk: Uint8Array | string) => {
|
|
268
|
-
stderrOutput += typeof chunk === 'string' ? chunk : new TextDecoder().decode(chunk);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// Compile using the asc compiler with virtual filesystem
|
|
272
|
-
const { error } = await ascModule.main(compilerArgs, {
|
|
273
|
-
...fsCallbacks,
|
|
274
|
-
stderr: stderrStream,
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
// Check for compilation errors
|
|
278
|
-
if (error) {
|
|
279
|
-
const debugFileInfo = debugFile
|
|
280
|
-
? `\n\nGenerated code saved to ${debugFile}`
|
|
281
|
-
: '\n\n(Set debugOutputPath option or JDM_ASM_DEBUG_OUTPUT env var to save generated code for debugging)';
|
|
282
|
-
|
|
283
|
-
throw new CompilationError(
|
|
284
|
-
`AssemblyScript compilation failed:\n${stderrOutput || error.message}${debugFileInfo}`,
|
|
285
|
-
ErrorCode.PARSE_ERROR,
|
|
286
|
-
{ field: 'assemblyScript' },
|
|
287
|
-
{ stderrOutput },
|
|
288
|
-
);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// Get output from virtual filesystem
|
|
292
|
-
const output = getCompilationOutput(virtualFS);
|
|
293
|
-
|
|
294
|
-
if (!output.binary) {
|
|
295
|
-
const noBinaryDebugFile = createSecureDebugFile(code, debugOutputPath, '-no-binary');
|
|
296
|
-
stderrOutput = stderrOutput || '(no stderr output)';
|
|
297
|
-
const files = [...virtualFS.keys()].join(', ');
|
|
298
|
-
|
|
299
|
-
const debugFileInfo = noBinaryDebugFile
|
|
300
|
-
? `\nGenerated code saved to ${noBinaryDebugFile}`
|
|
301
|
-
: '\n(Set debugOutputPath option or JDM_ASM_DEBUG_OUTPUT env var to save generated code for debugging)';
|
|
302
|
-
|
|
303
|
-
throw new CompilationError(
|
|
304
|
-
`Compilation produced no WASM binary output.\nCompiler stderr: ${stderrOutput}\nFiles in virtualFS: ${files}${debugFileInfo}`,
|
|
305
|
-
ErrorCode.PARSE_ERROR,
|
|
306
|
-
{ field: 'assemblyScript' },
|
|
307
|
-
{ stderrOutput, virtualFSFiles: files },
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
return {
|
|
312
|
-
binary: output.binary,
|
|
313
|
-
wat: output.wat ?? '',
|
|
314
|
-
};
|
|
315
|
-
}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Union type of all expression AST nodes.
|
|
3
|
-
*/
|
|
4
|
-
export type ExpressionAST =
|
|
5
|
-
| NumberLiteral
|
|
6
|
-
| StringLiteral
|
|
7
|
-
| BooleanLiteral
|
|
8
|
-
| NullLiteral
|
|
9
|
-
| Identifier
|
|
10
|
-
| DollarRef
|
|
11
|
-
| HashRef
|
|
12
|
-
| BinaryOp
|
|
13
|
-
| UnaryOp
|
|
14
|
-
| TernaryOp
|
|
15
|
-
| MemberAccess
|
|
16
|
-
| IndexAccess
|
|
17
|
-
| FunctionCall
|
|
18
|
-
| Interval
|
|
19
|
-
| TemplateLiteral
|
|
20
|
-
| ArrayLiteral
|
|
21
|
-
| ObjectLiteral;
|
|
22
|
-
|
|
23
|
-
export interface NumberLiteral {
|
|
24
|
-
type: 'NumberLiteral';
|
|
25
|
-
value: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface StringLiteral {
|
|
29
|
-
type: 'StringLiteral';
|
|
30
|
-
value: string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface BooleanLiteral {
|
|
34
|
-
type: 'BooleanLiteral';
|
|
35
|
-
value: boolean;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface NullLiteral {
|
|
39
|
-
type: 'NullLiteral';
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface Identifier {
|
|
43
|
-
type: 'Identifier';
|
|
44
|
-
name: string;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Dollar reference - used in unary mode to refer to the current value.
|
|
49
|
-
* Represents `$` in decision table cell expressions.
|
|
50
|
-
*/
|
|
51
|
-
export interface DollarRef {
|
|
52
|
-
type: 'DollarRef';
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Hash reference - used in higher-order functions to refer to current element.
|
|
57
|
-
* Represents `#` in expressions like `filter(items, # > 5)`.
|
|
58
|
-
*/
|
|
59
|
-
export interface HashRef {
|
|
60
|
-
type: 'HashRef';
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export interface BinaryOp {
|
|
64
|
-
type: 'BinaryOp';
|
|
65
|
-
op: BinaryOperator;
|
|
66
|
-
left: ExpressionAST;
|
|
67
|
-
right: ExpressionAST;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export type BinaryOperator =
|
|
71
|
-
// Arithmetic
|
|
72
|
-
| '+'
|
|
73
|
-
| '-'
|
|
74
|
-
| '*'
|
|
75
|
-
| '/'
|
|
76
|
-
| '%'
|
|
77
|
-
| '^'
|
|
78
|
-
// Comparison
|
|
79
|
-
| '=='
|
|
80
|
-
| '!='
|
|
81
|
-
| '<'
|
|
82
|
-
| '>'
|
|
83
|
-
| '<='
|
|
84
|
-
| '>='
|
|
85
|
-
// Logical
|
|
86
|
-
| 'and'
|
|
87
|
-
| 'or'
|
|
88
|
-
| '??'
|
|
89
|
-
// Membership
|
|
90
|
-
| 'in'
|
|
91
|
-
| 'not in';
|
|
92
|
-
|
|
93
|
-
export interface UnaryOp {
|
|
94
|
-
type: 'UnaryOp';
|
|
95
|
-
op: UnaryOperator;
|
|
96
|
-
operand: ExpressionAST;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export type UnaryOperator = 'not' | '-';
|
|
100
|
-
|
|
101
|
-
export interface TernaryOp {
|
|
102
|
-
type: 'TernaryOp';
|
|
103
|
-
condition: ExpressionAST;
|
|
104
|
-
consequent: ExpressionAST;
|
|
105
|
-
alternate: ExpressionAST;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export interface MemberAccess {
|
|
109
|
-
type: 'MemberAccess';
|
|
110
|
-
object: ExpressionAST;
|
|
111
|
-
property: string;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export interface IndexAccess {
|
|
115
|
-
type: 'IndexAccess';
|
|
116
|
-
object: ExpressionAST;
|
|
117
|
-
index: ExpressionAST;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export interface FunctionCall {
|
|
121
|
-
type: 'FunctionCall';
|
|
122
|
-
callee: ExpressionAST;
|
|
123
|
-
args: ExpressionAST[];
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export interface Interval {
|
|
127
|
-
type: 'Interval';
|
|
128
|
-
start: ExpressionAST;
|
|
129
|
-
end: ExpressionAST;
|
|
130
|
-
startInclusive: boolean;
|
|
131
|
-
endInclusive: boolean;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export interface TemplateLiteral {
|
|
135
|
-
type: 'TemplateLiteral';
|
|
136
|
-
parts: Array<{ text: string } | { expr: ExpressionAST }>;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export interface ArrayLiteral {
|
|
140
|
-
type: 'ArrayLiteral';
|
|
141
|
-
elements: ExpressionAST[];
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export interface ObjectLiteral {
|
|
145
|
-
type: 'ObjectLiteral';
|
|
146
|
-
properties: Array<{ key: string; value: ExpressionAST }>;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export function isNumberLiteral(node: ExpressionAST): node is NumberLiteral {
|
|
150
|
-
return node.type === 'NumberLiteral';
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export function isStringLiteral(node: ExpressionAST): node is StringLiteral {
|
|
154
|
-
return node.type === 'StringLiteral';
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export function isBooleanLiteral(node: ExpressionAST): node is BooleanLiteral {
|
|
158
|
-
return node.type === 'BooleanLiteral';
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export function isNullLiteral(node: ExpressionAST): node is NullLiteral {
|
|
162
|
-
return node.type === 'NullLiteral';
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export function isIdentifier(node: ExpressionAST): node is Identifier {
|
|
166
|
-
return node.type === 'Identifier';
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export function isDollarRef(node: ExpressionAST): node is DollarRef {
|
|
170
|
-
return node.type === 'DollarRef';
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export function isHashRef(node: ExpressionAST): node is HashRef {
|
|
174
|
-
return node.type === 'HashRef';
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export function isBinaryOp(node: ExpressionAST): node is BinaryOp {
|
|
178
|
-
return node.type === 'BinaryOp';
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function isUnaryOp(node: ExpressionAST): node is UnaryOp {
|
|
182
|
-
return node.type === 'UnaryOp';
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export function isTernaryOp(node: ExpressionAST): node is TernaryOp {
|
|
186
|
-
return node.type === 'TernaryOp';
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export function isMemberAccess(node: ExpressionAST): node is MemberAccess {
|
|
190
|
-
return node.type === 'MemberAccess';
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export function isIndexAccess(node: ExpressionAST): node is IndexAccess {
|
|
194
|
-
return node.type === 'IndexAccess';
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
export function isFunctionCall(node: ExpressionAST): node is FunctionCall {
|
|
198
|
-
return node.type === 'FunctionCall';
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export function isInterval(node: ExpressionAST): node is Interval {
|
|
202
|
-
return node.type === 'Interval';
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
export function isTemplateLiteral(node: ExpressionAST): node is TemplateLiteral {
|
|
206
|
-
return node.type === 'TemplateLiteral';
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
export function isArrayLiteral(node: ExpressionAST): node is ArrayLiteral {
|
|
210
|
-
return node.type === 'ArrayLiteral';
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
export function isObjectLiteral(node: ExpressionAST): node is ObjectLiteral {
|
|
214
|
-
return node.type === 'ObjectLiteral';
|
|
215
|
-
}
|
package/src/compiler/build.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Compile AssemblyScript code to WebAssembly.
|
|
3
|
-
*
|
|
4
|
-
* This module provides the main entry point for WASM compilation with caching.
|
|
5
|
-
* Implementation details are delegated to specialized modules:
|
|
6
|
-
* - virtual-fs.ts: Virtual filesystem for in-memory ASC compilation
|
|
7
|
-
* - asc-compiler.ts: AssemblyScript compiler invocation and configuration
|
|
8
|
-
* - wasm-instantiate.ts: WASM module instantiation and host environment
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import type { CompilerOptions } from './types';
|
|
12
|
-
import { computeCacheKey, readCacheFromDisk, writeCacheToDisk, isCacheEnabled } from './cache';
|
|
13
|
-
import { compileAssemblyScriptInternal } from './asc-compiler';
|
|
14
|
-
|
|
15
|
-
// Re-export for backward compatibility
|
|
16
|
-
export { instantiateWasm } from './wasm-instantiate';
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Compile AssemblyScript code to WebAssembly.
|
|
20
|
-
*
|
|
21
|
-
* This function uses the AssemblyScript compiler to generate WASM from
|
|
22
|
-
* the generated AssemblyScript source code using a virtual filesystem.
|
|
23
|
-
*
|
|
24
|
-
* Supports disk-based caching to avoid redundant compilations.
|
|
25
|
-
* Cache is keyed on: AssemblyScript code + runtime libraries + compiler options.
|
|
26
|
-
*
|
|
27
|
-
* **Filesystem Side Effects:**
|
|
28
|
-
* - Compilation may read/write cache files (unless disabled via JDM_ASM_NO_CACHE=1)
|
|
29
|
-
* - If `options.debugOutputPath` is set or `JDM_ASM_DEBUG_OUTPUT` env var is defined,
|
|
30
|
-
* compilation failures will write debug files to disk (see CompilerOptions.debugOutputPath)
|
|
31
|
-
*
|
|
32
|
-
* @param code - The AssemblyScript source code to compile
|
|
33
|
-
* @param options - Compiler options (optimize, debug, debugOutputPath, etc.)
|
|
34
|
-
* @returns An object with the compiled binary and WAT text
|
|
35
|
-
*/
|
|
36
|
-
export async function compileAssemblyScript(
|
|
37
|
-
code: string,
|
|
38
|
-
options: CompilerOptions,
|
|
39
|
-
): Promise<{ binary: Uint8Array; wat: string }> {
|
|
40
|
-
// Check cache first (unless disabled)
|
|
41
|
-
if (isCacheEnabled()) {
|
|
42
|
-
const cacheKey = computeCacheKey(code, options);
|
|
43
|
-
const cached = readCacheFromDisk(cacheKey);
|
|
44
|
-
if (cached) {
|
|
45
|
-
return cached;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Compile and cache the result
|
|
49
|
-
const result = await compileAssemblyScriptInternal(code, options);
|
|
50
|
-
writeCacheToDisk(cacheKey, result);
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Cache disabled, compile directly
|
|
55
|
-
return compileAssemblyScriptInternal(code, options);
|
|
56
|
-
}
|