@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,425 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Expression Node Compilation
|
|
3
|
-
// ============================================================================
|
|
4
|
-
//
|
|
5
|
-
// This module provides compilation functionality for JDM expression nodes.
|
|
6
|
-
// Expression nodes contain key-value pairs where values are expression strings.
|
|
7
|
-
//
|
|
8
|
-
// For the core expression AST compilation, see expression-compiler.ts.
|
|
9
|
-
// For context resolution strategies, see context-resolvers.ts.
|
|
10
|
-
|
|
11
|
-
import type { CompilationContext, AssemblyScriptCode } from '../types';
|
|
12
|
-
import type { JDMNode } from '../parser';
|
|
13
|
-
import { sanitizeId } from '../utils';
|
|
14
|
-
import { LocalDollarContextResolver, ScopedContextResolver } from './context-resolvers';
|
|
15
|
-
import { compileExpressionUnified } from './expression-compiler';
|
|
16
|
-
|
|
17
|
-
// Re-export commonly used items for backwards compatibility
|
|
18
|
-
export type { ContextResolver } from './context-resolvers';
|
|
19
|
-
export {
|
|
20
|
-
StandardContextResolver,
|
|
21
|
-
LocalDollarContextResolver,
|
|
22
|
-
ScopedContextResolver,
|
|
23
|
-
} from './context-resolvers';
|
|
24
|
-
|
|
25
|
-
export {
|
|
26
|
-
compileExpressionUnified,
|
|
27
|
-
compileBinaryOpWithValues,
|
|
28
|
-
compileExpression,
|
|
29
|
-
escapeString,
|
|
30
|
-
buildDollarPath,
|
|
31
|
-
checkIsNodesReference,
|
|
32
|
-
buildNodesPath,
|
|
33
|
-
} from './expression-compiler';
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Compile an expression node.
|
|
37
|
-
*
|
|
38
|
-
* Expression nodes can contain one or more key-value pairs where
|
|
39
|
-
* each value is an expression string that needs to be compiled.
|
|
40
|
-
*
|
|
41
|
-
* In expression nodes, the $ symbol refers to the local result object
|
|
42
|
-
* being built, allowing later expressions to reference earlier ones.
|
|
43
|
-
* For example: { "a": "5", "b": "$.a + 10" } - $.a references the 'a' computed above.
|
|
44
|
-
*
|
|
45
|
-
* Additional features:
|
|
46
|
-
* - inputField: Specifies a sub-object path to use as the evaluation scope
|
|
47
|
-
* - outputPath: Specifies the context path where the results will be stored
|
|
48
|
-
* - executionMode: "loop" - Iterates over an array at inputField path
|
|
49
|
-
*
|
|
50
|
-
* @param node - The JDM expression node
|
|
51
|
-
* @param context - The compilation context
|
|
52
|
-
* @returns Generated AssemblyScript code
|
|
53
|
-
*/
|
|
54
|
-
export function compileExpressionNode(
|
|
55
|
-
node: JDMNode,
|
|
56
|
-
context: CompilationContext,
|
|
57
|
-
): AssemblyScriptCode {
|
|
58
|
-
const expressions = node.content.expressions as Array<{ key: string; value: string }>;
|
|
59
|
-
const passThrough = node.content.passThrough === true;
|
|
60
|
-
const inputField = node.content.inputField as string | undefined;
|
|
61
|
-
const outputPath = node.content.outputPath as string | undefined;
|
|
62
|
-
const executionMode = node.content.executionMode as string | undefined;
|
|
63
|
-
const sanitizedId = sanitizeId(node.id);
|
|
64
|
-
|
|
65
|
-
// Loop mode: iterates over array at inputField, evaluating expressions for each element
|
|
66
|
-
// Used when executionMode === "loop" to transform array items in place
|
|
67
|
-
if (executionMode === 'loop') {
|
|
68
|
-
return compileLoopExpressionNode(
|
|
69
|
-
node,
|
|
70
|
-
context,
|
|
71
|
-
expressions,
|
|
72
|
-
passThrough,
|
|
73
|
-
inputField,
|
|
74
|
-
outputPath,
|
|
75
|
-
sanitizedId,
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// If inputField is specified, generate scoped evaluation code
|
|
80
|
-
if (inputField) {
|
|
81
|
-
return compileScopedExpressionNode(
|
|
82
|
-
node,
|
|
83
|
-
context,
|
|
84
|
-
expressions,
|
|
85
|
-
passThrough,
|
|
86
|
-
inputField,
|
|
87
|
-
outputPath,
|
|
88
|
-
sanitizedId,
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Standard mode: evaluates expressions in global context without inputField scoping
|
|
93
|
-
// Used when no inputField is specified - expressions resolve variables from root context
|
|
94
|
-
const resolver = new LocalDollarContextResolver('result');
|
|
95
|
-
const expressionAssignments = expressions
|
|
96
|
-
.map((expr) => {
|
|
97
|
-
try {
|
|
98
|
-
const ast = context.parseExpression(expr.value);
|
|
99
|
-
// Compile with $ resolved to local result variable using unified compiler
|
|
100
|
-
const compiled = compileExpressionUnified(ast, context, resolver);
|
|
101
|
-
return ` result.set("${expr.key}", ${compiled});`;
|
|
102
|
-
} catch (e) {
|
|
103
|
-
throw new Error(`Failed to compile expression "${expr.value}" for key "${expr.key}": ${e}`);
|
|
104
|
-
}
|
|
105
|
-
})
|
|
106
|
-
.join('\n');
|
|
107
|
-
|
|
108
|
-
if (passThrough) {
|
|
109
|
-
return `
|
|
110
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
111
|
-
let result = new Map<string, Value>();
|
|
112
|
-
|
|
113
|
-
// Copy all context values to preserve workflow state and allow referencing prior node results
|
|
114
|
-
// passThrough=true ensures downstream nodes can access both input data and intermediate results
|
|
115
|
-
const keys = ctx.data.keys();
|
|
116
|
-
for (let i = 0; i < keys.length; i++) {
|
|
117
|
-
const key = keys[i];
|
|
118
|
-
const value = ctx.data.get(key);
|
|
119
|
-
result.set(key, value);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
${expressionAssignments}
|
|
123
|
-
|
|
124
|
-
return Value.Object(result);
|
|
125
|
-
}
|
|
126
|
-
`;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return `
|
|
130
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
131
|
-
let result = new Map<string, Value>();
|
|
132
|
-
|
|
133
|
-
${expressionAssignments}
|
|
134
|
-
|
|
135
|
-
return Value.Object(result);
|
|
136
|
-
}
|
|
137
|
-
`;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Compile an expression node with inputField scoping.
|
|
142
|
-
*
|
|
143
|
-
* When inputField is specified (e.g., "customer"), expressions are evaluated
|
|
144
|
-
* with the sub-object as the scope. So `firstName` resolves to `customer.firstName`.
|
|
145
|
-
*
|
|
146
|
-
* @param node - The JDM expression node
|
|
147
|
-
* @param context - The compilation context
|
|
148
|
-
* @param expressions - Array of key-value expression pairs
|
|
149
|
-
* @param passThrough - Whether to pass through context values
|
|
150
|
-
* @param inputField - The path to the input field (e.g., "customer")
|
|
151
|
-
* @param outputPath - The path to store the output (e.g., "customer")
|
|
152
|
-
* @param sanitizedId - Sanitized node ID
|
|
153
|
-
* @returns Generated AssemblyScript code
|
|
154
|
-
*/
|
|
155
|
-
function compileScopedExpressionNode(
|
|
156
|
-
node: JDMNode,
|
|
157
|
-
context: CompilationContext,
|
|
158
|
-
expressions: Array<{ key: string; value: string }>,
|
|
159
|
-
passThrough: boolean,
|
|
160
|
-
inputField: string,
|
|
161
|
-
outputPath: string | undefined,
|
|
162
|
-
sanitizedId: string,
|
|
163
|
-
): AssemblyScriptCode {
|
|
164
|
-
// Generate unique helper to avoid name collisions in multi-node compilation
|
|
165
|
-
const helperId = context.getUniqueId('scopedExpr');
|
|
166
|
-
|
|
167
|
-
// Scoped evaluation: creates a temporary context where inputField object properties become top-level identifiers
|
|
168
|
-
// Enables expressions like "firstName" to resolve to "customer.firstName" when inputField="customer"
|
|
169
|
-
const resolver = new ScopedContextResolver('scopedCtx', 'itemResult');
|
|
170
|
-
const expressionAssignments = expressions
|
|
171
|
-
.map((expr) => {
|
|
172
|
-
try {
|
|
173
|
-
const ast = context.parseExpression(expr.value);
|
|
174
|
-
// Use unified compiler with scoped context resolver
|
|
175
|
-
const compiled = compileExpressionUnified(ast, context, resolver);
|
|
176
|
-
return ` itemResult.set("${expr.key}", ${compiled});`;
|
|
177
|
-
} catch (e) {
|
|
178
|
-
throw new Error(`Failed to compile expression "${expr.value}" for key "${expr.key}": ${e}`);
|
|
179
|
-
}
|
|
180
|
-
})
|
|
181
|
-
.join('\n');
|
|
182
|
-
|
|
183
|
-
// Generate the helper function for scoped evaluation
|
|
184
|
-
// Can't use Context constructor directly - AssemblyScript Context requires specific initialization
|
|
185
|
-
// that's tied to the WASM module's memory management, so we use ScopedContext wrapper instead
|
|
186
|
-
const helperCode = `
|
|
187
|
-
function scopedExprHelper_${helperId}(ctx: Context, inputObj: Value): Value {
|
|
188
|
-
// Build result starting with input object fields (for passThrough behavior)
|
|
189
|
-
const itemResult = new Map<string, Value>();
|
|
190
|
-
if (inputObj.isObject()) {
|
|
191
|
-
const inputMap = inputObj.asObject();
|
|
192
|
-
const inputKeys = inputMap.keys();
|
|
193
|
-
for (let i = 0; i < inputKeys.length; i++) {
|
|
194
|
-
const key = inputKeys[i];
|
|
195
|
-
itemResult.set(key, inputMap.get(key));
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Two-layer context enables variable shadowing: inputField properties take precedence over parent context
|
|
200
|
-
// Allows "status" in inputField to shadow global "status" while preserving access to non-shadowed globals
|
|
201
|
-
const scopedData = new Map<string, Value>();
|
|
202
|
-
|
|
203
|
-
// Copy parent context data first
|
|
204
|
-
const parentKeys = ctx.data.keys();
|
|
205
|
-
for (let i = 0; i < parentKeys.length; i++) {
|
|
206
|
-
const key = parentKeys[i];
|
|
207
|
-
scopedData.set(key, ctx.data.get(key));
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Override with fields from the input object (inputField scope)
|
|
211
|
-
if (inputObj.isObject()) {
|
|
212
|
-
const inputMap = inputObj.asObject();
|
|
213
|
-
const inputKeys = inputMap.keys();
|
|
214
|
-
for (let i = 0; i < inputKeys.length; i++) {
|
|
215
|
-
const key = inputKeys[i];
|
|
216
|
-
scopedData.set(key, inputMap.get(key));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Create a scoped context wrapper for expression evaluation
|
|
221
|
-
const scopedCtx = new ScopedContext(scopedData);
|
|
222
|
-
|
|
223
|
-
// Evaluate expressions in the scoped context
|
|
224
|
-
${expressionAssignments}
|
|
225
|
-
|
|
226
|
-
return Value.Object(itemResult);
|
|
227
|
-
}`;
|
|
228
|
-
|
|
229
|
-
context.helperFunctions.set(`scopedExprHelper_${helperId}`, helperCode);
|
|
230
|
-
|
|
231
|
-
// Generate the main function that extracts inputField and calls the helper
|
|
232
|
-
if (passThrough) {
|
|
233
|
-
return `
|
|
234
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
235
|
-
let result = new Map<string, Value>();
|
|
236
|
-
|
|
237
|
-
// Pass through all context values (input + intermediate results)
|
|
238
|
-
const keys = ctx.data.keys();
|
|
239
|
-
for (let i = 0; i < keys.length; i++) {
|
|
240
|
-
const key = keys[i];
|
|
241
|
-
const value = ctx.data.get(key);
|
|
242
|
-
result.set(key, value);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Get input object from inputField path: ${inputField}
|
|
246
|
-
const inputObj = ctx.get("${inputField}");
|
|
247
|
-
|
|
248
|
-
// Evaluate expressions in scoped context and store at outputPath: ${outputPath || inputField}
|
|
249
|
-
const scopedResult = scopedExprHelper_${helperId}(ctx, inputObj);
|
|
250
|
-
result.set("${outputPath || inputField}", scopedResult);
|
|
251
|
-
|
|
252
|
-
return Value.Object(result);
|
|
253
|
-
}
|
|
254
|
-
`;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
return `
|
|
258
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
259
|
-
let result = new Map<string, Value>();
|
|
260
|
-
|
|
261
|
-
// Get input object from inputField path: ${inputField}
|
|
262
|
-
const inputObj = ctx.get("${inputField}");
|
|
263
|
-
|
|
264
|
-
// Evaluate expressions in scoped context and store at outputPath: ${outputPath || inputField}
|
|
265
|
-
const scopedResult = scopedExprHelper_${helperId}(ctx, inputObj);
|
|
266
|
-
result.set("${outputPath || inputField}", scopedResult);
|
|
267
|
-
|
|
268
|
-
return Value.Object(result);
|
|
269
|
-
}
|
|
270
|
-
`;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Compile an expression node with executionMode: "loop".
|
|
275
|
-
*
|
|
276
|
-
* When executionMode is "loop", expressions are evaluated for each item
|
|
277
|
-
* in the array at inputField path. Each item gets the computed fields added.
|
|
278
|
-
*
|
|
279
|
-
* @param node - The JDM expression node
|
|
280
|
-
* @param context - The compilation context
|
|
281
|
-
* @param expressions - Array of key-value expression pairs
|
|
282
|
-
* @param passThrough - Whether to pass through context values
|
|
283
|
-
* @param inputField - The path to the input array (e.g., "cart.items")
|
|
284
|
-
* @param outputPath - The path to store the output array (e.g., "cart.items")
|
|
285
|
-
* @param sanitizedId - Sanitized node ID
|
|
286
|
-
* @returns Generated AssemblyScript code
|
|
287
|
-
*/
|
|
288
|
-
function compileLoopExpressionNode(
|
|
289
|
-
node: JDMNode,
|
|
290
|
-
context: CompilationContext,
|
|
291
|
-
expressions: Array<{ key: string; value: string }>,
|
|
292
|
-
passThrough: boolean,
|
|
293
|
-
inputField: string | undefined,
|
|
294
|
-
outputPath: string | undefined,
|
|
295
|
-
sanitizedId: string,
|
|
296
|
-
): AssemblyScriptCode {
|
|
297
|
-
if (!inputField) {
|
|
298
|
-
throw new Error(`executionMode: "loop" requires inputField to be specified`);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// Generate a unique helper function for loop evaluation
|
|
302
|
-
const helperId = context.getUniqueId('loopExpr');
|
|
303
|
-
|
|
304
|
-
// Each iteration gets its own scoped context to isolate variables and prevent data leakage between iterations
|
|
305
|
-
// Ensures expressions like "price * quantity" use current item's values, not previous iteration's
|
|
306
|
-
const resolver = new ScopedContextResolver('itemCtx', 'itemResult');
|
|
307
|
-
const expressionAssignments = expressions
|
|
308
|
-
.map((expr) => {
|
|
309
|
-
try {
|
|
310
|
-
const ast = context.parseExpression(expr.value);
|
|
311
|
-
// Use unified compiler with scoped context resolver for array item
|
|
312
|
-
const compiled = compileExpressionUnified(ast, context, resolver);
|
|
313
|
-
return ` itemResult.set("${expr.key}", ${compiled});`;
|
|
314
|
-
} catch (e) {
|
|
315
|
-
throw new Error(`Failed to compile expression "${expr.value}" for key "${expr.key}": ${e}`);
|
|
316
|
-
}
|
|
317
|
-
})
|
|
318
|
-
.join('\n');
|
|
319
|
-
|
|
320
|
-
// Generate the helper function for loop evaluation
|
|
321
|
-
const helperCode = `
|
|
322
|
-
function loopExprHelper_${helperId}(ctx: Context, inputArr: Value): Value {
|
|
323
|
-
if (!inputArr.isArray()) {
|
|
324
|
-
return Value.Array(new Array<Value>(0));
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
const items = inputArr.asArray();
|
|
328
|
-
const resultItems = new Array<Value>(0);
|
|
329
|
-
|
|
330
|
-
for (let i = 0; i < items.length; i++) {
|
|
331
|
-
const item = items[i];
|
|
332
|
-
|
|
333
|
-
// Build result item starting with existing fields
|
|
334
|
-
const itemResult = new Map<string, Value>();
|
|
335
|
-
if (item.isObject()) {
|
|
336
|
-
const itemMap = item.asObject();
|
|
337
|
-
const itemKeys = itemMap.keys();
|
|
338
|
-
for (let j = 0; j < itemKeys.length; j++) {
|
|
339
|
-
const key = itemKeys[j];
|
|
340
|
-
itemResult.set(key, itemMap.get(key));
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Create a scoped data map that combines parent context with item fields
|
|
345
|
-
const scopedData = new Map<string, Value>();
|
|
346
|
-
|
|
347
|
-
// Copy parent context data first
|
|
348
|
-
const parentKeys = ctx.data.keys();
|
|
349
|
-
for (let j = 0; j < parentKeys.length; j++) {
|
|
350
|
-
const key = parentKeys[j];
|
|
351
|
-
scopedData.set(key, ctx.data.get(key));
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
// Override with fields from the current item
|
|
355
|
-
if (item.isObject()) {
|
|
356
|
-
const itemMap = item.asObject();
|
|
357
|
-
const itemKeys = itemMap.keys();
|
|
358
|
-
for (let j = 0; j < itemKeys.length; j++) {
|
|
359
|
-
const key = itemKeys[j];
|
|
360
|
-
scopedData.set(key, itemMap.get(key));
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
// Create a scoped context for expression evaluation
|
|
365
|
-
const itemCtx = new ScopedContext(scopedData);
|
|
366
|
-
|
|
367
|
-
// Evaluate expressions for this item
|
|
368
|
-
${expressionAssignments}
|
|
369
|
-
|
|
370
|
-
resultItems.push(Value.Object(itemResult));
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
return Value.Array(resultItems);
|
|
374
|
-
}`;
|
|
375
|
-
|
|
376
|
-
context.helperFunctions.set(`loopExprHelper_${helperId}`, helperCode);
|
|
377
|
-
|
|
378
|
-
// Determine output path - use outputPath if specified, otherwise inputField
|
|
379
|
-
const effectiveOutputPath = outputPath || inputField;
|
|
380
|
-
|
|
381
|
-
// Generate the main function that extracts inputField array and calls the helper
|
|
382
|
-
if (passThrough) {
|
|
383
|
-
return `
|
|
384
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
385
|
-
let result = new Map<string, Value>();
|
|
386
|
-
|
|
387
|
-
// Pass through all context values (input + intermediate results)
|
|
388
|
-
const keys = ctx.data.keys();
|
|
389
|
-
for (let i = 0; i < keys.length; i++) {
|
|
390
|
-
const key = keys[i];
|
|
391
|
-
const value = ctx.data.get(key);
|
|
392
|
-
result.set(key, value);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// Get input array from inputField path: ${inputField}
|
|
396
|
-
const inputArr = ctx.get("${inputField}");
|
|
397
|
-
|
|
398
|
-
// Evaluate expressions for each item in the array
|
|
399
|
-
const loopResult = loopExprHelper_${helperId}(ctx, inputArr);
|
|
400
|
-
|
|
401
|
-
// Store result at outputPath: ${effectiveOutputPath}
|
|
402
|
-
result.set("${effectiveOutputPath}", loopResult);
|
|
403
|
-
|
|
404
|
-
return Value.Object(result);
|
|
405
|
-
}
|
|
406
|
-
`;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
return `
|
|
410
|
-
export function evaluateNode_${sanitizedId}(ctx: Context): Value {
|
|
411
|
-
let result = new Map<string, Value>();
|
|
412
|
-
|
|
413
|
-
// Get input array from inputField path: ${inputField}
|
|
414
|
-
const inputArr = ctx.get("${inputField}");
|
|
415
|
-
|
|
416
|
-
// Evaluate expressions for each item in the array
|
|
417
|
-
const loopResult = loopExprHelper_${helperId}(ctx, inputArr);
|
|
418
|
-
|
|
419
|
-
// Store result at outputPath: ${effectiveOutputPath}
|
|
420
|
-
result.set("${effectiveOutputPath}", loopResult);
|
|
421
|
-
|
|
422
|
-
return Value.Object(result);
|
|
423
|
-
}
|
|
424
|
-
`;
|
|
425
|
-
}
|