@scriptc/compiler 0.4.6 → 0.4.8
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/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +29 -6
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +57 -12
- package/ambient/node-fallback/http.d.ts +26 -18
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +25 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +95 -20
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +22 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +18 -5
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +20 -2
- package/dist/backend/linker.js +221 -35
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +15 -6
- package/dist/backend/lld.js +24 -16
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +13 -5
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +34 -9
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +64 -3
- package/dist/backend/llvm/dyn.js +251 -15
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +68 -5
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +226 -77
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +138 -34
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +142 -10
- package/dist/backend/llvm/emitter.js +523 -73
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +38 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +237 -23
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +123 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +57 -1
- package/dist/backend/llvm/js-ic.js +389 -22
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +152 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +180 -27
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +139 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +26 -3
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +58 -17
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +147 -12
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +4 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +36 -3
- package/dist/backend/llvm/shapes.js +201 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +47 -3
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +94 -0
- package/dist/backend/native/executable.js +134 -10
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +10 -2
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +8 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +30 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +72 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +46 -7
- package/dist/backend/runtime-pack-core.js +37 -2
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +213 -12
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +8 -1
- package/dist/backend/vendor-archives.js +313 -8
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +60 -3
- package/dist/backend/vendor-inputs.js +109 -3
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +62 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +25 -12
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +14 -0
- package/dist/diagnostics/codes.js +14 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +68 -0
- package/dist/diagnostics/diagnostic.js +186 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +48 -0
- package/dist/executable/executable-cache.js +38 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +127 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +438 -234
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +24 -0
- package/dist/frontend/early-errors.js +836 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +207 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +86 -4
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +41 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +565 -28
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +42 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
- package/dist/frontend/lowering/builtins/operating-system.js +101 -20
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +18 -2
- package/dist/frontend/lowering/builtins/process.js +386 -25
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +200 -38
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +55 -13
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +180 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +35 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +15 -0
- package/dist/frontend/lowering/coercions/state.js +24 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +39 -2
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +37 -8
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +30 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +450 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
- package/dist/frontend/lowering/expressions/array-literals.js +88 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +216 -14
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +272 -11
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +173 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +195 -18
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +951 -240
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
- package/dist/frontend/lowering/expressions/property-access.js +1141 -87
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +262 -4
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +25 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +156 -22
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +42 -13
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +75 -0
- package/dist/frontend/lowering/generic-functions.js +790 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +15 -4
- package/dist/frontend/lowering/global-values.js +67 -9
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +571 -9
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +25 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +140 -16
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +342 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -1
- package/dist/frontend/lowering/lower-calls.js +1354 -273
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +121 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +36 -5
- package/dist/frontend/lowering/lower-classes.js +630 -89
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
- package/dist/frontend/lowering/lower-event-emitter.js +610 -98
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
- package/dist/frontend/lowering/lower-exprs.js +96 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +27 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +713 -92
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +135 -27
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +472 -67
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +463 -96
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +77 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
- package/dist/frontend/lowering/lower-stmts.js +831 -136
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +243 -48
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +363 -21
- package/dist/frontend/lowering/lowerer.js +1224 -129
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +19 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
- package/dist/frontend/lowering/partial-assertions.js +189 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +221 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +42 -1
- package/dist/frontend/lowering/surfaces.js +212 -71
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +136 -17
- package/dist/frontend/lowering/unit-journal.js +324 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +126 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +95 -11
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +9 -4
- package/dist/frontend/pipeline.js +162 -38
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +71 -2
- package/dist/frontend/program.js +836 -411
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +184 -4
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +956 -101
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +98 -11
- package/dist/frontend/type-mapper.js +770 -182
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +224 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- 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/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +96 -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 +453 -26
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5350 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +29 -10
- package/dist/ir/fields.generated.js +1039 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +6 -4
- package/dist/ir/function-references.js +11 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +14 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +945 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +130 -44
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +58 -25
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +37 -3
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -3
- package/dist/ir/parameter-versions.js +63 -40
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +139 -5
- package/dist/ir/runtime-features.js +397 -19
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +135 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +11 -2
- package/dist/ir/saturating-loop-jams.js +56 -16
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +40 -28
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +8 -2
- package/dist/ir/serialize.js +92 -24
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +170 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +49 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +26 -5
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +74 -28
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +63 -4
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +93 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +37 -1
- package/dist/node-islands/boundary.js +65 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +27 -1
- package/dist/node-islands/detect.js +475 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +175 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +4 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +9 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +16 -1
- package/dist/node-islands/scan.js +110 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +221 -122
|
@@ -1198,8 +1198,8 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1198
1198
|
return { kind: "libCall", fn, args: [receiver], type: VOID, loc };
|
|
1199
1199
|
}
|
|
1200
1200
|
if (name === "listen") {
|
|
1201
|
-
if (args.length
|
|
1202
|
-
lowerer.noLowering(`listen with ${args.length} arguments`, call, "the supported form is listen(port[, host][, callback]) — port 0 binds an ephemeral port");
|
|
1201
|
+
if (args.length > 3) {
|
|
1202
|
+
lowerer.noLowering(`listen with ${args.length} arguments`, call, "the supported form is listen([port][, host][, callback]) — port 0 binds an ephemeral port");
|
|
1203
1203
|
}
|
|
1204
1204
|
// Node answers the server (`return this` chaining — `const s =
|
|
1205
1205
|
// http.createServer(...).listen(0)`, `server.listen(0).address()`):
|
|
@@ -1212,6 +1212,77 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1212
1212
|
return receiverReturningCall(lowerer, fn, callArgs, NETSERVER_T, loc);
|
|
1213
1213
|
};
|
|
1214
1214
|
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1215
|
+
// listen() and listen(callback): Node binds an arbitrary unused port
|
|
1216
|
+
// (normalizeArgs takes a function first argument as the callback).
|
|
1217
|
+
if (args.length === 0)
|
|
1218
|
+
return listenResult("net.listen", [receiver, numLit(0, loc)]);
|
|
1219
|
+
const first = lowerer.mapTypeOf(lowerer.typeOf(args[0]));
|
|
1220
|
+
// An untyped first argument: a checked-dynamic value, a JavaScript value
|
|
1221
|
+
// read into an untyped slot, or a checker `any`.
|
|
1222
|
+
const untyped = args.length > 0 &&
|
|
1223
|
+
(first?.kind === "dyn" ||
|
|
1224
|
+
first?.kind === "jsval" ||
|
|
1225
|
+
(lowerer.typeOf(args[0]).flags & ts.TypeFlags.Any) !== 0);
|
|
1226
|
+
if (args.length === 1 && first?.kind === "func") {
|
|
1227
|
+
const { cb } = lowerCallbackArg(lowerer, args[0], "listen callbacks", 0, () => false, "use ()", []);
|
|
1228
|
+
return listenResult("net.listenCb", [receiver, numLit(0, loc), cb]);
|
|
1229
|
+
}
|
|
1230
|
+
// An untyped first argument takes its port from net.listenPortDyn,
|
|
1231
|
+
// Node's normalizeArgs and validatePort at run time: 0 for a function,
|
|
1232
|
+
// undefined or null, the number of a port number or numeric string,
|
|
1233
|
+
// ERR_SOCKET_BAD_PORT for a bad port, and the fence for an options
|
|
1234
|
+
// object or a pipe path, which have no lowering from untyped values.
|
|
1235
|
+
const portOfUntyped = (value) => ({
|
|
1236
|
+
kind: "libCall",
|
|
1237
|
+
fn: "net.listenPortDyn",
|
|
1238
|
+
args: [
|
|
1239
|
+
value,
|
|
1240
|
+
ladderFenceExpr(lowerer, "listen with a runtime options object or pipe path", args[0], "pass the port as a number, the path as a string, or the options as an object literal"),
|
|
1241
|
+
],
|
|
1242
|
+
type: F64,
|
|
1243
|
+
loc,
|
|
1244
|
+
});
|
|
1245
|
+
if (args.length === 1 && untyped) {
|
|
1246
|
+
// An untyped single argument: a function is the callback on an
|
|
1247
|
+
// arbitrary port; any other value is the port.
|
|
1248
|
+
const server = lowerer.declareHiddenLocal("%listenServer", NETSERVER_T);
|
|
1249
|
+
const arg = lowerer.declareHiddenLocal("%listenArg", DYN);
|
|
1250
|
+
const serverRef = () => varRef(server.id, NETSERVER_T, loc);
|
|
1251
|
+
const argRef = () => varRef(arg.id, DYN, loc);
|
|
1252
|
+
const listenStmt = (fn, callArgs) => ({
|
|
1253
|
+
kind: "exprStmt",
|
|
1254
|
+
expr: { kind: "libCall", fn, args: callArgs, type: VOID, loc },
|
|
1255
|
+
loc,
|
|
1256
|
+
});
|
|
1257
|
+
return {
|
|
1258
|
+
kind: "seqExpr",
|
|
1259
|
+
stmts: [
|
|
1260
|
+
{ kind: "varDecl", localId: server.id, init: receiver, loc },
|
|
1261
|
+
{
|
|
1262
|
+
kind: "varDecl",
|
|
1263
|
+
localId: arg.id,
|
|
1264
|
+
init: lowerer.coerceToExpected(lowerer.lowerExpr(args[0]), DYN),
|
|
1265
|
+
loc,
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
kind: "if",
|
|
1269
|
+
cond: { kind: "dynTest", test: "function", value: argRef(), type: BOOL, loc },
|
|
1270
|
+
then: [
|
|
1271
|
+
listenStmt("net.listenCb", [
|
|
1272
|
+
serverRef(),
|
|
1273
|
+
numLit(0, loc),
|
|
1274
|
+
{ kind: "dynCheck", value: argRef(), type: funcOf([], VOID), loc },
|
|
1275
|
+
]),
|
|
1276
|
+
],
|
|
1277
|
+
else_: [listenStmt("net.listen", [serverRef(), portOfUntyped(argRef())])],
|
|
1278
|
+
loc,
|
|
1279
|
+
},
|
|
1280
|
+
],
|
|
1281
|
+
result: serverRef(),
|
|
1282
|
+
type: NETSERVER_T,
|
|
1283
|
+
loc,
|
|
1284
|
+
};
|
|
1285
|
+
}
|
|
1215
1286
|
// The options-object form — listen({ port, host?, ipv6Only?, reusePort? }[, cb]),
|
|
1216
1287
|
// the portless listenOnProxyInterface shape: host binds that ONE
|
|
1217
1288
|
// address (an IP literal — the runtime has no resolver here; absent
|
|
@@ -1370,7 +1441,9 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1370
1441
|
const { cb } = lowerCallbackArg(lowerer, args[1], "listen callbacks", 0, () => false, "use ()", []);
|
|
1371
1442
|
return listenResult("net.listenPathCb", [receiver, path, cb]);
|
|
1372
1443
|
}
|
|
1373
|
-
const port =
|
|
1444
|
+
const port = untyped
|
|
1445
|
+
? portOfUntyped(lowerer.coerceToExpected(lowerer.lowerExpr(args[0]), DYN))
|
|
1446
|
+
: lowerer.lowerExprExpecting(args[0], F64);
|
|
1374
1447
|
// The optional middle host — listen(port, '127.0.0.1'[, cb]): a
|
|
1375
1448
|
// string-typed second argument is the bind address (the net.connect
|
|
1376
1449
|
// disambiguation), routed through the options-form entry.
|
|
@@ -1669,6 +1742,26 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1669
1742
|
loc,
|
|
1670
1743
|
};
|
|
1671
1744
|
}
|
|
1745
|
+
if (event === "clientError") {
|
|
1746
|
+
// (err, socket): a request the parser rejects, or a connection error,
|
|
1747
|
+
// goes to the listeners instead of the default answer.
|
|
1748
|
+
const cb = lowerer.lowerExpr(args[1]);
|
|
1749
|
+
if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 2) {
|
|
1750
|
+
lowerer.unsupported("SC1090", args[1], "clientError listeners with more than two parameters or returning a value (use (err, socket) with a block body)");
|
|
1751
|
+
}
|
|
1752
|
+
const [err, socket] = cb.type.params;
|
|
1753
|
+
if ((err !== undefined && !(err.kind === "object" && err.className === "%Error")) ||
|
|
1754
|
+
(socket !== undefined && socket.kind !== "netSocket")) {
|
|
1755
|
+
lowerer.unsupported("SC1090", args[1], "clientError listeners whose parameters are not (err: Error, socket: Socket)");
|
|
1756
|
+
}
|
|
1757
|
+
return {
|
|
1758
|
+
kind: "libCall",
|
|
1759
|
+
fn: "http.serverOnClientError",
|
|
1760
|
+
args: [receiver, cb, once],
|
|
1761
|
+
type: VOID,
|
|
1762
|
+
loc,
|
|
1763
|
+
};
|
|
1764
|
+
}
|
|
1672
1765
|
if (event === "sessionError") {
|
|
1673
1766
|
const cb = lowerer.lowerExpr(args[1]);
|
|
1674
1767
|
if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 2) {
|
|
@@ -1687,7 +1780,46 @@ function lowerNetServerMethodCall(lowerer, call, access) {
|
|
|
1687
1780
|
loc,
|
|
1688
1781
|
};
|
|
1689
1782
|
}
|
|
1690
|
-
lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
|
|
1783
|
+
lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"connection", "request", "checkContinue", "checkExpectation", "clientError", "drop", "stream", "session", "upgrade", "connect", "error", "close", "listening", and "sessionError" are the supported server events (as literals)');
|
|
1784
|
+
}
|
|
1785
|
+
if ((name === "off" || name === "removeListener") && args.length === 2) {
|
|
1786
|
+
// server.off(event, cb): the LAST listener standing for the same
|
|
1787
|
+
// function leaves that event's list (Node's removeListener order).
|
|
1788
|
+
// Only the event families whose registry keeps a removable list; the
|
|
1789
|
+
// rest refuse rather than silently leaving the listener in place.
|
|
1790
|
+
requireStatementPosition(lowerer, call, `server.${name}(...)`);
|
|
1791
|
+
const evT = lowerer.typeOf(args[0]);
|
|
1792
|
+
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
1793
|
+
const kind = event === null
|
|
1794
|
+
? null
|
|
1795
|
+
: event === "error"
|
|
1796
|
+
? 1
|
|
1797
|
+
: event === "close"
|
|
1798
|
+
? 2
|
|
1799
|
+
: event === "listening"
|
|
1800
|
+
? 3
|
|
1801
|
+
: event === "connection" || event === "secureConnection"
|
|
1802
|
+
? 4
|
|
1803
|
+
: event === "timeout"
|
|
1804
|
+
? 5
|
|
1805
|
+
: event === "drop"
|
|
1806
|
+
? 6
|
|
1807
|
+
: null;
|
|
1808
|
+
if (kind === null) {
|
|
1809
|
+
lowerer.noLowering(`server.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"error", "close", "listening", "connection", "secureConnection", "timeout", and "drop" are the events off/removeListener removes (as literals)');
|
|
1810
|
+
}
|
|
1811
|
+
const receiver = coerceToHandle(lowerer, access.expression, NETSERVER_T);
|
|
1812
|
+
const listener = lowerer.lowerExpr(args[1]);
|
|
1813
|
+
if (listener.type.kind !== "func") {
|
|
1814
|
+
lowerer.unsupported("SC1090", args[1], `server.${name} with a listener that is not a function`);
|
|
1815
|
+
}
|
|
1816
|
+
return {
|
|
1817
|
+
kind: "libCall",
|
|
1818
|
+
fn: "net.serverOff",
|
|
1819
|
+
args: [receiver, listener, numLit(kind, loc)],
|
|
1820
|
+
type: VOID,
|
|
1821
|
+
loc,
|
|
1822
|
+
};
|
|
1691
1823
|
}
|
|
1692
1824
|
if (name === "emit") {
|
|
1693
1825
|
// The demux route: emit("connection", socket) hands an accepted
|
|
@@ -3000,11 +3132,15 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3000
3132
|
const fn = name === "httpVersionMajor" ? "http.reqHttpVersionMajor" : "http.reqHttpVersionMinor";
|
|
3001
3133
|
return { kind: "libCall", fn, args: [receiver], type: F64, loc };
|
|
3002
3134
|
}
|
|
3003
|
-
if (name === "aborted" || name === "complete") {
|
|
3004
|
-
//
|
|
3005
|
-
//
|
|
3135
|
+
if (name === "aborted" || name === "complete" || name === "destroyed") {
|
|
3136
|
+
// aborted: the connection (or the h2 stream) closed before the
|
|
3137
|
+
// response finished; complete: the whole message arrived.
|
|
3006
3138
|
const receiver = coerceToHandle(lowerer, expr.expression, HTTPREQ_T);
|
|
3007
|
-
const fn = name === "aborted"
|
|
3139
|
+
const fn = name === "aborted"
|
|
3140
|
+
? "http.reqAborted"
|
|
3141
|
+
: name === "complete"
|
|
3142
|
+
? "http.reqComplete"
|
|
3143
|
+
: "http.reqDestroyed";
|
|
3008
3144
|
return { kind: "libCall", fn, args: [receiver], type: BOOL, loc };
|
|
3009
3145
|
}
|
|
3010
3146
|
if (name === "rawHeaders" || name === "rawTrailers") {
|
|
@@ -3343,6 +3479,10 @@ export function lowerServerProperty(lowerer, expr) {
|
|
|
3343
3479
|
const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
|
|
3344
3480
|
return { kind: "libCall", fn: "http.resWritableFinished", args: [receiver], type: BOOL, loc };
|
|
3345
3481
|
}
|
|
3482
|
+
if (name === "destroyed") {
|
|
3483
|
+
const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
|
|
3484
|
+
return { kind: "libCall", fn: "http.resDestroyed", args: [receiver], type: BOOL, loc };
|
|
3485
|
+
}
|
|
3346
3486
|
if (name === "sendDate" || name === "strictContentLength") {
|
|
3347
3487
|
const receiver = coerceToHandle(lowerer, expr.expression, HTTPRES_T);
|
|
3348
3488
|
const fn = name === "sendDate" ? "http.resSendDateGet" : "http.resStrictContentLengthGet";
|
|
@@ -5065,6 +5205,27 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
5065
5205
|
lowerer.noLowering(`http2.${bi.member}`, expr, builtinFenceHintOf("http2", bi.member) ??
|
|
5066
5206
|
"createSecureServer({ allowHTTP1: true, cert, key }) and the h2-only form are lowered", lowerer.resolveValueSymbol(expr.expression));
|
|
5067
5207
|
}
|
|
5208
|
+
/** The scalar request options the literal walk lowers, with the type it
|
|
5209
|
+
* lowers each one at. */
|
|
5210
|
+
const LITERAL_REQUEST_OPTION_KINDS = new Map([
|
|
5211
|
+
["hostname", "string"],
|
|
5212
|
+
["host", "string"],
|
|
5213
|
+
["port", "f64"],
|
|
5214
|
+
["path", "string"],
|
|
5215
|
+
["method", "string"],
|
|
5216
|
+
["timeout", "f64"],
|
|
5217
|
+
["maxHeaderSize", "f64"],
|
|
5218
|
+
]);
|
|
5219
|
+
/** Whether a literal's scalar option holds a value of another type than the
|
|
5220
|
+
* literal walk lowers it at, which sends the literal to the runtime walk. */
|
|
5221
|
+
function runtimeCheckedOption(lowerer, prop) {
|
|
5222
|
+
const want = LITERAL_REQUEST_OPTION_KINDS.get(prop.name.text);
|
|
5223
|
+
if (want === undefined)
|
|
5224
|
+
return false;
|
|
5225
|
+
const value = ts.isPropertyAssignment(prop) ? prop.initializer : prop.name;
|
|
5226
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(value));
|
|
5227
|
+
return t !== null && t.kind !== want;
|
|
5228
|
+
}
|
|
5068
5229
|
/** The checked-dynamic options value of a request whose options the
|
|
5069
5230
|
* runtime reads: a non-literal options value (a RequestOptions variable —
|
|
5070
5231
|
* checked-dynamic storage — or a record that converts to one), or a
|
|
@@ -5087,7 +5248,11 @@ function runtimeRequestOptions(lowerer, optsNode, secureish) {
|
|
|
5087
5248
|
(ts.isIdentifier(prop.name) || ts.isStringLiteral(prop.name)) &&
|
|
5088
5249
|
(prop.name.text === "socketPath" ||
|
|
5089
5250
|
// a client certificate: the runtime request walk reads cert and key
|
|
5090
|
-
(secureish && (prop.name.text === "cert" || prop.name.text === "key"))
|
|
5251
|
+
(secureish && (prop.name.text === "cert" || prop.name.text === "key")) ||
|
|
5252
|
+
// a scalar option whose value is not the walk's type (an untyped
|
|
5253
|
+
// or union value, a string port): the runtime walk runs Node's
|
|
5254
|
+
// checks on it (ERR_INVALID_ARG_TYPE with the option's name)
|
|
5255
|
+
runtimeCheckedOption(lowerer, prop)));
|
|
5091
5256
|
});
|
|
5092
5257
|
if (!needsRuntime)
|
|
5093
5258
|
return null;
|
|
@@ -5098,6 +5263,62 @@ function runtimeRequestOptions(lowerer, optsNode, secureish) {
|
|
|
5098
5263
|
return null;
|
|
5099
5264
|
return lowerer.coerceToExpected(lowerer.lowerExpr(optsNode), DYN);
|
|
5100
5265
|
}
|
|
5266
|
+
/** Whether the second argument of a URL-form client call is the response
|
|
5267
|
+
* callback rather than an options value: a function literal, or a value
|
|
5268
|
+
* whose type is a function. Node's overloads disambiguate the same way —
|
|
5269
|
+
* a RequestOptions value is not callable. */
|
|
5270
|
+
function isResponseCallback(lowerer, node) {
|
|
5271
|
+
if (ts.isArrowFunction(node) || ts.isFunctionExpression(node))
|
|
5272
|
+
return true;
|
|
5273
|
+
const type = lowerer.typeOf(node);
|
|
5274
|
+
// An untyped value stays on the callback side: Node decides
|
|
5275
|
+
// `typeof options === 'function'` at run time, and the two-argument URL
|
|
5276
|
+
// call has always taken an untyped callback (`http.get(url, cb)` with
|
|
5277
|
+
// `cb: any`). The options form needs a value the lowering can hand to
|
|
5278
|
+
// the merge, which an untyped value is not.
|
|
5279
|
+
if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
|
|
5280
|
+
return true;
|
|
5281
|
+
// A callable value is the callback (a function-typed variable, or a union
|
|
5282
|
+
// whose callable arm the checker widens). Everything else the mapper calls
|
|
5283
|
+
// a function is one too.
|
|
5284
|
+
if (lowerer.checker.getCallSignatures(type).length > 0)
|
|
5285
|
+
return true;
|
|
5286
|
+
const t = lowerer.mapTypeOf(type);
|
|
5287
|
+
// An OBJECT-SHAPED value is the options record: `RequestOptions` maps to
|
|
5288
|
+
// the checked-dynamic value, which the URL-form merge reads. A value with
|
|
5289
|
+
// no lowering type keeps the callback path it had.
|
|
5290
|
+
return t === null || t.kind === "func";
|
|
5291
|
+
}
|
|
5292
|
+
/** The options value of request(url, options[, cb]) as the checked-dynamic
|
|
5293
|
+
* record the runtime merges under the URL's fields: an object literal (the
|
|
5294
|
+
* merge reads it at run time, the same walk the options form's non-literal
|
|
5295
|
+
* path takes), or a value that converts to a dyn record. */
|
|
5296
|
+
function lowerUrlFormOptions(lowerer, node) {
|
|
5297
|
+
if (ts.isObjectLiteralExpression(node))
|
|
5298
|
+
return lowerDynObjectLiteral(lowerer, node);
|
|
5299
|
+
const t = lowerer.mapTypeOf(lowerer.typeOf(node));
|
|
5300
|
+
// `request(url, undefined, cb)`: Node's spread contributes no member, so
|
|
5301
|
+
// the URL's fields stand alone. The argument is still evaluated: an
|
|
5302
|
+
// expression with effects there runs, and its throw propagates, before
|
|
5303
|
+
// the request is built.
|
|
5304
|
+
if (t && (t.kind === "void" || t.kind === "undefinedT" || t.kind === "nullT")) {
|
|
5305
|
+
const loc = locOf(node);
|
|
5306
|
+
const value = lowerer.lowerExpr(node);
|
|
5307
|
+
if (value.kind === "unitLit")
|
|
5308
|
+
return dynUndefinedExpr(loc);
|
|
5309
|
+
return {
|
|
5310
|
+
kind: "seqExpr",
|
|
5311
|
+
stmts: [{ kind: "exprStmt", expr: value, loc }],
|
|
5312
|
+
result: dynUndefinedExpr(loc),
|
|
5313
|
+
type: DYN,
|
|
5314
|
+
loc,
|
|
5315
|
+
};
|
|
5316
|
+
}
|
|
5317
|
+
if (t && (t.kind === "dyn" || (t.kind === "record" && lowerer.dynConvertible(t)))) {
|
|
5318
|
+
return lowerer.coerceToExpected(lowerer.lowerExpr(node), DYN);
|
|
5319
|
+
}
|
|
5320
|
+
lowerer.noLowering(`the options of a URL-form request of '${t === null ? "unknown" : lowerer.fmt(t)}' values`, node, "pass an object literal or a Record value as the options");
|
|
5321
|
+
}
|
|
5101
5322
|
/** http.request(options[, cb]) / http.get(options[, cb]) — the client.
|
|
5102
5323
|
* The options argument must be an OBJECT LITERAL; the lowered keys are
|
|
5103
5324
|
* hostname/host, port, path, method, timeout, and headers (a nested
|
|
@@ -5126,10 +5347,18 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5126
5347
|
return binding.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
|
|
5127
5348
|
};
|
|
5128
5349
|
const args = expr.arguments.nodes;
|
|
5129
|
-
if (args.length < 1 || args.length >
|
|
5130
|
-
lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported
|
|
5350
|
+
if (args.length < 1 || args.length > 3) {
|
|
5351
|
+
lowerer.noLowering(`${member} with ${args.length} arguments`, expr, `the supported forms are ${member}(options[, callback]) and ${member}(url, options[, callback])`);
|
|
5131
5352
|
}
|
|
5132
5353
|
const optsNode = args[0];
|
|
5354
|
+
const optsType = lowerer.mapTypeOf(lowerer.typeOf(optsNode));
|
|
5355
|
+
/** The URL-string / URL-object target of the (url[, options][, cb]) forms. */
|
|
5356
|
+
const urlTarget = !ts.isObjectLiteralExpression(optsNode) &&
|
|
5357
|
+
(optsType?.kind === "string" || optsType?.kind === "url");
|
|
5358
|
+
if (args.length === 3 && !(urlTarget && binding === null)) {
|
|
5359
|
+
// Only the URL form has a middle options argument: (url, options, cb).
|
|
5360
|
+
lowerer.noLowering(`${member} with 3 arguments`, expr, `the supported forms are ${member}(options[, callback]) and ${member}(url, options[, callback])`);
|
|
5361
|
+
}
|
|
5133
5362
|
const runtimeOptions = binding === null ? runtimeRequestOptions(lowerer, optsNode, secureish) : null;
|
|
5134
5363
|
if (runtimeOptions !== null) {
|
|
5135
5364
|
// The options record is read at run time (the ClientRequest
|
|
@@ -5156,7 +5385,7 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5156
5385
|
};
|
|
5157
5386
|
}
|
|
5158
5387
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
5159
|
-
const t =
|
|
5388
|
+
const t = optsType;
|
|
5160
5389
|
if ((t?.kind === "string" || t?.kind === "url") && binding === null) {
|
|
5161
5390
|
// The URL-string form — http.get(`http://127.0.0.1:${port}/x`[, cb])
|
|
5162
5391
|
// and its https spelling: the runtime parses through the WHATWG unit
|
|
@@ -5180,6 +5409,45 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5180
5409
|
const methodLit = { kind: "strLit", value: "GET", type: STRING, loc };
|
|
5181
5410
|
const autoEnd = boolLit(member === "get", loc);
|
|
5182
5411
|
const isTls = secure === true;
|
|
5412
|
+
// The options-carrying forms: (url, options[, cb]). Node's merge
|
|
5413
|
+
// puts the URL's fields under the options' — `{...urlToHttpOptions(
|
|
5414
|
+
// new URL(url)), ...options}` — which the runtime does once, so the
|
|
5415
|
+
// options value travels as a checked-dynamic record (a literal
|
|
5416
|
+
// included: the merge reads it at run time, like Node).
|
|
5417
|
+
let urlOpts = null;
|
|
5418
|
+
let cbNode = null;
|
|
5419
|
+
if (args.length === 3) {
|
|
5420
|
+
urlOpts = args[1];
|
|
5421
|
+
cbNode = args[2];
|
|
5422
|
+
}
|
|
5423
|
+
else if (args.length === 2) {
|
|
5424
|
+
if (isResponseCallback(lowerer, args[1]))
|
|
5425
|
+
cbNode = args[1];
|
|
5426
|
+
else
|
|
5427
|
+
urlOpts = args[1];
|
|
5428
|
+
}
|
|
5429
|
+
if (urlOpts !== null) {
|
|
5430
|
+
const dynOpts = lowerUrlFormOptions(lowerer, urlOpts);
|
|
5431
|
+
if (cbNode === null) {
|
|
5432
|
+
const fn = isTls ? "https.requestUrlDyn" : "http.requestUrlDyn";
|
|
5433
|
+
return {
|
|
5434
|
+
kind: "libCall",
|
|
5435
|
+
fn,
|
|
5436
|
+
args: [url, dynOpts, autoEnd],
|
|
5437
|
+
type: HTTPCLIENTREQ_T,
|
|
5438
|
+
loc,
|
|
5439
|
+
};
|
|
5440
|
+
}
|
|
5441
|
+
const { cb } = lowerCallbackArg(lowerer, cbNode, "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
5442
|
+
const fn = isTls ? "https.requestUrlDynCb" : "http.requestUrlDynCb";
|
|
5443
|
+
return {
|
|
5444
|
+
kind: "libCall",
|
|
5445
|
+
fn,
|
|
5446
|
+
args: [url, dynOpts, autoEnd, cb],
|
|
5447
|
+
type: HTTPCLIENTREQ_T,
|
|
5448
|
+
loc,
|
|
5449
|
+
};
|
|
5450
|
+
}
|
|
5183
5451
|
if (args.length === 1) {
|
|
5184
5452
|
const fn = isTls ? "https.requestUrl" : "http.requestUrl";
|
|
5185
5453
|
return { kind: "libCall", fn, args: [url, methodLit, autoEnd], type: HTTPCLIENTREQ_T, loc };
|
|
@@ -5221,6 +5489,11 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5221
5489
|
let servername = null;
|
|
5222
5490
|
/** maxHeaderSize: the response head's size bound. */
|
|
5223
5491
|
let maxHeaderSize = null;
|
|
5492
|
+
/** protocol: the scheme the request claims. It dials nothing; Node
|
|
5493
|
+
* compares it against the agent's (the module's when there is no agent
|
|
5494
|
+
* value) and throws ERR_INVALID_PROTOCOL on a mismatch, so the check is
|
|
5495
|
+
* a runtime call before the request is built. */
|
|
5496
|
+
let protocol = null;
|
|
5224
5497
|
for (const prop of optsNode.properties.nodes) {
|
|
5225
5498
|
// Shorthand entries ({ port } for { port: port }) are the natural
|
|
5226
5499
|
// spelling at these call sites — the shorthand's VALUE lowering
|
|
@@ -5331,12 +5604,31 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5331
5604
|
signal = lowerer.coerceToExpected(v, DYN);
|
|
5332
5605
|
break;
|
|
5333
5606
|
}
|
|
5334
|
-
case "headers":
|
|
5335
|
-
|
|
5336
|
-
|
|
5607
|
+
case "headers": {
|
|
5608
|
+
// A shorthand `{ headers }` is the same option as `headers:
|
|
5609
|
+
// headers` — the entry's value, not the property symbol, is what
|
|
5610
|
+
// carries the record (lowerShorthandValue resolves it).
|
|
5611
|
+
const v = initializer !== null
|
|
5612
|
+
? lowerClientHeadersOption(lowerer, initializer)
|
|
5613
|
+
: lowerClientHeadersValue(lowerer, lowerer.lowerShorthandValue(prop), prop);
|
|
5614
|
+
headers = v;
|
|
5615
|
+
break;
|
|
5616
|
+
}
|
|
5617
|
+
case "protocol": {
|
|
5618
|
+
// Node's ClientRequest compares the declared scheme against the
|
|
5619
|
+
// agent's and throws ERR_INVALID_PROTOCOL before it dials; a
|
|
5620
|
+
// truthy non-matching value is the error, a falsy one means "the
|
|
5621
|
+
// agent's". The runtime check carries that comparison (any value
|
|
5622
|
+
// coerces, as Node's message does).
|
|
5623
|
+
const v = initializer !== null
|
|
5624
|
+
? lowerer.lowerExpr(initializer)
|
|
5625
|
+
: lowerer.lowerShorthandValue(prop);
|
|
5626
|
+
if (v.type.kind !== "string" && v.type.kind !== "dyn") {
|
|
5627
|
+
lowerer.noLowering(`a ${member} 'protocol' option of '${lowerer.fmt(v.type)}' values`, prop, "the option value must be a string ('http:' or 'https:')");
|
|
5337
5628
|
}
|
|
5338
|
-
|
|
5629
|
+
protocol = v;
|
|
5339
5630
|
break;
|
|
5631
|
+
}
|
|
5340
5632
|
case "createConnection": {
|
|
5341
5633
|
// The caller's own dialer: a `() => net.Socket` closure the
|
|
5342
5634
|
// runtime invokes once, synchronously (the proxy's loopback
|
|
@@ -5415,9 +5707,21 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5415
5707
|
}
|
|
5416
5708
|
default:
|
|
5417
5709
|
fenceOrDropOptionKey(lowerer, prop, key, member, secureish ? HTTPS_CLIENT_DOCUMENTED_OPTIONS : HTTP_CLIENT_DOCUMENTED_OPTIONS, secureish
|
|
5418
|
-
? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, rejectUnauthorized, ca, and servername are the supported options"
|
|
5419
|
-
: "hostname/host, port, path, method, timeout, headers, agent, signal, and
|
|
5420
|
-
}
|
|
5710
|
+
? "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, protocol, rejectUnauthorized, ca, and servername are the supported options"
|
|
5711
|
+
: "hostname/host, port, path, method, timeout, headers, agent, signal, maxHeaderSize, and protocol are the supported options");
|
|
5712
|
+
}
|
|
5713
|
+
}
|
|
5714
|
+
/** A literal request carrying both a protocol option and an Agent VALUE
|
|
5715
|
+
* evaluates the agent expression once, into a hidden local: the protocol
|
|
5716
|
+
* check and the request then read the same object, as Node's options
|
|
5717
|
+
* object does. */
|
|
5718
|
+
let agentInit = null;
|
|
5719
|
+
let agentLocalId = null;
|
|
5720
|
+
if (protocol !== null && agentVal !== null) {
|
|
5721
|
+
const agentLocal = lowerer.declareHiddenLocal("%requestAgent", DYN);
|
|
5722
|
+
agentLocalId = agentLocal.id;
|
|
5723
|
+
agentInit = agentVal;
|
|
5724
|
+
agentVal = varRef(agentLocal.id, DYN, loc);
|
|
5421
5725
|
}
|
|
5422
5726
|
if (agentClose !== null) {
|
|
5423
5727
|
// agent: false → Node sends `Connection: close` (its one-shot Agent
|
|
@@ -5489,11 +5793,14 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5489
5793
|
// built request (an already aborted signal destroys it at once, like
|
|
5490
5794
|
// Node's constructor).
|
|
5491
5795
|
const withSignal = (request) => {
|
|
5492
|
-
if (signal === null && servername === null && maxHeaderSize === null)
|
|
5796
|
+
if (signal === null && servername === null && maxHeaderSize === null && protocol === null)
|
|
5493
5797
|
return request;
|
|
5494
5798
|
const local = lowerer.declareHiddenLocal("%requestOptions", HTTPCLIENTREQ_T);
|
|
5495
5799
|
const ref = () => varRef(local.id, HTTPCLIENTREQ_T, loc);
|
|
5496
5800
|
const steps = [];
|
|
5801
|
+
if (agentInit !== null && agentLocalId !== null) {
|
|
5802
|
+
steps.push({ kind: "varDecl", localId: agentLocalId, init: agentInit, loc });
|
|
5803
|
+
}
|
|
5497
5804
|
let signalRef = null;
|
|
5498
5805
|
if (signal !== null) {
|
|
5499
5806
|
const signalLocal = lowerer.declareHiddenLocal("%requestSignal", DYN);
|
|
@@ -5511,6 +5818,34 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5511
5818
|
loc,
|
|
5512
5819
|
});
|
|
5513
5820
|
}
|
|
5821
|
+
if (protocol !== null) {
|
|
5822
|
+
// Node's constructor order: the signal's type, then the agent's
|
|
5823
|
+
// scheme against the declared protocol, then the request itself.
|
|
5824
|
+
// An Agent VALUE is the agent whose protocol counts; without one,
|
|
5825
|
+
// the calling module's (or the binding's, at run time).
|
|
5826
|
+
const secureArg = binding !== null ? secureExpr() : boolLit(secure === true, loc);
|
|
5827
|
+
// The runtime compares the coerced value, as Node's message does.
|
|
5828
|
+
const protocolArg = lowerer.coerceToExpected(protocol, DYN);
|
|
5829
|
+
steps.push({
|
|
5830
|
+
kind: "exprStmt",
|
|
5831
|
+
expr: agentVal !== null
|
|
5832
|
+
? {
|
|
5833
|
+
kind: "libCall",
|
|
5834
|
+
fn: "http.clientProtocolCheckAgent",
|
|
5835
|
+
args: [protocolArg, secureArg, agentVal],
|
|
5836
|
+
type: VOID,
|
|
5837
|
+
loc,
|
|
5838
|
+
}
|
|
5839
|
+
: {
|
|
5840
|
+
kind: "libCall",
|
|
5841
|
+
fn: "http.clientProtocolCheck",
|
|
5842
|
+
args: [protocolArg, secureArg],
|
|
5843
|
+
type: VOID,
|
|
5844
|
+
loc,
|
|
5845
|
+
},
|
|
5846
|
+
loc,
|
|
5847
|
+
});
|
|
5848
|
+
}
|
|
5514
5849
|
if (servername !== null) {
|
|
5515
5850
|
steps.push({
|
|
5516
5851
|
kind: "exprStmt",
|
|
@@ -5634,13 +5969,18 @@ function lowerClientHeadersOption(lowerer, node) {
|
|
|
5634
5969
|
}
|
|
5635
5970
|
return { kind: "arrayLit", elems, type: arrayOf(STRING), loc };
|
|
5636
5971
|
}
|
|
5637
|
-
|
|
5972
|
+
return lowerClientHeadersValue(lowerer, lowerer.lowerExpr(node), node);
|
|
5973
|
+
}
|
|
5974
|
+
/** The non-literal arm: a Record whose values are strings (or
|
|
5975
|
+
* `string | undefined`), flattened by the interned env.pairs helper. */
|
|
5976
|
+
function lowerClientHeadersValue(lowerer, v, blame) {
|
|
5977
|
+
const loc = locOf(blame);
|
|
5638
5978
|
if (v.type.kind !== "record") {
|
|
5639
|
-
lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`,
|
|
5979
|
+
lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, blame, "pass an object literal or a Record<string, string>");
|
|
5640
5980
|
}
|
|
5641
5981
|
const helper = lowerer.envToPairsHelper(v.type.shapeId, loc);
|
|
5642
5982
|
if (helper === null) {
|
|
5643
|
-
lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`,
|
|
5983
|
+
lowerer.noLowering(`request headers of '${lowerer.fmt(v.type)}' values`, blame, "header values must be strings (or string | undefined)");
|
|
5644
5984
|
}
|
|
5645
5985
|
return { kind: "call", callee: helper, args: [v], type: arrayOf(STRING), loc };
|
|
5646
5986
|
}
|
|
@@ -5852,84 +6192,105 @@ function lowerHttpClientMethodCall(lowerer, call, access) {
|
|
|
5852
6192
|
};
|
|
5853
6193
|
}
|
|
5854
6194
|
if ((name === "on" || name === "once" || name === "addListener") && args.length === 2) {
|
|
5855
|
-
requireStatementPosition(lowerer, call, `request.${name}(...)`);
|
|
5856
6195
|
const once = boolLit(name === "once", loc);
|
|
5857
6196
|
const evT = lowerer.typeOf(args[0]);
|
|
5858
6197
|
const event = evT.isStringLiteralType() ? evT.value : null;
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
|
|
5862
|
-
|
|
5863
|
-
|
|
5864
|
-
|
|
5865
|
-
|
|
5866
|
-
|
|
5867
|
-
|
|
5868
|
-
|
|
5869
|
-
|
|
5870
|
-
|
|
5871
|
-
|
|
5872
|
-
|
|
5873
|
-
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
loc,
|
|
5878
|
-
};
|
|
5879
|
-
}
|
|
5880
|
-
if (event === "error") {
|
|
5881
|
-
const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
|
|
5882
|
-
return {
|
|
5883
|
-
kind: "libCall",
|
|
5884
|
-
fn: "http.clientOnError",
|
|
5885
|
-
args: [receiver, cb, once],
|
|
5886
|
-
type: VOID,
|
|
5887
|
-
loc,
|
|
5888
|
-
};
|
|
5889
|
-
}
|
|
5890
|
-
if (event === "timeout" ||
|
|
5891
|
-
event === "close" ||
|
|
5892
|
-
event === "finish" ||
|
|
5893
|
-
event === "abort" ||
|
|
5894
|
-
event === "continue") {
|
|
5895
|
-
const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
|
|
5896
|
-
const fn = event === "timeout"
|
|
5897
|
-
? "http.clientOnTimeout"
|
|
5898
|
-
: event === "close"
|
|
5899
|
-
? "http.clientOnClose"
|
|
5900
|
-
: event === "abort"
|
|
5901
|
-
? "http.clientOnAbort"
|
|
5902
|
-
: event === "continue"
|
|
5903
|
-
? "http.clientOnContinue"
|
|
5904
|
-
: "http.clientOnFinish";
|
|
5905
|
-
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
5906
|
-
}
|
|
5907
|
-
if (event === "upgrade") {
|
|
5908
|
-
// The client half of the WebSocket handover: a 101 response fires
|
|
5909
|
-
// (res, socket, head) INSTEAD of 'response'; no listener destroys
|
|
5910
|
-
// the connection, Node's default.
|
|
5911
|
-
const cb = lowerer.lowerExpr(args[1]);
|
|
5912
|
-
if (cb.type.kind !== "func" || cb.type.params.length > 3) {
|
|
5913
|
-
lowerer.unsupported("SC1090", args[1], "upgrade listeners with more than three parameters (use (res, socket, head))");
|
|
6198
|
+
// Node's on() answers the request: unless the call is an expression
|
|
6199
|
+
// statement (a chained .on(...).end(), a concise arrow body), the
|
|
6200
|
+
// receiver is bound once and the registration answers it.
|
|
6201
|
+
const lowered = lowerer.lowerExpr(access.expression);
|
|
6202
|
+
const chained = ts.isExpressionStatement(call.parent)
|
|
6203
|
+
? null
|
|
6204
|
+
: lowerer.declareHiddenLocal("%request", lowered.type);
|
|
6205
|
+
const receiver = chained === null ? lowered : varRef(chained.id, lowered.type, loc);
|
|
6206
|
+
const register = () => {
|
|
6207
|
+
if (event === "response") {
|
|
6208
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "response listeners", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
6209
|
+
return {
|
|
6210
|
+
kind: "libCall",
|
|
6211
|
+
fn: "http.clientOnResponse",
|
|
6212
|
+
args: [receiver, cb, once],
|
|
6213
|
+
type: VOID,
|
|
6214
|
+
loc,
|
|
6215
|
+
};
|
|
5914
6216
|
}
|
|
5915
|
-
if (
|
|
5916
|
-
lowerer
|
|
6217
|
+
if (event === "socket") {
|
|
6218
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "socket listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
|
|
6219
|
+
return {
|
|
6220
|
+
kind: "libCall",
|
|
6221
|
+
fn: "http.clientOnSocket",
|
|
6222
|
+
args: [receiver, cb, once],
|
|
6223
|
+
type: VOID,
|
|
6224
|
+
loc,
|
|
6225
|
+
};
|
|
5917
6226
|
}
|
|
5918
|
-
|
|
5919
|
-
|
|
5920
|
-
|
|
5921
|
-
|
|
5922
|
-
|
|
6227
|
+
if (event === "error") {
|
|
6228
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "error listeners", 1, (p) => p.kind === "object" && p.className === "%Error", "use (err) or ()", [ERROR_T]);
|
|
6229
|
+
return {
|
|
6230
|
+
kind: "libCall",
|
|
6231
|
+
fn: "http.clientOnError",
|
|
6232
|
+
args: [receiver, cb, once],
|
|
6233
|
+
type: VOID,
|
|
6234
|
+
loc,
|
|
6235
|
+
};
|
|
5923
6236
|
}
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
6237
|
+
if (event === "timeout" ||
|
|
6238
|
+
event === "close" ||
|
|
6239
|
+
event === "finish" ||
|
|
6240
|
+
event === "abort" ||
|
|
6241
|
+
event === "continue") {
|
|
6242
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], `${event} listeners`, 0, () => false, "use ()", []);
|
|
6243
|
+
const fn = event === "timeout"
|
|
6244
|
+
? "http.clientOnTimeout"
|
|
6245
|
+
: event === "close"
|
|
6246
|
+
? "http.clientOnClose"
|
|
6247
|
+
: event === "abort"
|
|
6248
|
+
? "http.clientOnAbort"
|
|
6249
|
+
: event === "continue"
|
|
6250
|
+
? "http.clientOnContinue"
|
|
6251
|
+
: "http.clientOnFinish";
|
|
6252
|
+
return { kind: "libCall", fn, args: [receiver, cb, once], type: VOID, loc };
|
|
6253
|
+
}
|
|
6254
|
+
if (event === "upgrade") {
|
|
6255
|
+
// The client half of the WebSocket handover: a 101 response fires
|
|
6256
|
+
// (res, socket, head) INSTEAD of 'response'; no listener destroys
|
|
6257
|
+
// the connection, Node's default.
|
|
6258
|
+
const cb = lowerer.lowerExpr(args[1]);
|
|
6259
|
+
if (cb.type.kind !== "func" || cb.type.params.length > 3) {
|
|
6260
|
+
lowerer.unsupported("SC1090", args[1], "upgrade listeners with more than three parameters (use (res, socket, head))");
|
|
6261
|
+
}
|
|
6262
|
+
if (cb.type.ret.kind !== "void") {
|
|
6263
|
+
lowerer.unsupported("SC1090", args[1], "upgrade listeners returning a value (make the callback body a block)");
|
|
6264
|
+
}
|
|
6265
|
+
const [p0, p1, p2] = cb.type.params;
|
|
6266
|
+
if ((p0 !== undefined && p0.kind !== "httpReq") ||
|
|
6267
|
+
(p1 !== undefined && p1.kind !== "netSocket") ||
|
|
6268
|
+
(p2 !== undefined && !(p2.kind === "bytes" && p2.elem === "u8"))) {
|
|
6269
|
+
lowerer.unsupported("SC1090", args[1], "upgrade listeners whose parameters are not (res: IncomingMessage, socket: Socket, head: Buffer)");
|
|
6270
|
+
}
|
|
6271
|
+
return {
|
|
6272
|
+
kind: "libCall",
|
|
6273
|
+
fn: "http.clientOnUpgrade",
|
|
6274
|
+
args: [receiver, cb, once],
|
|
6275
|
+
type: VOID,
|
|
6276
|
+
loc,
|
|
6277
|
+
};
|
|
6278
|
+
}
|
|
6279
|
+
lowerer.noLowering(`request.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"response", "socket", "upgrade", "error", "timeout", "finish", "abort", and "close" are the supported request events (as literals)');
|
|
6280
|
+
};
|
|
6281
|
+
const registration = register();
|
|
6282
|
+
if (chained === null)
|
|
6283
|
+
return registration;
|
|
6284
|
+
return {
|
|
6285
|
+
kind: "seqExpr",
|
|
6286
|
+
stmts: [
|
|
6287
|
+
{ kind: "varDecl", localId: chained.id, init: lowered, loc },
|
|
6288
|
+
{ kind: "exprStmt", expr: registration, loc },
|
|
6289
|
+
],
|
|
6290
|
+
result: varRef(chained.id, lowered.type, loc),
|
|
6291
|
+
type: lowered.type,
|
|
6292
|
+
loc,
|
|
6293
|
+
};
|
|
5933
6294
|
}
|
|
5934
6295
|
lowerer.noLowering(`ClientRequest.${name}`, call, "header reads/mutations, write, end, destroy, and on/once of response/error/timeout/close are the supported ClientRequest members", lowerer.checker.getSymbolAtLocation(access.name));
|
|
5935
6296
|
}
|
|
@@ -6378,7 +6739,13 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
6378
6739
|
headersNode = args[1];
|
|
6379
6740
|
}
|
|
6380
6741
|
else if (args.length === 3) {
|
|
6381
|
-
|
|
6742
|
+
// writeHead(status, undefined | null, headers): Node takes a reason
|
|
6743
|
+
// that is not a string as absent and reads the third argument.
|
|
6744
|
+
const reason = args[1];
|
|
6745
|
+
const absent = reason.kind === ts.SyntaxKind.NullKeyword ||
|
|
6746
|
+
(ts.isIdentifier(reason) && reason.text === "undefined");
|
|
6747
|
+
if (!absent)
|
|
6748
|
+
msg = lowerer.lowerExprExpecting(reason, STRING);
|
|
6382
6749
|
headersNode = args[2];
|
|
6383
6750
|
}
|
|
6384
6751
|
// Node answers the response (`return this` — the chaining shape
|