@scriptc/compiler 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/scriptc-node-fallback.d.ts +582 -78
- package/dist/backend/cycle-analysis.d.ts +2 -1
- package/dist/backend/cycle-analysis.js +4 -4
- package/dist/backend/cycle-analysis.js.map +1 -1
- package/dist/backend/cycle-mutability.d.ts +2 -1
- package/dist/backend/cycle-mutability.js +2 -2
- package/dist/backend/cycle-mutability.js.map +1 -1
- package/dist/backend/executable-features.js +4 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +2 -1
- package/dist/backend/immutability.js +2 -2
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/library-pack.js +4 -0
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +7 -3
- package/dist/backend/llvm/alloc.js +7 -4
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/array-search.js +2 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +23 -2
- package/dist/backend/llvm/bytes-loop-versions.js +115 -19
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +131 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +72 -1
- package/dist/backend/llvm/classes.js +331 -45
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +223 -16
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +1 -3
- package/dist/backend/llvm/common.js +1 -3
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.js +8 -4
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +4 -4
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/counted-loops.d.ts +4 -1
- package/dist/backend/llvm/counted-loops.js +62 -23
- package/dist/backend/llvm/counted-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.d.ts +19 -16
- package/dist/backend/llvm/dense-array-loops.js +46 -10
- package/dist/backend/llvm/dense-array-loops.js.map +1 -1
- package/dist/backend/llvm/dense-array-loops.test.js +50 -14
- package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +25 -1
- package/dist/backend/llvm/dyn.js +331 -8
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +22 -6
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +17 -11
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-statements.d.ts +0 -23
- package/dist/backend/llvm/emit-statements.js +325 -25
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +141 -15
- package/dist/backend/llvm/emitter.js +537 -64
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -0
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.d.ts +5 -2
- package/dist/backend/llvm/expr-bytes.js +110 -40
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +1 -1
- package/dist/backend/llvm/expr-calls.js +34 -22
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +21 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-control.js +2 -3
- package/dist/backend/llvm/expr-control.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +54 -6
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +26 -8
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +38 -6
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.js +131 -35
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +10 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +61 -0
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-http2.d.ts +4 -0
- package/dist/backend/llvm/lib-http2.js +20 -17
- package/dist/backend/llvm/lib-http2.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +65 -14
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +53 -1
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +65 -28
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +23 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +66 -45
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.test.js +14 -0
- package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +8 -1
- package/dist/backend/llvm/publish.js +64 -25
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.js +3 -0
- package/dist/backend/llvm/publish.test.js.map +1 -1
- package/dist/backend/llvm/receivers.js +1 -1
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +2 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.js +161 -14
- package/dist/backend/llvm/regex-matchers.js.map +1 -1
- package/dist/backend/llvm/regex-matchers.test.js +18 -0
- package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +9 -7
- package/dist/backend/llvm/shapes.js +12 -10
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +2 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +3 -0
- package/dist/backend/llvm/string-reads.js +84 -0
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/wasm-modules.d.ts +6 -5
- package/dist/backend/llvm/wasm-modules.js +32 -9
- package/dist/backend/llvm/wasm-modules.js.map +1 -1
- package/dist/backend/mangle.d.ts +3 -0
- package/dist/backend/mangle.js +5 -0
- package/dist/backend/mangle.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +22 -4
- package/dist/backend/native/executable.js +24 -8
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/library.js +1 -0
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +11 -6
- package/dist/backend/native-codegen.js +36 -9
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +0 -23
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +14 -4
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/optimization.d.ts +2 -2
- 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 +1 -1
- package/dist/backend/runtime-pack-core.js +1 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +4 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +0 -21
- package/dist/backend/runtime-pack.js +0 -29
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +9 -69
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/target-diagnostics.js +31 -1
- package/dist/backend/target-diagnostics.js.map +1 -1
- package/dist/backend/warm-cache.js +3 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/cli/command.js +26 -6
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/usage.d.ts +5 -1
- package/dist/cli/usage.js +7 -2
- package/dist/cli/usage.js.map +1 -1
- package/dist/contracts/check.js +1 -1
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.d.ts +7 -2
- package/dist/coverage/report.js +18 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/verdict-cache.d.ts +1 -0
- package/dist/coverage/verdict-cache.js +4 -0
- package/dist/coverage/verdict-cache.js.map +1 -1
- package/dist/coverage/verdict-semantic.js +4 -0
- package/dist/coverage/verdict-semantic.js.map +1 -1
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.d.ts +40 -0
- package/dist/diagnostics/dynamic-tier.js +57 -0
- package/dist/diagnostics/dynamic-tier.js.map +1 -0
- package/dist/diagnostics/envelope.d.ts +2 -1
- package/dist/diagnostics/envelope.js +5 -2
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +23 -1
- package/dist/executable/executable-cache.js +59 -7
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +45 -3
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.js +3 -1
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +1 -0
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/dispose-hook.d.ts +2 -0
- package/dist/frontend/dispose-hook.js +14 -0
- package/dist/frontend/dispose-hook.js.map +1 -0
- package/dist/frontend/jsx-entities.d.ts +4 -0
- package/dist/frontend/jsx-entities.js +259 -0
- package/dist/frontend/jsx-entities.js.map +1 -0
- package/dist/frontend/jsx-source.d.ts +71 -0
- package/dist/frontend/jsx-source.js +781 -0
- package/dist/frontend/jsx-source.js.map +1 -0
- package/dist/frontend/jsx-source.test.d.ts +1 -0
- package/dist/frontend/jsx-source.test.js +200 -0
- package/dist/frontend/jsx-source.test.js.map +1 -0
- package/dist/frontend/literal-values.test.js +8 -9
- package/dist/frontend/literal-values.test.js.map +1 -1
- package/dist/frontend/lowering/array-indexed-mutation.js +2 -1
- package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +3 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +1 -1
- package/dist/frontend/lowering/binding-analysis.js +2 -2
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/builtins/arguments.d.ts +3 -0
- package/dist/frontend/lowering/builtins/arguments.js +30 -15
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.js +10 -6
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js +2 -1
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +4 -2
- package/dist/frontend/lowering/builtins/crypto.js +59 -3
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/date-classes.d.ts +46 -0
- package/dist/frontend/lowering/builtins/date-classes.js +477 -0
- package/dist/frontend/lowering/builtins/date-classes.js.map +1 -0
- package/dist/frontend/lowering/builtins/dates.d.ts +11 -1
- package/dist/frontend/lowering/builtins/dates.js +55 -26
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/dh.d.ts +15 -0
- package/dist/frontend/lowering/builtins/dh.js +151 -0
- package/dist/frontend/lowering/builtins/dh.js.map +1 -0
- package/dist/frontend/lowering/builtins/disposable-stack.js +2 -1
- package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -1
- package/dist/frontend/lowering/builtins/ecdh.d.ts +12 -1
- package/dist/frontend/lowering/builtins/ecdh.js +7 -7
- package/dist/frontend/lowering/builtins/ecdh.js.map +1 -1
- package/dist/frontend/lowering/builtins/errors.d.ts +15 -0
- package/dist/frontend/lowering/builtins/errors.js +110 -0
- package/dist/frontend/lowering/builtins/errors.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.js +23 -17
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +6 -4
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-paths.d.ts +15 -0
- package/dist/frontend/lowering/builtins/fs-paths.js +209 -0
- package/dist/frontend/lowering/builtins/fs-paths.js.map +1 -0
- package/dist/frontend/lowering/builtins/hash-stream.d.ts +16 -4
- package/dist/frontend/lowering/builtins/hash-stream.js +86 -23
- package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +2 -1
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/key-object.d.ts +2 -1
- package/dist/frontend/lowering/builtins/key-object.js +20 -7
- package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +11 -4
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.js +9 -5
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.js +4 -3
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +3 -2
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +3 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +3 -2
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js +2 -1
- package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +2 -1
- package/dist/frontend/lowering/builtins/readline.js +23 -6
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/strings.js +13 -5
- package/dist/frontend/lowering/builtins/strings.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +2 -1
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/timers.js +1 -1
- package/dist/frontend/lowering/builtins/timers.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +4 -3
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.js +2 -1
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/webcrypto.js +39 -20
- package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +2 -1
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.js +13 -6
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/caught-value-dispatch.d.ts +18 -1
- package/dist/frontend/lowering/caught-value-dispatch.js +201 -32
- package/dist/frontend/lowering/caught-value-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-assertions.js +3 -2
- package/dist/frontend/lowering/class-assertions.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +2 -1
- package/dist/frontend/lowering/class-construction.js +8 -13
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-descriptors.js +1 -1
- package/dist/frontend/lowering/class-descriptors.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +34 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +568 -151
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +77 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-method-mutations.js +3 -0
- package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
- package/dist/frontend/lowering/class-method-values.js +1 -1
- package/dist/frontend/lowering/class-method-values.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +7 -0
- package/dist/frontend/lowering/class-protocols.js +64 -4
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.d.ts +5 -0
- package/dist/frontend/lowering/class-prototypes.js +36 -3
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-to-primitive.js +25 -5
- package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -1
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +6 -5
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +8 -7
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.js +8 -7
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.js +2 -1
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +7 -0
- package/dist/frontend/lowering/containers/array-callbacks.js +14 -13
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-concat.js +2 -1
- package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +25 -4
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +6 -5
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/array-pipelines.js +2 -1
- package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +1 -1
- package/dist/frontend/lowering/containers/bytes.js +129 -28
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.js +52 -2
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +3 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +8 -7
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +8 -7
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +32 -1
- package/dist/frontend/lowering/containers/iterator-helpers.js +6 -5
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.js +36 -9
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/containers/string-replacement.js +2 -1
- package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
- package/dist/frontend/lowering/cycle-initialization.js +25 -4
- package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.d.ts +18 -1
- package/dist/frontend/lowering/deferred-module-initializers.js +226 -115
- package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
- package/dist/frontend/lowering/deferred-module-initializers.test.js +28 -0
- package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
- package/dist/frontend/lowering/dispatch-sites.d.ts +59 -0
- package/dist/frontend/lowering/dispatch-sites.js +204 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.d.ts +1 -0
- package/dist/frontend/lowering/dispatch-sites.test.js +59 -0
- package/dist/frontend/lowering/dispatch-sites.test.js.map +1 -0
- package/dist/frontend/lowering/dyn-streams.d.ts +3 -0
- package/dist/frontend/lowering/dyn-streams.js +1 -1
- package/dist/frontend/lowering/dyn-streams.js.map +1 -1
- package/dist/frontend/lowering/dynamic-tier.d.ts +25 -0
- package/dist/frontend/lowering/dynamic-tier.js +327 -0
- package/dist/frontend/lowering/dynamic-tier.js.map +1 -0
- package/dist/frontend/lowering/error-methods.js +4 -0
- package/dist/frontend/lowering/error-methods.js.map +1 -1
- package/dist/frontend/lowering/expressions/array-literals.js +15 -0
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +45 -3
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +17 -1
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +46 -7
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.js +35 -5
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +0 -3
- package/dist/frontend/lowering/expressions/object-literals.js +27 -6
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +5 -5
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +0 -4
- package/dist/frontend/lowering/expressions/property-access.js +99 -7
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +63 -5
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +63 -9
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +6 -1
- package/dist/frontend/lowering/generator-dynamic-dispatch.js +20 -30
- package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +42 -1
- package/dist/frontend/lowering/generic-functions.js +448 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/intern-tables.js +2 -1
- package/dist/frontend/lowering/intern-tables.js.map +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +9 -8
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/js-dynamic-objects.js +3 -2
- package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -1
- package/dist/frontend/lowering/json-require.js +2 -1
- package/dist/frontend/lowering/json-require.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.d.ts +7 -2
- package/dist/frontend/lowering/key-order-witness.js +21 -4
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +38 -2
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lifetime-regions.js +2 -1
- package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +6 -5
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.js +3 -1
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +4 -0
- package/dist/frontend/lowering/lower-calls.js +339 -91
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.d.ts +18 -0
- package/dist/frontend/lowering/lower-classes.js +280 -25
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +3 -2
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +14 -0
- package/dist/frontend/lowering/lower-event-emitter.js +267 -20
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +19 -2
- package/dist/frontend/lowering/lower-exprs.js +116 -11
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +304 -72
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +10 -6
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-mixins.js +2 -1
- package/dist/frontend/lowering/lower-mixins.js.map +1 -1
- package/dist/frontend/lowering/lower-mock.js +2 -1
- package/dist/frontend/lowering/lower-mock.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +15 -5
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.test.js +2 -2
- package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.d.ts +2 -1
- package/dist/frontend/lowering/lower-namespaces.js +4 -3
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +10 -0
- package/dist/frontend/lowering/lower-server.js +237 -59
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +12 -10
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +168 -20
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js +1 -1
- package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +575 -165
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +4 -3
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +125 -28
- package/dist/frontend/lowering/lowerer.js +557 -63
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +21 -9
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/narrowing-stability.js +5 -0
- package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
- package/dist/frontend/lowering/native-ffi.js +1 -1
- package/dist/frontend/lowering/native-ffi.js.map +1 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js +2 -1
- package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
- package/dist/frontend/lowering/pairs-snapshot.js +2 -1
- package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
- package/dist/frontend/lowering/private-brands.d.ts +9 -0
- package/dist/frontend/lowering/private-brands.js +66 -15
- package/dist/frontend/lowering/private-brands.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +2 -1
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/require-initialization.js +2 -1
- package/dist/frontend/lowering/require-initialization.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-elements.d.ts +5 -0
- package/dist/frontend/lowering/runtime-optional-elements.js +17 -1
- package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-records.d.ts +2 -0
- package/dist/frontend/lowering/runtime-optional-records.js +18 -5
- package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
- package/dist/frontend/lowering/site-dependencies.d.ts +35 -0
- package/dist/frontend/lowering/site-dependencies.js +84 -0
- package/dist/frontend/lowering/site-dependencies.js.map +1 -0
- package/dist/frontend/lowering/site-dependencies.test.d.ts +1 -0
- package/dist/frontend/lowering/site-dependencies.test.js +53 -0
- package/dist/frontend/lowering/site-dependencies.test.js.map +1 -0
- package/dist/frontend/lowering/stable-names.d.ts +11 -0
- package/dist/frontend/lowering/stable-names.js +35 -0
- package/dist/frontend/lowering/stable-names.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +2 -2
- package/dist/frontend/lowering/static-typeof.js +42 -3
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.js +2 -1
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/structural-positions.d.ts +32 -0
- package/dist/frontend/lowering/structural-positions.js +108 -0
- package/dist/frontend/lowering/structural-positions.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +42 -26
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/var-hoisting.js +37 -3
- package/dist/frontend/lowering/var-hoisting.js.map +1 -1
- package/dist/frontend/npm-static-tsc-helpers.d.ts +5 -0
- package/dist/frontend/npm-static-tsc-helpers.js +106 -0
- package/dist/frontend/npm-static-tsc-helpers.js.map +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.d.ts +1 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js +58 -0
- package/dist/frontend/npm-static-tsc-helpers.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.d.ts +8 -0
- package/dist/frontend/npm-static-type-exports-host.js +214 -0
- package/dist/frontend/npm-static-type-exports-host.js.map +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports-host.test.js +53 -0
- package/dist/frontend/npm-static-type-exports-host.test.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.d.ts +52 -0
- package/dist/frontend/npm-static-type-exports.js +261 -0
- package/dist/frontend/npm-static-type-exports.js.map +1 -0
- package/dist/frontend/npm-static-type-exports.test.d.ts +1 -0
- package/dist/frontend/npm-static-type-exports.test.js +103 -0
- package/dist/frontend/npm-static-type-exports.test.js.map +1 -0
- package/dist/frontend/npm-static-umd.d.ts +6 -0
- package/dist/frontend/npm-static-umd.js +203 -0
- package/dist/frontend/npm-static-umd.js.map +1 -0
- package/dist/frontend/npm-static-umd.test.d.ts +1 -0
- package/dist/frontend/npm-static-umd.test.js +105 -0
- package/dist/frontend/npm-static-umd.test.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +8 -0
- package/dist/frontend/npm-static.js +47 -2
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/program.d.ts +13 -0
- package/dist/frontend/program.js +103 -6
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +1 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/services.d.ts +6 -0
- package/dist/frontend/services.js +18 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +21 -7
- package/dist/frontend/ts7/ast-node.js +131 -29
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-node.test.js +60 -0
- package/dist/frontend/ts7/ast-node.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.d.ts +27 -2
- package/dist/frontend/ts7/ast-wire.js +124 -21
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/ast.d.ts +23 -2
- package/dist/frontend/ts7/ast.js +143 -2
- package/dist/frontend/ts7/ast.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +13 -1
- package/dist/frontend/ts7/checker.js +75 -1
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +9 -6
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/enums.d.ts +3 -3
- package/dist/frontend/ts7/enums.generated.d.ts +10 -0
- package/dist/frontend/ts7/enums.generated.js +21 -0
- package/dist/frontend/ts7/enums.generated.js.map +1 -1
- package/dist/frontend/ts7/enums.js +19 -0
- package/dist/frontend/ts7/enums.js.map +1 -1
- package/dist/frontend/ts7/program-host.js +5 -2
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/semantic-checker.d.ts +10 -0
- package/dist/frontend/ts7/semantic-checker.js +25 -20
- package/dist/frontend/ts7/semantic-checker.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.d.ts +13 -0
- package/dist/frontend/ts7/semantic-json.js +146 -0
- package/dist/frontend/ts7/semantic-json.js.map +1 -1
- package/dist/frontend/ts7/semantic-json.test.js +57 -1
- package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.d.ts +15 -0
- package/dist/frontend/ts7/semantic-model.js +67 -19
- package/dist/frontend/ts7/semantic-model.js.map +1 -1
- package/dist/frontend/ts7/semantic-model.test.js +3 -2
- package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +1 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +1 -1
- package/dist/frontend/tsc-codes.js +7 -0
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +38 -6
- package/dist/frontend/type-mapper.js +265 -32
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/frontend/type-mapper.test.js +1 -1
- package/dist/frontend/type-mapper.test.js.map +1 -1
- package/dist/frontend-process-args.d.ts +4 -0
- package/dist/frontend-process-args.js +52 -0
- package/dist/frontend-process-args.js.map +1 -0
- package/dist/frontend-process-args.test.d.ts +1 -0
- package/dist/frontend-process-args.test.js +47 -0
- package/dist/frontend-process-args.test.js.map +1 -0
- package/dist/frontend-process.d.ts +1 -0
- package/dist/frontend-process.js +23 -0
- package/dist/frontend-process.js.map +1 -0
- package/dist/heap-collection.d.ts +16 -0
- package/dist/heap-collection.js +42 -0
- package/dist/heap-collection.js.map +1 -0
- package/dist/heap-collection.test.d.ts +1 -0
- package/dist/heap-collection.test.js +59 -0
- package/dist/heap-collection.test.js.map +1 -0
- package/dist/heap-pressure.d.ts +2 -0
- package/dist/heap-pressure.js +12 -0
- package/dist/heap-pressure.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +402 -86
- package/dist/index.js.map +1 -1
- package/dist/ir/array-length-stability.js +7 -0
- package/dist/ir/array-length-stability.js.map +1 -1
- package/dist/ir/array-length-stability.test.js +25 -0
- package/dist/ir/array-length-stability.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +28 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +5 -1
- package/dist/ir/builtin-signatures.js +141 -12
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/final-fields.d.ts +2 -1
- package/dist/ir/final-fields.js +2 -2
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +2 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +13 -5
- package/dist/ir/int32-slots.js +112 -115
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +3 -1
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +9 -4
- package/dist/ir/integer-loop-facts.js +93 -18
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-loops.d.ts +49 -0
- package/dist/ir/integer-loops.js +193 -39
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +201 -1
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +64 -0
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +17 -2
- package/dist/ir/ir.js +3 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +31 -7
- package/dist/ir/runtime-features.js +138 -11
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.d.ts +2 -0
- package/dist/ir/traverse.js +14 -2
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/validate.js +56 -16
- package/dist/ir/validate.js.map +1 -1
- package/dist/library/ir-policy.js +10 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/prepare.js +2 -0
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cli.js +5 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/prepare.js +5 -1
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +4 -1
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/startup-cache.d.ts +1 -0
- package/dist/startup-cache.js +1 -0
- package/dist/startup-cache.js.map +1 -1
- package/dist/text-parts.d.ts +7 -0
- package/dist/text-parts.js +44 -0
- package/dist/text-parts.js.map +1 -1
- package/dist/text-parts.test.d.ts +1 -0
- package/dist/text-parts.test.js +46 -0
- package/dist/text-parts.test.js.map +1 -0
- package/dist/timing.d.ts +9 -2
- package/dist/timing.js +7 -4
- package/dist/timing.js.map +1 -1
- package/dist/wasm/translate.d.ts +4 -0
- package/dist/wasm/translate.js +2 -2
- package/dist/wasm/translate.js.map +1 -1
- package/package.json +21 -21
- package/shims/undici/core/client.ts +4 -4
- package/surface-manifest.json +19 -49
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { keyedHelperName } from "./stable-names.js";
|
|
1
2
|
import { dynUndefinedExpr, nodeThrowExpr, boolLit, numLit, strLit, varRef, } from "../../ir/build.js";
|
|
2
3
|
import * as ts from "../ts7/adapter.js";
|
|
3
4
|
import { ladderFenceExpr } from "./lowerer.js";
|
|
@@ -124,7 +125,7 @@ export function voidizedCallback(lowerer, cb, loc) {
|
|
|
124
125
|
const toT = funcOf([...fromT.params], VOID);
|
|
125
126
|
const key = `server.voidcb:${typeKey(fromT)}`;
|
|
126
127
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
127
|
-
const name = existing ??
|
|
128
|
+
const name = existing ?? keyedHelperName(lowerer, "%server.voidcb", key);
|
|
128
129
|
if (!existing) {
|
|
129
130
|
lowerer.arrHofHelpers.set(key, name);
|
|
130
131
|
const impl = `${name}.impl`;
|
|
@@ -197,7 +198,7 @@ function lowerSocketDynListener(lowerer, node, what) {
|
|
|
197
198
|
function receiverReturningCall(lowerer, fn, callArgs, recvT, loc, opts) {
|
|
198
199
|
const key = `server.recvret:${fn}:${opts?.prefix?.fn ?? ""}:${(opts?.mainArgIndices ?? []).join(".")}:${callArgs.map((a) => typeKey(a.type)).join(",")}`;
|
|
199
200
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
200
|
-
const name = existing ??
|
|
201
|
+
const name = existing ?? keyedHelperName(lowerer, "%server.recvret", key);
|
|
201
202
|
if (!existing) {
|
|
202
203
|
lowerer.arrHofHelpers.set(key, name);
|
|
203
204
|
const params = callArgs.map((a, i) => ({ localId: `p${i}.0`, name: `p${i}`, type: a.type }));
|
|
@@ -472,7 +473,7 @@ function h2HeadersCallbackAdapter(lowerer, node, what, handleKind, withStatus, l
|
|
|
472
473
|
const toT = funcOf(abiParams.map((p) => p.type), VOID);
|
|
473
474
|
const key = `h2.hdrcb:${handleKind}:${withStatus}:${typeKey(fromT)}:${shapeId ?? ""}`;
|
|
474
475
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
475
|
-
const name = existing ??
|
|
476
|
+
const name = existing ?? keyedHelperName(lowerer, "%h2.hdrcb", key);
|
|
476
477
|
if (!existing) {
|
|
477
478
|
lowerer.arrHofHelpers.set(key, name);
|
|
478
479
|
const impl = `${name}.impl`;
|
|
@@ -2318,6 +2319,18 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2318
2319
|
loc,
|
|
2319
2320
|
};
|
|
2320
2321
|
}
|
|
2322
|
+
if (event === "secure") {
|
|
2323
|
+
// The handshake's completion on a TLS socket (after secureConnect on
|
|
2324
|
+
// a client); plain sockets never fire it.
|
|
2325
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "secure listeners", 0, () => false, "use ()", []);
|
|
2326
|
+
return {
|
|
2327
|
+
kind: "libCall",
|
|
2328
|
+
fn: "tls.sockOnSecure",
|
|
2329
|
+
args: [receiver, cb, once],
|
|
2330
|
+
type: VOID,
|
|
2331
|
+
loc,
|
|
2332
|
+
};
|
|
2333
|
+
}
|
|
2321
2334
|
if (event === "session") {
|
|
2322
2335
|
// The received-ticket event: fires once per TLS client socket with
|
|
2323
2336
|
// the serialized session (a Buffer); plain sockets never fire it.
|
|
@@ -2330,7 +2343,7 @@ function lowerNetSocketMethodCall(lowerer, call, access) {
|
|
|
2330
2343
|
loc,
|
|
2331
2344
|
};
|
|
2332
2345
|
}
|
|
2333
|
-
lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", and "session" are the supported socket events (as literals)');
|
|
2346
|
+
lowerer.noLowering(`socket.${name}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, args[0], '"data", "end", "close", "error", "connect", "lookup", "ready", "timeout", "readable", "secureConnect", "secure", and "session" are the supported socket events (as literals)');
|
|
2334
2347
|
}
|
|
2335
2348
|
lowerer.noLowering(`Socket.${name}`, call, "write, end, destroy, pipe, setTimeout, setKeepAlive, setNoDelay, the address fields, read, unshift, and on/once of data/end/close/error/connect/ready/timeout/readable are the supported Socket members", lowerer.checker.getSymbolAtLocation(access.name));
|
|
2336
2349
|
}
|
|
@@ -2770,7 +2783,7 @@ export function lowerCompatReqStreamOptionalCall(lowerer, call) {
|
|
|
2770
2783
|
type: unionT,
|
|
2771
2784
|
loc,
|
|
2772
2785
|
};
|
|
2773
|
-
const id =
|
|
2786
|
+
const id = lowerer.closureName(loc, "", "chain");
|
|
2774
2787
|
const body = lowerH2StreamMethodCall(lowerer, call, call.expression, {
|
|
2775
2788
|
kind: "chainRecv",
|
|
2776
2789
|
id,
|
|
@@ -3488,7 +3501,7 @@ function lowerHttpCreateServerForms(lowerer, expr, what, loc) {
|
|
|
3488
3501
|
const hasMax = opts.maxHeaderSize !== null;
|
|
3489
3502
|
const key = `server.opts:${opts.joinDup ? 1 : 0}:${opts.allowMissingHost ? 1 : 0}:${hasBuffer ? 1 : 0}:${hasMax ? 1 : 0}`;
|
|
3490
3503
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
3491
|
-
const name = existing ??
|
|
3504
|
+
const name = existing ?? keyedHelperName(lowerer, "%server.opts", key);
|
|
3492
3505
|
if (!existing) {
|
|
3493
3506
|
lowerer.arrHofHelpers.set(key, name);
|
|
3494
3507
|
const params = [
|
|
@@ -3710,6 +3723,96 @@ export function lowerHttpServerNew(lowerer, expr) {
|
|
|
3710
3723
|
return null;
|
|
3711
3724
|
return lowerHttpCreateServerForms(lowerer, expr, "new http.Server", locOf(expr));
|
|
3712
3725
|
}
|
|
3726
|
+
/** `new tls.TLSSocket(socket, options)` in server mode: a new TLS socket
|
|
3727
|
+
* takes over the socket's connection and runs the server handshake
|
|
3728
|
+
* (scr_tls_wrap_socket). The options record reads at runtime, the
|
|
3729
|
+
* tls.connect precedent. A literal's secureContext member is a
|
|
3730
|
+
* SecureContext handle, which the checked-dynamic record cannot hold, so
|
|
3731
|
+
* it passes as its own argument; members after it must be free of side
|
|
3732
|
+
* effects, because it is read after them. Node never starts the handshake
|
|
3733
|
+
* of a client-mode TLSSocket, so a literal without isServer: true fences
|
|
3734
|
+
* here. */
|
|
3735
|
+
export function lowerTlsSocketNew(lowerer, expr) {
|
|
3736
|
+
const callee = expr.expression;
|
|
3737
|
+
const isTlsSocket = (ts.isPropertyAccessExpression(callee) &&
|
|
3738
|
+
callee.name.text === "TLSSocket" &&
|
|
3739
|
+
lowerer.builtinMemberOf(callee)?.module === "tls") ||
|
|
3740
|
+
(ts.isIdentifier(callee) &&
|
|
3741
|
+
lowerer.builtinImportOf(callee)?.module === "tls" &&
|
|
3742
|
+
lowerer.builtinImportOf(callee)?.member === "TLSSocket");
|
|
3743
|
+
if (!isTlsSocket)
|
|
3744
|
+
return null;
|
|
3745
|
+
const loc = locOf(expr);
|
|
3746
|
+
const HINT = "the supported forms are new tls.TLSSocket(socket, { isServer: true, cert, key }) and new tls.TLSSocket(socket, { isServer: true, secureContext })";
|
|
3747
|
+
const args = expr.arguments?.nodes ?? [];
|
|
3748
|
+
if (args.length !== 2 || args.some(ts.isSpreadElement)) {
|
|
3749
|
+
lowerer.noLowering(`new tls.TLSSocket with ${args.length} argument(s)`, expr, HINT);
|
|
3750
|
+
}
|
|
3751
|
+
const socket = lowerer.lowerExpr(args[0]);
|
|
3752
|
+
if (socket.type.kind !== "netSocket") {
|
|
3753
|
+
lowerer.noLowering(`new tls.TLSSocket over a '${lowerer.fmt(socket.type)}' value`, args[0], "the wrapped value must be a net.Socket (a server connection or an http CONNECT socket)");
|
|
3754
|
+
}
|
|
3755
|
+
let optsNode = args[1];
|
|
3756
|
+
while (ts.isParenthesizedExpression(optsNode))
|
|
3757
|
+
optsNode = optsNode.expression;
|
|
3758
|
+
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
3759
|
+
const o = lowerer.lowerExpr(optsNode);
|
|
3760
|
+
const opts = o.type.kind === "dyn"
|
|
3761
|
+
? o
|
|
3762
|
+
: canConvertToDyn(o.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))
|
|
3763
|
+
? { kind: "dynFrom", value: o, type: DYN, loc }
|
|
3764
|
+
: lowerer.noLowering(`new tls.TLSSocket with a '${lowerer.fmt(o.type)}' options record`, optsNode, `${HINT} — a secureContext member lowers in an options object literal`);
|
|
3765
|
+
return { kind: "libCall", fn: "tls.wrapSocket", args: [socket, opts], type: NETSOCKET_T, loc };
|
|
3766
|
+
}
|
|
3767
|
+
const props = optsNode.properties.nodes;
|
|
3768
|
+
const nameOf = (p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3769
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name))
|
|
3770
|
+
? p.name.text
|
|
3771
|
+
: null;
|
|
3772
|
+
const isServer = props.find((p) => nameOf(p) === "isServer");
|
|
3773
|
+
if (isServer === undefined ||
|
|
3774
|
+
(ts.isPropertyAssignment(isServer) && isServer.initializer.kind === ts.SyntaxKind.FalseKeyword)) {
|
|
3775
|
+
lowerer.noLowering("new tls.TLSSocket in client mode", optsNode, "Node starts no handshake for a client-mode TLSSocket — pass isServer: true for the server side; tls.connect makes client sockets");
|
|
3776
|
+
}
|
|
3777
|
+
const ctxIndex = props.findIndex((p) => nameOf(p) === "secureContext");
|
|
3778
|
+
if (ctxIndex < 0) {
|
|
3779
|
+
const opts = lowerDynObjectLiteral(lowerer, optsNode);
|
|
3780
|
+
return { kind: "libCall", fn: "tls.wrapSocket", args: [socket, opts], type: NETSOCKET_T, loc };
|
|
3781
|
+
}
|
|
3782
|
+
const ctxProp = props[ctxIndex];
|
|
3783
|
+
const ctxNode = ts.isShorthandPropertyAssignment(ctxProp)
|
|
3784
|
+
? ctxProp.name
|
|
3785
|
+
: ctxProp.initializer;
|
|
3786
|
+
for (const p of props.slice(ctxIndex + 1)) {
|
|
3787
|
+
const pure = ts.isShorthandPropertyAssignment(p) ||
|
|
3788
|
+
(ts.isPropertyAssignment(p) && sideEffectFreeOptionValue(p.initializer));
|
|
3789
|
+
if (!pure) {
|
|
3790
|
+
lowerer.noLowering("a new tls.TLSSocket options literal with side effects after secureContext", p, "secureContext is read after the other members — move it to the end of the object");
|
|
3791
|
+
}
|
|
3792
|
+
}
|
|
3793
|
+
let ctx = null;
|
|
3794
|
+
const opts = lowerDynObjectLiteral(lowerer, optsNode, (node, value) => {
|
|
3795
|
+
if (node !== ctxNode)
|
|
3796
|
+
return lowerer.coerceToExpected(value, DYN);
|
|
3797
|
+
if (value.type.kind !== "secureCtx") {
|
|
3798
|
+
lowerer.noLowering(`a '${lowerer.fmt(value.type)}' secureContext`, node, "pass a tls.createSecureContext({ cert, key }) result");
|
|
3799
|
+
}
|
|
3800
|
+
ctx = value;
|
|
3801
|
+
return {
|
|
3802
|
+
kind: "dynFrom",
|
|
3803
|
+
value: { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc },
|
|
3804
|
+
type: DYN,
|
|
3805
|
+
loc,
|
|
3806
|
+
};
|
|
3807
|
+
});
|
|
3808
|
+
return {
|
|
3809
|
+
kind: "libCall",
|
|
3810
|
+
fn: "tls.wrapSocketCtx",
|
|
3811
|
+
args: [socket, opts, ctx],
|
|
3812
|
+
type: NETSOCKET_T,
|
|
3813
|
+
loc,
|
|
3814
|
+
};
|
|
3815
|
+
}
|
|
3713
3816
|
/** Module-function calls on http import bindings: createServer([options][,
|
|
3714
3817
|
* handler]) and the call-form Server (Node's constructor works without
|
|
3715
3818
|
* `new` — test/parallel's http.Server(fn) spelling). The handler takes
|
|
@@ -3758,13 +3861,15 @@ function lowerHttpModuleCall(lowerer, expr, bi, loc) {
|
|
|
3758
3861
|
* runtime-valued (dyn) entry rides the tls.pemDyn extraction, throwing
|
|
3759
3862
|
* the fence at runtime for non-PEM kinds (the divergence-66 stance).
|
|
3760
3863
|
* Every other key fences by name; SNICallback gets the pointed hint. */
|
|
3761
|
-
function lowerTlsServerOptions(lowerer, node, what) {
|
|
3864
|
+
function lowerTlsServerOptions(lowerer, node, what, allowSni = false) {
|
|
3762
3865
|
if (!ts.isObjectLiteralExpression(node)) {
|
|
3763
3866
|
lowerer.noLowering(`${what} with a non-literal options argument`, node, "pass the options as an object literal: { cert, key }");
|
|
3764
3867
|
}
|
|
3765
3868
|
const loc = locOf(node);
|
|
3766
3869
|
let cert = null;
|
|
3767
3870
|
let key = null;
|
|
3871
|
+
let sni;
|
|
3872
|
+
let pendingSni = null;
|
|
3768
3873
|
for (const prop of node.properties.nodes) {
|
|
3769
3874
|
let initializer;
|
|
3770
3875
|
if (ts.isPropertyAssignment(prop) &&
|
|
@@ -3778,6 +3883,25 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3778
3883
|
lowerer.noLowering(`${what} options with computed keys or spreads`, prop, "each option must be a plain `name: value` (or shorthand) entry with a literal key");
|
|
3779
3884
|
}
|
|
3780
3885
|
const k = prop.name.text;
|
|
3886
|
+
if (k === "SNICallback" && allowSni) {
|
|
3887
|
+
const value = initializer !== null
|
|
3888
|
+
? lowerer.lowerExpr(initializer)
|
|
3889
|
+
: lowerer.lowerShorthandValue(prop);
|
|
3890
|
+
const checked = checkSniCallbackValue(lowerer, value, prop, what);
|
|
3891
|
+
if (cert !== null && key !== null) {
|
|
3892
|
+
sni = checked;
|
|
3893
|
+
}
|
|
3894
|
+
else {
|
|
3895
|
+
// The runtime call reads cert and key first. A cert or key entry
|
|
3896
|
+
// after the callback can change the binding the callback reads,
|
|
3897
|
+
// so the callback is saved ahead of the next of them, in source
|
|
3898
|
+
// order.
|
|
3899
|
+
const saved = lowerer.declareHiddenLocal("%sniCallback", checked.type);
|
|
3900
|
+
pendingSni = { kind: "varDecl", localId: saved.id, init: checked, loc: locOf(prop) };
|
|
3901
|
+
sni = varRef(saved.id, checked.type, locOf(prop));
|
|
3902
|
+
}
|
|
3903
|
+
continue;
|
|
3904
|
+
}
|
|
3781
3905
|
if (k !== "cert" && k !== "key") {
|
|
3782
3906
|
const init = ts.isPropertyAssignment(prop) ? prop.initializer : null;
|
|
3783
3907
|
if ((k === "ca" || k === "rejectUnauthorized") &&
|
|
@@ -3792,7 +3916,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3792
3916
|
continue; // Node's false default, spelled out
|
|
3793
3917
|
}
|
|
3794
3918
|
fenceOrDropOptionKey(lowerer, prop, k, what, TLS_SERVER_DOCUMENTED_OPTIONS, "cert and key (PEM strings or Buffers) are the supported options", {
|
|
3795
|
-
SNICallback: "SNICallback lowers
|
|
3919
|
+
SNICallback: "SNICallback lowers on tls.createServer and http2.createSecureServer({ allowHTTP1: true, ... }) — serve one cert/key pair here",
|
|
3796
3920
|
requestCert: "client-certificate handshakes are not modeled (SEMANTICS.md divergence 55) — requestCert: false is the lowered value",
|
|
3797
3921
|
});
|
|
3798
3922
|
continue; // an undocumented key, dropped like Node drops it
|
|
@@ -3822,6 +3946,10 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3822
3946
|
else if (v.type.kind !== "string" && !(v.type.kind === "bytes" && v.type.elem === "u8")) {
|
|
3823
3947
|
lowerer.noLowering(`a ${what} '${k}' option of '${lowerer.fmt(v.type)}' values`, prop, "cert/key are PEM strings or Buffers here");
|
|
3824
3948
|
}
|
|
3949
|
+
if (pendingSni !== null) {
|
|
3950
|
+
v = { kind: "seqExpr", stmts: [pendingSni], result: v, type: v.type, loc };
|
|
3951
|
+
pendingSni = null;
|
|
3952
|
+
}
|
|
3825
3953
|
if (k === "cert")
|
|
3826
3954
|
cert = v;
|
|
3827
3955
|
else
|
|
@@ -3830,7 +3958,7 @@ function lowerTlsServerOptions(lowerer, node, what) {
|
|
|
3830
3958
|
if (cert === null || key === null) {
|
|
3831
3959
|
lowerer.noLowering(`${what} without both cert and key`, node, "the supported options object is { cert, key } (PEM strings or Buffers)");
|
|
3832
3960
|
}
|
|
3833
|
-
return { cert, key };
|
|
3961
|
+
return sni === undefined ? { cert, key } : { cert, key, sni };
|
|
3834
3962
|
}
|
|
3835
3963
|
/** The options argument of tls/https createServer, split three ways: an
|
|
3836
3964
|
* object literal takes the static walk above; a RUNTIME (dyn) value — the
|
|
@@ -3857,20 +3985,35 @@ const TLS_VALIDATED_OPTIONS = new Set([
|
|
|
3857
3985
|
"ticketKeys",
|
|
3858
3986
|
]);
|
|
3859
3987
|
/** True when a literal options bag must ride the runtime walker: JS uses
|
|
3860
|
-
* it for the typed TLS validation ladders,
|
|
3988
|
+
* it for the typed TLS validation ladders, HTTPS uses it for
|
|
3861
3989
|
* keepAliveTimeoutBuffer so the HTTP option is consumed without losing
|
|
3862
|
-
* the literal's evaluation order
|
|
3863
|
-
|
|
3990
|
+
* the literal's evaluation order, and `runtimeKeys` names options only the
|
|
3991
|
+
* runtime walk implements (tls.createServer's ALPNProtocols). */
|
|
3992
|
+
function tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions = false, runtimeKeys = new Set()) {
|
|
3864
3993
|
const jsSource = isJsSourceFile(ts.getSourceFileOfNode(node));
|
|
3865
3994
|
return node.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
3866
3995
|
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
|
|
3867
3996
|
((includeHttpTimeoutOptions && p.name.text === "keepAliveTimeoutBuffer") ||
|
|
3997
|
+
runtimeKeys.has(p.name.text) ||
|
|
3868
3998
|
(jsSource && TLS_VALIDATED_OPTIONS.has(p.name.text))));
|
|
3869
3999
|
}
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
4000
|
+
/** tls.createServer options the runtime walk implements and the literal
|
|
4001
|
+
* cert/key lowering does not. */
|
|
4002
|
+
const TLS_SERVER_RUNTIME_OPTIONS = new Set([
|
|
4003
|
+
"ALPNProtocols",
|
|
4004
|
+
"minVersion",
|
|
4005
|
+
"maxVersion",
|
|
4006
|
+
]);
|
|
4007
|
+
function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptions = false, runtimeKeys = new Set(), allowSni = false) {
|
|
4008
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
4009
|
+
if (!tlsLiteralNeedsRuntimeWalk(node, includeHttpTimeoutOptions, runtimeKeys))
|
|
4010
|
+
return lowerTlsServerOptions(lowerer, node, what, allowSni);
|
|
4011
|
+
const sniOption = node.properties.nodes.find((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
4012
|
+
(ts.isIdentifier(p.name) || ts.isStringLiteral(p.name)) &&
|
|
4013
|
+
p.name.text === "SNICallback");
|
|
4014
|
+
if (allowSni && sniOption !== undefined) {
|
|
4015
|
+
lowerer.noLowering(`${what} with SNICallback and options the runtime walk reads`, sniOption, "SNICallback lowers with cert and key; ALPNProtocols, minVersion, maxVersion and the validated options are not combined with it yet");
|
|
4016
|
+
}
|
|
3874
4017
|
}
|
|
3875
4018
|
const v = lowerer.lowerExpr(node);
|
|
3876
4019
|
if (v.type.kind === "dyn")
|
|
@@ -3890,13 +4033,13 @@ function lowerTlsServerOptionsOrDyn(lowerer, node, what, includeHttpTimeoutOptio
|
|
|
3890
4033
|
* connect(options[, cb]) and connect(port[, host][, options][, cb]) with
|
|
3891
4034
|
* a RUNTIME options record (the checked-dynamic JS lane's shape — a dyn
|
|
3892
4035
|
* value, or a record that converts): the runtime walk implements
|
|
3893
|
-
* port/host/rejectUnauthorized/ca/servername and throws the catchable
|
|
4036
|
+
* port/host/socket/rejectUnauthorized/ca/servername/ALPNProtocols/minVersion/maxVersion/timeout and throws the catchable
|
|
3894
4037
|
* fence for other documented members (the divergence-66 stance). The
|
|
3895
4038
|
* callback (and 'secureConnect'/'connect' listeners) fires
|
|
3896
4039
|
* post-handshake — Node's secureConnect timing. */
|
|
3897
4040
|
function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
3898
4041
|
const args = expr.arguments.nodes;
|
|
3899
|
-
const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/rejectUnauthorized/ca/servername";
|
|
4042
|
+
const FORMS_HINT = "the supported forms are connect(options[, cb]) and connect(port[, host][, options][, cb]) — options implement port/host/socket/rejectUnauthorized/ca/servername/ALPNProtocols/minVersion/maxVersion/timeout";
|
|
3900
4043
|
if (args.length < 1 || args.length > 4 || args.some(ts.isSpreadElement)) {
|
|
3901
4044
|
lowerer.noLowering(`tls.connect with ${args.length} arguments`, expr, FORMS_HINT);
|
|
3902
4045
|
}
|
|
@@ -3949,7 +4092,19 @@ function lowerTlsConnectCall(lowerer, expr, loc) {
|
|
|
3949
4092
|
// The options value rides whole to the runtime walk: dyn passes
|
|
3950
4093
|
// directly; a typed record that converts boxes into the checked-dynamic tree.
|
|
3951
4094
|
let opts;
|
|
3952
|
-
|
|
4095
|
+
let literal = optsNode;
|
|
4096
|
+
while (literal !== null && ts.isParenthesizedExpression(literal))
|
|
4097
|
+
literal = literal.expression;
|
|
4098
|
+
if (literal !== null &&
|
|
4099
|
+
ts.isObjectLiteralExpression(literal) &&
|
|
4100
|
+
literal.properties.nodes.some((p) => (ts.isPropertyAssignment(p) || ts.isShorthandPropertyAssignment(p)) &&
|
|
4101
|
+
ts.isIdentifier(p.name) &&
|
|
4102
|
+
p.name.text === "socket")) {
|
|
4103
|
+
// A socket member is a handle the record form cannot box: the literal
|
|
4104
|
+
// builds the checked-dynamic object member by member.
|
|
4105
|
+
opts = lowerDynObjectLiteral(lowerer, literal);
|
|
4106
|
+
}
|
|
4107
|
+
else if (optsNode !== null) {
|
|
3953
4108
|
const o = lowerer.lowerExpr(optsNode);
|
|
3954
4109
|
if (o.type.kind === "dyn") {
|
|
3955
4110
|
opts = o;
|
|
@@ -3992,10 +4147,24 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
|
3992
4147
|
if (args.length < 1 || args.length > 2) {
|
|
3993
4148
|
lowerer.noLowering(`createServer with ${args.length} arguments`, expr, "the supported form is createServer({ cert, key }, socket => ...)");
|
|
3994
4149
|
}
|
|
3995
|
-
const opts = lowerTlsServerOptionsOrDyn(lowerer, args[0], "tls.createServer");
|
|
4150
|
+
const opts = lowerTlsServerOptionsOrDyn(lowerer, args[0], "tls.createServer", false, TLS_SERVER_RUNTIME_OPTIONS, true);
|
|
3996
4151
|
if (args.length === 1) {
|
|
3997
|
-
|
|
3998
|
-
|
|
4152
|
+
if (opts.dyn !== undefined)
|
|
4153
|
+
return {
|
|
4154
|
+
kind: "libCall",
|
|
4155
|
+
fn: "tls.createServerDyn",
|
|
4156
|
+
args: [opts.dyn],
|
|
4157
|
+
type: NETSERVER_T,
|
|
4158
|
+
loc,
|
|
4159
|
+
};
|
|
4160
|
+
return opts.sni !== undefined
|
|
4161
|
+
? {
|
|
4162
|
+
kind: "libCall",
|
|
4163
|
+
fn: "tls.createServerSni",
|
|
4164
|
+
args: [opts.cert, opts.key, opts.sni],
|
|
4165
|
+
type: NETSERVER_T,
|
|
4166
|
+
loc,
|
|
4167
|
+
}
|
|
3999
4168
|
: {
|
|
4000
4169
|
kind: "libCall",
|
|
4001
4170
|
fn: "tls.createServer",
|
|
@@ -4005,13 +4174,21 @@ function lowerTlsModuleCall(lowerer, expr, bi, loc) {
|
|
|
4005
4174
|
};
|
|
4006
4175
|
}
|
|
4007
4176
|
const { cb } = lowerCallbackArg(lowerer, args[1], "secureConnection listeners", 1, (p) => p.kind === "netSocket", "use (socket) or ()", [NETSOCKET_T]);
|
|
4008
|
-
|
|
4009
|
-
|
|
4177
|
+
if (opts.dyn !== undefined)
|
|
4178
|
+
return {
|
|
4010
4179
|
kind: "libCall",
|
|
4011
4180
|
fn: "tls.createServerDynCb",
|
|
4012
4181
|
args: [opts.dyn, cb],
|
|
4013
4182
|
type: NETSERVER_T,
|
|
4014
4183
|
loc,
|
|
4184
|
+
};
|
|
4185
|
+
return opts.sni !== undefined
|
|
4186
|
+
? {
|
|
4187
|
+
kind: "libCall",
|
|
4188
|
+
fn: "tls.createServerSniCb",
|
|
4189
|
+
args: [opts.cert, opts.key, opts.sni, cb],
|
|
4190
|
+
type: NETSERVER_T,
|
|
4191
|
+
loc,
|
|
4015
4192
|
}
|
|
4016
4193
|
: {
|
|
4017
4194
|
kind: "libCall",
|
|
@@ -4304,6 +4481,40 @@ const HTTP2_IGNORED_TUNING_OPTIONS = new Set([
|
|
|
4304
4481
|
const SNI_HINT = "SNICallback lowers as a direct option or the conditional spread " +
|
|
4305
4482
|
"...(x ? { SNICallback: x } : {}) — the callback is (servername, cb) => void " +
|
|
4306
4483
|
"with cb: (err: Error | null, ctx?: tls.SecureContext) => void";
|
|
4484
|
+
/** An SNICallback option value: (servername: string, cb) => void where cb
|
|
4485
|
+
* is (err: Error | null, ctx?: SecureContext) => void, or that function
|
|
4486
|
+
* unioned with undefined (no callback). cb may declare fewer params (the
|
|
4487
|
+
* emitted answer thunk matches its ABI), but what it does declare must
|
|
4488
|
+
* carry the arms the thunk decodes. */
|
|
4489
|
+
function lowerSniCallbackValue(lowerer, node, blame, what) {
|
|
4490
|
+
return checkSniCallbackValue(lowerer, lowerer.lowerExpr(node), blame, what);
|
|
4491
|
+
}
|
|
4492
|
+
function checkSniCallbackValue(lowerer, v, blame, what) {
|
|
4493
|
+
const shapeOk = (t) => {
|
|
4494
|
+
if (t.kind !== "func" || t.ret.kind !== "void" || t.params.length !== 2)
|
|
4495
|
+
return false;
|
|
4496
|
+
if (t.params[0].kind !== "string")
|
|
4497
|
+
return false;
|
|
4498
|
+
const cbT = t.params[1];
|
|
4499
|
+
if (cbT.kind !== "func" || cbT.ret.kind !== "void" || cbT.params.length > 2)
|
|
4500
|
+
return false;
|
|
4501
|
+
const armKinds = (u) => u.kind === "union" ? (lowerer.unions.get(u.unionId)?.arms ?? []).map((a) => a.kind) : [];
|
|
4502
|
+
const p0 = cbT.params[0];
|
|
4503
|
+
if (p0 !== undefined && !armKinds(p0).includes("nullT"))
|
|
4504
|
+
return false;
|
|
4505
|
+
const p1 = cbT.params[1];
|
|
4506
|
+
if (p1 !== undefined && !armKinds(p1).includes("secureCtx"))
|
|
4507
|
+
return false;
|
|
4508
|
+
return true;
|
|
4509
|
+
};
|
|
4510
|
+
const arms = v.type.kind === "union" ? (lowerer.unions.get(v.type.unionId)?.arms ?? []) : [];
|
|
4511
|
+
const funcArm = v.type.kind === "func" ? v.type : arms.find((a) => a.kind === "func");
|
|
4512
|
+
const unionOk = v.type.kind !== "union" || (arms.length === 2 && arms.some((a) => a.kind === "undefinedT"));
|
|
4513
|
+
if (funcArm === undefined || !unionOk || !shapeOk(funcArm)) {
|
|
4514
|
+
lowerer.noLowering(`a ${what} SNICallback of '${lowerer.fmt(v.type)}' values`, blame, SNI_HINT);
|
|
4515
|
+
}
|
|
4516
|
+
return v;
|
|
4517
|
+
}
|
|
4307
4518
|
/** Strips parentheses and type assertions: the portless spelling wraps
|
|
4308
4519
|
* an options spread as `...({ ... } as Record<string, unknown>)`. */
|
|
4309
4520
|
function stripParensAndCasts(node) {
|
|
@@ -4515,41 +4726,8 @@ function lowerHttp2ModuleCall(lowerer, expr, bi, loc) {
|
|
|
4515
4726
|
let sni = null;
|
|
4516
4727
|
let allowHttp1 = false;
|
|
4517
4728
|
let enableConnectProtocol = false;
|
|
4518
|
-
// The SNICallback value shape: (servername: string, cb) => void where
|
|
4519
|
-
// cb is (err: Error | null, ctx?: SecureContext) => void — cb may
|
|
4520
|
-
// declare fewer params (the emitted answer thunk matches its ABI),
|
|
4521
|
-
// but what it does declare must carry the arms the thunk decodes.
|
|
4522
|
-
const sniShapeOk = (t) => {
|
|
4523
|
-
if (t.kind !== "func" || t.ret.kind !== "void" || t.params.length !== 2)
|
|
4524
|
-
return false;
|
|
4525
|
-
if (t.params[0].kind !== "string")
|
|
4526
|
-
return false;
|
|
4527
|
-
const cbT = t.params[1];
|
|
4528
|
-
if (cbT.kind !== "func" || cbT.ret.kind !== "void" || cbT.params.length > 2)
|
|
4529
|
-
return false;
|
|
4530
|
-
const armKinds = (u) => u.kind === "union" ? (lowerer.unions.get(u.unionId)?.arms ?? []).map((a) => a.kind) : [];
|
|
4531
|
-
const p0 = cbT.params[0];
|
|
4532
|
-
if (p0 !== undefined && !armKinds(p0).includes("nullT"))
|
|
4533
|
-
return false;
|
|
4534
|
-
const p1 = cbT.params[1];
|
|
4535
|
-
if (p1 !== undefined && !armKinds(p1).includes("secureCtx"))
|
|
4536
|
-
return false;
|
|
4537
|
-
return true;
|
|
4538
|
-
};
|
|
4539
4729
|
const lowerSniValue = (node, blame) => {
|
|
4540
|
-
|
|
4541
|
-
const funcArm = v.type.kind === "func"
|
|
4542
|
-
? v.type
|
|
4543
|
-
: v.type.kind === "union"
|
|
4544
|
-
? (lowerer.unions.get(v.type.unionId)?.arms ?? []).find((a) => a.kind === "func")
|
|
4545
|
-
: undefined;
|
|
4546
|
-
const unionOk = v.type.kind !== "union" ||
|
|
4547
|
-
((lowerer.unions.get(v.type.unionId)?.arms ?? []).length === 2 &&
|
|
4548
|
-
(lowerer.unions.get(v.type.unionId)?.arms ?? []).some((a) => a.kind === "undefinedT"));
|
|
4549
|
-
if (funcArm === undefined || !unionOk || !sniShapeOk(funcArm)) {
|
|
4550
|
-
lowerer.noLowering(`a createSecureServer SNICallback of '${lowerer.fmt(v.type)}' values`, blame, SNI_HINT);
|
|
4551
|
-
}
|
|
4552
|
-
sni = v;
|
|
4730
|
+
sni = lowerSniCallbackValue(lowerer, node, blame, "createSecureServer");
|
|
4553
4731
|
};
|
|
4554
4732
|
const lowerOption = (prop) => {
|
|
4555
4733
|
if (ts.isSpreadAssignment(prop)) {
|
|
@@ -6175,7 +6353,7 @@ function lowerHttpResMethodCall(lowerer, call, access) {
|
|
|
6175
6353
|
const all = [...callArgs, cb];
|
|
6176
6354
|
const key = `server.endcb:${fn}:${all.map((a) => typeKey(a.type)).join(",")}`;
|
|
6177
6355
|
const existing = lowerer.arrHofHelpers.get(key);
|
|
6178
|
-
const helper = existing ??
|
|
6356
|
+
const helper = existing ?? keyedHelperName(lowerer, "%server.endcb", key);
|
|
6179
6357
|
if (!existing) {
|
|
6180
6358
|
lowerer.arrHofHelpers.set(key, helper);
|
|
6181
6359
|
const params = all.map((a, i) => ({ localId: `p${i}.0`, name: `p${i}`, type: a.type }));
|