@scriptc/compiler 0.3.5 → 0.4.0
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 +960 -82
- 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 +13 -0
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.test.js +1 -1
- package/dist/backend/library-pack.js +6 -0
- package/dist/backend/library-pack.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.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 +11 -0
- package/dist/backend/llvm/classes.js +71 -14
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +58 -8
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.js +1 -0
- 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 +12 -3
- package/dist/backend/llvm/dense-array-access.js +72 -14
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +59 -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 +28 -4
- package/dist/backend/llvm/dyn.js +324 -179
- 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 +1190 -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 +1535 -0
- package/dist/backend/llvm/emit-module.js.map +1 -0
- package/dist/backend/llvm/emit-statements.d.ts +58 -0
- package/dist/backend/llvm/emit-statements.js +1964 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +576 -268
- package/dist/backend/llvm/emitter.js +801 -4447
- 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 +71 -53
- 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 +39 -15
- 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-dispatch.js +1 -0
- package/dist/backend/llvm/expr-dispatch.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +92 -63
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.d.ts +1 -1
- package/dist/backend/llvm/expr-primitives.js +132 -25
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.test.js +2 -2
- 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 +54 -12
- 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.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/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 +488 -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 +217 -24
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +102 -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 +77 -25
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +100 -50
- 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 +229 -5
- 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 +57 -8
- 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 +2 -2
- 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.js +2 -2
- 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 +151 -0
- package/dist/backend/llvm/narrow-guards.js.map +1 -0
- package/dist/backend/llvm/nullable-unions.d.ts +70 -9
- package/dist/backend/llvm/nullable-unions.js +105 -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 +4 -0
- package/dist/backend/llvm/publish.js +14 -2
- 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 +13 -2
- package/dist/backend/llvm/record-results.js +66 -6
- 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 +143 -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 +9 -6
- package/dist/backend/llvm/regions.js.map +1 -1
- package/dist/backend/llvm/regions.test.js +1 -1
- package/dist/backend/llvm/shapes.d.ts +69 -43
- package/dist/backend/llvm/shapes.js +285 -21
- 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 +74 -0
- package/dist/backend/llvm/speculative-integers.js +571 -0
- package/dist/backend/llvm/speculative-integers.js.map +1 -0
- package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
- package/dist/backend/llvm/speculative-integers.test.js +148 -0
- package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
- 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-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 +110 -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 +7 -0
- package/dist/backend/mangle.js +11 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/may-throw.d.ts +3 -0
- package/dist/backend/may-throw.js +6 -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 +37 -0
- package/dist/backend/native/executable.js +192 -134
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -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 +2 -0
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +30 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/publication.test.js +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -1
- package/dist/backend/runtime-pack-core.js +10 -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 +5 -0
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -3
- package/dist/backend/runtime-pack.js +12 -6
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +20 -6
- 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 +8 -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 +5 -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 +44 -4
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +11 -1
- package/dist/cli/usage.js +20 -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 +13 -0
- package/dist/contracts/check.js +25 -6
- 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 +19 -6
- 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 +11 -7
- package/dist/diagnostics/diagnostic.js +35 -23
- 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 +17 -0
- package/dist/executable/executable-cache.js +13 -1
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +7 -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/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/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/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 +72 -4
- 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 +23 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js +156 -0
- package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
- package/dist/frontend/lowering/builtins/callable-aliases.js +45 -6
- 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 +18 -0
- package/dist/frontend/lowering/builtins/compression.js +230 -52
- 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 +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +223 -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/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 +174 -6
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +4 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +136 -113
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
- package/dist/frontend/lowering/builtins/filesystem.js +213 -76
- 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/hash-stream.d.ts +12 -0
- package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
- 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 +232 -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 +67 -46
- 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 +32 -1
- package/dist/frontend/lowering/builtins/process.js +468 -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 +37 -0
- package/dist/frontend/lowering/builtins/promisify-callback.js +320 -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 +55 -13
- package/dist/frontend/lowering/builtins/readline.js +931 -69
- 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 +16 -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 +75 -30
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- 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 +16 -0
- package/dist/frontend/lowering/builtins/workers.js +246 -3
- 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 +19 -1
- package/dist/frontend/lowering/call-signatures.js +254 -47
- 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 +528 -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 +1115 -89
- 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 +55 -0
- package/dist/frontend/lowering/class-protocols.js +738 -22
- 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 +80 -18
- 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 +261 -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/function-adapters.d.ts +16 -2
- package/dist/frontend/lowering/coercions/function-adapters.js +145 -3
- 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 +9 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +266 -100
- 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 +51 -13
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.d.ts +19 -0
- package/dist/frontend/lowering/containers/array-from-async.js +427 -0
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
- package/dist/frontend/lowering/containers/array-methods.js +89 -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.js +161 -101
- 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 +219 -27
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +81 -48
- 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 +419 -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 +4 -0
- package/dist/frontend/lowering/cycle-initialization.js +39 -0
- 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 +238 -128
- 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 +703 -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 +2483 -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 +1797 -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 +40 -0
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +226 -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 +1322 -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 +253 -85
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.d.ts +2 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +91 -14
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +110 -0
- package/dist/frontend/lowering/expressions/property-access.js +3544 -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 +1679 -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 +538 -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-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 +39 -0
- package/dist/frontend/lowering/generic-functions.js +393 -75
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- 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/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-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 +32 -3
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +1298 -452
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +50 -3
- package/dist/frontend/lowering/lower-classes.js +1499 -456
- 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 +179 -8
- 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 +268 -71
- 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 +1493 -12407
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +68 -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 +29 -16
- 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 +354 -99
- 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 +19 -2
- package/dist/frontend/lowering/lower-mock.js +557 -74
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +268 -61
- 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 +45 -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 +638 -105
- 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 +151 -109
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +28 -2
- package/dist/frontend/lowering/lower-stmts.js +1589 -398
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +4 -3
- package/dist/frontend/lowering/lower-stream.js +714 -75
- 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 +574 -100
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +80 -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 +409 -26
- package/dist/frontend/lowering/lowerer.js +1918 -305
- 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/null-prototype.d.ts +13 -0
- package/dist/frontend/lowering/null-prototype.js +33 -0
- package/dist/frontend/lowering/null-prototype.js.map +1 -0
- 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/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/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 +10 -10
- 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 +15 -6
- package/dist/frontend/lowering/surfaces.js +278 -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/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.d.ts +5 -0
- package/dist/frontend/mock-shapes.js +39 -7
- 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-bundled-chunks.d.ts +51 -0
- package/dist/frontend/npm-static-bundled-chunks.js +810 -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 +287 -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 +768 -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 +207 -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-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 +17 -1
- package/dist/frontend/npm-static.js +167 -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/pipeline.js +164 -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 +92 -2
- package/dist/frontend/program.js +1557 -254
- 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 +36 -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 +20 -1
- package/dist/frontend/services.js +40 -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 +5 -1
- package/dist/frontend/ts7/program-host.js +12 -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 +54 -24
- package/dist/frontend/ts7/semantic-model.js +88 -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 +11 -11
- 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 +2612 -695
- 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 +3 -1
- package/dist/index.js +47 -10
- 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 +30 -0
- package/dist/ir/array-length-stability.js +236 -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 +113 -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 +139 -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 +655 -25
- 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 +10 -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 +119 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +29 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +16 -6
- package/dist/ir/integer-loop-facts.js +143 -38
- 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 +3 -0
- package/dist/ir/integer-ranges.js +4 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +142 -1
- 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 +234 -58
- package/dist/ir/ir.js +123 -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/jsval.d.ts +8 -0
- package/dist/ir/jsval.js +365 -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 +150 -33
- package/dist/ir/runtime-features.js +672 -339
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +62 -0
- package/dist/ir/runtime-features.test.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 +107 -94
- 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 +220 -71
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +64 -9
- 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 +18 -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 +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +2 -2
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +2 -2
- package/dist/native/prepare.js +7 -0
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +12 -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 +21 -20
- package/surface-manifest.json +332 -36
|
@@ -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))
|
|
@@ -772,7 +772,7 @@ function lowerNetConnectOptions(lowerer, expr, member, loc) {
|
|
|
772
772
|
type: NETSOCKET_T,
|
|
773
773
|
loc,
|
|
774
774
|
});
|
|
775
|
-
for (const prop of optsNode.properties) {
|
|
775
|
+
for (const prop of optsNode.properties.nodes) {
|
|
776
776
|
let initializer;
|
|
777
777
|
if (ts.isPropertyAssignment(prop) &&
|
|
778
778
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -916,8 +916,8 @@ function lowerServerCloseBind(lowerer, call, access) {
|
|
|
916
916
|
return null;
|
|
917
917
|
const loc = locOf(call);
|
|
918
918
|
const recvNode = closeAccess.expression;
|
|
919
|
-
const thisArg = call.arguments[0];
|
|
920
|
-
if (call.arguments.length !== 1 ||
|
|
919
|
+
const thisArg = call.arguments.nodes[0];
|
|
920
|
+
if (call.arguments.nodes.length !== 1 ||
|
|
921
921
|
!thisArg ||
|
|
922
922
|
!ts.isIdentifier(recvNode) ||
|
|
923
923
|
!ts.isIdentifier(thisArg) ||
|
|
@@ -1083,7 +1083,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1083
1083
|
return null;
|
|
1084
1084
|
const name = access.name.text;
|
|
1085
1085
|
const loc = locOf(call);
|
|
1086
|
-
const args = call.arguments;
|
|
1086
|
+
const args = call.arguments.nodes;
|
|
1087
1087
|
if (name === "getConnections") {
|
|
1088
1088
|
// cb(null, count) on the next tick; answers the server.
|
|
1089
1089
|
if (args.length !== 1) {
|
|
@@ -1155,7 +1155,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1155
1155
|
let host = null;
|
|
1156
1156
|
let v6only = null;
|
|
1157
1157
|
let reusePort = null;
|
|
1158
|
-
for (const prop of args[0].properties) {
|
|
1158
|
+
for (const prop of args[0].properties.nodes) {
|
|
1159
1159
|
let initializer;
|
|
1160
1160
|
if (ts.isPropertyAssignment(prop) &&
|
|
1161
1161
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -1213,7 +1213,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1213
1213
|
}
|
|
1214
1214
|
else if (key === "signal" &&
|
|
1215
1215
|
ts.isPropertyAssignment(prop) &&
|
|
1216
|
-
isJsSourceFile(
|
|
1216
|
+
isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1217
1217
|
// A provably-non-AbortSignal signal (the invalid-input probes:
|
|
1218
1218
|
// strings, numbers, plain records) throws Node's
|
|
1219
1219
|
// validateAbortSignal ladder; plausible signal values keep the
|
|
@@ -1287,6 +1287,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1287
1287
|
? [receiver, port, host, v6only, cbV]
|
|
1288
1288
|
: [receiver, port, host, v6only, reusePort, cbV]);
|
|
1289
1289
|
}
|
|
1290
|
+
// listen(path[, cb]): a string first argument names a Unix socket
|
|
1291
|
+
// (the runtime takes a numeric string as a port, Node's isPipeName).
|
|
1292
|
+
if (lowerer.mapTypeOf(lowerer.typeOf(args[0]))?.kind === "string") {
|
|
1293
|
+
if (args.length > 2) {
|
|
1294
|
+
lowerer.noLowering(`listen(path) with ${args.length} arguments`, call, "the supported form is listen(path[, callback])");
|
|
1295
|
+
}
|
|
1296
|
+
const path = lowerer.lowerExprExpecting(args[0], STRING);
|
|
1297
|
+
if (args.length === 1)
|
|
1298
|
+
return listenResult("net.listenPath", [receiver, path]);
|
|
1299
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
|
|
1300
|
+
return listenResult("net.listenPathCb", [receiver, path, cb]);
|
|
1301
|
+
}
|
|
1290
1302
|
const port = lowerer.lowerExprExpecting(args[0], F64);
|
|
1291
1303
|
// The optional middle host — listen(port, '127.0.0.1'[, cb]): a
|
|
1292
1304
|
// string-typed second argument is the bind address (the net.connect
|
|
@@ -1326,6 +1338,19 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1326
1338
|
if (args.length === 0) {
|
|
1327
1339
|
return { kind: "libCall", fn: "net.serverClose", args: [receiver], type: VOID, loc };
|
|
1328
1340
|
}
|
|
1341
|
+
if (lowerer.checker
|
|
1342
|
+
.getCallSignatures(lowerer.typeOf(args[0]))
|
|
1343
|
+
.some((sig) => sig.getParameters().length > 0)) {
|
|
1344
|
+
// close((err) => ...): undefined once the server closes, or Node's
|
|
1345
|
+
// ERR_SERVER_NOT_RUNNING when it was not listening.
|
|
1346
|
+
return {
|
|
1347
|
+
kind: "libCall",
|
|
1348
|
+
fn: "net.serverCloseDyn",
|
|
1349
|
+
args: [receiver, lowerSocketDynListener(lowerer, args[0], "close callbacks")],
|
|
1350
|
+
type: VOID,
|
|
1351
|
+
loc,
|
|
1352
|
+
};
|
|
1353
|
+
}
|
|
1329
1354
|
const { cb } = lowerCallbackArg(lowerer, args[0], "close callbacks", 0, () => false, "use ()", []);
|
|
1330
1355
|
return { kind: "libCall", fn: "net.serverCloseCb", args: [receiver, cb], type: VOID, loc };
|
|
1331
1356
|
}
|
|
@@ -1389,6 +1414,18 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1389
1414
|
loc,
|
|
1390
1415
|
};
|
|
1391
1416
|
}
|
|
1417
|
+
if (event === "checkContinue" || event === "checkExpectation") {
|
|
1418
|
+
// Expect handling: these listeners take the request instead of
|
|
1419
|
+
// 'request' (checkContinue answers with res.writeContinue()).
|
|
1420
|
+
const cb = lowerRequestHandlerArg(lowerer, args[1]);
|
|
1421
|
+
return {
|
|
1422
|
+
kind: "libCall",
|
|
1423
|
+
fn: "http.serverOnCheck",
|
|
1424
|
+
args: [receiver, cb, once, boolLit(event === "checkExpectation", loc)],
|
|
1425
|
+
type: VOID,
|
|
1426
|
+
loc,
|
|
1427
|
+
};
|
|
1428
|
+
}
|
|
1392
1429
|
if (event === "request") {
|
|
1393
1430
|
// The 'request' event — http.createServer(handler)'s event twin, and
|
|
1394
1431
|
// the way an http2 allowHTTP1 server (created handler-less) gets its
|
|
@@ -1522,7 +1559,7 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1522
1559
|
loc,
|
|
1523
1560
|
};
|
|
1524
1561
|
}
|
|
1525
|
-
lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
|
|
1562
|
+
lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
|
|
1526
1563
|
}
|
|
1527
1564
|
if (name === "emit") {
|
|
1528
1565
|
// The demux route: emit("connection", socket) hands an accepted
|
|
@@ -1571,6 +1608,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1571
1608
|
const result = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
1572
1609
|
if (result && isAddressInfoRecord(lowerer, result)) {
|
|
1573
1610
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1611
|
+
if (unixListenReachable(lowerer)) {
|
|
1612
|
+
// A Unix-socket server's address() is its path, which this record
|
|
1613
|
+
// cannot hold: the check throws for one before the record reads.
|
|
1614
|
+
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
1615
|
+
const server = () => varRef(local.id, NETSERVER_T, loc);
|
|
1616
|
+
return {
|
|
1617
|
+
kind: "seqExpr",
|
|
1618
|
+
stmts: [
|
|
1619
|
+
{ kind: "varDecl", localId: local.id, init: receiver, loc },
|
|
1620
|
+
{
|
|
1621
|
+
kind: "exprStmt",
|
|
1622
|
+
expr: {
|
|
1623
|
+
kind: "libCall",
|
|
1624
|
+
fn: "net.serverAddressCheck",
|
|
1625
|
+
args: [server()],
|
|
1626
|
+
type: VOID,
|
|
1627
|
+
loc,
|
|
1628
|
+
},
|
|
1629
|
+
loc,
|
|
1630
|
+
},
|
|
1631
|
+
],
|
|
1632
|
+
result: { kind: "libCall", fn: "net.serverAddress", args: [server()], type: result, loc },
|
|
1633
|
+
type: result,
|
|
1634
|
+
loc,
|
|
1635
|
+
};
|
|
1636
|
+
}
|
|
1574
1637
|
return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
|
|
1575
1638
|
}
|
|
1576
1639
|
// @types/node's `string | AddressInfo | null`: the record while the
|
|
@@ -1586,20 +1649,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1586
1649
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1587
1650
|
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
1588
1651
|
const server = varRef(local.id, NETSERVER_T, loc);
|
|
1652
|
+
const recordArm = {
|
|
1653
|
+
kind: "unionWrap",
|
|
1654
|
+
unionId,
|
|
1655
|
+
tag: lowerer.armTag(unionId, record),
|
|
1656
|
+
value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
|
|
1657
|
+
type: result,
|
|
1658
|
+
loc,
|
|
1659
|
+
};
|
|
1660
|
+
const stringTag = lowerer.armTag(unionId, STRING);
|
|
1661
|
+
let listeningArm = recordArm;
|
|
1662
|
+
const stmts = [{ kind: "varDecl", localId: local.id, init: receiver, loc }];
|
|
1663
|
+
if (stringTag >= 0 && unixListenReachable(lowerer)) {
|
|
1664
|
+
// Node answers a Unix-socket server's address() with its path.
|
|
1665
|
+
const pathLocal = lowerer.declareHiddenLocal("%addressPath", STRING);
|
|
1666
|
+
const path = () => varRef(pathLocal.id, STRING, loc);
|
|
1667
|
+
stmts.push({
|
|
1668
|
+
kind: "varDecl",
|
|
1669
|
+
localId: pathLocal.id,
|
|
1670
|
+
init: { kind: "libCall", fn: "net.serverUnixPath", args: [server], type: STRING, loc },
|
|
1671
|
+
loc,
|
|
1672
|
+
});
|
|
1673
|
+
listeningArm = {
|
|
1674
|
+
kind: "ternary",
|
|
1675
|
+
cond: {
|
|
1676
|
+
kind: "strEq",
|
|
1677
|
+
negated: true,
|
|
1678
|
+
left: path(),
|
|
1679
|
+
right: strLit("", loc),
|
|
1680
|
+
type: BOOL,
|
|
1681
|
+
loc,
|
|
1682
|
+
},
|
|
1683
|
+
then: { kind: "unionWrap", unionId, tag: stringTag, value: path(), type: result, loc },
|
|
1684
|
+
else_: recordArm,
|
|
1685
|
+
type: result,
|
|
1686
|
+
loc,
|
|
1687
|
+
};
|
|
1688
|
+
}
|
|
1589
1689
|
return {
|
|
1590
1690
|
kind: "seqExpr",
|
|
1591
|
-
stmts
|
|
1691
|
+
stmts,
|
|
1592
1692
|
result: {
|
|
1593
1693
|
kind: "ternary",
|
|
1594
1694
|
cond: { kind: "libCall", fn: "net.serverListening", args: [server], type: BOOL, loc },
|
|
1595
|
-
then:
|
|
1596
|
-
kind: "unionWrap",
|
|
1597
|
-
unionId,
|
|
1598
|
-
tag: lowerer.armTag(unionId, record),
|
|
1599
|
-
value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
|
|
1600
|
-
type: result,
|
|
1601
|
-
loc,
|
|
1602
|
-
},
|
|
1695
|
+
then: listeningArm,
|
|
1603
1696
|
else_: {
|
|
1604
1697
|
kind: "unionWrap",
|
|
1605
1698
|
unionId,
|
|
@@ -1617,6 +1710,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1617
1710
|
}
|
|
1618
1711
|
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));
|
|
1619
1712
|
}
|
|
1713
|
+
/** Whether a setEncoding call can reach some net.Socket in this program:
|
|
1714
|
+
* `x.setEncoding(...)` or `x["setEncoding"](...)` where `x` is a socket
|
|
1715
|
+
* or an untyped value. Sockets that never get an encoding keep the Buffer
|
|
1716
|
+
* chunk path; with one, Node's 'data' chunks are strings. */
|
|
1717
|
+
function socketEncodingReachable(lowerer) {
|
|
1718
|
+
if (lowerer.socketEncodingReachable !== null)
|
|
1719
|
+
return lowerer.socketEncodingReachable;
|
|
1720
|
+
let reachable = false;
|
|
1721
|
+
for (const file of lowerer.program.getSourceFiles()) {
|
|
1722
|
+
if (file.isDeclarationFile || !file.text.includes("setEncoding"))
|
|
1723
|
+
continue;
|
|
1724
|
+
ts.walkPreorder(file, (node) => {
|
|
1725
|
+
if (reachable)
|
|
1726
|
+
return "skip";
|
|
1727
|
+
if (!ts.isCallExpression(node))
|
|
1728
|
+
return undefined;
|
|
1729
|
+
const callee = node.expression;
|
|
1730
|
+
const receiver = ts.isPropertyAccessExpression(callee) && callee.name.text === "setEncoding"
|
|
1731
|
+
? callee.expression
|
|
1732
|
+
: ts.isElementAccessExpression(callee) &&
|
|
1733
|
+
ts.isStringLiteralLike(callee.argumentExpression) &&
|
|
1734
|
+
callee.argumentExpression.text === "setEncoding"
|
|
1735
|
+
? callee.expression
|
|
1736
|
+
: null;
|
|
1737
|
+
if (receiver === null)
|
|
1738
|
+
return undefined;
|
|
1739
|
+
const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(receiver))?.kind;
|
|
1740
|
+
if (kind === undefined || kind === "netSocket" || kind === "dyn")
|
|
1741
|
+
reachable = true;
|
|
1742
|
+
return undefined;
|
|
1743
|
+
});
|
|
1744
|
+
if (reachable)
|
|
1745
|
+
break;
|
|
1746
|
+
}
|
|
1747
|
+
lowerer.socketEncodingReachable = reachable;
|
|
1748
|
+
return reachable;
|
|
1749
|
+
}
|
|
1750
|
+
/** Whether some server in the program may listen on a Unix socket: a
|
|
1751
|
+
* `.listen(x, ...)` call on a server (or an untyped value) whose first
|
|
1752
|
+
* argument is string-typed. Only then does address() check for the socket
|
|
1753
|
+
* path, so other programs keep the record-only lowering. */
|
|
1754
|
+
function unixListenReachable(lowerer) {
|
|
1755
|
+
if (lowerer.unixListenReachable !== null)
|
|
1756
|
+
return lowerer.unixListenReachable;
|
|
1757
|
+
let reachable = false;
|
|
1758
|
+
for (const file of lowerer.program.getSourceFiles()) {
|
|
1759
|
+
if (file.isDeclarationFile || !file.text.includes("listen"))
|
|
1760
|
+
continue;
|
|
1761
|
+
ts.walkPreorder(file, (node) => {
|
|
1762
|
+
if (reachable)
|
|
1763
|
+
return "skip";
|
|
1764
|
+
if (!ts.isCallExpression(node) || node.arguments.nodes.length === 0)
|
|
1765
|
+
return undefined;
|
|
1766
|
+
const callee = node.expression;
|
|
1767
|
+
if (!ts.isPropertyAccessExpression(callee) || callee.name.text !== "listen")
|
|
1768
|
+
return undefined;
|
|
1769
|
+
const kind = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(callee.expression))?.kind;
|
|
1770
|
+
if (kind !== undefined && kind !== "netServer" && kind !== "dyn")
|
|
1771
|
+
return undefined;
|
|
1772
|
+
const arg = lowerer.mapTypeOf(lowerer.checker.getTypeAtLocation(node.arguments.nodes[0]));
|
|
1773
|
+
// Only a string-typed argument lowers to listen(path) (an untyped
|
|
1774
|
+
// one checks into a port).
|
|
1775
|
+
if (arg?.kind === "string")
|
|
1776
|
+
reachable = true;
|
|
1777
|
+
return undefined;
|
|
1778
|
+
});
|
|
1779
|
+
if (reachable)
|
|
1780
|
+
break;
|
|
1781
|
+
}
|
|
1782
|
+
lowerer.unixListenReachable = reachable;
|
|
1783
|
+
return reachable;
|
|
1784
|
+
}
|
|
1785
|
+
/** An inline 'data' listener whose chunk parameter is typed Buffer, for a
|
|
1786
|
+
* socket that may have an encoding set: the chunk binds as a checked
|
|
1787
|
+
* dynamic value, so the body sees what Node passes (a string after
|
|
1788
|
+
* setEncoding, a Buffer otherwise) whatever the annotation says. Null
|
|
1789
|
+
* for other listener shapes. */
|
|
1790
|
+
function lowerEncodedDataListener(lowerer, node) {
|
|
1791
|
+
let fn = node;
|
|
1792
|
+
while (ts.isParenthesizedExpression(fn))
|
|
1793
|
+
fn = fn.expression;
|
|
1794
|
+
if (!ts.isArrowFunction(fn) && !ts.isFunctionExpression(fn))
|
|
1795
|
+
return null;
|
|
1796
|
+
if (fn.parameters.nodes.length !== 1)
|
|
1797
|
+
return null;
|
|
1798
|
+
const param = fn.parameters.nodes[0];
|
|
1799
|
+
if (!ts.isIdentifier(param.name) || param.initializer || param.dotDotDotToken)
|
|
1800
|
+
return null;
|
|
1801
|
+
const symbol = lowerer.checker.getSymbolAtLocation(param.name);
|
|
1802
|
+
if (symbol === undefined)
|
|
1803
|
+
return null;
|
|
1804
|
+
const previousBinding = lowerer.runtimeOptionalBindingTypes.get(symbol);
|
|
1805
|
+
const previousImplicit = lowerer.implicitParamTypes;
|
|
1806
|
+
const implicit = new Map(previousImplicit ?? []);
|
|
1807
|
+
implicit.set(symbol, lowerer.checker.getUnknownType());
|
|
1808
|
+
lowerer.runtimeOptionalBindingTypes.set(symbol, DYN);
|
|
1809
|
+
lowerer.implicitParamTypes = implicit;
|
|
1810
|
+
try {
|
|
1811
|
+
return lowerer.lowerExpr(fn);
|
|
1812
|
+
}
|
|
1813
|
+
finally {
|
|
1814
|
+
if (previousBinding === undefined)
|
|
1815
|
+
lowerer.runtimeOptionalBindingTypes.delete(symbol);
|
|
1816
|
+
else
|
|
1817
|
+
lowerer.runtimeOptionalBindingTypes.set(symbol, previousBinding);
|
|
1818
|
+
lowerer.implicitParamTypes = previousImplicit;
|
|
1819
|
+
}
|
|
1820
|
+
}
|
|
1620
1821
|
/** Method calls on net.Socket receivers: write/end/destroy/pipe and
|
|
1621
1822
|
* on/once("data" | "end" | "close" | "error" | "connect"). Null for
|
|
1622
1823
|
* other receivers. */
|
|
@@ -1627,7 +1828,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1627
1828
|
return null;
|
|
1628
1829
|
const name = access.name.text;
|
|
1629
1830
|
const loc = locOf(call);
|
|
1630
|
-
const args = call.arguments;
|
|
1831
|
+
const args = call.arguments.nodes;
|
|
1631
1832
|
if ((name === "ref" || name === "unref") && args.length === 0) {
|
|
1632
1833
|
// Whether the socket keeps the event loop alive.
|
|
1633
1834
|
requireStatementPosition(lowerer, call, `socket.${name}()`);
|
|
@@ -1654,7 +1855,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1654
1855
|
if (encT.isStringLiteralType() && chunkT !== null) {
|
|
1655
1856
|
if (encT.value === "buffer" &&
|
|
1656
1857
|
chunkT.kind === "string" &&
|
|
1657
|
-
isJsSourceFile(
|
|
1858
|
+
isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1658
1859
|
lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
|
|
1659
1860
|
return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
|
|
1660
1861
|
}
|
|
@@ -1871,6 +2072,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1871
2072
|
? value
|
|
1872
2073
|
: lowerer.coerceInto(call, value, declared);
|
|
1873
2074
|
}
|
|
2075
|
+
if (name === "isSessionReused" && args.length === 0) {
|
|
2076
|
+
// TLSSocket.isSessionReused(): the client never offers a cached
|
|
2077
|
+
// session (no session resumption, a documented TLS divergence), so
|
|
2078
|
+
// no handshake resumes one. A plain socket asserted to be a
|
|
2079
|
+
// TLSSocket answers false too, where Node has no such method.
|
|
2080
|
+
const receiver = coerceToHandle(lowerer, access.expression, NETSOCKET_T);
|
|
2081
|
+
return {
|
|
2082
|
+
kind: "seqExpr",
|
|
2083
|
+
stmts: [{ kind: "exprStmt", expr: receiver, loc }],
|
|
2084
|
+
result: boolLit(false, loc),
|
|
2085
|
+
type: BOOL,
|
|
2086
|
+
loc,
|
|
2087
|
+
};
|
|
2088
|
+
}
|
|
1874
2089
|
if (name === "resetAndDestroy") {
|
|
1875
2090
|
// An RST close; a connecting socket resets once it connects. Answers
|
|
1876
2091
|
// the socket, Node's chaining.
|
|
@@ -1981,6 +2196,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1981
2196
|
loc,
|
|
1982
2197
|
};
|
|
1983
2198
|
}
|
|
2199
|
+
if (param !== null && param.kind === "bytes" && socketEncodingReachable(lowerer)) {
|
|
2200
|
+
const encoded = lowerEncodedDataListener(lowerer, args[1]);
|
|
2201
|
+
// A listener defined elsewhere keeps its Buffer parameter; it takes
|
|
2202
|
+
// the chunk through the checked boundary, so a string chunk fails
|
|
2203
|
+
// the check instead of arriving as a Buffer.
|
|
2204
|
+
const cb = encoded ??
|
|
2205
|
+
{
|
|
2206
|
+
kind: "dynCheck",
|
|
2207
|
+
value: lowerSocketDynListener(lowerer, args[1], "data listeners"),
|
|
2208
|
+
type: funcOf([DYN], VOID),
|
|
2209
|
+
loc,
|
|
2210
|
+
};
|
|
2211
|
+
return {
|
|
2212
|
+
kind: "libCall",
|
|
2213
|
+
fn: "net.sockOnData",
|
|
2214
|
+
args: [receiver, cb, once],
|
|
2215
|
+
type: VOID,
|
|
2216
|
+
loc,
|
|
2217
|
+
};
|
|
2218
|
+
}
|
|
1984
2219
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
1985
2220
|
return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
1986
2221
|
}
|
|
@@ -2027,6 +2262,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2027
2262
|
: "net.sockOnConnect";
|
|
2028
2263
|
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
2029
2264
|
}
|
|
2265
|
+
if (event === "lookup") {
|
|
2266
|
+
// (err, address, family, host) after the host name resolves, before
|
|
2267
|
+
// the connect: once per resolved address, or once with the error.
|
|
2268
|
+
return {
|
|
2269
|
+
kind: "libCall",
|
|
2270
|
+
fn: "net.sockOnLookup",
|
|
2271
|
+
args: [receiver, lowerSocketDynListener(lowerer, args[1], "lookup listeners"), once],
|
|
2272
|
+
type: VOID,
|
|
2273
|
+
loc,
|
|
2274
|
+
};
|
|
2275
|
+
}
|
|
2030
2276
|
if (event === "finish") {
|
|
2031
2277
|
// Fires once when the FIN goes out — once either way (the event
|
|
2032
2278
|
// happens at most once per socket).
|
|
@@ -2059,7 +2305,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2059
2305
|
loc,
|
|
2060
2306
|
};
|
|
2061
2307
|
}
|
|
2062
|
-
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)');
|
|
2308
|
+
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)');
|
|
2063
2309
|
}
|
|
2064
2310
|
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));
|
|
2065
2311
|
}
|
|
@@ -2120,7 +2366,7 @@ function h2EndStreamOption(lowerer, node) {
|
|
|
2120
2366
|
lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
|
|
2121
2367
|
}
|
|
2122
2368
|
let end;
|
|
2123
|
-
for (const prop of node.properties) {
|
|
2369
|
+
for (const prop of node.properties.nodes) {
|
|
2124
2370
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
2125
2371
|
lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
|
|
2126
2372
|
}
|
|
@@ -2148,7 +2394,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
|
|
|
2148
2394
|
return null;
|
|
2149
2395
|
const name = access.name.text;
|
|
2150
2396
|
const loc = locOf(call);
|
|
2151
|
-
const args = call.arguments;
|
|
2397
|
+
const args = call.arguments.nodes;
|
|
2152
2398
|
const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
|
|
2153
2399
|
if (name === "request") {
|
|
2154
2400
|
const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
|
|
@@ -2328,7 +2574,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
|
|
|
2328
2574
|
return null;
|
|
2329
2575
|
const name = access.name.text;
|
|
2330
2576
|
const loc = locOf(call);
|
|
2331
|
-
const args = call.arguments;
|
|
2577
|
+
const args = call.arguments.nodes;
|
|
2332
2578
|
const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
|
|
2333
2579
|
if (name === "respond") {
|
|
2334
2580
|
requireStatementPosition(lowerer, call, "stream.respond(...)");
|
|
@@ -2991,7 +3237,7 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
2991
3237
|
if (expr.name.text !== "port")
|
|
2992
3238
|
return null;
|
|
2993
3239
|
const recv = expr.expression;
|
|
2994
|
-
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
|
|
3240
|
+
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
|
|
2995
3241
|
return null;
|
|
2996
3242
|
if (!ts.isPropertyAccessExpression(recv.expression))
|
|
2997
3243
|
return null;
|
|
@@ -3003,6 +3249,30 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3003
3249
|
if (!lowerer.isStdlibMember(inner))
|
|
3004
3250
|
return null;
|
|
3005
3251
|
const receiver = coerceToHandle(lowerer, inner.expression, NETSERVER_T);
|
|
3252
|
+
if (unixListenReachable(lowerer)) {
|
|
3253
|
+
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
3254
|
+
const server = () => varRef(local.id, NETSERVER_T, loc);
|
|
3255
|
+
return {
|
|
3256
|
+
kind: "seqExpr",
|
|
3257
|
+
stmts: [
|
|
3258
|
+
{ kind: "varDecl", localId: local.id, init: receiver, loc },
|
|
3259
|
+
{
|
|
3260
|
+
kind: "exprStmt",
|
|
3261
|
+
expr: {
|
|
3262
|
+
kind: "libCall",
|
|
3263
|
+
fn: "net.serverAddressCheck",
|
|
3264
|
+
args: [server()],
|
|
3265
|
+
type: VOID,
|
|
3266
|
+
loc,
|
|
3267
|
+
},
|
|
3268
|
+
loc,
|
|
3269
|
+
},
|
|
3270
|
+
],
|
|
3271
|
+
result: { kind: "libCall", fn: "net.serverPort", args: [server()], type: F64, loc },
|
|
3272
|
+
type: F64,
|
|
3273
|
+
loc,
|
|
3274
|
+
};
|
|
3275
|
+
}
|
|
3006
3276
|
return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
|
|
3007
3277
|
}
|
|
3008
3278
|
/** The (req, res) request-handler argument — http.createServer's, https
|
|
@@ -3067,7 +3337,8 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3067
3337
|
let joinDup = false;
|
|
3068
3338
|
let allowMissingHost = false;
|
|
3069
3339
|
let keepAliveTimeoutBuffer = null;
|
|
3070
|
-
|
|
3340
|
+
let maxHeaderSize = null;
|
|
3341
|
+
for (const prop of node.properties.nodes) {
|
|
3071
3342
|
let initializer;
|
|
3072
3343
|
if (ts.isPropertyAssignment(prop) &&
|
|
3073
3344
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3105,6 +3376,17 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3105
3376
|
}
|
|
3106
3377
|
lowerer.noLowering(`${what} with a non-literal joinDuplicateHeaders option`, prop, 'the lowered forms are the literals joinDuplicateHeaders: true (repeats join ", ") and false (the keep-first default)');
|
|
3107
3378
|
}
|
|
3379
|
+
if (key === "maxHeaderSize") {
|
|
3380
|
+
// The header size bound (Node's validateInteger runs in the runtime).
|
|
3381
|
+
const raw = initializer !== null
|
|
3382
|
+
? lowerer.lowerExpr(initializer)
|
|
3383
|
+
: lowerer.lowerShorthandValue(prop);
|
|
3384
|
+
if (raw.type.kind !== "f64") {
|
|
3385
|
+
lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' maxHeaderSize option`, prop, "maxHeaderSize is a number");
|
|
3386
|
+
}
|
|
3387
|
+
maxHeaderSize = raw;
|
|
3388
|
+
continue;
|
|
3389
|
+
}
|
|
3108
3390
|
if (key === "keepAliveTimeoutBuffer") {
|
|
3109
3391
|
if (keepAliveTimeoutBuffer !== null) {
|
|
3110
3392
|
lowerer.noLowering(`${what} with duplicate keepAliveTimeoutBuffer options`, prop, "write keepAliveTimeoutBuffer once in the options literal");
|
|
@@ -3124,10 +3406,10 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3124
3406
|
keepAliveTimeoutBuffer = value;
|
|
3125
3407
|
continue;
|
|
3126
3408
|
}
|
|
3127
|
-
fenceOrDropOptionKey(lowerer, prop, key, what, HTTP_SERVER_DOCUMENTED_OPTIONS, "requireHostHeader, joinDuplicateHeaders, and
|
|
3409
|
+
fenceOrDropOptionKey(lowerer, prop, key, what, HTTP_SERVER_DOCUMENTED_OPTIONS, "requireHostHeader, joinDuplicateHeaders, keepAliveTimeoutBuffer, and maxHeaderSize are the supported options");
|
|
3128
3410
|
// An undocumented key, dropped like Node drops it.
|
|
3129
3411
|
}
|
|
3130
|
-
return { joinDup, allowMissingHost, keepAliveTimeoutBuffer };
|
|
3412
|
+
return { joinDup, allowMissingHost, keepAliveTimeoutBuffer, maxHeaderSize };
|
|
3131
3413
|
}
|
|
3132
3414
|
/** The shared createServer([options][, handler]) shapes behind
|
|
3133
3415
|
* http.createServer, http.Server, and `new http.Server`: no arguments
|
|
@@ -3135,7 +3417,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3135
3417
|
* (options, handler). Modeled option values wrap the construction in an
|
|
3136
3418
|
* interned option-setting helper. */
|
|
3137
3419
|
function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
3138
|
-
const args = expr.arguments ?? [];
|
|
3420
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3139
3421
|
if (args.length > 2) {
|
|
3140
3422
|
lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
|
|
3141
3423
|
}
|
|
@@ -3153,7 +3435,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3153
3435
|
}
|
|
3154
3436
|
const opts = optsNode !== null
|
|
3155
3437
|
? lowerHttpServerOptions(lowerer, optsNode, what)
|
|
3156
|
-
: {
|
|
3438
|
+
: {
|
|
3439
|
+
joinDup: false,
|
|
3440
|
+
allowMissingHost: false,
|
|
3441
|
+
keepAliveTimeoutBuffer: null,
|
|
3442
|
+
maxHeaderSize: null,
|
|
3443
|
+
};
|
|
3157
3444
|
const server = handlerNode !== null
|
|
3158
3445
|
? {
|
|
3159
3446
|
kind: "libCall",
|
|
@@ -3163,20 +3450,25 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3163
3450
|
loc,
|
|
3164
3451
|
}
|
|
3165
3452
|
: { kind: "libCall", fn: "http.createServerEmpty", args: [], type: NETSERVER_T, loc };
|
|
3166
|
-
if (!opts.joinDup &&
|
|
3453
|
+
if (!opts.joinDup &&
|
|
3454
|
+
!opts.allowMissingHost &&
|
|
3455
|
+
opts.keepAliveTimeoutBuffer === null &&
|
|
3456
|
+
opts.maxHeaderSize === null)
|
|
3167
3457
|
return server;
|
|
3168
3458
|
// The option-setting composition: an interned helper takes the option
|
|
3169
3459
|
// values first (preserving Node's options-before-handler evaluation
|
|
3170
3460
|
// order), then the fresh server, applies the modeled fields, and answers
|
|
3171
3461
|
// the server as the constructor/factory result.
|
|
3172
3462
|
const hasBuffer = opts.keepAliveTimeoutBuffer !== null;
|
|
3173
|
-
const
|
|
3463
|
+
const hasMax = opts.maxHeaderSize !== null;
|
|
3464
|
+
const key = `server.opts:${opts.joinDup ? 1 : 0}:${opts.allowMissingHost ? 1 : 0}:${hasBuffer ? 1 : 0}:${hasMax ? 1 : 0}`;
|
|
3174
3465
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
3175
3466
|
const name = existing ?? `%server.opts.${lowerer.arrHofHelpers.size}`;
|
|
3176
3467
|
if (!existing) {
|
|
3177
3468
|
lowerer.arrHofHelpers.set(key, name);
|
|
3178
3469
|
const params = [
|
|
3179
3470
|
...(hasBuffer ? [{ localId: "b.0", name: "buffer", type: DYN }] : []),
|
|
3471
|
+
...(hasMax ? [{ localId: "m.0", name: "maxHeaderSize", type: F64 }] : []),
|
|
3180
3472
|
{ localId: "s.0", name: "s", type: NETSERVER_T },
|
|
3181
3473
|
];
|
|
3182
3474
|
const ref = { kind: "varRef", localId: "s.0", type: NETSERVER_T, loc };
|
|
@@ -3196,6 +3488,19 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3196
3488
|
loc,
|
|
3197
3489
|
});
|
|
3198
3490
|
}
|
|
3491
|
+
if (hasMax) {
|
|
3492
|
+
body.push({
|
|
3493
|
+
kind: "exprStmt",
|
|
3494
|
+
expr: {
|
|
3495
|
+
kind: "libCall",
|
|
3496
|
+
fn: "http.serverMaxHeaderSize",
|
|
3497
|
+
args: [ref, { kind: "varRef", localId: "m.0", type: F64, loc }],
|
|
3498
|
+
type: VOID,
|
|
3499
|
+
loc,
|
|
3500
|
+
},
|
|
3501
|
+
loc,
|
|
3502
|
+
});
|
|
3503
|
+
}
|
|
3199
3504
|
if (opts.joinDup) {
|
|
3200
3505
|
body.push({
|
|
3201
3506
|
kind: "exprStmt",
|
|
@@ -3229,7 +3534,11 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3229
3534
|
return {
|
|
3230
3535
|
kind: "call",
|
|
3231
3536
|
callee: name,
|
|
3232
|
-
args: [
|
|
3537
|
+
args: [
|
|
3538
|
+
...(opts.keepAliveTimeoutBuffer !== null ? [opts.keepAliveTimeoutBuffer] : []),
|
|
3539
|
+
...(opts.maxHeaderSize !== null ? [opts.maxHeaderSize] : []),
|
|
3540
|
+
server,
|
|
3541
|
+
],
|
|
3233
3542
|
type: NETSERVER_T,
|
|
3234
3543
|
loc,
|
|
3235
3544
|
};
|
|
@@ -3243,12 +3552,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3243
3552
|
* getName/destroy and the sockets/requests/freeSockets counters dispatch
|
|
3244
3553
|
* through the dyn handle ops, and the request path threads it (the
|
|
3245
3554
|
* requestAgent rows). Options parse at the LITERAL construction site:
|
|
3246
|
-
* keepAlive (a boolean value
|
|
3247
|
-
*
|
|
3248
|
-
*
|
|
3249
|
-
*
|
|
3250
|
-
*
|
|
3251
|
-
*
|
|
3555
|
+
* keepAlive (a boolean value: finished connections return to the free
|
|
3556
|
+
* list), keepAliveMsecs / maxSockets / maxFreeSockets / timeout / port as
|
|
3557
|
+
* numbers, scheduling as a value the runtime validates ('fifo' or
|
|
3558
|
+
* 'lifo'), other documented keys fence by name, and undocumented keys
|
|
3559
|
+
* drop like Node drops them. Null when the callee isn't the http/https
|
|
3560
|
+
* Agent. */
|
|
3252
3561
|
export function lowerHttpAgentNew(lowerer, expr) {
|
|
3253
3562
|
const callee = expr.expression;
|
|
3254
3563
|
const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
|
|
@@ -3266,7 +3575,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3266
3575
|
let maxFree = numLit(-1, loc);
|
|
3267
3576
|
let timeout = numLit(-1, loc);
|
|
3268
3577
|
let port = numLit(-1, loc);
|
|
3269
|
-
|
|
3578
|
+
let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
|
|
3579
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3270
3580
|
if (args.length > 1) {
|
|
3271
3581
|
lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
|
|
3272
3582
|
}
|
|
@@ -3275,7 +3585,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3275
3585
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
3276
3586
|
lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
|
|
3277
3587
|
}
|
|
3278
|
-
for (const prop of optsNode.properties) {
|
|
3588
|
+
for (const prop of optsNode.properties.nodes) {
|
|
3279
3589
|
if (ts.isSpreadAssignment(prop)) {
|
|
3280
3590
|
lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
|
|
3281
3591
|
}
|
|
@@ -3331,12 +3641,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3331
3641
|
// the settable defaultPort carries this one.
|
|
3332
3642
|
port = lowerVal("f64");
|
|
3333
3643
|
break;
|
|
3334
|
-
case "scheduling":
|
|
3335
|
-
//
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
lowerer.
|
|
3644
|
+
case "scheduling": {
|
|
3645
|
+
// 'fifo' | 'lifo' (falsy = 'lifo'), validated by the runtime
|
|
3646
|
+
const v = initializer !== null
|
|
3647
|
+
? lowerer.lowerExpr(initializer)
|
|
3648
|
+
: lowerer.lowerShorthandValue(prop);
|
|
3649
|
+
scheduling = lowerer.coerceToExpected(v, DYN);
|
|
3339
3650
|
break;
|
|
3651
|
+
}
|
|
3340
3652
|
default:
|
|
3341
3653
|
fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
|
|
3342
3654
|
? "keepAlive, keepAliveMsecs, maxSockets, maxFreeSockets, timeout, port, and scheduling are the supported options; pass TLS options such as ca and rejectUnauthorized on each https.request"
|
|
@@ -3355,6 +3667,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3355
3667
|
maxFree,
|
|
3356
3668
|
timeout,
|
|
3357
3669
|
port,
|
|
3670
|
+
scheduling,
|
|
3358
3671
|
],
|
|
3359
3672
|
type: DYN,
|
|
3360
3673
|
loc,
|
|
@@ -3380,24 +3693,24 @@ export function lowerHttpServerNew(lowerer, expr) {
|
|
|
3380
3693
|
function lowerHttpModuleCall(lowerer, expr, bi, loc) {
|
|
3381
3694
|
if (bi.member === "validateHeaderName") {
|
|
3382
3695
|
requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
|
|
3383
|
-
if (expr.arguments.length < 1 ||
|
|
3384
|
-
expr.arguments.length > 2 ||
|
|
3385
|
-
expr.arguments.some(ts.isSpreadElement)) {
|
|
3696
|
+
if (expr.arguments.nodes.length < 1 ||
|
|
3697
|
+
expr.arguments.nodes.length > 2 ||
|
|
3698
|
+
expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
3386
3699
|
lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
|
|
3387
3700
|
}
|
|
3388
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3389
|
-
const label = expr.arguments.length === 2
|
|
3390
|
-
? lowerer.lowerExprExpecting(expr.arguments[1], STRING)
|
|
3701
|
+
const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
|
|
3702
|
+
const label = expr.arguments.nodes.length === 2
|
|
3703
|
+
? lowerer.lowerExprExpecting(expr.arguments.nodes[1], STRING)
|
|
3391
3704
|
: strLit("Header name", loc);
|
|
3392
3705
|
return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
|
|
3393
3706
|
}
|
|
3394
3707
|
if (bi.member === "validateHeaderValue") {
|
|
3395
3708
|
requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
|
|
3396
|
-
if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
|
|
3709
|
+
if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
3397
3710
|
lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
|
|
3398
3711
|
}
|
|
3399
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3400
|
-
const value = lowerer.lowerExprExpecting(expr.arguments[1], DYN);
|
|
3712
|
+
const name = lowerer.lowerExprExpecting(expr.arguments.nodes[0], STRING);
|
|
3713
|
+
const value = lowerer.lowerExprExpecting(expr.arguments.nodes[1], DYN);
|
|
3401
3714
|
return {
|
|
3402
3715
|
kind: "libCall",
|
|
3403
3716
|
fn: "http.validateHeaderValue",
|
|
@@ -3427,7 +3740,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3427
3740
|
const loc = locOf(node);
|
|
3428
3741
|
let cert = null;
|
|
3429
3742
|
let key = null;
|
|
3430
|
-
for (const prop of node.properties) {
|
|
3743
|
+
for (const prop of node.properties.nodes) {
|
|
3431
3744
|
let initializer;
|
|
3432
3745
|
if (ts.isPropertyAssignment(prop) &&
|
|
3433
3746
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3523,8 +3836,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
|
|
|
3523
3836
|
* keepAliveTimeoutBuffer so the HTTP option is consumed without losing
|
|
3524
3837
|
* the literal's evaluation order. */
|
|
3525
3838
|
function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
|
|
3526
|
-
const jsSource = isJsSourceFile(
|
|
3527
|
-
return node.properties.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3839
|
+
const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
|
|
3840
|
+
return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3528
3841
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
|
|
3529
3842
|
((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
|
|
3530
3843
|
(jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
|
|
@@ -3557,7 +3870,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
|
|
|
3557
3870
|
* callback (and 'secureConnect'/'connect' listeners) fires
|
|
3558
3871
|
* post-handshake — Node's secureConnect timing. */
|
|
3559
3872
|
function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
3560
|
-
const args = expr.arguments;
|
|
3873
|
+
const args = expr.arguments.nodes;
|
|
3561
3874
|
const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
|
|
3562
3875
|
if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
|
|
3563
3876
|
lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
|
|
@@ -3649,7 +3962,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
|
3649
3962
|
* module declares fences qualified (createSecureContext and connect
|
|
3650
3963
|
* carry pointed hints from the fence-hint table). */
|
|
3651
3964
|
function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
3652
|
-
const args = expr.arguments;
|
|
3965
|
+
const args = expr.arguments.nodes;
|
|
3653
3966
|
if (bi.member === "createServer") {
|
|
3654
3967
|
if (args.length < 1 || args.length > 2) {
|
|
3655
3968
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
|
|
@@ -3689,7 +4002,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
|
3689
4002
|
if (bi.member === "getCACertificates" &&
|
|
3690
4003
|
args.length === 1 &&
|
|
3691
4004
|
!args.some(ts.isSpreadElement) &&
|
|
3692
|
-
isJsSourceFile(
|
|
4005
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
3693
4006
|
// The type-argument ladder (validateString + the documented name
|
|
3694
4007
|
// set); the real CA list has no lowering, so a valid name meets the
|
|
3695
4008
|
// compiler-rendered fence after the validation.
|
|
@@ -3795,7 +4108,7 @@ function clientFnRefOf(lowerer, node) {
|
|
|
3795
4108
|
* `const` declaration, or a parameter/let whose enclosing scope contains
|
|
3796
4109
|
* no assignment or ++/-- targeting it. */
|
|
3797
4110
|
function neverReassigned(lowerer, sym) {
|
|
3798
|
-
const decl =
|
|
4111
|
+
const decl = sym.declarations[0];
|
|
3799
4112
|
if (!decl)
|
|
3800
4113
|
return false;
|
|
3801
4114
|
if (ts.isVariableDeclaration(decl) &&
|
|
@@ -3902,7 +4215,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
|
|
|
3902
4215
|
* handler) and request/get — the http client lowering with the secure
|
|
3903
4216
|
* extras (port 443 default, rejectUnauthorized, ca). */
|
|
3904
4217
|
function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
|
|
3905
|
-
const args = expr.arguments;
|
|
4218
|
+
const args = expr.arguments.nodes;
|
|
3906
4219
|
if (bi.member === "createServer") {
|
|
3907
4220
|
if (args.length < 1 || args.length > 2) {
|
|
3908
4221
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
|
|
@@ -3983,7 +4296,7 @@ function stripParensAndCasts(node) {
|
|
|
3983
4296
|
* createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
|
|
3984
4297
|
* dual-ALPN server whose request/connect listeners mirror across parsers. */
|
|
3985
4298
|
function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
3986
|
-
const args = expr.arguments;
|
|
4299
|
+
const args = expr.arguments.nodes;
|
|
3987
4300
|
if (bi.member === "createServer") {
|
|
3988
4301
|
// The REAL h2c server (scr_http2.c). An options object literal is
|
|
3989
4302
|
// accepted and ignored (h2 session-tuning knobs; the honest-defaults
|
|
@@ -4047,7 +4360,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4047
4360
|
!arg1IsDyn &&
|
|
4048
4361
|
lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
|
|
4049
4362
|
if (ts.isObjectLiteralExpression(args[1])) {
|
|
4050
|
-
for (const pr of args[1].properties) {
|
|
4363
|
+
for (const pr of args[1].properties.nodes) {
|
|
4051
4364
|
// Plain `name: value` and shorthand `{ ca }` both carry the
|
|
4052
4365
|
// option; a shorthand's value is the same-named identifier.
|
|
4053
4366
|
let name;
|
|
@@ -4230,17 +4543,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4230
4543
|
if (ts.isConditionalExpression(inner)) {
|
|
4231
4544
|
const whenTrue = stripParensAndCasts(inner.whenTrue);
|
|
4232
4545
|
const whenFalse = stripParensAndCasts(inner.whenFalse);
|
|
4233
|
-
const condText = inner.condition
|
|
4546
|
+
const condText = ts.getTextOfNode(inner.condition);
|
|
4234
4547
|
const ok = ts.isObjectLiteralExpression(whenTrue) &&
|
|
4235
4548
|
ts.isObjectLiteralExpression(whenFalse) &&
|
|
4236
|
-
whenFalse.properties.length === 0 &&
|
|
4237
|
-
whenTrue.properties.length === 1 &&
|
|
4238
|
-
ts.isPropertyAssignment(whenTrue.properties[0]) &&
|
|
4239
|
-
(ts.isIdentifier(whenTrue.properties[0].name) ||
|
|
4240
|
-
ts.isStringLiteral(whenTrue.properties[0].name)) &&
|
|
4241
|
-
whenTrue.properties[0].name.text ===
|
|
4549
|
+
whenFalse.properties.nodes.length === 0 &&
|
|
4550
|
+
whenTrue.properties.nodes.length === 1 &&
|
|
4551
|
+
ts.isPropertyAssignment(whenTrue.properties.nodes[0]) &&
|
|
4552
|
+
(ts.isIdentifier(whenTrue.properties.nodes[0].name) ||
|
|
4553
|
+
ts.isStringLiteral(whenTrue.properties.nodes[0].name)) &&
|
|
4554
|
+
whenTrue.properties.nodes[0].name.text ===
|
|
4242
4555
|
"SNICallback" &&
|
|
4243
|
-
whenTrue.properties[0].initializer
|
|
4556
|
+
ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
|
|
4244
4557
|
if (!ok) {
|
|
4245
4558
|
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");
|
|
4246
4559
|
}
|
|
@@ -4250,7 +4563,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4250
4563
|
if (!ts.isObjectLiteralExpression(inner)) {
|
|
4251
4564
|
lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
|
|
4252
4565
|
}
|
|
4253
|
-
for (const p of inner.properties)
|
|
4566
|
+
for (const p of inner.properties.nodes)
|
|
4254
4567
|
lowerOption(p);
|
|
4255
4568
|
return;
|
|
4256
4569
|
}
|
|
@@ -4316,11 +4629,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4316
4629
|
e.kind === ts.SyntaxKind.TrueKeyword ||
|
|
4317
4630
|
e.kind === ts.SyntaxKind.FalseKeyword;
|
|
4318
4631
|
const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
|
|
4319
|
-
e.properties.every((p) => ts.isPropertyAssignment(p) &&
|
|
4632
|
+
e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
|
|
4320
4633
|
ts.isIdentifier(p.name) &&
|
|
4321
4634
|
isScalarLiteral(p.initializer));
|
|
4322
4635
|
if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
|
|
4323
|
-
for (const setting of initializer.properties) {
|
|
4636
|
+
for (const setting of initializer.properties.nodes) {
|
|
4324
4637
|
if (ts.isPropertyAssignment(setting) &&
|
|
4325
4638
|
ts.isIdentifier(setting.name) &&
|
|
4326
4639
|
setting.name.text === "enableConnectProtocol") {
|
|
@@ -4348,7 +4661,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4348
4661
|
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)");
|
|
4349
4662
|
// An undocumented key, dropped like Node drops it.
|
|
4350
4663
|
};
|
|
4351
|
-
for (const prop of optsNode.properties)
|
|
4664
|
+
for (const prop of optsNode.properties.nodes)
|
|
4352
4665
|
lowerOption(prop);
|
|
4353
4666
|
if (cert === null || key === null) {
|
|
4354
4667
|
lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
|
|
@@ -4413,6 +4726,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4413
4726
|
lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
|
|
4414
4727
|
"createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
|
|
4415
4728
|
}
|
|
4729
|
+
/** The checked-dynamic options value of a request whose options the
|
|
4730
|
+
* runtime reads: a non-literal options value (a RequestOptions variable —
|
|
4731
|
+
* checked-dynamic storage — or a record that converts to one), or a
|
|
4732
|
+
* literal the static walk cannot lower because it spreads another options
|
|
4733
|
+
* value or sets socketPath. Null keeps the static literal walk (and its
|
|
4734
|
+
* fences), which every other literal takes unchanged. */
|
|
4735
|
+
function runtimeRequestOptions(lowerer, optsNode, secureish) {
|
|
4736
|
+
if (ts.isObjectLiteralExpression(optsNode)) {
|
|
4737
|
+
const needsRuntime = optsNode.properties.nodes.some((prop) => {
|
|
4738
|
+
if (ts.isSpreadAssignment(prop)) {
|
|
4739
|
+
// the static walk's one spread: `...(c ? { rejectUnauthorized } : {})` on https
|
|
4740
|
+
const cs = conditionalSpreadOf(prop.expression);
|
|
4741
|
+
return !(secureish &&
|
|
4742
|
+
cs !== null &&
|
|
4743
|
+
cs !== "unsupported" &&
|
|
4744
|
+
cs.props.length === 1 &&
|
|
4745
|
+
cs.props[0].name.text === "rejectUnauthorized");
|
|
4746
|
+
}
|
|
4747
|
+
return ((ts.isPropertyAssignment(prop) || ts.isShorthandPropertyAssignment(prop)) &&
|
|
4748
|
+
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
|
|
4749
|
+
prop.name.text === "socketPath");
|
|
4750
|
+
});
|
|
4751
|
+
if (!needsRuntime)
|
|
4752
|
+
return null;
|
|
4753
|
+
return lowerDynObjectLiteral(lowerer, optsNode);
|
|
4754
|
+
}
|
|
4755
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
4756
|
+
if (!t || !(t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t))))
|
|
4757
|
+
return null;
|
|
4758
|
+
return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
|
|
4759
|
+
}
|
|
4416
4760
|
/** http.request(options[, cb]) / http.get(options[, cb]) — the client.
|
|
4417
4761
|
* The options argument must be an OBJECT LITERAL; the lowered keys are
|
|
4418
4762
|
* hostname/host, port, path, method, timeout, and headers (a nested
|
|
@@ -4440,11 +4784,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4440
4784
|
const c = lowerer.lowerCondition(binding.cond);
|
|
4441
4785
|
return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
|
|
4442
4786
|
};
|
|
4443
|
-
const args = expr.arguments;
|
|
4787
|
+
const args = expr.arguments.nodes;
|
|
4444
4788
|
if (args.length < 1 || args.length > 2) {
|
|
4445
4789
|
lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
|
|
4446
4790
|
}
|
|
4447
4791
|
const optsNode = args[0];
|
|
4792
|
+
const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
|
|
4793
|
+
if (runtimeOptions !== null) {
|
|
4794
|
+
// The options record is read at run time (the ClientRequest
|
|
4795
|
+
// constructor's walk in the runtime): a RequestOptions variable, or a
|
|
4796
|
+
// literal that spreads one or sets socketPath.
|
|
4797
|
+
const autoEnd = boolLit(member === "get", loc);
|
|
4798
|
+
const secureDyn = secure === true;
|
|
4799
|
+
if (args.length === 1) {
|
|
4800
|
+
return {
|
|
4801
|
+
kind: "libCall",
|
|
4802
|
+
fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
|
|
4803
|
+
args: [runtimeOptions, autoEnd],
|
|
4804
|
+
type: HTTPCLIENTREQ_T,
|
|
4805
|
+
loc,
|
|
4806
|
+
};
|
|
4807
|
+
}
|
|
4808
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
4809
|
+
return {
|
|
4810
|
+
kind: "libCall",
|
|
4811
|
+
fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
|
|
4812
|
+
args: [runtimeOptions, autoEnd, cb],
|
|
4813
|
+
type: HTTPCLIENTREQ_T,
|
|
4814
|
+
loc,
|
|
4815
|
+
};
|
|
4816
|
+
}
|
|
4448
4817
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
4449
4818
|
const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
4450
4819
|
if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
|
|
@@ -4505,7 +4874,13 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4505
4874
|
let agentClose = null;
|
|
4506
4875
|
/** agent: <Agent value> — the requestAgent rows thread the handle. */
|
|
4507
4876
|
let agentVal = null;
|
|
4508
|
-
|
|
4877
|
+
/** signal: an AbortSignal (checked at runtime) that destroys the request. */
|
|
4878
|
+
let signal = null;
|
|
4879
|
+
/** servername: the TLS name for SNI and certificate verification. */
|
|
4880
|
+
let servername = null;
|
|
4881
|
+
/** maxHeaderSize: the response head's size bound. */
|
|
4882
|
+
let maxHeaderSize = null;
|
|
4883
|
+
for (const prop of optsNode.properties.nodes) {
|
|
4509
4884
|
// Shorthand entries ({ port } for { port: port }) are the natural
|
|
4510
4885
|
// spelling at these call sites — the shorthand's VALUE lowering
|
|
4511
4886
|
// resolves the local binding (lowerShorthandValue), not the property
|
|
@@ -4596,6 +4971,25 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4596
4971
|
case "timeout":
|
|
4597
4972
|
timeout = lowerVal("f64");
|
|
4598
4973
|
break;
|
|
4974
|
+
case "maxHeaderSize":
|
|
4975
|
+
maxHeaderSize = lowerVal("f64");
|
|
4976
|
+
break;
|
|
4977
|
+
case "servername":
|
|
4978
|
+
if (binding !== null) {
|
|
4979
|
+
lowerer.noLowering(`${member} option 'servername' through a module-function binding`, prop, "call https.request directly when passing servername");
|
|
4980
|
+
}
|
|
4981
|
+
if (!secureish) {
|
|
4982
|
+
lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
|
|
4983
|
+
}
|
|
4984
|
+
servername = lowerVal("string");
|
|
4985
|
+
break;
|
|
4986
|
+
case "signal": {
|
|
4987
|
+
const v = initializer !== null
|
|
4988
|
+
? lowerer.lowerExpr(initializer)
|
|
4989
|
+
: lowerer.lowerShorthandValue(prop);
|
|
4990
|
+
signal = lowerer.coerceToExpected(v, DYN);
|
|
4991
|
+
break;
|
|
4992
|
+
}
|
|
4599
4993
|
case "headers":
|
|
4600
4994
|
if (initializer === null) {
|
|
4601
4995
|
lowerer.noLowering(`${member} with a shorthand headers option`, prop, "spell it out: headers: theHeaders");
|
|
@@ -4680,8 +5074,8 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4680
5074
|
}
|
|
4681
5075
|
default:
|
|
4682
5076
|
fenceOrDropOptionKey(lowerer, prop, key, member, secureish ? HTTPS_CLIENT_DOCUMENTED_OPTIONS : HTTP_CLIENT_DOCUMENTED_OPTIONS, secureish
|
|
4683
|
-
? "hostname/host, port, path, method, timeout, headers, agent, rejectUnauthorized, and
|
|
4684
|
-
: "hostname/host, port, path, method, timeout, headers, and
|
|
5077
|
+
? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, rejectUnauthorized, ca, and servername are the supported options"
|
|
5078
|
+
: "hostname/host, port, path, method, timeout, headers, agent, signal, and maxHeaderSize are the supported options");
|
|
4685
5079
|
}
|
|
4686
5080
|
}
|
|
4687
5081
|
if (agentClose !== null) {
|
|
@@ -4747,19 +5141,96 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4747
5141
|
timeout ??= numLit(0, loc);
|
|
4748
5142
|
headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
|
|
4749
5143
|
const autoEnd = boolLit(member === "get", loc);
|
|
5144
|
+
// options.signal is checked first: Node's constructor rejects a value
|
|
5145
|
+
// that is not an AbortSignal before it dials. servername is stored just
|
|
5146
|
+
// before construction (it selects the TLS name and which pooled sockets
|
|
5147
|
+
// the request may reuse); maxHeaderSize and the signal then apply to the
|
|
5148
|
+
// built request (an already aborted signal destroys it at once, like
|
|
5149
|
+
// Node's constructor).
|
|
5150
|
+
const withSignal = (request) => {
|
|
5151
|
+
if (signal === null && servername === null && maxHeaderSize === null)
|
|
5152
|
+
return request;
|
|
5153
|
+
const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
|
|
5154
|
+
const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
|
|
5155
|
+
const steps = [];
|
|
5156
|
+
let signalRef = null;
|
|
5157
|
+
if (signal !== null) {
|
|
5158
|
+
const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
|
|
5159
|
+
signalRef = () => varRef(signalLocal.id, DYN, loc);
|
|
5160
|
+
steps.push({ kind: "varDecl", localId: signalLocal.id, init: signal, loc });
|
|
5161
|
+
steps.push({
|
|
5162
|
+
kind: "exprStmt",
|
|
5163
|
+
expr: {
|
|
5164
|
+
kind: "libCall",
|
|
5165
|
+
fn: "http.clientSignalCheck",
|
|
5166
|
+
args: [signalRef()],
|
|
5167
|
+
type: VOID,
|
|
5168
|
+
loc,
|
|
5169
|
+
},
|
|
5170
|
+
loc,
|
|
5171
|
+
});
|
|
5172
|
+
}
|
|
5173
|
+
if (servername !== null) {
|
|
5174
|
+
steps.push({
|
|
5175
|
+
kind: "exprStmt",
|
|
5176
|
+
expr: {
|
|
5177
|
+
kind: "libCall",
|
|
5178
|
+
fn: "https.nextServername",
|
|
5179
|
+
args: [servername],
|
|
5180
|
+
type: VOID,
|
|
5181
|
+
loc,
|
|
5182
|
+
},
|
|
5183
|
+
loc,
|
|
5184
|
+
});
|
|
5185
|
+
}
|
|
5186
|
+
steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
|
|
5187
|
+
if (maxHeaderSize !== null) {
|
|
5188
|
+
steps.push({
|
|
5189
|
+
kind: "exprStmt",
|
|
5190
|
+
expr: {
|
|
5191
|
+
kind: "libCall",
|
|
5192
|
+
fn: "http.clientMaxHeaderSize",
|
|
5193
|
+
args: [ref(), maxHeaderSize],
|
|
5194
|
+
type: VOID,
|
|
5195
|
+
loc,
|
|
5196
|
+
},
|
|
5197
|
+
loc,
|
|
5198
|
+
});
|
|
5199
|
+
}
|
|
5200
|
+
if (signalRef !== null) {
|
|
5201
|
+
steps.push({
|
|
5202
|
+
kind: "exprStmt",
|
|
5203
|
+
expr: {
|
|
5204
|
+
kind: "libCall",
|
|
5205
|
+
fn: "http.clientSignal",
|
|
5206
|
+
args: [ref(), signalRef()],
|
|
5207
|
+
type: VOID,
|
|
5208
|
+
loc,
|
|
5209
|
+
},
|
|
5210
|
+
loc,
|
|
5211
|
+
});
|
|
5212
|
+
}
|
|
5213
|
+
return { kind: "seqExpr", stmts: steps, result: ref(), type: HTTPCLIENTREQ_T, loc };
|
|
5214
|
+
};
|
|
4750
5215
|
if (connCb !== null) {
|
|
4751
5216
|
const base = [connCb, path, method, timeout, headers, autoEnd];
|
|
4752
5217
|
if (args.length === 1) {
|
|
4753
|
-
return {
|
|
5218
|
+
return withSignal({
|
|
5219
|
+
kind: "libCall",
|
|
5220
|
+
fn: "http.requestConn",
|
|
5221
|
+
args: base,
|
|
5222
|
+
type: HTTPCLIENTREQ_T,
|
|
5223
|
+
loc,
|
|
5224
|
+
});
|
|
4754
5225
|
}
|
|
4755
5226
|
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
4756
|
-
return {
|
|
5227
|
+
return withSignal({
|
|
4757
5228
|
kind: "libCall",
|
|
4758
5229
|
fn: "http.requestConnCb",
|
|
4759
5230
|
args: [...base, cb],
|
|
4760
5231
|
type: HTTPCLIENTREQ_T,
|
|
4761
5232
|
loc,
|
|
4762
|
-
};
|
|
5233
|
+
});
|
|
4763
5234
|
}
|
|
4764
5235
|
const base = [host, port, path, method, timeout, headers, autoEnd];
|
|
4765
5236
|
if (secureish) {
|
|
@@ -4781,7 +5252,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4781
5252
|
: agentVal !== null
|
|
4782
5253
|
? "http.requestAgent"
|
|
4783
5254
|
: "http.request";
|
|
4784
|
-
return { kind: "libCall", fn, args: base, type: HTTPCLIENTREQ_T, loc };
|
|
5255
|
+
return withSignal({ kind: "libCall", fn, args: base, type: HTTPCLIENTREQ_T, loc });
|
|
4785
5256
|
}
|
|
4786
5257
|
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
4787
5258
|
const fn = binding !== null
|
|
@@ -4793,7 +5264,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4793
5264
|
: agentVal !== null
|
|
4794
5265
|
? "http.requestAgentCb"
|
|
4795
5266
|
: "http.requestCb";
|
|
4796
|
-
return { kind: "libCall", fn, args: [...base, cb], type: HTTPCLIENTREQ_T, loc };
|
|
5267
|
+
return withSignal({ kind: "libCall", fn, args: [...base, cb], type: HTTPCLIENTREQ_T, loc });
|
|
4797
5268
|
}
|
|
4798
5269
|
/** The headers option of http.request: an object literal with literal
|
|
4799
5270
|
* keys and string values packs into the flat [k0, v0, k1, v1, ...] pairs
|
|
@@ -4804,7 +5275,7 @@ function lowerClientHeadersOption(lowerer, node) {
|
|
|
4804
5275
|
const loc = locOf(node);
|
|
4805
5276
|
if (ts.isObjectLiteralExpression(node)) {
|
|
4806
5277
|
const elems = [];
|
|
4807
|
-
for (const prop of node.properties) {
|
|
5278
|
+
for (const prop of node.properties.nodes) {
|
|
4808
5279
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
4809
5280
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
4810
5281
|
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])");
|
|
@@ -4840,13 +5311,13 @@ function lowerHttpTrailersOption(lowerer, node) {
|
|
|
4840
5311
|
return lowerClientHeadersOption(lowerer, node);
|
|
4841
5312
|
const loc = locOf(node);
|
|
4842
5313
|
const flat = [];
|
|
4843
|
-
for (const entry of node.elements) {
|
|
4844
|
-
if (!ts.isArrayLiteralExpression(entry) || entry.elements.length !== 2) {
|
|
5314
|
+
for (const entry of node.elements.nodes) {
|
|
5315
|
+
if (!ts.isArrayLiteralExpression(entry) || entry.elements.nodes.length !== 2) {
|
|
4845
5316
|
lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
|
|
4846
5317
|
}
|
|
4847
5318
|
const pair = entry;
|
|
4848
|
-
const name = pair.elements[0];
|
|
4849
|
-
const value = pair.elements[1];
|
|
5319
|
+
const name = pair.elements.nodes[0];
|
|
5320
|
+
const value = pair.elements.nodes[1];
|
|
4850
5321
|
if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
|
|
4851
5322
|
lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
|
|
4852
5323
|
}
|
|
@@ -4864,7 +5335,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
4864
5335
|
return null;
|
|
4865
5336
|
const name = access.name.text;
|
|
4866
5337
|
const loc = locOf(call);
|
|
4867
|
-
const args = call.arguments;
|
|
5338
|
+
const args = call.arguments.nodes;
|
|
4868
5339
|
if (name === "setHeader") {
|
|
4869
5340
|
requireStatementPosition(lowerer, call, "request.setHeader(...)");
|
|
4870
5341
|
if (args.length !== 2)
|
|
@@ -5009,6 +5480,22 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
5009
5480
|
}
|
|
5010
5481
|
lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, args[0] ?? call, NARROW_DATA_HINT);
|
|
5011
5482
|
}
|
|
5483
|
+
if (name === "destroy" && args.length === 1) {
|
|
5484
|
+
// destroy(err): err is the request's 'error' (an Error value here).
|
|
5485
|
+
requireStatementPosition(lowerer, call, "request.destroy(err)");
|
|
5486
|
+
const receiver = lowerer.lowerExpr(access.expression);
|
|
5487
|
+
const err = lowerer.lowerExpr(args[0]);
|
|
5488
|
+
if (err.type.kind !== "object") {
|
|
5489
|
+
lowerer.noLowering(`destroy with a '${lowerer.fmt(err.type)}' argument`, args[0], "pass an Error value, or call destroy() without one");
|
|
5490
|
+
}
|
|
5491
|
+
return {
|
|
5492
|
+
kind: "libCall",
|
|
5493
|
+
fn: "http.clientDestroyError",
|
|
5494
|
+
args: [receiver, lowerer.coerceToExpected(err, ERROR_T)],
|
|
5495
|
+
type: VOID,
|
|
5496
|
+
loc,
|
|
5497
|
+
};
|
|
5498
|
+
}
|
|
5012
5499
|
if (name === "destroy" || name === "abort") {
|
|
5013
5500
|
requireStatementPosition(lowerer, call, `request.${name}()`);
|
|
5014
5501
|
if (args.length !== 0) {
|
|
@@ -5059,7 +5546,11 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
5059
5546
|
loc,
|
|
5060
5547
|
};
|
|
5061
5548
|
}
|
|
5062
|
-
if (event === "timeout" ||
|
|
5549
|
+
if (event === "timeout" ||
|
|
5550
|
+
event === "close" ||
|
|
5551
|
+
event === "finish" ||
|
|
5552
|
+
event === "abort" ||
|
|
5553
|
+
event === "continue") {
|
|
5063
5554
|
const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
|
|
5064
5555
|
const fn = event === "timeout"
|
|
5065
5556
|
? "http.clientOnTimeout"
|
|
@@ -5067,7 +5558,9 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
5067
5558
|
? "http.clientOnClose"
|
|
5068
5559
|
: event === "abort"
|
|
5069
5560
|
? "http.clientOnAbort"
|
|
5070
|
-
: "
|
|
5561
|
+
: event === "continue"
|
|
5562
|
+
? "http.clientOnContinue"
|
|
5563
|
+
: "http.clientOnFinish";
|
|
5071
5564
|
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
5072
5565
|
}
|
|
5073
5566
|
if (event === "upgrade") {
|
|
@@ -5221,7 +5714,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5221
5714
|
return null;
|
|
5222
5715
|
const name = access.name.text;
|
|
5223
5716
|
const loc = locOf(call);
|
|
5224
|
-
const args = call.arguments;
|
|
5717
|
+
const args = call.arguments.nodes;
|
|
5225
5718
|
if (name === "setTimeout") {
|
|
5226
5719
|
requireStatementPosition(lowerer, call, "message.setTimeout(...)");
|
|
5227
5720
|
if (args.length < 1 || args.length > 2)
|
|
@@ -5289,6 +5782,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5289
5782
|
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
5290
5783
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
|
|
5291
5784
|
if (event === "data") {
|
|
5785
|
+
const sigs = lowerer.checker.getCallSignatures(lowerer.typeOf(args[1]));
|
|
5786
|
+
const firstParam = sigs.length === 1 ? sigs[0].getParameters()[0] : undefined;
|
|
5787
|
+
const param = firstParam !== undefined
|
|
5788
|
+
? lowerer.mapTypeOf(lowerer.checker.getTypeOfSymbol(firstParam))
|
|
5789
|
+
: null;
|
|
5790
|
+
if (param !== null && param.kind === "string") {
|
|
5791
|
+
// A chunk typed string (the setEncoding('utf8') shape), as on a
|
|
5792
|
+
// socket: the listener takes the chunk through a checked
|
|
5793
|
+
// boundary, so a string arrives after setEncoding and a Buffer
|
|
5794
|
+
// without it fails the check instead of being decoded.
|
|
5795
|
+
const boxed = lowerSocketDynListener(lowerer, args[1], "data listeners");
|
|
5796
|
+
const cb = { kind: "dynCheck", value: boxed, type: funcOf([DYN], VOID), loc };
|
|
5797
|
+
return {
|
|
5798
|
+
kind: "libCall",
|
|
5799
|
+
fn: "http.reqOnData",
|
|
5800
|
+
args: [receiver, cb, once],
|
|
5801
|
+
type: VOID,
|
|
5802
|
+
loc,
|
|
5803
|
+
};
|
|
5804
|
+
}
|
|
5292
5805
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
5293
5806
|
return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
5294
5807
|
}
|
|
@@ -5341,7 +5854,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5341
5854
|
return null;
|
|
5342
5855
|
const name = access.name.text;
|
|
5343
5856
|
const loc = locOf(call);
|
|
5344
|
-
const args = call.arguments;
|
|
5857
|
+
const args = call.arguments.nodes;
|
|
5345
5858
|
if (name === "setTimeout") {
|
|
5346
5859
|
if (args.length < 1 || args.length > 2) {
|
|
5347
5860
|
lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
|
|
@@ -5359,7 +5872,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5359
5872
|
}
|
|
5360
5873
|
if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
|
|
5361
5874
|
requireStatementPosition(lowerer, call, `res.${name}(...)`);
|
|
5362
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5875
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5363
5876
|
lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
|
|
5364
5877
|
}
|
|
5365
5878
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
|
|
@@ -5380,7 +5893,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5380
5893
|
let pairs;
|
|
5381
5894
|
if (ts.isObjectLiteralExpression(node)) {
|
|
5382
5895
|
const elems = [];
|
|
5383
|
-
for (const prop of node.properties) {
|
|
5896
|
+
for (const prop of node.properties.nodes) {
|
|
5384
5897
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5385
5898
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5386
5899
|
lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
|
|
@@ -5443,7 +5956,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5443
5956
|
}
|
|
5444
5957
|
if (name === "addTrailers") {
|
|
5445
5958
|
requireStatementPosition(lowerer, call, "res.addTrailers(...)");
|
|
5446
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5959
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5447
5960
|
lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
|
|
5448
5961
|
}
|
|
5449
5962
|
if (args.length !== 1)
|
|
@@ -5580,7 +6093,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5580
6093
|
}
|
|
5581
6094
|
const names = [];
|
|
5582
6095
|
const values = [];
|
|
5583
|
-
for (const prop of headersNode.properties) {
|
|
6096
|
+
for (const prop of headersNode.properties.nodes) {
|
|
5584
6097
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5585
6098
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5586
6099
|
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])");
|
|
@@ -5708,6 +6221,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5708
6221
|
return endWithCb(fn, [receiver, data], cbArg);
|
|
5709
6222
|
return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
|
|
5710
6223
|
}
|
|
6224
|
+
// end(payload ? text : undefined): an absent chunk ends without data,
|
|
6225
|
+
// as end() does. The checked-dynamic end takes each arm at run time.
|
|
6226
|
+
if (name === "end" && data.type.kind === "union" && lowerer.dynConvertible(data.type)) {
|
|
6227
|
+
const arms = lowerer.unions.get(data.type.unionId)?.arms ?? [];
|
|
6228
|
+
if (arms.every((arm) => arm.kind === "string" ||
|
|
6229
|
+
(arm.kind === "bytes" && arm.elem === "u8") ||
|
|
6230
|
+
arm.kind === "undefinedT" ||
|
|
6231
|
+
arm.kind === "nullT")) {
|
|
6232
|
+
const dynData = { kind: "dynFrom", value: data, type: DYN, loc: locOf(dataNode) };
|
|
6233
|
+
if (cbArg !== null)
|
|
6234
|
+
return endWithCb("http.resEndDyn", [receiver, dynData], cbArg);
|
|
6235
|
+
return {
|
|
6236
|
+
kind: "libCall",
|
|
6237
|
+
fn: "http.resEndDyn",
|
|
6238
|
+
args: [receiver, dynData],
|
|
6239
|
+
type: VOID,
|
|
6240
|
+
loc,
|
|
6241
|
+
};
|
|
6242
|
+
}
|
|
6243
|
+
}
|
|
5711
6244
|
lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
|
|
5712
6245
|
}
|
|
5713
6246
|
if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {
|