@scriptc/compiler 0.3.6 → 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 +682 -50
- 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 +293 -178
- 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 +547 -283
- package/dist/backend/llvm/emitter.js +689 -4643
- 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-dynamic.d.ts +3 -0
- package/dist/backend/llvm/expr-dynamic.js +67 -62
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +121 -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 +189 -23
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +42 -13
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.js +3 -3
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-lookup.js +2 -2
- package/dist/backend/llvm/lib-lookup.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +56 -22
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +90 -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 +187 -6
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +46 -16
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +43 -7
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +4 -9
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +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 +64 -6
- package/dist/backend/llvm/nullable-unions.js +103 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
- package/dist/backend/llvm/nullable-unions.test.js +65 -0
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
- package/dist/backend/llvm/publish.d.ts +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 +12 -1
- package/dist/backend/llvm/record-results.js +64 -4
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +9 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.d.ts +4 -0
- package/dist/backend/llvm/reference-writes.js +142 -6
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
- package/dist/backend/llvm/reference-writes.test.js +88 -0
- package/dist/backend/llvm/reference-writes.test.js.map +1 -0
- package/dist/backend/llvm/regex-matchers.d.ts +8 -0
- package/dist/backend/llvm/regex-matchers.js +33 -0
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +23 -1
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/regions.d.ts +1 -1
- package/dist/backend/llvm/regions.js +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 +66 -43
- package/dist/backend/llvm/shapes.js +280 -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/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 +4 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +1 -1
- package/dist/backend/native/contracts.d.ts +37 -0
- package/dist/backend/native/executable.js +192 -137
- 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 +1 -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.test.js +5 -0
- 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 +24 -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 +16 -3
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +2 -0
- package/dist/coverage/verdict-cache.js +12 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-cache.test.js +2 -1
- package/dist/coverage/verdict-cache.test.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +10 -6
- package/dist/diagnostics/diagnostic.js +29 -21
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +39 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/diagnostics/render.d.ts +7 -0
- package/dist/diagnostics/render.js +50 -13
- package/dist/diagnostics/render.js.map +1 -1
- package/dist/diagnostics/render.test.d.ts +1 -0
- package/dist/diagnostics/render.test.js +49 -0
- package/dist/diagnostics/render.test.js.map +1 -0
- package/dist/executable/executable-cache.d.ts +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 +63 -5
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
- package/dist/frontend/lowering/builtin-function-fences.js +42 -0
- package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.js +1 -1
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/async-context.js +53 -52
- package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +6 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/blob.js +8 -6
- package/dist/frontend/lowering/builtins/blob.js.map +1 -1
- package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +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 +16 -5
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
- package/dist/frontend/lowering/builtins/child-process.js +85 -61
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
- package/dist/frontend/lowering/builtins/class-values.js +226 -0
- package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
- package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
- package/dist/frontend/lowering/builtins/compression.js +107 -44
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
- package/dist/frontend/lowering/builtins/constants.js +28 -7
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +19 -0
- package/dist/frontend/lowering/builtins/crypto.js +211 -37
- 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 +169 -3
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +77 -77
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
- package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
- package/dist/frontend/lowering/builtins/ipc.js +45 -8
- package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +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 +55 -44
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
- package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
- package/dist/frontend/lowering/builtins/navigator.js +40 -0
- package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
- package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
- package/dist/frontend/lowering/builtins/net-address.js +156 -0
- package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
- package/dist/frontend/lowering/builtins/numbers.js +25 -9
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
- package/dist/frontend/lowering/builtins/operating-system.js +25 -12
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
- package/dist/frontend/lowering/builtins/performance.js +259 -8
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +32 -1
- package/dist/frontend/lowering/builtins/process.js +461 -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 +12 -2
- package/dist/frontend/lowering/builtins/readline.js +136 -39
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
- package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +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 +12 -0
- package/dist/frontend/lowering/builtins/workers.js +193 -8
- package/dist/frontend/lowering/builtins/workers.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +69 -14
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +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.js +25 -44
- 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 +6 -5
- package/dist/frontend/lowering/containers/array-from-async.js +159 -14
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +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 +217 -26
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +54 -25
- 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 +62 -125
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
- package/dist/frontend/lowering/dyn-streams.js +257 -0
- package/dist/frontend/lowering/dyn-streams.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -1
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +19 -0
- package/dist/frontend/lowering/error-name-order.js +93 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
- package/dist/frontend/lowering/expressions/array-literals.js +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 +1239 -442
- 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 +1473 -468
- 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 +258 -70
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-event-target.js +2 -2
- package/dist/frontend/lowering/lower-event-target.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.js +17 -13
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
- package/dist/frontend/lowering/lower-exprs.js +1481 -12489
- 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 +331 -96
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +23 -20
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.d.ts +8 -1
- package/dist/frontend/lowering/lower-mock.js +185 -18
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +267 -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 +488 -100
- 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 +1541 -391
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.d.ts +3 -0
- package/dist/frontend/lowering/lower-stream.js +398 -56
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.d.ts +3 -0
- package/dist/frontend/lowering/lower-test.js +437 -62
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +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 +399 -26
- package/dist/frontend/lowering/lowerer.js +1910 -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/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 +12 -3
- package/dist/frontend/lowering/surfaces.js +252 -41
- 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.js +13 -6
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/module-source-candidates.js +1 -1
- package/dist/frontend/module-source-candidates.js.map +1 -1
- package/dist/frontend/module-source-candidates.test.js +2 -1
- package/dist/frontend/module-source-candidates.test.js.map +1 -1
- package/dist/frontend/module-syntax.js +8 -8
- package/dist/frontend/module-syntax.js.map +1 -1
- package/dist/frontend/npm-static-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 -255
- 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 +2545 -719
- 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 +29 -2
- 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 +103 -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 +494 -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 +9 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.test.js +1 -1
- package/dist/ir/initializer-bindings.test.js +1 -1
- package/dist/ir/int32-slots.d.ts +14 -0
- package/dist/ir/int32-slots.js +97 -14
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +1 -1
- package/dist/ir/integer-loop-facts.d.ts +2 -0
- package/dist/ir/integer-loop-facts.js +24 -3
- 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 +3 -1
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +82 -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 +221 -58
- package/dist/ir/ir.js +119 -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 +148 -33
- package/dist/ir/runtime-features.js +629 -386
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/scalar-records.test.js +1 -1
- package/dist/ir/self-captures.d.ts +33 -0
- package/dist/ir/self-captures.js +245 -0
- package/dist/ir/self-captures.js.map +1 -0
- package/dist/ir/self-captures.test.d.ts +1 -0
- package/dist/ir/self-captures.test.js +135 -0
- package/dist/ir/self-captures.test.js.map +1 -0
- package/dist/ir/serialize.d.ts +1 -1
- package/dist/ir/serialize.js +7 -4
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/tiers.d.ts +26 -0
- package/dist/ir/tiers.js +101 -0
- package/dist/ir/tiers.js.map +1 -0
- package/dist/ir/tiers.test.d.ts +1 -0
- package/dist/ir/tiers.test.js +140 -0
- package/dist/ir/tiers.test.js.map +1 -0
- package/dist/ir/traverse.js +103 -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 +175 -68
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +26 -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 +13 -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 +303 -19
|
@@ -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
|
}
|
|
@@ -1583,6 +1608,32 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1583
1608
|
const result = lowerer.mapTypeOf(lowerer.typeOf(call));
|
|
1584
1609
|
if (result && isAddressInfoRecord(lowerer, result)) {
|
|
1585
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
|
+
}
|
|
1586
1637
|
return { kind: "libCall", fn: "net.serverAddress", args: [receiver], type: result, loc };
|
|
1587
1638
|
}
|
|
1588
1639
|
// @types/node's `string | AddressInfo | null`: the record while the
|
|
@@ -1598,20 +1649,50 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1598
1649
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1599
1650
|
const local = lowerer.declareHiddenLocal("%addressServer", NETSERVER_T);
|
|
1600
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
|
+
}
|
|
1601
1689
|
return {
|
|
1602
1690
|
kind: "seqExpr",
|
|
1603
|
-
stmts
|
|
1691
|
+
stmts,
|
|
1604
1692
|
result: {
|
|
1605
1693
|
kind: "ternary",
|
|
1606
1694
|
cond: { kind: "libCall", fn: "net.serverListening", args: [server], type: BOOL, loc },
|
|
1607
|
-
then:
|
|
1608
|
-
kind: "unionWrap",
|
|
1609
|
-
unionId,
|
|
1610
|
-
tag: lowerer.armTag(unionId, record),
|
|
1611
|
-
value: { kind: "libCall", fn: "net.serverAddress", args: [server], type: record, loc },
|
|
1612
|
-
type: result,
|
|
1613
|
-
loc,
|
|
1614
|
-
},
|
|
1695
|
+
then: listeningArm,
|
|
1615
1696
|
else_: {
|
|
1616
1697
|
kind: "unionWrap",
|
|
1617
1698
|
unionId,
|
|
@@ -1629,6 +1710,114 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1629
1710
|
}
|
|
1630
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));
|
|
1631
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
|
+
}
|
|
1632
1821
|
/** Method calls on net.Socket receivers: write/end/destroy/pipe and
|
|
1633
1822
|
* on/once("data" | "end" | "close" | "error" | "connect"). Null for
|
|
1634
1823
|
* other receivers. */
|
|
@@ -1639,7 +1828,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1639
1828
|
return null;
|
|
1640
1829
|
const name = access.name.text;
|
|
1641
1830
|
const loc = locOf(call);
|
|
1642
|
-
const args = call.arguments;
|
|
1831
|
+
const args = call.arguments.nodes;
|
|
1643
1832
|
if ((name === "ref" || name === "unref") && args.length === 0) {
|
|
1644
1833
|
// Whether the socket keeps the event loop alive.
|
|
1645
1834
|
requireStatementPosition(lowerer, call, `socket.${name}()`);
|
|
@@ -1666,7 +1855,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1666
1855
|
if (encT.isStringLiteralType() && chunkT !== null) {
|
|
1667
1856
|
if (encT.value === "buffer" &&
|
|
1668
1857
|
chunkT.kind === "string" &&
|
|
1669
|
-
isJsSourceFile(
|
|
1858
|
+
isJsSourceFile(ts.getSourceFileOfNode(call))) {
|
|
1670
1859
|
lowerer.lowerExpr(args[0]); // evaluation order (effect-free in practice)
|
|
1671
1860
|
return nodeThrowExpr(1, "ERR_UNKNOWN_ENCODING", "Unknown encoding: buffer", VOID, loc);
|
|
1672
1861
|
}
|
|
@@ -1883,6 +2072,20 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1883
2072
|
? value
|
|
1884
2073
|
: lowerer.coerceInto(call, value, declared);
|
|
1885
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
|
+
}
|
|
1886
2089
|
if (name === "resetAndDestroy") {
|
|
1887
2090
|
// An RST close; a connecting socket resets once it connects. Answers
|
|
1888
2091
|
// the socket, Node's chaining.
|
|
@@ -1993,6 +2196,26 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
1993
2196
|
loc,
|
|
1994
2197
|
};
|
|
1995
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
|
+
}
|
|
1996
2219
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
1997
2220
|
return { kind: "libCall", fn: "net.sockOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
1998
2221
|
}
|
|
@@ -2039,6 +2262,17 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2039
2262
|
: "net.sockOnConnect";
|
|
2040
2263
|
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
2041
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
|
+
}
|
|
2042
2276
|
if (event === "finish") {
|
|
2043
2277
|
// Fires once when the FIN goes out — once either way (the event
|
|
2044
2278
|
// happens at most once per socket).
|
|
@@ -2071,7 +2305,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2071
2305
|
loc,
|
|
2072
2306
|
};
|
|
2073
2307
|
}
|
|
2074
|
-
lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
|
|
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)');
|
|
2075
2309
|
}
|
|
2076
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));
|
|
2077
2311
|
}
|
|
@@ -2132,7 +2366,7 @@ function h2EndStreamOption(lowerer, node) {
|
|
|
2132
2366
|
lowerer.noLowering("h2 options argument", node, "pass the options as an object literal ({ endStream: true })");
|
|
2133
2367
|
}
|
|
2134
2368
|
let end;
|
|
2135
|
-
for (const prop of node.properties) {
|
|
2369
|
+
for (const prop of node.properties.nodes) {
|
|
2136
2370
|
if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) {
|
|
2137
2371
|
lowerer.noLowering("h2 options with spreads or computed keys", prop, "use plain `name: value` entries");
|
|
2138
2372
|
}
|
|
@@ -2160,7 +2394,7 @@ function lowerH2SessionMethodCall(lowerer, call, access) {
|
|
|
2160
2394
|
return null;
|
|
2161
2395
|
const name = access.name.text;
|
|
2162
2396
|
const loc = locOf(call);
|
|
2163
|
-
const args = call.arguments;
|
|
2397
|
+
const args = call.arguments.nodes;
|
|
2164
2398
|
const receiver = () => coerceToHandle(lowerer, access.expression, HTTP2SESSION_T);
|
|
2165
2399
|
if (name === "request") {
|
|
2166
2400
|
const pairs = args.length >= 1 && !ts.isObjectLiteralExpression(args[0]) === false && args.length >= 1
|
|
@@ -2340,7 +2574,7 @@ function lowerH2StreamMethodCall(lowerer, call, access, receiverOverride) {
|
|
|
2340
2574
|
return null;
|
|
2341
2575
|
const name = access.name.text;
|
|
2342
2576
|
const loc = locOf(call);
|
|
2343
|
-
const args = call.arguments;
|
|
2577
|
+
const args = call.arguments.nodes;
|
|
2344
2578
|
const receiver = () => receiverOverride ?? coerceToHandle(lowerer, access.expression, HTTP2STREAM_T);
|
|
2345
2579
|
if (name === "respond") {
|
|
2346
2580
|
requireStatementPosition(lowerer, call, "stream.respond(...)");
|
|
@@ -3003,7 +3237,7 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3003
3237
|
if (expr.name.text !== "port")
|
|
3004
3238
|
return null;
|
|
3005
3239
|
const recv = expr.expression;
|
|
3006
|
-
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.length !== 0)
|
|
3240
|
+
if (!ts.isCallExpression(recv) || recv.questionDotToken || recv.arguments.nodes.length !== 0)
|
|
3007
3241
|
return null;
|
|
3008
3242
|
if (!ts.isPropertyAccessExpression(recv.expression))
|
|
3009
3243
|
return null;
|
|
@@ -3015,6 +3249,30 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3015
3249
|
if (!lowerer.isStdlibMember(inner))
|
|
3016
3250
|
return null;
|
|
3017
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
|
+
}
|
|
3018
3276
|
return { kind: "libCall", fn: "net.serverPort", args: [receiver], type: F64, loc };
|
|
3019
3277
|
}
|
|
3020
3278
|
/** The (req, res) request-handler argument — http.createServer's, https
|
|
@@ -3080,7 +3338,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3080
3338
|
let allowMissingHost = false;
|
|
3081
3339
|
let keepAliveTimeoutBuffer = null;
|
|
3082
3340
|
let maxHeaderSize = null;
|
|
3083
|
-
for (const prop of node.properties) {
|
|
3341
|
+
for (const prop of node.properties.nodes) {
|
|
3084
3342
|
let initializer;
|
|
3085
3343
|
if (ts.isPropertyAssignment(prop) &&
|
|
3086
3344
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3159,7 +3417,7 @@ function lowerHttpServerOptions(lowerer, node, what) {
|
|
|
3159
3417
|
* (options, handler). Modeled option values wrap the construction in an
|
|
3160
3418
|
* interned option-setting helper. */
|
|
3161
3419
|
function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
3162
|
-
const args = expr.arguments ?? [];
|
|
3420
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3163
3421
|
if (args.length > 2) {
|
|
3164
3422
|
lowerer.noLowering(`${what} with ${args.length} arguments`, expr, `the supported forms are ${what}([options][, (req, res) => ...])`);
|
|
3165
3423
|
}
|
|
@@ -3294,12 +3552,12 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3294
3552
|
* getName/destroy and the sockets/requests/freeSockets counters dispatch
|
|
3295
3553
|
* through the dyn handle ops, and the request path threads it (the
|
|
3296
3554
|
* requestAgent rows). Options parse at the LITERAL construction site:
|
|
3297
|
-
* keepAlive (a boolean value
|
|
3298
|
-
*
|
|
3299
|
-
*
|
|
3300
|
-
*
|
|
3301
|
-
*
|
|
3302
|
-
*
|
|
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. */
|
|
3303
3561
|
export function lowerHttpAgentNew(lowerer, expr) {
|
|
3304
3562
|
const callee = expr.expression;
|
|
3305
3563
|
const bi = ts.isPropertyAccessExpression(callee) && callee.name.text === "Agent"
|
|
@@ -3317,7 +3575,8 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3317
3575
|
let maxFree = numLit(-1, loc);
|
|
3318
3576
|
let timeout = numLit(-1, loc);
|
|
3319
3577
|
let port = numLit(-1, loc);
|
|
3320
|
-
|
|
3578
|
+
let scheduling = lowerer.coerceToExpected(strLit("lifo", loc), DYN);
|
|
3579
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3321
3580
|
if (args.length > 1) {
|
|
3322
3581
|
lowerer.noLowering(`${api} with ${args.length} arguments`, expr, "the supported form is new Agent(options?)");
|
|
3323
3582
|
}
|
|
@@ -3326,7 +3585,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3326
3585
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
3327
3586
|
lowerer.noLowering(`${api} with a non-literal options value`, args[0], "spell the options as an object literal at the construction site");
|
|
3328
3587
|
}
|
|
3329
|
-
for (const prop of optsNode.properties) {
|
|
3588
|
+
for (const prop of optsNode.properties.nodes) {
|
|
3330
3589
|
if (ts.isSpreadAssignment(prop)) {
|
|
3331
3590
|
lowerer.noLowering(`${api} with an options spread`, prop, "write each option inline");
|
|
3332
3591
|
}
|
|
@@ -3382,12 +3641,14 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3382
3641
|
// the settable defaultPort carries this one.
|
|
3383
3642
|
port = lowerVal("f64");
|
|
3384
3643
|
break;
|
|
3385
|
-
case "scheduling":
|
|
3386
|
-
//
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
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);
|
|
3390
3650
|
break;
|
|
3651
|
+
}
|
|
3391
3652
|
default:
|
|
3392
3653
|
fenceOrDropOptionKey(lowerer, prop, key, api, bi.module === "https" ? HTTPS_AGENT_DOCUMENTED_OPTIONS : AGENT_DOCUMENTED_OPTIONS, bi.module === "https"
|
|
3393
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"
|
|
@@ -3406,6 +3667,7 @@ export function lowerHttpAgentNew(lowerer, expr) {
|
|
|
3406
3667
|
maxFree,
|
|
3407
3668
|
timeout,
|
|
3408
3669
|
port,
|
|
3670
|
+
scheduling,
|
|
3409
3671
|
],
|
|
3410
3672
|
type: DYN,
|
|
3411
3673
|
loc,
|
|
@@ -3431,24 +3693,24 @@ export function lowerHttpServerNew(lowerer, expr) {
|
|
|
3431
3693
|
function lowerHttpModuleCall(lowerer, expr, bi, loc) {
|
|
3432
3694
|
if (bi.member === "validateHeaderName") {
|
|
3433
3695
|
requireStatementPosition(lowerer, expr, "http.validateHeaderName(...)");
|
|
3434
|
-
if (expr.arguments.length < 1 ||
|
|
3435
|
-
expr.arguments.length > 2 ||
|
|
3436
|
-
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)) {
|
|
3437
3699
|
lowerer.noLowering("http.validateHeaderName arguments", expr, "pass a header name and an optional label");
|
|
3438
3700
|
}
|
|
3439
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3440
|
-
const label = expr.arguments.length === 2
|
|
3441
|
-
? 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)
|
|
3442
3704
|
: strLit("Header name", loc);
|
|
3443
3705
|
return { kind: "libCall", fn: "http.validateHeaderName", args: [name, label], type: VOID, loc };
|
|
3444
3706
|
}
|
|
3445
3707
|
if (bi.member === "validateHeaderValue") {
|
|
3446
3708
|
requireStatementPosition(lowerer, expr, "http.validateHeaderValue(...)");
|
|
3447
|
-
if (expr.arguments.length !== 2 || expr.arguments.some(ts.isSpreadElement)) {
|
|
3709
|
+
if (expr.arguments.nodes.length !== 2 || expr.arguments.nodes.some(ts.isSpreadElement)) {
|
|
3448
3710
|
lowerer.noLowering("http.validateHeaderValue arguments", expr, "pass a header name and a value");
|
|
3449
3711
|
}
|
|
3450
|
-
const name = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
|
|
3451
|
-
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);
|
|
3452
3714
|
return {
|
|
3453
3715
|
kind: "libCall",
|
|
3454
3716
|
fn: "http.validateHeaderValue",
|
|
@@ -3478,7 +3740,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3478
3740
|
const loc = locOf(node);
|
|
3479
3741
|
let cert = null;
|
|
3480
3742
|
let key = null;
|
|
3481
|
-
for (const prop of node.properties) {
|
|
3743
|
+
for (const prop of node.properties.nodes) {
|
|
3482
3744
|
let initializer;
|
|
3483
3745
|
if (ts.isPropertyAssignment(prop) &&
|
|
3484
3746
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name))) {
|
|
@@ -3574,8 +3836,8 @@ const TLS_VALIDATED_OPTIONS = new Set([
|
|
|
3574
3836
|
* keepAliveTimeoutBuffer so the HTTP option is consumed without losing
|
|
3575
3837
|
* the literal's evaluation order. */
|
|
3576
3838
|
function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false) {
|
|
3577
|
-
const jsSource = isJsSourceFile(
|
|
3578
|
-
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)) &&
|
|
3579
3841
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
|
|
3580
3842
|
((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
|
|
3581
3843
|
(jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
|
|
@@ -3608,7 +3870,7 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
|
|
|
3608
3870
|
* callback (and 'secureConnect'/'connect' listeners) fires
|
|
3609
3871
|
* post-handshake — Node's secureConnect timing. */
|
|
3610
3872
|
function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
3611
|
-
const args = expr.arguments;
|
|
3873
|
+
const args = expr.arguments.nodes;
|
|
3612
3874
|
const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
|
|
3613
3875
|
if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
|
|
3614
3876
|
lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
|
|
@@ -3700,7 +3962,7 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
|
3700
3962
|
* module declares fences qualified (createSecureContext and connect
|
|
3701
3963
|
* carry pointed hints from the fence-hint table). */
|
|
3702
3964
|
function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
3703
|
-
const args = expr.arguments;
|
|
3965
|
+
const args = expr.arguments.nodes;
|
|
3704
3966
|
if (bi.member === "createServer") {
|
|
3705
3967
|
if (args.length < 1 || args.length > 2) {
|
|
3706
3968
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
|
|
@@ -3740,7 +4002,7 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
|
3740
4002
|
if (bi.member === "getCACertificates" &&
|
|
3741
4003
|
args.length === 1 &&
|
|
3742
4004
|
!args.some(ts.isSpreadElement) &&
|
|
3743
|
-
isJsSourceFile(
|
|
4005
|
+
isJsSourceFile(ts.getSourceFileOfNode(expr))) {
|
|
3744
4006
|
// The type-argument ladder (validateString + the documented name
|
|
3745
4007
|
// set); the real CA list has no lowering, so a valid name meets the
|
|
3746
4008
|
// compiler-rendered fence after the validation.
|
|
@@ -3846,7 +4108,7 @@ function clientFnRefOf(lowerer, node) {
|
|
|
3846
4108
|
* `const` declaration, or a parameter/let whose enclosing scope contains
|
|
3847
4109
|
* no assignment or ++/-- targeting it. */
|
|
3848
4110
|
function neverReassigned(lowerer, sym) {
|
|
3849
|
-
const decl =
|
|
4111
|
+
const decl = sym.declarations[0];
|
|
3850
4112
|
if (!decl)
|
|
3851
4113
|
return false;
|
|
3852
4114
|
if (ts.isVariableDeclaration(decl) &&
|
|
@@ -3953,7 +4215,7 @@ export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
|
|
|
3953
4215
|
* handler) and request/get — the http client lowering with the secure
|
|
3954
4216
|
* extras (port 443 default, rejectUnauthorized, ca). */
|
|
3955
4217
|
function lowerHttpsModuleCall(lowerer, expr, bi, loc) {
|
|
3956
|
-
const args = expr.arguments;
|
|
4218
|
+
const args = expr.arguments.nodes;
|
|
3957
4219
|
if (bi.member === "createServer") {
|
|
3958
4220
|
if (args.length < 1 || args.length > 2) {
|
|
3959
4221
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, (req, res) => ...)");
|
|
@@ -4034,7 +4296,7 @@ function stripParensAndCasts(node) {
|
|
|
4034
4296
|
* createSecureServer lowers h2 over TLS, with allowHTTP1 selecting one
|
|
4035
4297
|
* dual-ALPN server whose request/connect listeners mirror across parsers. */
|
|
4036
4298
|
function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
4037
|
-
const args = expr.arguments;
|
|
4299
|
+
const args = expr.arguments.nodes;
|
|
4038
4300
|
if (bi.member === "createServer") {
|
|
4039
4301
|
// The REAL h2c server (scr_http2.c). An options object literal is
|
|
4040
4302
|
// accepted and ignored (h2 session-tuning knobs; the honest-defaults
|
|
@@ -4098,7 +4360,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4098
4360
|
!arg1IsDyn &&
|
|
4099
4361
|
lowerer.checker.getCallSignatures(lowerer.typeOf(args[1])).length === 0) {
|
|
4100
4362
|
if (ts.isObjectLiteralExpression(args[1])) {
|
|
4101
|
-
for (const pr of args[1].properties) {
|
|
4363
|
+
for (const pr of args[1].properties.nodes) {
|
|
4102
4364
|
// Plain `name: value` and shorthand `{ ca }` both carry the
|
|
4103
4365
|
// option; a shorthand's value is the same-named identifier.
|
|
4104
4366
|
let name;
|
|
@@ -4281,17 +4543,17 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4281
4543
|
if (ts.isConditionalExpression(inner)) {
|
|
4282
4544
|
const whenTrue = stripParensAndCasts(inner.whenTrue);
|
|
4283
4545
|
const whenFalse = stripParensAndCasts(inner.whenFalse);
|
|
4284
|
-
const condText = inner.condition
|
|
4546
|
+
const condText = ts.getTextOfNode(inner.condition);
|
|
4285
4547
|
const ok = ts.isObjectLiteralExpression(whenTrue) &&
|
|
4286
4548
|
ts.isObjectLiteralExpression(whenFalse) &&
|
|
4287
|
-
whenFalse.properties.length === 0 &&
|
|
4288
|
-
whenTrue.properties.length === 1 &&
|
|
4289
|
-
ts.isPropertyAssignment(whenTrue.properties[0]) &&
|
|
4290
|
-
(ts.isIdentifier(whenTrue.properties[0].name) ||
|
|
4291
|
-
ts.isStringLiteral(whenTrue.properties[0].name)) &&
|
|
4292
|
-
whenTrue.properties[0].name.text ===
|
|
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 ===
|
|
4293
4555
|
"SNICallback" &&
|
|
4294
|
-
whenTrue.properties[0].initializer
|
|
4556
|
+
ts.getTextOfNode(whenTrue.properties.nodes[0].initializer) === condText;
|
|
4295
4557
|
if (!ok) {
|
|
4296
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");
|
|
4297
4559
|
}
|
|
@@ -4301,7 +4563,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4301
4563
|
if (!ts.isObjectLiteralExpression(inner)) {
|
|
4302
4564
|
lowerer.noLowering("createSecureServer options with a computed spread", prop, `spreads must be inline object literals here; ${SNI_HINT}`);
|
|
4303
4565
|
}
|
|
4304
|
-
for (const p of inner.properties)
|
|
4566
|
+
for (const p of inner.properties.nodes)
|
|
4305
4567
|
lowerOption(p);
|
|
4306
4568
|
return;
|
|
4307
4569
|
}
|
|
@@ -4367,11 +4629,11 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4367
4629
|
e.kind === ts.SyntaxKind.TrueKeyword ||
|
|
4368
4630
|
e.kind === ts.SyntaxKind.FalseKeyword;
|
|
4369
4631
|
const isLiteralObjectOfLiterals = (e) => ts.isObjectLiteralExpression(e) &&
|
|
4370
|
-
e.properties.every((p) => ts.isPropertyAssignment(p) &&
|
|
4632
|
+
e.properties.nodes.every((p) => ts.isPropertyAssignment(p) &&
|
|
4371
4633
|
ts.isIdentifier(p.name) &&
|
|
4372
4634
|
isScalarLiteral(p.initializer));
|
|
4373
4635
|
if (k === "settings" && initializer !== null && ts.isObjectLiteralExpression(initializer)) {
|
|
4374
|
-
for (const setting of initializer.properties) {
|
|
4636
|
+
for (const setting of initializer.properties.nodes) {
|
|
4375
4637
|
if (ts.isPropertyAssignment(setting) &&
|
|
4376
4638
|
ts.isIdentifier(setting.name) &&
|
|
4377
4639
|
setting.name.text === "enableConnectProtocol") {
|
|
@@ -4399,7 +4661,7 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4399
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)");
|
|
4400
4662
|
// An undocumented key, dropped like Node drops it.
|
|
4401
4663
|
};
|
|
4402
|
-
for (const prop of optsNode.properties)
|
|
4664
|
+
for (const prop of optsNode.properties.nodes)
|
|
4403
4665
|
lowerOption(prop);
|
|
4404
4666
|
if (cert === null || key === null) {
|
|
4405
4667
|
lowerer.noLowering("createSecureServer without both cert and key", optsNode, "the supported options object is { allowHTTP1?, cert, key } (PEM strings or Buffers)");
|
|
@@ -4464,6 +4726,37 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4464
4726
|
lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
|
|
4465
4727
|
"createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
|
|
4466
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
|
+
}
|
|
4467
4760
|
/** http.request(options[, cb]) / http.get(options[, cb]) — the client.
|
|
4468
4761
|
* The options argument must be an OBJECT LITERAL; the lowered keys are
|
|
4469
4762
|
* hostname/host, port, path, method, timeout, and headers (a nested
|
|
@@ -4491,11 +4784,36 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4491
4784
|
const c = lowerer.lowerCondition(binding.cond);
|
|
4492
4785
|
return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
|
|
4493
4786
|
};
|
|
4494
|
-
const args = expr.arguments;
|
|
4787
|
+
const args = expr.arguments.nodes;
|
|
4495
4788
|
if (args.length < 1 || args.length > 2) {
|
|
4496
4789
|
lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported form is ${member}(options[, callback])`);
|
|
4497
4790
|
}
|
|
4498
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
|
+
}
|
|
4499
4817
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
4500
4818
|
const t = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
4501
4819
|
if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
|
|
@@ -4562,7 +4880,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4562
4880
|
let servername = null;
|
|
4563
4881
|
/** maxHeaderSize: the response head's size bound. */
|
|
4564
4882
|
let maxHeaderSize = null;
|
|
4565
|
-
for (const prop of optsNode.properties) {
|
|
4883
|
+
for (const prop of optsNode.properties.nodes) {
|
|
4566
4884
|
// Shorthand entries ({ port } for { port: port }) are the natural
|
|
4567
4885
|
// spelling at these call sites — the shorthand's VALUE lowering
|
|
4568
4886
|
// resolves the local binding (lowerShorthandValue), not the property
|
|
@@ -4657,6 +4975,9 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4657
4975
|
maxHeaderSize = lowerVal("f64");
|
|
4658
4976
|
break;
|
|
4659
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
|
+
}
|
|
4660
4981
|
if (!secureish) {
|
|
4661
4982
|
lowerer.noLowering(`${member} option 'servername'`, prop, "servername is an https.request option — the plain http client has no TLS layer");
|
|
4662
4983
|
}
|
|
@@ -4820,22 +5141,29 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4820
5141
|
timeout ??= numLit(0, loc);
|
|
4821
5142
|
headers ??= { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
|
|
4822
5143
|
const autoEnd = boolLit(member === "get", loc);
|
|
4823
|
-
//
|
|
4824
|
-
//
|
|
4825
|
-
//
|
|
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).
|
|
4826
5150
|
const withSignal = (request) => {
|
|
4827
5151
|
if (signal === null && servername === null && maxHeaderSize === null)
|
|
4828
5152
|
return request;
|
|
4829
5153
|
const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
|
|
4830
5154
|
const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
|
|
4831
|
-
const steps = [
|
|
4832
|
-
|
|
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 });
|
|
4833
5161
|
steps.push({
|
|
4834
5162
|
kind: "exprStmt",
|
|
4835
5163
|
expr: {
|
|
4836
5164
|
kind: "libCall",
|
|
4837
|
-
fn: "http.
|
|
4838
|
-
args: [
|
|
5165
|
+
fn: "http.clientSignalCheck",
|
|
5166
|
+
args: [signalRef()],
|
|
4839
5167
|
type: VOID,
|
|
4840
5168
|
loc,
|
|
4841
5169
|
},
|
|
@@ -4847,18 +5175,38 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
4847
5175
|
kind: "exprStmt",
|
|
4848
5176
|
expr: {
|
|
4849
5177
|
kind: "libCall",
|
|
4850
|
-
fn: "https.
|
|
4851
|
-
args: [
|
|
5178
|
+
fn: "https.nextServername",
|
|
5179
|
+
args: [servername],
|
|
4852
5180
|
type: VOID,
|
|
4853
5181
|
loc,
|
|
4854
5182
|
},
|
|
4855
5183
|
loc,
|
|
4856
5184
|
});
|
|
4857
5185
|
}
|
|
4858
|
-
|
|
5186
|
+
steps.push({ kind: "varDecl", localId: local.id, init: request, loc });
|
|
5187
|
+
if (maxHeaderSize !== null) {
|
|
4859
5188
|
steps.push({
|
|
4860
5189
|
kind: "exprStmt",
|
|
4861
|
-
expr: {
|
|
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
|
+
},
|
|
4862
5210
|
loc,
|
|
4863
5211
|
});
|
|
4864
5212
|
}
|
|
@@ -4927,7 +5275,7 @@ function lowerClientHeadersOption(lowerer, node) {
|
|
|
4927
5275
|
const loc = locOf(node);
|
|
4928
5276
|
if (ts.isObjectLiteralExpression(node)) {
|
|
4929
5277
|
const elems = [];
|
|
4930
|
-
for (const prop of node.properties) {
|
|
5278
|
+
for (const prop of node.properties.nodes) {
|
|
4931
5279
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
4932
5280
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
4933
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])");
|
|
@@ -4963,13 +5311,13 @@ function lowerHttpTrailersOption(lowerer, node) {
|
|
|
4963
5311
|
return lowerClientHeadersOption(lowerer, node);
|
|
4964
5312
|
const loc = locOf(node);
|
|
4965
5313
|
const flat = [];
|
|
4966
|
-
for (const entry of node.elements) {
|
|
4967
|
-
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) {
|
|
4968
5316
|
lowerer.noLowering("addTrailers pair list", entry, "use an object/Record or literal [name, value] pairs");
|
|
4969
5317
|
}
|
|
4970
5318
|
const pair = entry;
|
|
4971
|
-
const name = pair.elements[0];
|
|
4972
|
-
const value = pair.elements[1];
|
|
5319
|
+
const name = pair.elements.nodes[0];
|
|
5320
|
+
const value = pair.elements.nodes[1];
|
|
4973
5321
|
if (ts.isSpreadElement(name) || ts.isSpreadElement(value)) {
|
|
4974
5322
|
lowerer.noLowering("addTrailers pair with spread", entry, "use direct string name/value expressions");
|
|
4975
5323
|
}
|
|
@@ -4987,7 +5335,7 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
4987
5335
|
return null;
|
|
4988
5336
|
const name = access.name.text;
|
|
4989
5337
|
const loc = locOf(call);
|
|
4990
|
-
const args = call.arguments;
|
|
5338
|
+
const args = call.arguments.nodes;
|
|
4991
5339
|
if (name === "setHeader") {
|
|
4992
5340
|
requireStatementPosition(lowerer, call, "request.setHeader(...)");
|
|
4993
5341
|
if (args.length !== 2)
|
|
@@ -5366,7 +5714,7 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5366
5714
|
return null;
|
|
5367
5715
|
const name = access.name.text;
|
|
5368
5716
|
const loc = locOf(call);
|
|
5369
|
-
const args = call.arguments;
|
|
5717
|
+
const args = call.arguments.nodes;
|
|
5370
5718
|
if (name === "setTimeout") {
|
|
5371
5719
|
requireStatementPosition(lowerer, call, "message.setTimeout(...)");
|
|
5372
5720
|
if (args.length < 1 || args.length > 2)
|
|
@@ -5434,6 +5782,26 @@ function lowerHttpReqMethodCall(lowerer, call, access) {
|
|
|
5434
5782
|
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
5435
5783
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPREQ_T);
|
|
5436
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
|
+
}
|
|
5437
5805
|
const { cb } = lowerCallbackArg(lowerer, args[1], "data listeners", 1, (p) => p.kind === "bytes" && p.elem === "u8", "use (chunk: Buffer) or ()", [DYN]);
|
|
5438
5806
|
return { kind: "libCall", fn: "http.reqOnData", args: [receiver, cb, once], type: VOID, loc };
|
|
5439
5807
|
}
|
|
@@ -5486,7 +5854,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5486
5854
|
return null;
|
|
5487
5855
|
const name = access.name.text;
|
|
5488
5856
|
const loc = locOf(call);
|
|
5489
|
-
const args = call.arguments;
|
|
5857
|
+
const args = call.arguments.nodes;
|
|
5490
5858
|
if (name === "setTimeout") {
|
|
5491
5859
|
if (args.length < 1 || args.length > 2) {
|
|
5492
5860
|
lowerer.noLowering(`res.setTimeout with ${args.length} arguments`, call, "use setTimeout(milliseconds[, callback])");
|
|
@@ -5504,7 +5872,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5504
5872
|
}
|
|
5505
5873
|
if (name === "writeContinue" || name === "writeProcessing" || name === "writeEarlyHints") {
|
|
5506
5874
|
requireStatementPosition(lowerer, call, `res.${name}(...)`);
|
|
5507
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5875
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5508
5876
|
lowerer.noLowering(`Http2ServerResponse.${name}`, call, "HTTP/2 informational responses are not supported by the static runtime yet");
|
|
5509
5877
|
}
|
|
5510
5878
|
const receiver = coerceToHandle(lowerer, access.expression, HTTPRES_T);
|
|
@@ -5525,7 +5893,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5525
5893
|
let pairs;
|
|
5526
5894
|
if (ts.isObjectLiteralExpression(node)) {
|
|
5527
5895
|
const elems = [];
|
|
5528
|
-
for (const prop of node.properties) {
|
|
5896
|
+
for (const prop of node.properties.nodes) {
|
|
5529
5897
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5530
5898
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5531
5899
|
lowerer.noLowering("writeEarlyHints headers with dynamic keys, spreads, or shorthand entries", prop, "use literal header keys and string values");
|
|
@@ -5588,7 +5956,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5588
5956
|
}
|
|
5589
5957
|
if (name === "addTrailers") {
|
|
5590
5958
|
requireStatementPosition(lowerer, call, "res.addTrailers(...)");
|
|
5591
|
-
if (lowerer.typeOf(access.expression).getSymbol()
|
|
5959
|
+
if (ts.symbolNameOf(lowerer.typeOf(access.expression).getSymbol()) === "Http2ServerResponse") {
|
|
5592
5960
|
lowerer.noLowering("Http2ServerResponse.addTrailers", call, "HTTP/2 response trailers are not supported by the static runtime yet");
|
|
5593
5961
|
}
|
|
5594
5962
|
if (args.length !== 1)
|
|
@@ -5725,7 +6093,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5725
6093
|
}
|
|
5726
6094
|
const names = [];
|
|
5727
6095
|
const values = [];
|
|
5728
|
-
for (const prop of headersNode.properties) {
|
|
6096
|
+
for (const prop of headersNode.properties.nodes) {
|
|
5729
6097
|
const key = ts.isPropertyAssignment(prop) ? staticHeaderKeyOf(lowerer, prop) : null;
|
|
5730
6098
|
if (!ts.isPropertyAssignment(prop) || key === null) {
|
|
5731
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])");
|
|
@@ -5853,6 +6221,26 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
5853
6221
|
return endWithCb(fn, [receiver, data], cbArg);
|
|
5854
6222
|
return { kind: "libCall", fn, args: [receiver, data], type: VOID, loc };
|
|
5855
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
|
+
}
|
|
5856
6244
|
lowerer.noLowering(`${name} of '${lowerer.fmt(data.type)}' data`, dataNode ?? call, NARROW_DATA_HINT);
|
|
5857
6245
|
}
|
|
5858
6246
|
if (name === "getHeader" || name === "hasHeader" || name === "removeHeader") {
|