@scriptc/compiler 0.3.6 → 0.4.1
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/ambient/scriptc-node-fallback.d.ts +717 -55
- package/ambient/scriptc.d.ts +134 -0
- package/dist/backend/cycle-analysis.d.ts +1 -1
- package/dist/backend/cycle-analysis.js +1 -0
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-analysis.test.js +13 -1
- package/dist/backend/cycle-analysis.test.js.map +1 -1
- package/dist/backend/cycle-mutability.js +16 -5
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +20 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +9 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/link-plan-core.d.ts +2 -0
- package/dist/backend/link-plan-core.js +2 -0
- package/dist/backend/link-plan-core.js.map +1 -1
- package/dist/backend/link-plan.d.ts +1 -0
- package/dist/backend/link-plan.js +1 -0
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +41 -4
- package/dist/backend/llvm/alloc.js +138 -7
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +30 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/appended-array-literals.test.js +1 -1
- package/dist/backend/llvm/array-search.js +3 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/array-search.test.js +1 -1
- package/dist/backend/llvm/blocks.d.ts +8 -0
- package/dist/backend/llvm/blocks.js +43 -1
- package/dist/backend/llvm/blocks.js.map +1 -1
- package/dist/backend/llvm/blocks.test.js +22 -1
- package/dist/backend/llvm/blocks.test.js.map +1 -1
- package/dist/backend/llvm/byte-numbers.js +15 -5
- package/dist/backend/llvm/byte-numbers.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.d.ts +14 -0
- package/dist/backend/llvm/bytes-alias.js +20 -0
- package/dist/backend/llvm/bytes-alias.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
- package/dist/backend/llvm/bytes-loop-versions.js +506 -0
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
- package/dist/backend/llvm/call-lifetimes.js +50 -1
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.test.js +34 -0
- package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/checked-narrows.test.js +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +38 -1
- package/dist/backend/llvm/classes.js +185 -35
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +79 -17
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +21 -3
- package/dist/backend/llvm/common.js +51 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
- package/dist/backend/llvm/constant-callbacks.js +55 -12
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +88 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -0
- package/dist/backend/llvm/counted-loops.js +37 -0
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +15 -4
- package/dist/backend/llvm/dense-array-access.js +125 -44
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +63 -3
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
- package/dist/backend/llvm/dense-array-loops.js +162 -0
- package/dist/backend/llvm/dense-array-loops.js.map +1 -0
- package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
- package/dist/backend/llvm/dense-array-loops.test.js +128 -0
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
- package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +37 -4
- package/dist/backend/llvm/dyn.js +354 -183
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.d.ts +64 -0
- package/dist/backend/llvm/emit-function.js +1193 -0
- package/dist/backend/llvm/emit-function.js.map +1 -0
- package/dist/backend/llvm/emit-module.d.ts +24 -0
- package/dist/backend/llvm/emit-module.js +1557 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +59 -0
- package/dist/backend/llvm/emit-statements.js +2041 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +566 -291
- package/dist/backend/llvm/emitter.js +728 -4671
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +57 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +73 -46
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-async.test.js +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +2 -0
- package/dist/backend/llvm/expr-bytes.js +76 -29
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
- package/dist/backend/llvm/expr-callbacks.js +48 -11
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +87 -56
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-calls.test.js +1 -1
- package/dist/backend/llvm/expr-containers.js +45 -24
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +16 -16
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +113 -66
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +124 -28
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +57 -2
- package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +32 -11
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +65 -27
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
- package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/int32-abi.test.js +2 -2
- package/dist/backend/llvm/integer-clones.js +3 -3
- package/dist/backend/llvm/integer-clones.js.map +1 -1
- package/dist/backend/llvm/integer-clones.test.js +3 -3
- package/dist/backend/llvm/integer-remainder.d.ts +34 -13
- package/dist/backend/llvm/integer-remainder.js +156 -22
- package/dist/backend/llvm/integer-remainder.js.map +1 -1
- package/dist/backend/llvm/intern-tables.test.js +1 -1
- package/dist/backend/llvm/js-ic.d.ts +18 -0
- package/dist/backend/llvm/js-ic.js +712 -0
- package/dist/backend/llvm/js-ic.js.map +1 -0
- package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
- package/dist/backend/llvm/jsval-encoding.js +20 -0
- package/dist/backend/llvm/jsval-encoding.js.map +1 -0
- package/dist/backend/llvm/jsval.d.ts +12 -0
- package/dist/backend/llvm/jsval.js +616 -0
- package/dist/backend/llvm/jsval.js.map +1 -0
- package/dist/backend/llvm/lazy-captures.d.ts +12 -2
- package/dist/backend/llvm/lazy-captures.js +39 -17
- package/dist/backend/llvm/lazy-captures.js.map +1 -1
- package/dist/backend/llvm/lib-abi.js +1 -1
- package/dist/backend/llvm/lib-abi.js.map +1 -1
- package/dist/backend/llvm/lib-connect.js +1 -1
- package/dist/backend/llvm/lib-connect.js.map +1 -1
- package/dist/backend/llvm/lib-datagram.js +14 -8
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +189 -23
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +42 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +56 -22
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +94 -53
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.d.ts +12 -0
- package/dist/backend/llvm/lib-shared.js +209 -6
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +43 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +42 -33
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +1 -1
- package/dist/backend/llvm/local-extents.d.ts +19 -0
- package/dist/backend/llvm/local-extents.js +169 -0
- package/dist/backend/llvm/local-extents.js.map +1 -0
- package/dist/backend/llvm/local-extents.test.d.ts +1 -0
- package/dist/backend/llvm/local-extents.test.js +92 -0
- package/dist/backend/llvm/local-extents.test.js.map +1 -0
- package/dist/backend/llvm/local-union-storage.js +7 -7
- package/dist/backend/llvm/local-union-storage.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +2 -2
- package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
- package/dist/backend/llvm/map-number-lookup.js +45 -9
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +2 -2
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/narrow-guards.d.ts +38 -0
- package/dist/backend/llvm/narrow-guards.js +215 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +64 -6
- package/dist/backend/llvm/nullable-unions.js +103 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +7 -0
- package/dist/backend/llvm/publish.js +50 -19
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +1 -1
- package/dist/backend/llvm/receivers.d.ts +31 -0
- package/dist/backend/llvm/receivers.js +395 -0
- package/dist/backend/llvm/receivers.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +12 -1
- package/dist/backend/llvm/record-results.js +64 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +142 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +10 -7
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +8 -2
- package/dist/backend/llvm/regions.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +74 -45
- package/dist/backend/llvm/shapes.js +289 -28
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +37 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +20 -1
- package/dist/backend/llvm/speculative-integers.js +94 -6
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.test.js +55 -1
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
- package/dist/backend/llvm/split-loops.js +2 -2
- package/dist/backend/llvm/split-loops.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +26 -6
- package/dist/backend/llvm/stack-objects.js +133 -10
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/stack-objects.test.js +55 -1
- package/dist/backend/llvm/stack-objects.test.js.map +1 -1
- package/dist/backend/llvm/stack-unions.test.js +1 -1
- package/dist/backend/llvm/string-construction.test.js +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +15 -14
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +4 -4
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/string-slices.d.ts +25 -0
- package/dist/backend/llvm/string-slices.js +207 -1
- package/dist/backend/llvm/string-slices.js.map +1 -1
- package/dist/backend/llvm/string-slices.test.js +139 -2
- package/dist/backend/llvm/string-slices.test.js.map +1 -1
- package/dist/backend/llvm/switch-dispatch.test.js +2 -2
- package/dist/backend/llvm/thread-slots.d.ts +5 -0
- package/dist/backend/llvm/thread-slots.js +142 -0
- package/dist/backend/llvm/thread-slots.js.map +1 -0
- package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
- package/dist/backend/llvm/thread-slots.test.js +111 -0
- package/dist/backend/llvm/thread-slots.test.js.map +1 -0
- package/dist/backend/llvm/union-repr.d.ts +7 -7
- package/dist/backend/llvm/union-repr.js +18 -2
- package/dist/backend/llvm/union-repr.js.map +1 -1
- package/dist/backend/llvm/union-retype.test.js +17 -3
- package/dist/backend/llvm/union-retype.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +2 -2
- package/dist/backend/llvm/walkers.js +51 -26
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +16 -0
- package/dist/backend/llvm/wasm-modules.js +66 -0
- package/dist/backend/llvm/wasm-modules.js.map +1 -0
- package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
- package/dist/backend/llvm/wrapping-sums.js +11 -3
- package/dist/backend/llvm/wrapping-sums.js.map +1 -1
- package/dist/backend/mangle.d.ts +12 -0
- package/dist/backend/mangle.js +18 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +4 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +57 -0
- package/dist/backend/native/executable.js +211 -139
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +2 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.d.ts +1 -1
- package/dist/backend/native/runtime-inputs.js +1 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +6 -0
- package/dist/backend/native-codegen.js +19 -0
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +27 -0
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +48 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-profile.d.ts +32 -0
- package/dist/backend/native-profile.js +39 -0
- package/dist/backend/native-profile.js.map +1 -0
- package/dist/backend/native-profile.test.d.ts +1 -0
- package/dist/backend/native-profile.test.js +58 -0
- package/dist/backend/native-profile.test.js.map +1 -0
- package/dist/backend/native-tools.d.ts +14 -0
- package/dist/backend/native-tools.js +13 -0
- package/dist/backend/native-tools.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +13 -1
- package/dist/backend/runtime-pack-core.js +14 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.js +1 -1
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.d.ts +1 -0
- package/dist/backend/runtime-pack-native.test.js +31 -0
- package/dist/backend/runtime-pack-native.test.js.map +1 -0
- package/dist/backend/runtime-pack-targets.test.js +9 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/stack-observations.d.ts +22 -0
- package/dist/backend/stack-observations.js +382 -0
- package/dist/backend/stack-observations.js.map +1 -0
- package/dist/backend/stack-observations.test.d.ts +1 -0
- package/dist/backend/stack-observations.test.js +233 -0
- package/dist/backend/stack-observations.test.js.map +1 -0
- package/dist/backend/target-diagnostics.js +15 -0
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/target-diagnostics.test.js +1 -1
- package/dist/backend/warm-cache.js +8 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/backend/young-nursery.d.ts +7 -0
- package/dist/backend/young-nursery.js +10 -0
- package/dist/backend/young-nursery.js.map +1 -0
- package/dist/cli/command.js +106 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +3 -0
- package/dist/cli/output-options.d.ts +2 -0
- package/dist/cli/output-options.js +9 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +21 -1
- package/dist/cli/usage.js +43 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +10 -1
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +22 -0
- package/dist/contracts/check.js +25 -8
- package/dist/contracts/check.js.map +1 -1
- package/dist/contracts/int32-elements.d.ts +115 -0
- package/dist/contracts/int32-elements.js +1179 -0
- package/dist/contracts/int32-elements.js.map +1 -0
- package/dist/coverage/report.d.ts +16 -0
- package/dist/coverage/report.js +182 -1
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +16 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +10 -6
- package/dist/diagnostics/diagnostic.js +29 -21
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +27 -0
- package/dist/executable/executable-cache.js +19 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +12 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +2 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +6 -1
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/arguments-usage.d.ts +8 -0
- package/dist/frontend/arguments-usage.js +98 -0
- package/dist/frontend/arguments-usage.js.map +1 -1
- package/dist/frontend/arguments-usage.test.d.ts +1 -0
- package/dist/frontend/arguments-usage.test.js +32 -0
- package/dist/frontend/arguments-usage.test.js.map +1 -0
- package/dist/frontend/builtin-modules.d.ts +16 -2
- package/dist/frontend/builtin-modules.js +40 -7
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/builtin-package-aliases.d.ts +24 -0
- package/dist/frontend/builtin-package-aliases.js +133 -0
- package/dist/frontend/builtin-package-aliases.js.map +1 -0
- package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
- package/dist/frontend/builtin-package-aliases.test.js +48 -0
- package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
- package/dist/frontend/cjs-syntax.js +52 -51
- package/dist/frontend/cjs-syntax.js.map +1 -1
- package/dist/frontend/contract-types.d.ts +3 -0
- package/dist/frontend/contract-types.js +36 -7
- package/dist/frontend/contract-types.js.map +1 -1
- package/dist/frontend/dts-paths.d.ts +4 -0
- package/dist/frontend/dts-paths.js +9 -1
- package/dist/frontend/dts-paths.js.map +1 -1
- package/dist/frontend/experimental-import.d.ts +5 -1
- package/dist/frontend/experimental-import.js +26 -7
- package/dist/frontend/experimental-import.js.map +1 -1
- package/dist/frontend/fork-target.js +20 -22
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +2 -1
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/function-completion.js +6 -6
- package/dist/frontend/function-completion.js.map +1 -1
- package/dist/frontend/helper-tokens.js +15 -3
- package/dist/frontend/helper-tokens.js.map +1 -1
- package/dist/frontend/helper-tokens.test.js +7 -1
- package/dist/frontend/helper-tokens.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.js +14 -17
- package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +3 -0
- package/dist/frontend/input-tracker.js +32 -3
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/lib-contract.js +36 -32
- package/dist/frontend/lib-contract.js.map +1 -1
- package/dist/frontend/lib-exports.js +3 -3
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/array-values.d.ts +8 -3
- package/dist/frontend/lowering/array-values.js +60 -11
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assert-instances.js +4 -4
- package/dist/frontend/lowering/assert-instances.js.map +1 -1
- package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
- package/dist/frontend/lowering/assertion-identity.js +70 -0
- package/dist/frontend/lowering/assertion-identity.js.map +1 -0
- package/dist/frontend/lowering/assertion-members.d.ts +28 -0
- package/dist/frontend/lowering/assertion-members.js +185 -0
- package/dist/frontend/lowering/assertion-members.js.map +1 -0
- package/dist/frontend/lowering/binding-analysis.js +27 -20
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtin-calls.js +63 -5
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +107 -44
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
- package/dist/frontend/lowering/builtins/crypto.js +215 -38
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
- package/dist/frontend/lowering/builtins/dates.js +92 -16
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
- package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
- package/dist/frontend/lowering/builtins/ecdh.js +208 -0
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
- package/dist/frontend/lowering/builtins/environment.js +3 -3
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
- package/dist/frontend/lowering/builtins/errors.js +169 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +77 -77
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +284 -24
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.js +4 -4
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +55 -44
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +41 -1
- package/dist/frontend/lowering/builtins/process.js +505 -99
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
- package/dist/frontend/lowering/builtins/promises.js +326 -43
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
- package/dist/frontend/lowering/builtins/properties.js +37 -1
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.js +14 -14
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
- package/dist/frontend/lowering/builtins/readline.js +136 -39
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +42 -14
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
- package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
- package/dist/frontend/lowering/builtins/strings.js +101 -12
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +79 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
- package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
- package/dist/frontend/lowering/builtins/url.d.ts +3 -0
- package/dist/frontend/lowering/builtins/url.js +120 -17
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/util-types.js +20 -4
- package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
- package/dist/frontend/lowering/builtins/v8.js +105 -0
- package/dist/frontend/lowering/builtins/v8.js.map +1 -0
- package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
- package/dist/frontend/lowering/builtins/webassembly.js +388 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
- package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
- package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
- package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
- package/dist/frontend/lowering/builtins/workers.js +193 -8
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +23 -1
- package/dist/frontend/lowering/call-signatures.js +379 -55
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
- package/dist/frontend/lowering/checked-promise-all.js +1 -1
- package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
- package/dist/frontend/lowering/cjs-exports-object.js +561 -0
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
- package/dist/frontend/lowering/cjs-inline-require.js +314 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
- package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
- package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
- package/dist/frontend/lowering/class-attributes.d.ts +19 -0
- package/dist/frontend/lowering/class-attributes.js +378 -0
- package/dist/frontend/lowering/class-attributes.js.map +1 -0
- package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
- package/dist/frontend/lowering/class-callbacks.js +21 -10
- package/dist/frontend/lowering/class-callbacks.js.map +1 -1
- package/dist/frontend/lowering/class-construction.js +49 -4
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
- package/dist/frontend/lowering/class-descriptors.js +8 -8
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js +1 -1
- package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
- package/dist/frontend/lowering/class-iterables.d.ts +11 -0
- package/dist/frontend/lowering/class-iterables.js +31 -0
- package/dist/frontend/lowering/class-iterables.js.map +1 -0
- package/dist/frontend/lowering/class-method-mutations.js +73 -35
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +56 -10
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
- package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +10 -0
- package/dist/frontend/lowering/class-protocols.js +76 -45
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
- package/dist/frontend/lowering/class-prototypes.js +86 -19
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js +1 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-static-data.js +2 -2
- package/dist/frontend/lowering/class-static-data.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
- package/dist/frontend/lowering/class-to-primitive.js +264 -0
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
- package/dist/frontend/lowering/class-unions.d.ts +25 -0
- package/dist/frontend/lowering/class-unions.js +102 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/code-generation.d.ts +14 -0
- package/dist/frontend/lowering/code-generation.js +127 -0
- package/dist/frontend/lowering/code-generation.js.map +1 -0
- package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
- package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +35 -3
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
- package/dist/frontend/lowering/coercions/unions.js +57 -1
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -2
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/collection-narrowing.js +2 -4
- package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.js +8 -8
- package/dist/frontend/lowering/construction-escapes.js.map +1 -1
- package/dist/frontend/lowering/construction-escapes.test.js +4 -4
- package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
- package/dist/frontend/lowering/constructor-returns.js +477 -0
- package/dist/frontend/lowering/constructor-returns.js.map +1 -0
- package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
- package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +1 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
- package/dist/frontend/lowering/containers/array-construction.js +58 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
- package/dist/frontend/lowering/containers/array-from-async.js +159 -14
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +94 -77
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
- package/dist/frontend/lowering/containers/bytes.js +649 -113
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
- package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +126 -28
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
- package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
- package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
- package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
- package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
- package/dist/frontend/lowering/containers/for-of.js +19 -19
- package/dist/frontend/lowering/containers/for-of.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
- package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
- package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
- package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
- package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
- package/dist/frontend/lowering/cycle-initialization.js +191 -35
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.d.ts +1 -1
- package/dist/frontend/lowering/devirtualize.js +27 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +0 -5
- package/dist/frontend/lowering/divergences.js +62 -125
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +723 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
- package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
- package/dist/frontend/lowering/expressions/binary.js +2557 -0
- package/dist/frontend/lowering/expressions/binary.js.map +1 -0
- package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
- package/dist/frontend/lowering/expressions/element-access.js +1804 -0
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
- package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
- package/dist/frontend/lowering/expressions/identifiers.js +830 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
- package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
- package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
- package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
- package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
- package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
- package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
- package/dist/frontend/lowering/expressions/object-literals.js +301 -86
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
- package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
- package/dist/frontend/lowering/expressions/property-access.js +3787 -0
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
- package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
- package/dist/frontend/lowering/expressions/relational.js +1724 -0
- package/dist/frontend/lowering/expressions/relational.js.map +1 -0
- package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
- package/dist/frontend/lowering/expressions/typeof.js +551 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
- package/dist/frontend/lowering/expressions/union-fields.js +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
- package/dist/frontend/lowering/expressions/updates.js +780 -0
- package/dist/frontend/lowering/expressions/updates.js.map +1 -0
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +11 -1
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +52 -28
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.d.ts +25 -0
- package/dist/frontend/lowering/general-streams.js +108 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -0
- package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
- package/dist/frontend/lowering/generator-delegation.js +191 -1
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +43 -0
- package/dist/frontend/lowering/generic-functions.js +593 -118
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +24 -0
- package/dist/frontend/lowering/handle-properties.js +281 -0
- package/dist/frontend/lowering/handle-properties.js.map +1 -0
- package/dist/frontend/lowering/import-meta.js +2 -2
- package/dist/frontend/lowering/import-meta.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +10 -9
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
- package/dist/frontend/lowering/iterable-spelling.js +38 -0
- package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
- package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
- package/dist/frontend/lowering/iterator-adapters.js +331 -3
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
- package/dist/frontend/lowering/js-class-fields.js +170 -0
- package/dist/frontend/lowering/js-class-fields.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
- package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
- package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
- package/dist/frontend/lowering/json-require.d.ts +22 -0
- package/dist/frontend/lowering/json-require.js +131 -0
- package/dist/frontend/lowering/json-require.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
- package/dist/frontend/lowering/key-order-witness.js +641 -0
- package/dist/frontend/lowering/key-order-witness.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js +239 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
- package/dist/frontend/lowering/lifetime-regions.js +7 -7
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
- package/dist/frontend/lowering/lower-array-sort.js +117 -21
- package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
- package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
- package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +61 -60
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
- package/dist/frontend/lowering/lower-async-iteration.js +34 -6
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
- package/dist/frontend/lowering/lower-builtin-values.js +33 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1404 -448
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +54 -3
- package/dist/frontend/lowering/lower-classes.js +1529 -472
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
- package/dist/frontend/lowering/lower-comptime.js +111 -13
- package/dist/frontend/lowering/lower-comptime.js.map +1 -1
- package/dist/frontend/lowering/lower-console.js +13 -11
- package/dist/frontend/lowering/lower-console.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
- package/dist/frontend/lowering/lower-dgram.js +241 -21
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-enums.js +113 -14
- package/dist/frontend/lowering/lower-enums.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
- package/dist/frontend/lowering/lower-event-emitter.js +258 -70
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1509 -12486
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +72 -22
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.d.ts +6 -0
- package/dist/frontend/lowering/lower-generators.js +39 -20
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.js +5 -1
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +900 -107
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +8 -1
- package/dist/frontend/lowering/lower-mock.js +185 -18
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.d.ts +11 -3
- package/dist/frontend/lowering/lower-modules.js +445 -94
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
- package/dist/frontend/lowering/lower-namespaces.js +65 -33
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
- package/dist/frontend/lowering/lower-node-module.js +147 -14
- package/dist/frontend/lowering/lower-node-module.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +6 -6
- package/dist/frontend/lowering/lower-server.js +514 -101
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
- package/dist/frontend/lowering/lower-stdlib.js +179 -118
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
- package/dist/frontend/lowering/lower-stmts.js +1950 -433
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +398 -56
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +437 -62
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +96 -32
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +1 -1
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +424 -27
- package/dist/frontend/lowering/lowerer.js +2062 -310
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +10 -4
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
- package/dist/frontend/lowering/maybe-promise.js +249 -0
- package/dist/frontend/lowering/maybe-promise.js.map +1 -0
- package/dist/frontend/lowering/module-member-this.d.ts +3 -0
- package/dist/frontend/lowering/module-member-this.js +262 -0
- package/dist/frontend/lowering/module-member-this.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +1 -1
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
- package/dist/frontend/lowering/nan-coded-reads.js +45 -32
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
- package/dist/frontend/lowering/narrowing-stability.js +104 -32
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +11 -11
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-factory-new.js +6 -8
- package/dist/frontend/lowering/object-factory-new.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +46 -0
- package/dist/frontend/lowering/private-brands.js +265 -0
- package/dist/frontend/lowering/private-brands.js.map +1 -0
- package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
- package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
- package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
- package/dist/frontend/lowering/rebindable-functions.js +54 -0
- package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
- package/dist/frontend/lowering/require-initialization.d.ts +32 -0
- package/dist/frontend/lowering/require-initialization.js +246 -0
- package/dist/frontend/lowering/require-initialization.js.map +1 -0
- package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
- package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
- package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
- package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
- package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
- package/dist/frontend/lowering/runtime-optional-records.js +205 -32
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
- package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
- package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
- package/dist/frontend/lowering/split-consumers.js +4 -4
- package/dist/frontend/lowering/split-consumers.js.map +1 -1
- package/dist/frontend/lowering/static-function-names.d.ts +28 -0
- package/dist/frontend/lowering/static-function-names.js +212 -0
- package/dist/frontend/lowering/static-function-names.js.map +1 -0
- package/dist/frontend/lowering/static-this.js +6 -6
- package/dist/frontend/lowering/static-this.js.map +1 -1
- package/dist/frontend/lowering/static-typeof.d.ts +26 -0
- package/dist/frontend/lowering/static-typeof.js +133 -0
- package/dist/frontend/lowering/static-typeof.js.map +1 -0
- package/dist/frontend/lowering/strict-mode.d.ts +5 -0
- package/dist/frontend/lowering/strict-mode.js +31 -0
- package/dist/frontend/lowering/strict-mode.js.map +1 -0
- package/dist/frontend/lowering/string-index-bounds.js +13 -12
- package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
- package/dist/frontend/lowering/string-index.d.ts +12 -0
- package/dist/frontend/lowering/string-index.js +72 -1
- package/dist/frontend/lowering/string-index.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +12 -3
- package/dist/frontend/lowering/surfaces.js +282 -45
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
- package/dist/frontend/lowering/symbol-fields.js +204 -36
- package/dist/frontend/lowering/symbol-fields.js.map +1 -1
- package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
- package/dist/frontend/lowering/symbol-methods.js +24 -6
- package/dist/frontend/lowering/symbol-methods.js.map +1 -1
- package/dist/frontend/lowering/thenables.d.ts +16 -0
- package/dist/frontend/lowering/thenables.js +124 -0
- package/dist/frontend/lowering/thenables.js.map +1 -0
- package/dist/frontend/lowering/thread-slots.d.ts +13 -0
- package/dist/frontend/lowering/thread-slots.js +208 -0
- package/dist/frontend/lowering/thread-slots.js.map +1 -0
- package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
- package/dist/frontend/lowering/typed-arguments.js +472 -0
- package/dist/frontend/lowering/typed-arguments.js.map +1 -0
- package/dist/frontend/lowering/union-retag.d.ts +8 -0
- package/dist/frontend/lowering/union-retag.js +27 -0
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +24 -1
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +6 -6
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/lowering/width-lift.d.ts +4 -0
- package/dist/frontend/mock-shapes.js +13 -6
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
- package/dist/frontend/npm-static-builtin-aliases.js +65 -0
- package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
- package/dist/frontend/npm-static-bundled-chunks.js +981 -0
- package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
- package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
- package/dist/frontend/npm-static-bundled-cjs.js +24 -23
- package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
- package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
- package/dist/frontend/npm-static-bundled-esm.js +988 -0
- package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
- package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
- package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
- package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
- package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
- package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
- package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
- package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
- package/dist/frontend/npm-static-declaration-syntax.js +102 -101
- package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
- package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
- package/dist/frontend/npm-static-enum-iife.js +280 -0
- package/dist/frontend/npm-static-enum-iife.js.map +1 -0
- package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
- package/dist/frontend/npm-static-enum-iife.test.js +116 -0
- package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
- package/dist/frontend/npm-static-prune.js +36 -24
- package/dist/frontend/npm-static-prune.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
- package/dist/frontend/npm-static-rewrite-host.js +14 -3
- package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
- package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
- package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
- package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
- package/dist/frontend/npm-static-subtyping.js +7 -9
- package/dist/frontend/npm-static-subtyping.js.map +1 -1
- package/dist/frontend/npm-static.d.ts +25 -1
- package/dist/frontend/npm-static.js +212 -16
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +22 -1
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/npm.js +13 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/package-shims.d.ts +47 -0
- package/dist/frontend/package-shims.js +300 -0
- package/dist/frontend/package-shims.js.map +1 -0
- package/dist/frontend/pipeline.js +230 -26
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +22 -1
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +6 -1
- package/dist/frontend/program-analysis.js +7 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.d.ts +100 -2
- package/dist/frontend/program.js +1627 -262
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +76 -6
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +49 -2
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +49 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +26 -1
- package/dist/frontend/services.js +59 -3
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +2 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/threads-import.js +1 -1
- package/dist/frontend/threads-import.js.map +1 -1
- package/dist/frontend/tier-analysis.d.ts +71 -0
- package/dist/frontend/tier-analysis.js +522 -0
- package/dist/frontend/tier-analysis.js.map +1 -0
- package/dist/frontend/ts7/api-conformance.d.ts +234 -0
- package/dist/frontend/ts7/api-conformance.js +7 -0
- package/dist/frontend/ts7/api-conformance.js.map +1 -0
- package/dist/frontend/ts7/ast-guards.generated.js +2 -1
- package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +47 -25
- package/dist/frontend/ts7/ast-node.js +64 -18
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +36 -12
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-types.d.ts +10 -3
- package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
- package/dist/frontend/ts7/ast.d.ts +1 -0
- package/dist/frontend/ts7/ast.js +3 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +23 -0
- package/dist/frontend/ts7/checker-backend.js +88 -0
- package/dist/frontend/ts7/checker-backend.js.map +1 -0
- package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
- package/dist/frontend/ts7/checker-backend.test.js +63 -0
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
- package/dist/frontend/ts7/checker-cache.d.ts +0 -3
- package/dist/frontend/ts7/checker-cache.js +0 -6
- package/dist/frontend/ts7/checker-cache.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +18 -11
- package/dist/frontend/ts7/checker.js +42 -55
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +10 -7
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/diagnostic.d.ts +19 -0
- package/dist/frontend/ts7/diagnostic.js +22 -0
- package/dist/frontend/ts7/diagnostic.js.map +1 -0
- package/dist/frontend/ts7/node-functions.d.ts +8 -0
- package/dist/frontend/ts7/node-functions.js +18 -0
- package/dist/frontend/ts7/node-functions.js.map +1 -0
- package/dist/frontend/ts7/program-host.d.ts +10 -5
- package/dist/frontend/ts7/program-host.js +19 -0
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/rpc-api.d.ts +5 -1
- package/dist/frontend/ts7/rpc-api.js +8 -1
- package/dist/frontend/ts7/rpc-api.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
- package/dist/frontend/ts7/semantic-checker.js +26 -8
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.test.js +12 -9
- package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +57 -24
- package/dist/frontend/ts7/semantic-model.js +114 -16
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +4 -4
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-types.d.ts +7 -3
- package/dist/frontend/ts7/semantic-types.js +1 -1
- package/dist/frontend/ts7/semantic-types.js.map +1 -1
- package/dist/frontend/ts7/session.d.ts +30 -15
- package/dist/frontend/ts7/session.js +8 -5
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/session.test.js +9 -5
- package/dist/frontend/ts7/session.test.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +6 -2
- package/dist/frontend/ts7/source-parser.js +24 -3
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +38 -17
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +122 -2
- package/dist/frontend/type-mapper.js +2735 -723
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-only-imports.d.ts +28 -0
- package/dist/frontend/type-only-imports.js +122 -0
- package/dist/frontend/type-only-imports.js.map +1 -0
- package/dist/frontend/worker-target.js +8 -8
- package/dist/frontend/worker-target.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +87 -8
- package/dist/index.js.map +1 -1
- package/dist/ir/analysis.js +4 -2
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/array-length-stability.d.ts +31 -0
- package/dist/ir/array-length-stability.js +249 -0
- package/dist/ir/array-length-stability.js.map +1 -0
- package/dist/ir/array-length-stability.test.d.ts +1 -0
- package/dist/ir/array-length-stability.test.js +134 -0
- package/dist/ir/array-length-stability.test.js.map +1 -0
- package/dist/ir/build.d.ts +2 -2
- package/dist/ir/build.js +1 -1
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +116 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +540 -29
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/byte-numbers.js +3 -0
- package/dist/ir/byte-numbers.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +37 -0
- package/dist/ir/callback-specialization.js +459 -0
- package/dist/ir/callback-specialization.js.map +1 -0
- package/dist/ir/callback-specialization.test.d.ts +1 -0
- package/dist/ir/callback-specialization.test.js +208 -0
- package/dist/ir/callback-specialization.test.js.map +1 -0
- package/dist/ir/capture-values.d.ts +0 -1
- package/dist/ir/capture-values.js +51 -40
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/constant-globals.test.js +1 -1
- package/dist/ir/constant-tables.test.js +1 -1
- package/dist/ir/field-values.test.js +1 -1
- package/dist/ir/final-fields.test.js +1 -1
- package/dist/ir/function-references.test.js +9 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +97 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +1 -1
- package/dist/ir/integer-loop-facts.d.ts +7 -0
- package/dist/ir/integer-loop-facts.js +103 -17
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +1 -1
- package/dist/ir/integer-loops.js +39 -9
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +104 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +13 -1
- package/dist/ir/integer-ranges.js +125 -26
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +273 -2
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/intrinsic-signatures.js +6 -0
- package/dist/ir/intrinsic-signatures.js.map +1 -1
- package/dist/ir/ir.d.ts +221 -58
- package/dist/ir/ir.js +127 -12
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +10 -0
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-ic.d.ts +52 -0
- package/dist/ir/js-ic.js +199 -0
- package/dist/ir/js-ic.js.map +1 -0
- package/dist/ir/js-ic.test.d.ts +1 -0
- package/dist/ir/js-ic.test.js +148 -0
- package/dist/ir/js-ic.test.js.map +1 -0
- package/dist/ir/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +399 -0
- package/dist/ir/jsval.js.map +1 -0
- package/dist/ir/jsval.test.d.ts +1 -0
- package/dist/ir/jsval.test.js +239 -0
- package/dist/ir/jsval.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +183 -33
- package/dist/ir/runtime-features.js +795 -422
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +201 -150
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/traverse.test.js +33 -30
- package/dist/ir/traverse.test.js.map +1 -1
- package/dist/ir/unshare.js +65 -3
- package/dist/ir/unshare.js.map +1 -1
- package/dist/ir/unshare.test.js +1 -1
- package/dist/ir/validate.js +196 -76
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +41 -11
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/fence-eval.test.js +1 -1
- package/dist/library/int-infer.test.js +4 -4
- package/dist/library/ir-policy.js +14 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +1 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +5 -5
- package/dist/library/library-profile.d.ts +4 -4
- package/dist/library/library-profile.js +35 -7
- package/dist/library/library-profile.js.map +1 -1
- package/dist/library/prepare.js +13 -1
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +22 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +35 -6
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/executable-cache.js +3 -0
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.js +10 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +19 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.d.ts +2 -0
- package/dist/native/toolchain.js +10 -1
- package/dist/native/toolchain.js.map +1 -1
- package/dist/native/toolchain.test.js +39 -1
- package/dist/native/toolchain.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/wasm/base64.d.ts +5 -0
- package/dist/wasm/base64.js +62 -0
- package/dist/wasm/base64.js.map +1 -0
- package/dist/wasm/binary.d.ts +36 -0
- package/dist/wasm/binary.js +1976 -0
- package/dist/wasm/binary.js.map +1 -0
- package/dist/wasm/binary.test.d.ts +1 -0
- package/dist/wasm/binary.test.js +190 -0
- package/dist/wasm/binary.test.js.map +1 -0
- package/dist/wasm/discover.d.ts +38 -0
- package/dist/wasm/discover.js +377 -0
- package/dist/wasm/discover.js.map +1 -0
- package/dist/wasm/discover.test.d.ts +1 -0
- package/dist/wasm/discover.test.js +24 -0
- package/dist/wasm/discover.test.js.map +1 -0
- package/dist/wasm/module.d.ts +151 -0
- package/dist/wasm/module.js +575 -0
- package/dist/wasm/module.js.map +1 -0
- package/dist/wasm/translate.d.ts +48 -0
- package/dist/wasm/translate.js +2129 -0
- package/dist/wasm/translate.js.map +1 -0
- package/dist/wasm/translate.test.d.ts +1 -0
- package/dist/wasm/translate.test.js +207 -0
- package/dist/wasm/translate.test.js.map +1 -0
- package/package.json +22 -20
- package/shims/fs-extra/core/api.ts +1192 -0
- package/shims/fs-extra/index.ts +9 -0
- package/shims/undici/core/agent.ts +163 -0
- package/shims/undici/core/api.ts +93 -0
- package/shims/undici/core/client.ts +1304 -0
- package/shims/undici/core/connector.ts +157 -0
- package/shims/undici/core/diagnostics-types.ts +68 -0
- package/shims/undici/core/diagnostics.ts +16 -0
- package/shims/undici/core/dispatcher.ts +574 -0
- package/shims/undici/core/errors-v5.ts +22 -0
- package/shims/undici/core/errors-v7.ts +25 -0
- package/shims/undici/core/errors.ts +255 -0
- package/shims/undici/core/fetch.ts +635 -0
- package/shims/undici/core/pool.ts +280 -0
- package/shims/undici/core/readable.ts +268 -0
- package/shims/undici/core/request.ts +313 -0
- package/shims/undici/core/timers.ts +80 -0
- package/shims/undici/core/types.ts +167 -0
- package/shims/undici/core/util.ts +67 -0
- package/shims/undici/v5.ts +119 -0
- package/shims/undici/v7.ts +119 -0
- package/surface-manifest.json +304 -22
|
@@ -4,7 +4,7 @@ import { ladderFenceExpr } from "./lowerer.js";
|
|
|
4
4
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
5
5
|
import { arrayOf, BOOL, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, funcOf, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, NETSERVER_T, NETSOCKET_T, NULL_T, SECURECTX_T, STRING, UNDEFINED_T, typeKey, VOID, } from "../../ir/ir.js";
|
|
6
6
|
import { AGENT_DOCUMENTED_OPTIONS, HTTPS_AGENT_DOCUMENTED_OPTIONS, builtinFenceHintOf, builtinModuleFnOf, fenceOrDropOptionKey, HTTP_CLIENT_DOCUMENTED_OPTIONS, HTTP_SERVER_DOCUMENTED_OPTIONS, HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, HTTPS_CLIENT_DOCUMENTED_OPTIONS, sideEffectFreeOptionValue, TLS_SERVER_DOCUMENTED_OPTIONS, } from "./surfaces.js";
|
|
7
|
-
import { conditionalSpreadOf } from "./expressions/object-literals.js";
|
|
7
|
+
import { conditionalSpreadOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
8
8
|
import { resultIsDiscarded } from "./call-position.js";
|
|
9
9
|
import { lowerCallbackArg as lowerCallbackArgShared } from "./callback-arg.js";
|
|
10
10
|
import { pairsSnapshotHelper } from "./pairs-snapshot.js";
|
|
@@ -583,7 +583,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
|
|
|
583
583
|
// budget pair) ride the generic path — null hands the dispatch back.
|
|
584
584
|
if (builtinModuleFnOf(lowerer, "net", bi.member))
|
|
585
585
|
return null;
|
|
586
|
-
const args = expr.arguments;
|
|
586
|
+
const args = expr.arguments.nodes;
|
|
587
587
|
if (bi.member === "createServer") {
|
|
588
588
|
if (args.length === 0) {
|
|
589
589
|
return { kind: "libCall", fn: "net.createServer", args: [], type: NETSERVER_T, loc };
|
|
@@ -594,7 +594,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
|
|
|
594
594
|
// ERR_INVALID_ARG_TYPE on 'options' before any server exists. DYN
|
|
595
595
|
// result — the checked-dynamic lane's concise arrows box it, and
|
|
596
596
|
// the throw means it never materializes.
|
|
597
|
-
if (isJsSourceFile(
|
|
597
|
+
if (isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
598
598
|
const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
599
599
|
if (t !== null && (t.kind === "string" || t.kind === "f64" || t.kind === "bool")) {
|
|
600
600
|
const raw = lowerer.lowerExpr(args[0]);
|
|
@@ -633,7 +633,7 @@ export function lowerNetModuleCall(lowerer, expr, bi, loc) {
|
|
|
633
633
|
// invalid-input probes build theirs with computed keys): the
|
|
634
634
|
// checked-dynamic walk validates Node-order and the compiler-rendered
|
|
635
635
|
// fence is the post-validation tail.
|
|
636
|
-
if (args.length === 1 && isJsSourceFile(
|
|
636
|
+
if (args.length === 1 && isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
637
637
|
const t = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
638
638
|
if (t !== null && (t.kind === "dyn" || t.kind === "record")) {
|
|
639
639
|
const raw = lowerer.lowerExpr(args[0]);
|
|
@@ -722,9 +722,9 @@ function lookupFnShapeOk(lowerer, t) {
|
|
|
722
722
|
* name; a connect listener argument is supported on the no-lookup form
|
|
723
723
|
* only. */
|
|
724
724
|
function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
725
|
-
const args = expr.arguments;
|
|
725
|
+
const args = expr.arguments.nodes;
|
|
726
726
|
const optsNode = args[0];
|
|
727
|
-
const isJs = isJsSourceFile(
|
|
727
|
+
const isJs = isJsSourceFile(ts.getSourceFileOfNode(expr));
|
|
728
728
|
// The checked-dynamic option-bag route (JS sources): a literal with
|
|
729
729
|
// computed keys (the invalid-input probes' spelling) or an objectMode-
|
|
730
730
|
// trio member rides WHOLE to the runtime walk — Node's Socket-ctor
|
|
@@ -732,7 +732,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
732
732
|
// port/host/autoSelectFamily), with the compiler-rendered fence as the
|
|
733
733
|
// post-validation tail.
|
|
734
734
|
if (isJs) {
|
|
735
|
-
const needsBag = optsNode.properties.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
|
|
735
|
+
const needsBag = optsNode.properties.nodes.some((p) => (!ts.isPropertyAssignment(p) && !ts.isShorthandPropertyAssignment(p)) ||
|
|
736
736
|
(ts.isPropertyAssignment(p) && ts.isComputedPropertyName(p.name)) ||
|
|
737
737
|
["objectMode", "readableObjectMode", "writableObjectMode"].includes((ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
738
738
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
|
|
@@ -758,6 +758,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
758
758
|
let port = null;
|
|
759
759
|
let host = null;
|
|
760
760
|
let lookup = null;
|
|
761
|
+
let dynLookup = null;
|
|
761
762
|
let autoSelect = false;
|
|
762
763
|
let attempt = null;
|
|
763
764
|
let optionThrow = null;
|
|
@@ -772,7 +773,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
772
773
|
type: NETSOCKET_T,
|
|
773
774
|
loc,
|
|
774
775
|
});
|
|
775
|
-
for (const prop of optsNode.properties) {
|
|
776
|
+
for (const prop of optsNode.properties.nodes) {
|
|
776
777
|
let initializer;
|
|
777
778
|
if (ts.isPropertyAssignment(prop) &&
|
|
778
779
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -840,7 +841,19 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
840
841
|
lowerer.noLowering(`${member} with a shorthand lookup option`, prop, "spell it out: lookup: theResolver");
|
|
841
842
|
}
|
|
842
843
|
lookup = lowerer.lowerExpr(initializer);
|
|
843
|
-
|
|
844
|
+
// A lookup of Node's own type (net.LookupFunction: options and a
|
|
845
|
+
// callback taking an address string or list) crosses as a checked-
|
|
846
|
+
// dynamic function the runtime calls the way Node's dial does.
|
|
847
|
+
if (!lookupFnShapeOk(lowerer, lookup.type) &&
|
|
848
|
+
lookup.type.kind === "func" &&
|
|
849
|
+
lookup.type.params.length === 3 &&
|
|
850
|
+
canBoxFuncIntoDyn(lookup.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
|
|
851
|
+
dynLookup = { kind: "dynFrom", value: lookup, type: DYN, loc: locOf(initializer) };
|
|
852
|
+
}
|
|
853
|
+
else if (lookup.type.kind === "dyn") {
|
|
854
|
+
dynLookup = lookup;
|
|
855
|
+
}
|
|
856
|
+
else if (!lookupFnShapeOk(lowerer, lookup.type)) {
|
|
844
857
|
lowerer.noLowering(`a ${member} 'lookup' option of '${lowerer.fmt(lookup.type)}' values`, prop, "the lowered resolver is (hostname: string, options: unknown, callback: (err: NodeJS.ErrnoException | null, addresses: { address: string; family: number }[]) => void) => void");
|
|
845
858
|
}
|
|
846
859
|
}
|
|
@@ -869,6 +882,18 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
869
882
|
loc,
|
|
870
883
|
};
|
|
871
884
|
}
|
|
885
|
+
if (dynLookup !== null) {
|
|
886
|
+
if (args.length !== 1) {
|
|
887
|
+
lowerer.noLowering(`${member} with a lookup and a connect listener`, expr, "register the listener separately: socket.once('connect', ...)");
|
|
888
|
+
}
|
|
889
|
+
return {
|
|
890
|
+
kind: "libCall",
|
|
891
|
+
fn: "net.connectLookupDyn",
|
|
892
|
+
args: [port, host, dynLookup],
|
|
893
|
+
type: NETSOCKET_T,
|
|
894
|
+
loc,
|
|
895
|
+
};
|
|
896
|
+
}
|
|
872
897
|
if (lookup !== null) {
|
|
873
898
|
if (!autoSelect) {
|
|
874
899
|
lowerer.noLowering(`${member} with a lookup but no autoSelectFamily: true`, optsNode, "the lookup form dials every answered address in order — Node does that under autoSelectFamily: true, so spell it");
|
|
@@ -916,8 +941,8 @@ function lowerServerCloseBind(lowerer, call, access) {
|
|
|
916
941
|
return null;
|
|
917
942
|
const loc = locOf(call);
|
|
918
943
|
const recvNode = closeAccess.expression;
|
|
919
|
-
const thisArg = call.arguments[0];
|
|
920
|
-
if (call.arguments.length !== 1 ||
|
|
944
|
+
const thisArg = call.arguments.nodes[0];
|
|
945
|
+
if (call.arguments.nodes.length !== 1 ||
|
|
921
946
|
!thisArg ||
|
|
922
947
|
!ts.isIdentifier(recvNode) ||
|
|
923
948
|
!ts.isIdentifier(thisArg) ||
|
|
@@ -1083,7 +1108,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1083
1108
|
return null;
|
|
1084
1109
|
const name = access.name.text;
|
|
1085
1110
|
const loc = locOf(call);
|
|
1086
|
-
const args = call.arguments;
|
|
1111
|
+
const args = call.arguments.nodes;
|
|
1087
1112
|
if (name === "getConnections") {
|
|
1088
1113
|
// cb(null, count) on the next tick; answers the server.
|
|
1089
1114
|
if (args.length !== 1) {
|
|
@@ -1155,7 +1180,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1155
1180
|
let host = null;
|
|
1156
1181
|
let v6only = null;
|
|
1157
1182
|
let reusePort = null;
|
|
1158
|
-
for (const prop of args[0].properties) {
|
|
1183
|
+
for (const prop of args[0].properties.nodes) {
|
|
1159
1184
|
let initializer;
|
|
1160
1185
|
if (ts.isPropertyAssignment(prop) &&
|
|
1161
1186
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -1213,7 +1238,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1213
1238
|
}
|
|
1214
1239
|
else if (key === "signal" &&
|
|
1215
1240
|
ts.isPropertyAssignment(prop) &&
|
|
1216
|
-
isJsSourceFile(
|
|
1241
|
+
isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1217
1242
|
// A provably-non-AbortSignal signal (the invalid-input probes:
|
|
1218
1243
|
// strings, numbers, plain records) throws Node's
|
|
1219
1244
|
// validateAbortSignal ladder; plausible signal values keep the
|
|
@@ -1287,6 +1312,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1287
1312
|
? [receiver, port, host, v6only, cbV]
|
|
1288
1313
|
: [receiver, port, host, v6only, reusePort, cbV]);
|
|
1289
1314
|
}
|
|
1315
|
+
// listen(path[, cb]): a string first argument names a Unix socket
|
|
1316
|
+
// (the runtime takes a numeric string as a port, Node's isPipeName).
|
|
1317
|
+
if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind === "string") {
|
|
1318
|
+
if (args.length > 2) {
|
|
1319
|
+
lowerer.noLowering(`listen(path) with ${args.length} arguments`, call, "the supported form is listen(path[, callback])");
|
|
1320
|
+
}
|
|
1321
|
+
const path = lowerer.lowerExprExpecting(args[0], STRING);
|
|
1322
|
+
if (args.length === 1)
|
|
1323
|
+
return listenResult("net.listenPath", [receiver, path]);
|
|
1324
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
|
|
1325
|
+
return listenResult("net.listenPathCb", [receiver, path, cb]);
|
|
1326
|
+
}
|
|
1290
1327
|
const port = lowerer.lowerExprExpecting(args[0], F64);
|
|
1291
1328
|
// The optional middle host — listen(port, '127.0.0.1'[, cb]): a
|
|
1292
1329
|
// string-typed second argument is the bind address (the net.connect
|
|
@@ -1326,6 +1363,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1326
1363
|
if (args.length === 0) {
|
|
1327
1364
|
return { kind: "libCall", fn: "net.serverClose", args: [receiver], type: VOID, loc };
|
|
1328
1365
|
}
|
|
1366
|
+
if (lowerer.checker
|
|
1367
|
+
.getCallSignatures(lowerer.typeOf(args[0]))
|
|
1368
|
+
.some((sig) => sig.getParameters().length > 0)) {
|
|
1369
|
+
// close((err) => ...): undefined once the server closes, or Node's
|
|
1370
|
+
// ERR_SERVER_NOT_RUNNING when it was not listening.
|
|
1371
|
+
return {
|
|
1372
|
+
kind: "libCall",
|
|
1373
|
+
fn: "net.serverCloseDyn",
|
|
1374
|
+
args: [receiver, lowerSocketDynListener(lowerer, args[0], "close callbacks")],
|
|
1375
|
+
type: VOID,
|
|
1376
|
+
loc,
|
|
1377
|
+
};
|
|
1378
|
+
}
|
|
1329
1379
|
const { cb } = lowerCallbackArg(lowerer, args[0], "close callbacks", 0, () => false, "use ()", []);
|
|
1330
1380
|
return { kind: "libCall", fn: "net.serverCloseCb", args: [receiver, cb], type: VOID, loc };
|
|
1331
1381
|
}
|
|
@@ -1583,6 +1633,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1583
1633
|
const result = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
1584
1634
|
if (result && isAddressInfoRecord(lowerer, result)) {
|
|
1585
1635
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1636
|
+
if (unixListenReachable(lowerer)) {
|
|
1637
|
+
// A Unix-socket server's address() is its path, which this record
|
|
1638
|
+
// cannot hold: the check throws for one before the record reads.
|
|
1639
|
+
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
1640
|
+
const server = () => varRef(local.id, NETSERVER_T, loc);
|
|
1641
|
+
return {
|
|
1642
|
+
kind: "seqExpr",
|
|
1643
|
+
stmts: [
|
|
1644
|
+
{ kind: "varDecl", localId: local.id, init: receiver, loc },
|
|
1645
|
+
{
|
|
1646
|
+
kind: "exprStmt",
|
|
1647
|
+
expr: {
|
|
1648
|
+
kind: "libCall",
|
|
1649
|
+
fn: "net.serverAddressCheck",
|
|
1650
|
+
args: [server()],
|
|
1651
|
+
type: VOID,
|
|
1652
|
+
loc,
|
|
1653
|
+
},
|
|
1654
|
+
loc,
|
|
1655
|
+
},
|
|
1656
|
+
],
|
|
1657
|
+
result: { kind: "libCall", fn: "net.serverAddress", args: [server()], type: result, loc },
|
|
1658
|
+
type: result,
|
|
1659
|
+
loc,
|
|
1660
|
+
};
|
|
1661
|
+
}
|
|
1586
1662
|
return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
|
|
1587
1663
|
}
|
|
1588
1664
|
// @types/node's `string | AddressInfo | null`: the record while the
|
|
@@ -1598,20 +1674,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1598
1674
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1599
1675
|
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
1600
1676
|
const server = varRef(local.id, NETSERVER_T, loc);
|
|
1677
|
+
const recordArm = {
|
|
1678
|
+
kind: "unionWrap",
|
|
1679
|
+
unionId,
|
|
1680
|
+
tag: lowerer.armTag(unionId, record),
|
|
1681
|
+
value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
|
|
1682
|
+
type: result,
|
|
1683
|
+
loc,
|
|
1684
|
+
};
|
|
1685
|
+
const stringTag = lowerer.armTag(unionId, STRING);
|
|
1686
|
+
let listeningArm = recordArm;
|
|
1687
|
+
const stmts = [{ kind: "varDecl", localId: local.id, init: receiver, loc }];
|
|
1688
|
+
if (stringTag >= 0 && unixListenReachable(lowerer)) {
|
|
1689
|
+
// Node answers a Unix-socket server's address() with its path.
|
|
1690
|
+
const pathLocal = lowerer.declareHiddenLocal("%addressPath", STRING);
|
|
1691
|
+
const path = () => varRef(pathLocal.id, STRING, loc);
|
|
1692
|
+
stmts.push({
|
|
1693
|
+
kind: "varDecl",
|
|
1694
|
+
localId: pathLocal.id,
|
|
1695
|
+
init: { kind: "libCall", fn: "net.serverUnixPath", args: [server], type: STRING, loc },
|
|
1696
|
+
loc,
|
|
1697
|
+
});
|
|
1698
|
+
listeningArm = {
|
|
1699
|
+
kind: "ternary",
|
|
1700
|
+
cond: {
|
|
1701
|
+
kind: "strEq",
|
|
1702
|
+
negated: true,
|
|
1703
|
+
left: path(),
|
|
1704
|
+
right: strLit("", loc),
|
|
1705
|
+
type: BOOL,
|
|
1706
|
+
loc,
|
|
1707
|
+
},
|
|
1708
|
+
then: { kind: "unionWrap", unionId, tag: stringTag, value: path(), type: result, loc },
|
|
1709
|
+
else_: recordArm,
|
|
1710
|
+
type: result,
|
|
1711
|
+
loc,
|
|
1712
|
+
};
|
|
1713
|
+
}
|
|
1601
1714
|
return {
|
|
1602
1715
|
kind: "seqExpr",
|
|
1603
|
-
stmts
|
|
1716
|
+
stmts,
|
|
1604
1717
|
result: {
|
|
1605
1718
|
kind: "ternary",
|
|
1606
1719
|
cond: { kind: "libCall", fn: "net.serverListening", args: [server], type: BOOL, loc },
|
|
1607
|
-
then:
|
|
1608
|
-
kind: "unionWrap",
|
|
1609
|
-
unionId,
|
|
1610
|
-
tag: lowerer.armTag(unionId, record),
|
|
1611
|
-
value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
|
|
1612
|
-
type: result,
|
|
1613
|
-
loc,
|
|
1614
|
-
},
|
|
1720
|
+
then: listeningArm,
|
|
1615
1721
|
else_: {
|
|
1616
1722
|
kind: "unionWrap",
|
|
1617
1723
|
unionId,
|
|
@@ -1629,6 +1735,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1629
1735
|
}
|
|
1630
1736
|
lowerer.noLowering(`Server.${name}`, call, 'listen, close, address().port, emit("connection", socket), and on/once of connection/request/upgrade/error/close/listening/sessionError are the supported Server members', lowerer.checker.getSymbolAtLocation(access.name));
|
|
1631
1737
|
}
|
|
1738
|
+
/** Whether a setEncoding call can reach some net.Socket in this program:
|
|
1739
|
+
* `x.setEncoding(...)` or `x["setEncoding"](...)` where `x` is a socket
|
|
1740
|
+
* or an untyped value. Sockets that never get an encoding keep the Buffer
|
|
1741
|
+
* chunk path; with one, Node's 'data' chunks are strings. */
|
|
1742
|
+
function socketEncodingReachable(lowerer) {
|
|
1743
|
+
if (lowerer.socketEncodingReachable !== null)
|
|
1744
|
+
return lowerer.socketEncodingReachable;
|
|
1745
|
+
let reachable = false;
|
|
1746
|
+
for (const file of lowerer.program.getSourceFiles()) {
|
|
1747
|
+
if (file.isDeclarationFile || !file.text.includes("setEncoding"))
|
|
1748
|
+
continue;
|
|
1749
|
+
ts.walkPreorder(file, (node) => {
|
|
1750
|
+
if (reachable)
|
|
1751
|
+
return "skip";
|
|
1752
|
+
if (!ts.isCallExpression(node))
|
|
1753
|
+
return undefined;
|
|
1754
|
+
const callee = node.expression;
|
|
1755
|
+
const receiver = ts.isPropertyAccessExpression(callee) && callee.name.text === "setEncoding"
|
|
1756
|
+
? callee.expression
|
|
1757
|
+
: ts.isElementAccessExpression(callee) &&
|
|
1758
|
+
ts.isStringLiteralLike(callee.argumentExpression) &&
|
|
1759
|
+
callee.argumentExpression.text === "setEncoding"
|
|
1760
|
+
? callee.expression
|
|
1761
|
+
: null;
|
|
1762
|
+
if (receiver === null)
|
|
1763
|
+
return undefined;
|
|
1764
|
+
const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(receiver))?.kind;
|
|
1765
|
+
if (kind === undefined || kind === "netSocket" || kind === "dyn")
|
|
1766
|
+
reachable = true;
|
|
1767
|
+
return undefined;
|
|
1768
|
+
});
|
|
1769
|
+
if (reachable)
|
|
1770
|
+
break;
|
|
1771
|
+
}
|
|
1772
|
+
lowerer.socketEncodingReachable = reachable;
|
|
1773
|
+
return reachable;
|
|
1774
|
+
}
|
|
1775
|
+
/** Whether some server in the program may listen on a Unix socket: a
|
|
1776
|
+
* `.listen(x, ...)` call on a server (or an untyped value) whose first
|
|
1777
|
+
* argument is string-typed. Only then does address() check for the socket
|
|
1778
|
+
* path, so other programs keep the record-only lowering. */
|
|
1779
|
+
function unixListenReachable(lowerer) {
|
|
1780
|
+
if (lowerer.unixListenReachable !== null)
|
|
1781
|
+
return lowerer.unixListenReachable;
|
|
1782
|
+
let reachable = false;
|
|
1783
|
+
for (const file of lowerer.program.getSourceFiles()) {
|
|
1784
|
+
if (file.isDeclarationFile || !file.text.includes("listen"))
|
|
1785
|
+
continue;
|
|
1786
|
+
ts.walkPreorder(file, (node) => {
|
|
1787
|
+
if (reachable)
|
|
1788
|
+
return "skip";
|
|
1789
|
+
if (!ts.isCallExpression(node) || node.arguments.nodes.length === 0)
|
|
1790
|
+
return undefined;
|
|
1791
|
+
const callee = node.expression;
|
|
1792
|
+
if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "listen")
|
|
1793
|
+
return undefined;
|
|
1794
|
+
const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(callee.expression))?.kind;
|
|
1795
|
+
if (kind !== undefined && kind !== "netServer" && kind !== "dyn")
|
|
1796
|
+
return undefined;
|
|
1797
|
+
const arg = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(node.arguments.nodes[0]));
|
|
1798
|
+
// Only a string-typed argument lowers to listen(path) (an untyped
|
|
1799
|
+
// one checks into a port).
|
|
1800
|
+
if (arg?.kind === "string")
|
|
1801
|
+
reachable = true;
|
|
1802
|
+
return undefined;
|
|
1803
|
+
});
|
|
1804
|
+
if (reachable)
|
|
1805
|
+
break;
|
|
1806
|
+
}
|
|
1807
|
+
lowerer.unixListenReachable = reachable;
|
|
1808
|
+
return reachable;
|
|
1809
|
+
}
|
|
1810
|
+
/** An inline 'data' listener whose chunk parameter is typed Buffer, for a
|
|
1811
|
+
* socket that may have an encoding set: the chunk binds as a checked
|
|
1812
|
+
* dynamic value, so the body sees what Node passes (a string after
|
|
1813
|
+
* setEncoding, a Buffer otherwise) whatever the annotation says. Null
|
|
1814
|
+
* for other listener shapes. */
|
|
1815
|
+
function lowerEncodedDataListener(lowerer, node) {
|
|
1816
|
+
let fn = node;
|
|
1817
|
+
while (ts.isParenthesizedExpression(fn))
|
|
1818
|
+
fn = fn.expression;
|
|
1819
|
+
if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn))
|
|
1820
|
+
return null;
|
|
1821
|
+
if (fn.parameters.nodes.length !== 1)
|
|
1822
|
+
return null;
|
|
1823
|
+
const param = fn.parameters.nodes[0];
|
|
1824
|
+
if (!ts.isIdentifier(param.name) || param.initializer || param.dotDotDotToken)
|
|
1825
|
+
return null;
|
|
1826
|
+
const symbol = lowerer.checker.getSymbolAtLocation(param.name);
|
|
1827
|
+
if (symbol === undefined)
|
|
1828
|
+
return null;
|
|
1829
|
+
const previousBinding = lowerer.runtimeOptionalBindingTypes.get(symbol);
|
|
1830
|
+
const previousImplicit = lowerer.implicitParamTypes;
|
|
1831
|
+
const implicit = new Map(previousImplicit ?? []);
|
|
1832
|
+
implicit.set(symbol, lowerer.checker.getUnknownType());
|
|
1833
|
+
lowerer.runtimeOptionalBindingTypes.set(symbol, DYN);
|
|
1834
|
+
lowerer.implicitParamTypes = implicit;
|
|
1835
|
+
try {
|
|
1836
|
+
return lowerer.lowerExpr(fn);
|
|
1837
|
+
}
|
|
1838
|
+
finally {
|
|
1839
|
+
if (previousBinding === undefined)
|
|
1840
|
+
lowerer.runtimeOptionalBindingTypes.delete(symbol);
|
|
1841
|
+
else
|
|
1842
|
+
lowerer.runtimeOptionalBindingTypes.set(symbol, previousBinding);
|
|
1843
|
+
lowerer.implicitParamTypes = previousImplicit;
|
|
1844
|
+
}
|
|
1845
|
+
}
|
|
1632
1846
|
/** Method calls on net.Socket receivers: write/end/destroy/pipe and
|
|
1633
1847
|
* on/once("data" | "end" | "close" | "error" | "connect"). Null for
|
|
1634
1848
|
* other receivers. */
|
|
@@ -1639,7 +1853,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1639
1853
|
return null;
|
|
1640
1854
|
const name = access.name.text;
|
|
1641
1855
|
const loc = locOf(call);
|
|
1642
|
-
const args = call.arguments;
|
|
1856
|
+
const args = call.arguments.nodes;
|
|
1643
1857
|
if ((name === "ref" || name === "unref") && args.length === 0) {
|
|
1644
1858
|
// Whether the socket keeps the event loop alive.
|
|
1645
1859
|
requireStatementPosition(lowerer, call, `socket.${name}()`);
|
|
@@ -1666,7 +1880,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1666
1880
|
if (encT.isStringLiteralType() && chunkT !== null) {
|
|
1667
1881
|
if (encT.value === "buffer" &&
|
|
1668
1882
|
chunkT.kind === "string" &&
|
|
1669
|
-
isJsSourceFile(
|
|
1883
|
+
isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1670
1884
|
lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
|
|
1671
1885
|
return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
|
|
1672
1886
|
}
|
|
@@ -1883,6 +2097,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1883
2097
|
? value
|
|
1884
2098
|
: lowerer.coerceInto(call, value, declared);
|
|
1885
2099
|
}
|
|
2100
|
+
if (name === "isSessionReused" && args.length === 0) {
|
|
2101
|
+
// TLSSocket.isSessionReused(): the client never offers a cached
|
|
2102
|
+
// session (no session resumption, a documented TLS divergence), so
|
|
2103
|
+
// no handshake resumes one. A plain socket asserted to be a
|
|
2104
|
+
// TLSSocket answers false too, where Node has no such method.
|
|
2105
|
+
const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
|
|
2106
|
+
return {
|
|
2107
|
+
kind: "seqExpr",
|
|
2108
|
+
stmts: [{ kind: "exprStmt", expr: receiver, loc }],
|
|
2109
|
+
result: boolLit(false, loc),
|
|
2110
|
+
type: BOOL,
|
|
2111
|
+
loc,
|
|
2112
|
+
};
|
|
2113
|
+
}
|
|
1886
2114
|
if (name === "resetAndDestroy") {
|
|
1887
2115
|
// An RST close; a connecting socket resets once it connects. Answers
|
|
1888
2116
|
// the socket, Node's chaining.
|
|
@@ -1993,6 +2221,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1993
2221
|
loc,
|
|
1994
2222
|
};
|
|
1995
2223
|
}
|
|
2224
|
+
if (param !== null && param.kind === "bytes" && socketEncodingReachable(lowerer)) {
|
|
2225
|
+
const encoded = lowerEncodedDataListener(lowerer, args[1]);
|
|
2226
|
+
// A listener defined elsewhere keeps its Buffer parameter; it takes
|
|
2227
|
+
// the chunk through the checked boundary, so a string chunk fails
|
|
2228
|
+
// the check instead of arriving as a Buffer.
|
|
2229
|
+
const cb = encoded ??
|
|
2230
|
+
{
|
|
2231
|
+
kind: "dynCheck",
|
|
2232
|
+
value: lowerSocketDynListener(lowerer, args[1], "data listeners"),
|
|
2233
|
+
type: funcOf([DYN], VOID),
|
|
2234
|
+
loc,
|
|
2235
|
+
};
|
|
2236
|
+
return {
|
|
2237
|
+
kind: "libCall",
|
|
2238
|
+
fn: "net.sockOnData",
|
|
2239
|
+
args: [receiver, cb, once],
|
|
2240
|
+
type: VOID,
|
|
2241
|
+
loc,
|
|
2242
|
+
};
|
|
2243
|
+
}
|
|
1996
2244
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
1997
2245
|
return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
1998
2246
|
}
|
|
@@ -2039,6 +2287,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2039
2287
|
: "net.sockOnConnect";
|
|
2040
2288
|
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
2041
2289
|
}
|
|
2290
|
+
if (event === "lookup") {
|
|
2291
|
+
// (err, address, family, host) after the host name resolves, before
|
|
2292
|
+
// the connect: once per resolved address, or once with the error.
|
|
2293
|
+
return {
|
|
2294
|
+
kind: "libCall",
|
|
2295
|
+
fn: "net.sockOnLookup",
|
|
2296
|
+
args: [receiver, lowerSocketDynListener(lowerer, args[1], "lookup listeners"), once],
|
|
2297
|
+
type: VOID,
|
|
2298
|
+
loc,
|
|
2299
|
+
};
|
|
2300
|
+
}
|
|
2042
2301
|
if (event === "finish") {
|
|
2043
2302
|
// Fires once when the FIN goes out — once either way (the event
|
|
2044
2303
|
// happens at most once per socket).
|
|
@@ -2071,7 +2330,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2071
2330
|
loc,
|
|
2072
2331
|
};
|
|
2073
2332
|
}
|
|
2074
|
-
lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
|
|
2333
|
+
lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
|
|
2075
2334
|
}
|
|
2076
2335
|
lowerer.noLowering(`Socket.${name}`, call, "write, end, destroy, pipe, setTimeout, setKeepAlive, setNoDelay, the address fields, read, unshift, and on/once of data/end/close/error/connect/ready/timeout/readable are the supported Socket members", lowerer.checker.getSymbolAtLocation(access.name));
|
|
2077
2336
|
}
|
|
@@ -2132,7 +2391,7 @@ function h2EndStreamOption(lowerer, node) {
|
|
|
2132
2391
|
lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
|
|
2133
2392
|
}
|
|
2134
2393
|
let end;
|
|
2135
|
-
for (const prop of node.properties) {
|
|
2394
|
+
for (const prop of node.properties.nodes) {
|
|
2136
2395
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
2137
2396
|
lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
|
|
2138
2397
|
}
|
|
@@ -2160,7 +2419,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
|
|
|
2160
2419
|
return null;
|
|
2161
2420
|
const name = access.name.text;
|
|
2162
2421
|
const loc = locOf(call);
|
|
2163
|
-
const args = call.arguments;
|
|
2422
|
+
const args = call.arguments.nodes;
|
|
2164
2423
|
const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
|
|
2165
2424
|
if (name === "request") {
|
|
2166
2425
|
const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
|
|
@@ -2340,7 +2599,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
|
|
|
2340
2599
|
return null;
|
|
2341
2600
|
const name = access.name.text;
|
|
2342
2601
|
const loc = locOf(call);
|
|
2343
|
-
const args = call.arguments;
|
|
2602
|
+
const args = call.arguments.nodes;
|
|
2344
2603
|
const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
|
|
2345
2604
|
if (name === "respond") {
|
|
2346
2605
|
requireStatementPosition(lowerer, call, "stream.respond(...)");
|
|
@@ -3003,7 +3262,7 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3003
3262
|
if (expr.name.text !== "port")
|
|
3004
3263
|
return null;
|
|
3005
3264
|
const recv = expr.expression;
|
|
3006
|
-
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
|
|
3265
|
+
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
|
|
3007
3266
|
return null;
|
|
3008
3267
|
if (!ts.isPropertyAccessExpression(recv.expression))
|
|
3009
3268
|
return null;
|
|
@@ -3015,6 +3274,30 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3015
3274
|
if (!lowerer.isStdlibMember(inner))
|
|
3016
3275
|
return null;
|
|
3017
3276
|
const receiver = coerceToHandle(lowerer, inner.expression, NETSERVER_T);
|
|
3277
|
+
if (unixListenReachable(lowerer)) {
|
|
3278
|
+
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
3279
|
+
const server = () => varRef(local.id, NETSERVER_T, loc);
|
|
3280
|
+
return {
|
|
3281
|
+
kind: "seqExpr",
|
|
3282
|
+
stmts: [
|
|
3283
|
+
{ kind: "varDecl", localId: local.id, init: receiver, loc },
|
|
3284
|
+
{
|
|
3285
|
+
kind: "exprStmt",
|
|
3286
|
+
expr: {
|
|
3287
|
+
kind: "libCall",
|
|
3288
|
+
fn: "net.serverAddressCheck",
|
|
3289
|
+
args: [server()],
|
|
3290
|
+
type: VOID,
|
|
3291
|
+
loc,
|
|
3292
|
+
},
|
|
3293
|
+
loc,
|
|
3294
|
+
},
|
|
3295
|
+
],
|
|
3296
|
+
result: { kind: "libCall", fn: "net.serverPort", args: [server()], type: F64, loc },
|
|
3297
|
+
type: F64,
|
|
3298
|
+
loc,
|
|
3299
|
+
};
|
|
3300
|
+
}
|
|
3018
3301
|
return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
|
|
3019
3302
|
}
|
|
3020
3303
|
/** The (req, res) request-handler argument — http.createServer's, https
|
|
@@ -3080,7 +3363,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3080
3363
|
let allowMissingHost = false;
|
|
3081
3364
|
let keepAliveTimeoutBuffer = null;
|
|
3082
3365
|
let maxHeaderSize = null;
|
|
3083
|
-
for (const prop of node.properties) {
|
|
3366
|
+
for (const prop of node.properties.nodes) {
|
|
3084
3367
|
let initializer;
|
|
3085
3368
|
if (ts.isPropertyAssignment(prop) &&
|
|
3086
3369
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3159,7 +3442,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3159
3442
|
* (options, handler). Modeled option values wrap the construction in an
|
|
3160
3443
|
* interned option-setting helper. */
|
|
3161
3444
|
function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
3162
|
-
const args = expr.arguments ?? [];
|
|
3445
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3163
3446
|
if (args.length > 2) {
|
|
3164
3447
|
lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
|
|
3165
3448
|
}
|
|
@@ -3294,12 +3577,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3294
3577
|
* getName/destroy and the sockets/requests/freeSockets counters dispatch
|
|
3295
3578
|
* through the dyn handle ops, and the request path threads it (the
|
|
3296
3579
|
* requestAgent rows). Options parse at the LITERAL construction site:
|
|
3297
|
-
* keepAlive (a boolean value
|
|
3298
|
-
*
|
|
3299
|
-
*
|
|
3300
|
-
*
|
|
3301
|
-
*
|
|
3302
|
-
*
|
|
3580
|
+
* keepAlive (a boolean value: finished connections return to the free
|
|
3581
|
+
* list), keepAliveMsecs / maxSockets / maxFreeSockets / timeout / port as
|
|
3582
|
+
* numbers, scheduling as a value the runtime validates ('fifo' or
|
|
3583
|
+
* 'lifo'), other documented keys fence by name, and undocumented keys
|
|
3584
|
+
* drop like Node drops them. Null when the callee isn't the http/https
|
|
3585
|
+
* Agent. */
|
|
3303
3586
|
export function lowerHttpAgentNew(lowerer, expr) {
|
|
3304
3587
|
const callee = expr.expression;
|
|
3305
3588
|
const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
|
|
@@ -3317,7 +3600,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3317
3600
|
let maxFree = numLit(-1, loc);
|
|
3318
3601
|
let timeout = numLit(-1, loc);
|
|
3319
3602
|
let port = numLit(-1, loc);
|
|
3320
|
-
|
|
3603
|
+
let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
|
|
3604
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3321
3605
|
if (args.length > 1) {
|
|
3322
3606
|
lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
|
|
3323
3607
|
}
|
|
@@ -3326,7 +3610,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3326
3610
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
3327
3611
|
lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
|
|
3328
3612
|
}
|
|
3329
|
-
for (const prop of optsNode.properties) {
|
|
3613
|
+
for (const prop of optsNode.properties.nodes) {
|
|
3330
3614
|
if (ts.isSpreadAssignment(prop)) {
|
|
3331
3615
|
lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
|
|
3332
3616
|
}
|
|
@@ -3382,12 +3666,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3382
3666
|
// the settable defaultPort carries this one.
|
|
3383
3667
|
port = lowerVal("f64");
|
|
3384
3668
|
break;
|
|
3385
|
-
case "scheduling":
|
|
3386
|
-
//
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
lowerer.
|
|
3669
|
+
case "scheduling": {
|
|
3670
|
+
// 'fifo' | 'lifo' (falsy = 'lifo'), validated by the runtime
|
|
3671
|
+
const v = initializer !== null
|
|
3672
|
+
? lowerer.lowerExpr(initializer)
|
|
3673
|
+
: lowerer.lowerShorthandValue(prop);
|
|
3674
|
+
scheduling = lowerer.coerceToExpected(v, DYN);
|
|
3390
3675
|
break;
|
|
3676
|
+
}
|
|
3391
3677
|
default:
|
|
3392
3678
|
fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
|
|
3393
3679
|
? "keepAlive, keepAliveMsecs, maxSockets, maxFreeSockets, timeout, port, and scheduling are the supported options; pass TLS options such as ca and rejectUnauthorized on each https.request"
|
|
@@ -3406,6 +3692,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3406
3692
|
maxFree,
|
|
3407
3693
|
timeout,
|
|
3408
3694
|
port,
|
|
3695
|
+
scheduling,
|
|
3409
3696
|
],
|
|
3410
3697
|
type: DYN,
|
|
3411
3698
|
loc,
|
|
@@ -3431,24 +3718,24 @@ export function lowerHttpServerNew(lowerer, expr) {
|
|
|
3431
3718
|
function lowerHttpModuleCall(lowerer, expr, bi, loc) {
|
|
3432
3719
|
if (bi.member === "validateHeaderName") {
|
|
3433
3720
|
requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
|
|
3434
|
-
if (expr.arguments.length < 1 ||
|
|
3435
|
-
expr.arguments.length > 2 ||
|
|
3436
|
-
expr.arguments.some(ts.isSpreadElement)) {
|
|
3721
|
+
if (expr.arguments.nodes.length < 1 ||
|
|
3722
|
+
expr.arguments.nodes.length > 2 ||
|
|
3723
|
+
expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
3437
3724
|
lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
|
|
3438
3725
|
}
|
|
3439
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3440
|
-
const label = expr.arguments.length === 2
|
|
3441
|
-
? lowerer.lowerExprExpecting(expr.arguments[1], STRING)
|
|
3726
|
+
const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
|
|
3727
|
+
const label = expr.arguments.nodes.length === 2
|
|
3728
|
+
? lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING)
|
|
3442
3729
|
: strLit("Header name", loc);
|
|
3443
3730
|
return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
|
|
3444
3731
|
}
|
|
3445
3732
|
if (bi.member === "validateHeaderValue") {
|
|
3446
3733
|
requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
|
|
3447
|
-
if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
|
|
3734
|
+
if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
3448
3735
|
lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
|
|
3449
3736
|
}
|
|
3450
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3451
|
-
const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
|
|
3737
|
+
const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
|
|
3738
|
+
const value = lowerer.lowerExprExpecting(expr.arguments.nodes[1], DYN);
|
|
3452
3739
|
return {
|
|
3453
3740
|
kind: "libCall",
|
|
3454
3741
|
fn: "http.validateHeaderValue",
|
|
@@ -3478,7 +3765,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3478
3765
|
const loc = locOf(node);
|
|
3479
3766
|
let cert = null;
|
|
3480
3767
|
let key = null;
|
|
3481
|
-
for (const prop of node.properties) {
|
|
3768
|
+
for (const prop of node.properties.nodes) {
|
|
3482
3769
|
let initializer;
|
|
3483
3770
|
if (ts.isPropertyAssignment(prop) &&
|
|
3484
3771
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3574,8 +3861,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
|
|
|
3574
3861
|
* keepAliveTimeoutBuffer so the HTTP option is consumed without losing
|
|
3575
3862
|
* the literal's evaluation order. */
|
|
3576
3863
|
function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
|
|
3577
|
-
const jsSource = isJsSourceFile(
|
|
3578
|
-
return node.properties.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3864
|
+
const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
|
|
3865
|
+
return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3579
3866
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
|
|
3580
3867
|
((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
|
|
3581
3868
|
(jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
|
|
@@ -3608,7 +3895,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
|
|
|
3608
3895
|
* callback (and 'secureConnect'/'connect' listeners) fires
|
|
3609
3896
|
* post-handshake — Node's secureConnect timing. */
|
|
3610
3897
|
function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
3611
|
-
const args = expr.arguments;
|
|
3898
|
+
const args = expr.arguments.nodes;
|
|
3612
3899
|
const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
|
|
3613
3900
|
if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
|
|
3614
3901
|
lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
|
|
@@ -3700,7 +3987,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
|
3700
3987
|
* module declares fences qualified (createSecureContext and connect
|
|
3701
3988
|
* carry pointed hints from the fence-hint table). */
|
|
3702
3989
|
function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
3703
|
-
const args = expr.arguments;
|
|
3990
|
+
const args = expr.arguments.nodes;
|
|
3704
3991
|
if (bi.member === "createServer") {
|
|
3705
3992
|
if (args.length < 1 || args.length > 2) {
|
|
3706
3993
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
|
|
@@ -3740,7 +4027,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
|
3740
4027
|
if (bi.member === "getCACertificates" &&
|
|
3741
4028
|
args.length === 1 &&
|
|
3742
4029
|
!args.some(ts.isSpreadElement) &&
|
|
3743
|
-
isJsSourceFile(
|
|
4030
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
3744
4031
|
// The type-argument ladder (validateString + the documented name
|
|
3745
4032
|
// set); the real CA list has no lowering, so a valid name meets the
|
|
3746
4033
|
// compiler-rendered fence after the validation.
|
|
@@ -3846,7 +4133,7 @@ function clientFnRefOf(lowerer, node) {
|
|
|
3846
4133
|
* `const` declaration, or a parameter/let whose enclosing scope contains
|
|
3847
4134
|
* no assignment or ++/-- targeting it. */
|
|
3848
4135
|
function neverReassigned(lowerer, sym) {
|
|
3849
|
-
const decl =
|
|
4136
|
+
const decl = sym.declarations[0];
|
|
3850
4137
|
if (!decl)
|
|
3851
4138
|
return false;
|
|
3852
4139
|
if (ts.isVariableDeclaration(decl) &&
|
|
@@ -3953,7 +4240,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
|
|
|
3953
4240
|
* handler) and request/get — the http client lowering with the secure
|
|
3954
4241
|
* extras (port 443 default, rejectUnauthorized, ca). */
|
|
3955
4242
|
function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
|
|
3956
|
-
const args = expr.arguments;
|
|
4243
|
+
const args = expr.arguments.nodes;
|
|
3957
4244
|
if (bi.member === "createServer") {
|
|
3958
4245
|
if (args.length < 1 || args.length > 2) {
|
|
3959
4246
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
|
|
@@ -4034,7 +4321,7 @@ function stripParensAndCasts(node) {
|
|
|
4034
4321
|
* createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
|
|
4035
4322
|
* dual-ALPN server whose request/connect listeners mirror across parsers. */
|
|
4036
4323
|
function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
4037
|
-
const args = expr.arguments;
|
|
4324
|
+
const args = expr.arguments.nodes;
|
|
4038
4325
|
if (bi.member === "createServer") {
|
|
4039
4326
|
// The REAL h2c server (scr_http2.c). An options object literal is
|
|
4040
4327
|
// accepted and ignored (h2 session-tuning knobs; the honest-defaults
|
|
@@ -4098,7 +4385,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4098
4385
|
!arg1IsDyn &&
|
|
4099
4386
|
lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
|
|
4100
4387
|
if (ts.isObjectLiteralExpression(args[1])) {
|
|
4101
|
-
for (const pr of args[1].properties) {
|
|
4388
|
+
for (const pr of args[1].properties.nodes) {
|
|
4102
4389
|
// Plain `name: value` and shorthand `{ ca }` both carry the
|
|
4103
4390
|
// option; a shorthand's value is the same-named identifier.
|
|
4104
4391
|
let name;
|
|
@@ -4281,17 +4568,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4281
4568
|
if (ts.isConditionalExpression(inner)) {
|
|
4282
4569
|
const whenTrue = stripParensAndCasts(inner.whenTrue);
|
|
4283
4570
|
const whenFalse = stripParensAndCasts(inner.whenFalse);
|
|
4284
|
-
const condText = inner.condition
|
|
4571
|
+
const condText = ts.getTextOfNode(inner.condition);
|
|
4285
4572
|
const ok = ts.isObjectLiteralExpression(whenTrue) &&
|
|
4286
4573
|
ts.isObjectLiteralExpression(whenFalse) &&
|
|
4287
|
-
whenFalse.properties.length === 0 &&
|
|
4288
|
-
whenTrue.properties.length === 1 &&
|
|
4289
|
-
ts.isPropertyAssignment(whenTrue.properties[0]) &&
|
|
4290
|
-
(ts.isIdentifier(whenTrue.properties[0].name) ||
|
|
4291
|
-
ts.isStringLiteral(whenTrue.properties[0].name)) &&
|
|
4292
|
-
whenTrue.properties[0].name.text ===
|
|
4574
|
+
whenFalse.properties.nodes.length === 0 &&
|
|
4575
|
+
whenTrue.properties.nodes.length === 1 &&
|
|
4576
|
+
ts.isPropertyAssignment(whenTrue.properties.nodes[0]) &&
|
|
4577
|
+
(ts.isIdentifier(whenTrue.properties.nodes[0].name) ||
|
|
4578
|
+
ts.isStringLiteral(whenTrue.properties.nodes[0].name)) &&
|
|
4579
|
+
whenTrue.properties.nodes[0].name.text ===
|
|
4293
4580
|
"SNICallback" &&
|
|
4294
|
-
whenTrue.properties[0].initializer
|
|
4581
|
+
ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
|
|
4295
4582
|
if (!ok) {
|
|
4296
4583
|
lowerer.noLowering("createSecureServer options with a conditional spread", prop, "the lowered conditional spread is exactly ...(x ? { SNICallback: x } : {}) — the included value must BE the condition");
|
|
4297
4584
|
}
|
|
@@ -4301,7 +4588,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4301
4588
|
if (!ts.isObjectLiteralExpression(inner)) {
|
|
4302
4589
|
lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
|
|
4303
4590
|
}
|
|
4304
|
-
for (const p of inner.properties)
|
|
4591
|
+
for (const p of inner.properties.nodes)
|
|
4305
4592
|
lowerOption(p);
|
|
4306
4593
|
return;
|
|
4307
4594
|
}
|
|
@@ -4367,11 +4654,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4367
4654
|
e.kind === ts.SyntaxKind.TrueKeyword ||
|
|
4368
4655
|
e.kind === ts.SyntaxKind.FalseKeyword;
|
|
4369
4656
|
const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
|
|
4370
|
-
e.properties.every((p) => ts.isPropertyAssignment(p) &&
|
|
4657
|
+
e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
|
|
4371
4658
|
ts.isIdentifier(p.name) &&
|
|
4372
4659
|
isScalarLiteral(p.initializer));
|
|
4373
4660
|
if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
|
|
4374
|
-
for (const setting of initializer.properties) {
|
|
4661
|
+
for (const setting of initializer.properties.nodes) {
|
|
4375
4662
|
if (ts.isPropertyAssignment(setting) &&
|
|
4376
4663
|
ts.isIdentifier(setting.name) &&
|
|
4377
4664
|
setting.name.text === "enableConnectProtocol") {
|
|
@@ -4399,7 +4686,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4399
4686
|
fenceOrDropOptionKey(lowerer, prop, k, "createSecureServer", HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, "allowHTTP1: true, cert, key, and SNICallback are the supported options (h2 session-tuning options are accepted as literals and ignored)");
|
|
4400
4687
|
// An undocumented key, dropped like Node drops it.
|
|
4401
4688
|
};
|
|
4402
|
-
for (const prop of optsNode.properties)
|
|
4689
|
+
for (const prop of optsNode.properties.nodes)
|
|
4403
4690
|
lowerOption(prop);
|
|
4404
4691
|
if (cert === null || key === null) {
|
|
4405
4692
|
lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
|
|
@@ -4464,6 +4751,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4464
4751
|
lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
|
|
4465
4752
|
"createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
|
|
4466
4753
|
}
|
|
4754
|
+
/** The checked-dynamic options value of a request whose options the
|
|
4755
|
+
* runtime reads: a non-literal options value (a RequestOptions variable —
|
|
4756
|
+
* checked-dynamic storage — or a record that converts to one), or a
|
|
4757
|
+
* literal the static walk cannot lower because it spreads another options
|
|
4758
|
+
* value or sets socketPath. Null keeps the static literal walk (and its
|
|
4759
|
+
* fences), which every other literal takes unchanged. */
|
|
4760
|
+
function runtimeRequestOptions(lowerer, optsNode, secureish) {
|
|
4761
|
+
if (ts.isObjectLiteralExpression(optsNode)) {
|
|
4762
|
+
const needsRuntime = optsNode.properties.nodes.some((prop) => {
|
|
4763
|
+
if (ts.isSpreadAssignment(prop)) {
|
|
4764
|
+
// the static walk's one spread: `...(c ? { rejectUnauthorized } : {})` on https
|
|
4765
|
+
const cs = conditionalSpreadOf(prop.expression);
|
|
4766
|
+
return !(secureish &&
|
|
4767
|
+
cs !== null &&
|
|
4768
|
+
cs !== "unsupported" &&
|
|
4769
|
+
cs.props.length === 1 &&
|
|
4770
|
+
cs.props[0].name.text === "rejectUnauthorized");
|
|
4771
|
+
}
|
|
4772
|
+
return ((ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) &&
|
|
4773
|
+
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
|
|
4774
|
+
prop.name.text === "socketPath");
|
|
4775
|
+
});
|
|
4776
|
+
if (!needsRuntime)
|
|
4777
|
+
return null;
|
|
4778
|
+
return lowerDynObjectLiteral(lowerer, optsNode);
|
|
4779
|
+
}
|
|
4780
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
4781
|
+
if (!t || !(t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t))))
|
|
4782
|
+
return null;
|
|
4783
|
+
return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
|
|
4784
|
+
}
|
|
4467
4785
|
/** http.request(options[, cb]) / http.get(options[, cb]) — the client.
|
|
4468
4786
|
* The options argument must be an OBJECT LITERAL; the lowered keys are
|
|
4469
4787
|
* hostname/host, port, path, method, timeout, and headers (a nested
|
|
@@ -4491,11 +4809,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4491
4809
|
const c = lowerer.lowerCondition(binding.cond);
|
|
4492
4810
|
return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
|
|
4493
4811
|
};
|
|
4494
|
-
const args = expr.arguments;
|
|
4812
|
+
const args = expr.arguments.nodes;
|
|
4495
4813
|
if (args.length < 1 || args.length > 2) {
|
|
4496
4814
|
lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
|
|
4497
4815
|
}
|
|
4498
4816
|
const optsNode = args[0];
|
|
4817
|
+
const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
|
|
4818
|
+
if (runtimeOptions !== null) {
|
|
4819
|
+
// The options record is read at run time (the ClientRequest
|
|
4820
|
+
// constructor's walk in the runtime): a RequestOptions variable, or a
|
|
4821
|
+
// literal that spreads one or sets socketPath.
|
|
4822
|
+
const autoEnd = boolLit(member === "get", loc);
|
|
4823
|
+
const secureDyn = secure === true;
|
|
4824
|
+
if (args.length === 1) {
|
|
4825
|
+
return {
|
|
4826
|
+
kind: "libCall",
|
|
4827
|
+
fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
|
|
4828
|
+
args: [runtimeOptions, autoEnd],
|
|
4829
|
+
type: HTTPCLIENTREQ_T,
|
|
4830
|
+
loc,
|
|
4831
|
+
};
|
|
4832
|
+
}
|
|
4833
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
4834
|
+
return {
|
|
4835
|
+
kind: "libCall",
|
|
4836
|
+
fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
|
|
4837
|
+
args: [runtimeOptions, autoEnd, cb],
|
|
4838
|
+
type: HTTPCLIENTREQ_T,
|
|
4839
|
+
loc,
|
|
4840
|
+
};
|
|
4841
|
+
}
|
|
4499
4842
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
4500
4843
|
const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
4501
4844
|
if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
|
|
@@ -4562,7 +4905,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4562
4905
|
let servername = null;
|
|
4563
4906
|
/** maxHeaderSize: the response head's size bound. */
|
|
4564
4907
|
let maxHeaderSize = null;
|
|
4565
|
-
for (const prop of optsNode.properties) {
|
|
4908
|
+
for (const prop of optsNode.properties.nodes) {
|
|
4566
4909
|
// Shorthand entries ({ port } for { port: port }) are the natural
|
|
4567
4910
|
// spelling at these call sites — the shorthand's VALUE lowering
|
|
4568
4911
|
// resolves the local binding (lowerShorthandValue), not the property
|
|
@@ -4657,6 +5000,9 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4657
5000
|
maxHeaderSize = lowerVal("f64");
|
|
4658
5001
|
break;
|
|
4659
5002
|
case "servername":
|
|
5003
|
+
if (binding !== null) {
|
|
5004
|
+
lowerer.noLowering(`${member} option 'servername' through a module-function binding`, prop, "call https.request directly when passing servername");
|
|
5005
|
+
}
|
|
4660
5006
|
if (!secureish) {
|
|
4661
5007
|
lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
|
|
4662
5008
|
}
|
|
@@ -4820,22 +5166,29 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4820
5166
|
timeout ??= numLit(0, loc);
|
|
4821
5167
|
headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
|
|
4822
5168
|
const autoEnd = boolLit(member === "get", loc);
|
|
4823
|
-
//
|
|
4824
|
-
//
|
|
4825
|
-
//
|
|
5169
|
+
// options.signal is checked first: Node's constructor rejects a value
|
|
5170
|
+
// that is not an AbortSignal before it dials. servername is stored just
|
|
5171
|
+
// before construction (it selects the TLS name and which pooled sockets
|
|
5172
|
+
// the request may reuse); maxHeaderSize and the signal then apply to the
|
|
5173
|
+
// built request (an already aborted signal destroys it at once, like
|
|
5174
|
+
// Node's constructor).
|
|
4826
5175
|
const withSignal = (request) => {
|
|
4827
5176
|
if (signal === null && servername === null && maxHeaderSize === null)
|
|
4828
5177
|
return request;
|
|
4829
5178
|
const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
|
|
4830
5179
|
const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
|
|
4831
|
-
const steps = [
|
|
4832
|
-
|
|
5180
|
+
const steps = [];
|
|
5181
|
+
let signalRef = null;
|
|
5182
|
+
if (signal !== null) {
|
|
5183
|
+
const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
|
|
5184
|
+
signalRef = () => varRef(signalLocal.id, DYN, loc);
|
|
5185
|
+
steps.push({ kind: "varDecl", localId: signalLocal.id, init: signal, loc });
|
|
4833
5186
|
steps.push({
|
|
4834
5187
|
kind: "exprStmt",
|
|
4835
5188
|
expr: {
|
|
4836
5189
|
kind: "libCall",
|
|
4837
|
-
fn: "http.
|
|
4838
|
-
args: [
|
|
5190
|
+
fn: "http.clientSignalCheck",
|
|
5191
|
+
args: [signalRef()],
|
|
4839
5192
|
type: VOID,
|
|
4840
5193
|
loc,
|
|
4841
5194
|
},
|
|
@@ -4847,18 +5200,38 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4847
5200
|
kind: "exprStmt",
|
|
4848
5201
|
expr: {
|
|
4849
5202
|
kind: "libCall",
|
|
4850
|
-
fn: "https.
|
|
4851
|
-
args: [
|
|
5203
|
+
fn: "https.nextServername",
|
|
5204
|
+
args: [servername],
|
|
4852
5205
|
type: VOID,
|
|
4853
5206
|
loc,
|
|
4854
5207
|
},
|
|
4855
5208
|
loc,
|
|
4856
5209
|
});
|
|
4857
5210
|
}
|
|
4858
|
-
|
|
5211
|
+
steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
|
|
5212
|
+
if (maxHeaderSize !== null) {
|
|
5213
|
+
steps.push({
|
|
5214
|
+
kind: "exprStmt",
|
|
5215
|
+
expr: {
|
|
5216
|
+
kind: "libCall",
|
|
5217
|
+
fn: "http.clientMaxHeaderSize",
|
|
5218
|
+
args: [ref(), maxHeaderSize],
|
|
5219
|
+
type: VOID,
|
|
5220
|
+
loc,
|
|
5221
|
+
},
|
|
5222
|
+
loc,
|
|
5223
|
+
});
|
|
5224
|
+
}
|
|
5225
|
+
if (signalRef !== null) {
|
|
4859
5226
|
steps.push({
|
|
4860
5227
|
kind: "exprStmt",
|
|
4861
|
-
expr: {
|
|
5228
|
+
expr: {
|
|
5229
|
+
kind: "libCall",
|
|
5230
|
+
fn: "http.clientSignal",
|
|
5231
|
+
args: [ref(), signalRef()],
|
|
5232
|
+
type: VOID,
|
|
5233
|
+
loc,
|
|
5234
|
+
},
|
|
4862
5235
|
loc,
|
|
4863
5236
|
});
|
|
4864
5237
|
}
|
|
@@ -4927,7 +5300,7 @@ function lowerClientHeadersOption(lowerer, node) {
|
|
|
4927
5300
|
const loc = locOf(node);
|
|
4928
5301
|
if (ts.isObjectLiteralExpression(node)) {
|
|
4929
5302
|
const elems = [];
|
|
4930
|
-
for (const prop of node.properties) {
|
|
5303
|
+
for (const prop of node.properties.nodes) {
|
|
4931
5304
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
4932
5305
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
4933
5306
|
lowerer.noLowering("request headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
|
|
@@ -4963,13 +5336,13 @@ function lowerHttpTrailersOption(lowerer, node) {
|
|
|
4963
5336
|
return lowerClientHeadersOption(lowerer, node);
|
|
4964
5337
|
const loc = locOf(node);
|
|
4965
5338
|
const flat = [];
|
|
4966
|
-
for (const entry of node.elements) {
|
|
4967
|
-
if (!ts.isArrayLiteralExpression(entry) || entry.elements.length !== 2) {
|
|
5339
|
+
for (const entry of node.elements.nodes) {
|
|
5340
|
+
if (!ts.isArrayLiteralExpression(entry) || entry.elements.nodes.length !== 2) {
|
|
4968
5341
|
lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
|
|
4969
5342
|
}
|
|
4970
5343
|
const pair = entry;
|
|
4971
|
-
const name = pair.elements[0];
|
|
4972
|
-
const value = pair.elements[1];
|
|
5344
|
+
const name = pair.elements.nodes[0];
|
|
5345
|
+
const value = pair.elements.nodes[1];
|
|
4973
5346
|
if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
|
|
4974
5347
|
lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
|
|
4975
5348
|
}
|
|
@@ -4987,7 +5360,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
4987
5360
|
return null;
|
|
4988
5361
|
const name = access.name.text;
|
|
4989
5362
|
const loc = locOf(call);
|
|
4990
|
-
const args = call.arguments;
|
|
5363
|
+
const args = call.arguments.nodes;
|
|
4991
5364
|
if (name === "setHeader") {
|
|
4992
5365
|
requireStatementPosition(lowerer, call, "request.setHeader(...)");
|
|
4993
5366
|
if (args.length !== 2)
|
|
@@ -5366,7 +5739,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5366
5739
|
return null;
|
|
5367
5740
|
const name = access.name.text;
|
|
5368
5741
|
const loc = locOf(call);
|
|
5369
|
-
const args = call.arguments;
|
|
5742
|
+
const args = call.arguments.nodes;
|
|
5370
5743
|
if (name === "setTimeout") {
|
|
5371
5744
|
requireStatementPosition(lowerer, call, "message.setTimeout(...)");
|
|
5372
5745
|
if (args.length < 1 || args.length > 2)
|
|
@@ -5434,6 +5807,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5434
5807
|
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
5435
5808
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
|
|
5436
5809
|
if (event === "data") {
|
|
5810
|
+
const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(args[1]));
|
|
5811
|
+
const firstParam = sigs.length === 1 ? sigs[0].getParameters()[0] : undefined;
|
|
5812
|
+
const param = firstParam !== undefined
|
|
5813
|
+
? lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(firstParam))
|
|
5814
|
+
: null;
|
|
5815
|
+
if (param !== null && param.kind === "string") {
|
|
5816
|
+
// A chunk typed string (the setEncoding('utf8') shape), as on a
|
|
5817
|
+
// socket: the listener takes the chunk through a checked
|
|
5818
|
+
// boundary, so a string arrives after setEncoding and a Buffer
|
|
5819
|
+
// without it fails the check instead of being decoded.
|
|
5820
|
+
const boxed = lowerSocketDynListener(lowerer, args[1], "data listeners");
|
|
5821
|
+
const cb = { kind: "dynCheck", value: boxed, type: funcOf([DYN], VOID), loc };
|
|
5822
|
+
return {
|
|
5823
|
+
kind: "libCall",
|
|
5824
|
+
fn: "http.reqOnData",
|
|
5825
|
+
args: [receiver, cb, once],
|
|
5826
|
+
type: VOID,
|
|
5827
|
+
loc,
|
|
5828
|
+
};
|
|
5829
|
+
}
|
|
5437
5830
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
5438
5831
|
return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
5439
5832
|
}
|
|
@@ -5486,7 +5879,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5486
5879
|
return null;
|
|
5487
5880
|
const name = access.name.text;
|
|
5488
5881
|
const loc = locOf(call);
|
|
5489
|
-
const args = call.arguments;
|
|
5882
|
+
const args = call.arguments.nodes;
|
|
5490
5883
|
if (name === "setTimeout") {
|
|
5491
5884
|
if (args.length < 1 || args.length > 2) {
|
|
5492
5885
|
lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
|
|
@@ -5504,7 +5897,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5504
5897
|
}
|
|
5505
5898
|
if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
|
|
5506
5899
|
requireStatementPosition(lowerer, call, `res.${name}(...)`);
|
|
5507
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5900
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5508
5901
|
lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
|
|
5509
5902
|
}
|
|
5510
5903
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
|
|
@@ -5525,7 +5918,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5525
5918
|
let pairs;
|
|
5526
5919
|
if (ts.isObjectLiteralExpression(node)) {
|
|
5527
5920
|
const elems = [];
|
|
5528
|
-
for (const prop of node.properties) {
|
|
5921
|
+
for (const prop of node.properties.nodes) {
|
|
5529
5922
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5530
5923
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5531
5924
|
lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
|
|
@@ -5588,7 +5981,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5588
5981
|
}
|
|
5589
5982
|
if (name === "addTrailers") {
|
|
5590
5983
|
requireStatementPosition(lowerer, call, "res.addTrailers(...)");
|
|
5591
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5984
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5592
5985
|
lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
|
|
5593
5986
|
}
|
|
5594
5987
|
if (args.length !== 1)
|
|
@@ -5725,7 +6118,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5725
6118
|
}
|
|
5726
6119
|
const names = [];
|
|
5727
6120
|
const values = [];
|
|
5728
|
-
for (const prop of headersNode.properties) {
|
|
6121
|
+
for (const prop of headersNode.properties.nodes) {
|
|
5729
6122
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5730
6123
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5731
6124
|
lowerer.noLowering("writeHead headers with dynamic keys, spreads, or shorthand entries", prop, "each header must be a `name: value` entry whose key is a literal (or a string-literal-typed const: [PORTLESS_HEADER])");
|
|
@@ -5853,6 +6246,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5853
6246
|
return endWithCb(fn, [receiver, data], cbArg);
|
|
5854
6247
|
return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
|
|
5855
6248
|
}
|
|
6249
|
+
// end(payload ? text : undefined): an absent chunk ends without data,
|
|
6250
|
+
// as end() does. The checked-dynamic end takes each arm at run time.
|
|
6251
|
+
if (name === "end" && data.type.kind === "union" && lowerer.dynConvertible(data.type)) {
|
|
6252
|
+
const arms = lowerer.unions.get(data.type.unionId)?.arms ?? [];
|
|
6253
|
+
if (arms.every((arm) => arm.kind === "string" ||
|
|
6254
|
+
(arm.kind === "bytes" && arm.elem === "u8") ||
|
|
6255
|
+
arm.kind === "undefinedT" ||
|
|
6256
|
+
arm.kind === "nullT")) {
|
|
6257
|
+
const dynData = { kind: "dynFrom", value: data, type: DYN, loc: locOf(dataNode) };
|
|
6258
|
+
if (cbArg !== null)
|
|
6259
|
+
return endWithCb("http.resEndDyn", [receiver, dynData], cbArg);
|
|
6260
|
+
return {
|
|
6261
|
+
kind: "libCall",
|
|
6262
|
+
fn: "http.resEndDyn",
|
|
6263
|
+
args: [receiver, dynData],
|
|
6264
|
+
type: VOID,
|
|
6265
|
+
loc,
|
|
6266
|
+
};
|
|
6267
|
+
}
|
|
6268
|
+
}
|
|
5856
6269
|
lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
|
|
5857
6270
|
}
|
|
5858
6271
|
if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {
|