@scriptc/compiler 0.4.8 → 0.4.9
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/buffer.d.ts +2 -0
- package/ambient/node-fallback/child_process.d.ts +9 -3
- package/ambient/node-fallback/dns-promises.d.ts +25 -0
- package/ambient/node-fallback/dns.d.ts +29 -0
- package/ambient/node-fallback/test.d.ts +7 -0
- package/ambient/scriptc-node-fallback.d.ts +145 -2
- package/ambient/scriptc-overrides.d.ts +22 -13
- package/dist/backend/build-cache.d.ts +1 -1
- package/dist/backend/build-cache.js +1 -1
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +7 -0
- package/dist/backend/cache-root.js +27 -0
- package/dist/backend/cache-root.js.map +1 -1
- package/dist/backend/executable-features.js +5 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/link-plan.js +7 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +12 -1
- package/dist/backend/llvm/bytes-loop-versions.js +107 -30
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +96 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +1 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -5
- package/dist/backend/llvm/classes.js +34 -6
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +21 -2
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -0
- package/dist/backend/llvm/common.js +9 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +36 -2
- package/dist/backend/llvm/cpu-dispatch.js +96 -2
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -2
- package/dist/backend/llvm/dense-array-access.js +16 -12
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +3 -1
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +24 -0
- package/dist/backend/llvm/dyn.js +117 -3
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +6 -0
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +1 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +48 -5
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.js +41 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +11 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +87 -7
- package/dist/backend/llvm/emitter.js +136 -15
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +28 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +19 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +29 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +104 -6
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +15 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +53 -5
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/inline-arrays.js +1 -1
- package/dist/backend/llvm/inline-arrays.js.map +1 -1
- package/dist/backend/llvm/js-ic.js +126 -2
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lanes.d.ts +38 -0
- package/dist/backend/llvm/lanes.js +778 -0
- package/dist/backend/llvm/lanes.js.map +1 -0
- package/dist/backend/llvm/lanes.test.d.ts +1 -0
- package/dist/backend/llvm/lanes.test.js +402 -0
- package/dist/backend/llvm/lanes.test.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +9 -4
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +20 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +27 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +11 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.js +8 -2
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +5 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +3 -0
- package/dist/backend/llvm/publish.js +2 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-groups.js +43 -4
- package/dist/backend/llvm/region-groups.js.map +1 -1
- package/dist/backend/llvm/region-groups.test.js +79 -0
- package/dist/backend/llvm/region-groups.test.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +32 -1
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/shapes.js +10 -1
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +1 -1
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.js +24 -2
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.test.js +38 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +20 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +15 -3
- package/dist/backend/native/executable.js +19 -5
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +20 -0
- package/dist/backend/native-codegen-core.js +15 -0
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -0
- package/dist/backend/native-codegen.js +62 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +48 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +27 -3
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.test.js +17 -1
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +1 -1
- package/dist/backend/native-toolchain.js +1 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +14 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -3
- package/dist/backend/runtime-pack-core.js +6 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +32 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +9 -1
- package/dist/backend/targets.js +11 -2
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +6 -0
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/cli/command.js +15 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +6 -0
- package/dist/cli/mcp.d.ts +72 -0
- package/dist/cli/mcp.js +601 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/mcp.test.d.ts +1 -0
- package/dist/cli/mcp.test.js +380 -0
- package/dist/cli/mcp.test.js.map +1 -0
- package/dist/cli/output-options.d.ts +1 -0
- package/dist/cli/output-options.js +3 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +51 -1
- package/dist/cli/usage.js +709 -186
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +9 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +17 -0
- package/dist/coverage/report.d.ts +5 -9
- package/dist/coverage/report.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +17 -3
- package/dist/executable/executable-cache.js +17 -3
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/prepare.js +87 -10
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +3 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/canon-map.js +13 -8
- package/dist/frontend/canon-map.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +18 -0
- package/dist/frontend/decl-projection.js +90 -22
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/decl-projection.test.js +47 -1
- package/dist/frontend/decl-projection.test.js.map +1 -1
- package/dist/frontend/default-library.d.ts +10 -0
- package/dist/frontend/default-library.js +43 -0
- package/dist/frontend/default-library.js.map +1 -0
- package/dist/frontend/fork-target.js +54 -9
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +82 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +73 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.d.ts +2 -1
- package/dist/frontend/lowering/abstract-equality.js +7 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +2 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assertion-members.js +52 -2
- package/dist/frontend/lowering/assertion-members.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +5 -0
- package/dist/frontend/lowering/builtin-namespaces.js +19 -12
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +42 -6
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +12 -11
- package/dist/frontend/lowering/builtins/child-process.js +235 -38
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +6 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -3
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +2 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +3 -1
- package/dist/frontend/lowering/builtins/crypto.js +9 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +26 -6
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +13 -1
- package/dist/frontend/lowering/builtins/environment.js +15 -4
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +33 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +213 -11
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +9 -2
- package/dist/frontend/lowering/builtins/module-resolution.js +187 -19
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +1 -1
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +40 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +33 -0
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +9 -5
- package/dist/frontend/lowering/builtins/readline.js +184 -75
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +4 -0
- package/dist/frontend/lowering/builtins/url.js +6 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +15 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/callable-properties.d.ts +34 -0
- package/dist/frontend/lowering/callable-properties.js +210 -0
- package/dist/frontend/lowering/callable-properties.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +16 -0
- package/dist/frontend/lowering/cjs-inline-require.js +105 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.test.d.ts +1 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js +61 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +82 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +57 -4
- package/dist/frontend/lowering/class-protocols.js +597 -30
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -2
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +12 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +62 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +56 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +9 -4
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.d.ts +9 -0
- package/dist/frontend/lowering/collection-ingestion.js +115 -41
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +16 -0
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +66 -10
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +61 -5
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.js +11 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +15 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +213 -30
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +16 -0
- package/dist/frontend/lowering/error-name-order.js +61 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +17 -0
- package/dist/frontend/lowering/expressions/asserted-receiver.js +123 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +147 -20
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +63 -14
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/erased-delete.d.ts +59 -0
- package/dist/frontend/lowering/expressions/erased-delete.js +247 -0
- package/dist/frontend/lowering/expressions/erased-delete.js.map +1 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +10 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +48 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +20 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +7 -2
- package/dist/frontend/lowering/expressions/narrowing.js +77 -45
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +62 -19
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +19 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +7 -7
- package/dist/frontend/lowering/expressions/property-access.js +247 -48
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.d.ts +1 -0
- package/dist/frontend/lowering/expressions/relational.js +18 -8
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +11 -5
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +121 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +36 -0
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +8 -8
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +62 -3
- package/dist/frontend/lowering/handle-properties.js +674 -26
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.test.js +95 -2
- package/dist/frontend/lowering/handle-properties.test.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
- package/dist/frontend/lowering/lower-builtin-values.js +44 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +328 -136
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +82 -17
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +113 -9
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +13 -21
- package/dist/frontend/lowering/lower-expando.js +90 -126
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +65 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +471 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +36 -10
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +28 -0
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +53 -7
- package/dist/frontend/lowering/lower-server.js +213 -42
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +50 -7
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -0
- package/dist/frontend/lowering/lower-stmts.js +463 -220
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +2 -2
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +71 -2
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +81 -10
- package/dist/frontend/lowering/lowerer.js +319 -72
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +10 -2
- package/dist/frontend/lowering/new-target.js.map +1 -1
- package/dist/frontend/lowering/nullish-empty-pattern.js +3 -3
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.js +30 -5
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.js +91 -1
- package/dist/frontend/lowering/primitive-throws.js.map +1 -1
- package/dist/frontend/lowering/primitive-wrappers.d.ts +9 -0
- package/dist/frontend/lowering/primitive-wrappers.js +2 -2
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +5 -2
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/record-links.js +7 -2
- package/dist/frontend/lowering/record-links.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +4 -0
- package/dist/frontend/lowering/surfaces.js +118 -2
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/surfaces.test.d.ts +1 -0
- package/dist/frontend/lowering/surfaces.test.js +31 -0
- package/dist/frontend/lowering/surfaces.test.js.map +1 -0
- package/dist/frontend/mock-shapes.js +3 -3
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/npm-static-ladder.d.ts +21 -0
- package/dist/frontend/npm-static-ladder.js +2 -0
- package/dist/frontend/npm-static-ladder.js.map +1 -0
- package/dist/frontend/npm-static-ladder.test.d.ts +1 -0
- package/dist/frontend/npm-static-ladder.test.js +138 -0
- package/dist/frontend/npm-static-ladder.test.js.map +1 -0
- package/dist/frontend/npm-static-status.d.ts +15 -0
- package/dist/frontend/npm-static-status.js +2 -0
- package/dist/frontend/npm-static-status.js.map +1 -0
- package/dist/frontend/package-shims.js +1 -1
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +1 -1
- package/dist/frontend/pipeline.js +222 -25
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +4 -0
- package/dist/frontend/program-analysis.js +6 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.js +258 -32
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +30 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +29 -5
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +40 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +8 -0
- package/dist/frontend/services.js +7 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +7 -0
- package/dist/frontend/ts7/checker.js +12 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +1 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +39 -2
- package/dist/frontend/ts7/program-host.js +62 -8
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +33 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/session-cache.d.ts +5 -1
- package/dist/frontend/ts7/session-cache.js +7 -1
- package/dist/frontend/ts7/session-cache.js.map +1 -1
- package/dist/frontend/ts7/session-cache.test.js +37 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +19 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +17 -2
- package/dist/frontend/ts7/source-parser.js +61 -2
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +55 -2
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +3 -2
- package/dist/frontend/tsc-codes.js +129 -22
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +5 -11
- package/dist/frontend/type-mapper.js +380 -70
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +67 -7
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -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 +72 -6
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +321 -263
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-length-clones.d.ts +26 -0
- package/dist/ir/constant-length-clones.js +589 -0
- package/dist/ir/constant-length-clones.js.map +1 -0
- package/dist/ir/constant-length-clones.test.d.ts +1 -0
- package/dist/ir/constant-length-clones.test.js +292 -0
- package/dist/ir/constant-length-clones.test.js.map +1 -0
- package/dist/ir/constant-tables.d.ts +10 -5
- package/dist/ir/constant-tables.js +83 -17
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +58 -1
- package/dist/ir/constant-tables.test.js.map +1 -1
- package/dist/ir/fields.generated.js +5 -2
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +13 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/integer-loops.js +1 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +16 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/ir.d.ts +50 -6
- package/dist/ir/ir.js +44 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +83 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-groups.js +5 -1
- package/dist/ir/js-groups.js.map +1 -1
- package/dist/ir/js-ic.d.ts +20 -0
- package/dist/ir/js-ic.js +81 -4
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +8 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/lane-plans.d.ts +86 -0
- package/dist/ir/lane-plans.js +589 -0
- package/dist/ir/lane-plans.js.map +1 -0
- package/dist/ir/lane-plans.test.d.ts +1 -0
- package/dist/ir/lane-plans.test.js +549 -0
- package/dist/ir/lane-plans.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +68 -10
- package/dist/ir/runtime-features.js +285 -17
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +190 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/validate.js +61 -24
- package/dist/ir/validate.js.map +1 -1
- package/dist/native/cache.d.ts +5 -0
- package/dist/native/cache.js +23 -1
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +29 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +4 -2
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +11 -3
- package/dist/native/compiler.js +102 -16
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +244 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/prepare.d.ts +14 -1
- package/dist/native/prepare.js +79 -29
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +3 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/unchanged.d.ts +80 -0
- package/dist/native/unchanged.js +301 -0
- package/dist/native/unchanged.js.map +1 -0
- package/dist/native/unchanged.test.d.ts +1 -0
- package/dist/native/unchanged.test.js +249 -0
- package/dist/native/unchanged.test.js.map +1 -0
- package/dist/node-islands/boundary.d.ts +16 -0
- package/dist/node-islands/boundary.js +70 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.js +59 -14
- package/dist/node-islands/boundary.test.js.map +1 -1
- package/dist/node-islands/detect.js +203 -47
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +45 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/growth.js +4 -16
- package/dist/node-islands/growth.js.map +1 -1
- package/dist/node-islands/modules.d.ts +3 -0
- package/dist/node-islands/modules.js +143 -12
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +125 -0
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/report.d.ts +1 -1
- package/dist/node-islands/report.js +2 -1
- package/dist/node-islands/report.js.map +1 -1
- package/package.json +20 -20
- package/shims/undici/core/request.ts +7 -1
- package/surface-manifest.json +380 -2
|
@@ -4,7 +4,7 @@ import { dynUndefinedExpr, nodeThrowExpr, boolLit, numLit, strLit, varRef, } fro
|
|
|
4
4
|
import * as ts from "../ts7/adapter.js";
|
|
5
5
|
import { ladderFenceExpr } from "./lowerer.js";
|
|
6
6
|
import { isJsSourceFile, locOf } from "../program.js";
|
|
7
|
-
import { arrayOf, BOOL, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, funcOf, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, NETSERVER_T, NETSOCKET_T, NULL_T, SECURECTX_T, STRING, UNDEFINED_T, typeKey, VOID, } from "../../ir/ir.js";
|
|
7
|
+
import { arrayOf, BOOL, BYTES_U8, canBoxFuncIntoDyn, canConvertToDyn, DYN, DYN_HANDLE_KINDS, F64, funcOf, HTTP2SESSION_T, HTTP2STREAM_T, HTTPCLIENTREQ_T, HTTPREQ_T, HTTPRES_T, NETSERVER_T, NETSOCKET_T, NULL_T, SECURECTX_T, STRING, UNDEFINED_T, sortArms, typeKey, VOID, } from "../../ir/ir.js";
|
|
8
8
|
import { AGENT_DOCUMENTED_OPTIONS, HTTPS_AGENT_DOCUMENTED_OPTIONS, builtinFenceHintOf, builtinModuleFnOf, fenceOrDropOptionKey, HTTP_CLIENT_DOCUMENTED_OPTIONS, HTTP_SERVER_DOCUMENTED_OPTIONS, HTTP2_SECURE_SERVER_DOCUMENTED_OPTIONS, HTTPS_CLIENT_DOCUMENTED_OPTIONS, sideEffectFreeOptionValue, TLS_SERVER_DOCUMENTED_OPTIONS, } from "./surfaces.js";
|
|
9
9
|
import { conditionalSpreadOf, lowerDynObjectLiteral } from "./expressions/object-literals.js";
|
|
10
10
|
import { resultIsDiscarded } from "./call-position.js";
|
|
@@ -424,7 +424,7 @@ function headerParamShapeId(cbT, idx) {
|
|
|
424
424
|
* with no static param type to read the shape from). */
|
|
425
425
|
function canonicalHeaderRecord(lowerer) {
|
|
426
426
|
const arms = [F64, STRING, arrayOf(STRING), UNDEFINED_T];
|
|
427
|
-
arms
|
|
427
|
+
sortArms(arms);
|
|
428
428
|
const slot = { kind: "union", unionId: lowerer.unions.intern(arms) };
|
|
429
429
|
const shapeId = lowerer.shapes.intern([], false, slot, []);
|
|
430
430
|
return { type: { kind: "record", shapeId }, shapeId };
|
|
@@ -4136,6 +4136,9 @@ function lowerHttpModuleCall(lowerer, expr, bi, loc) {
|
|
|
4136
4136
|
* Buffers (fs.readFileSync either way — portless reads Buffers) — a
|
|
4137
4137
|
* runtime-valued (dyn) entry rides the tls.pemDyn extraction, throwing
|
|
4138
4138
|
* the fence at runtime for non-PEM kinds (the divergence-66 stance).
|
|
4139
|
+
* With an SNICallback the default pair may be absent (Node serves each
|
|
4140
|
+
* handshake from the answered context), so a missing cert or key lowers
|
|
4141
|
+
* to an empty value the runtime reads as "no default material".
|
|
4139
4142
|
* Every other key fences by name; SNICallback gets the pointed hint. */
|
|
4140
4143
|
function lowerTlsServerOptions(lowerer, node, what, allowSni = false) {
|
|
4141
4144
|
if (!ts.isObjectLiteralExpression(node)) {
|
|
@@ -4187,7 +4190,7 @@ function lowerTlsServerOptions(lowerer, node, what, allowSni = false) {
|
|
|
4187
4190
|
continue;
|
|
4188
4191
|
}
|
|
4189
4192
|
fenceOrDropOptionKey(lowerer, prop, k, what, TLS_SERVER_DOCUMENTED_OPTIONS, "cert and key (PEM strings or Buffers) are the supported options", {
|
|
4190
|
-
SNICallback: "SNICallback lowers on tls.createServer and http2.createSecureServer({ allowHTTP1: true, ... })
|
|
4193
|
+
SNICallback: "SNICallback lowers on tls.createServer (with or without a default cert/key pair) and on http2.createSecureServer({ allowHTTP1: true, ... })",
|
|
4191
4194
|
});
|
|
4192
4195
|
continue; // an undocumented key, dropped like Node drops it
|
|
4193
4196
|
}
|
|
@@ -4226,7 +4229,24 @@ function lowerTlsServerOptions(lowerer, node, what, allowSni = false) {
|
|
|
4226
4229
|
key = v;
|
|
4227
4230
|
}
|
|
4228
4231
|
if (cert === null || key === null) {
|
|
4229
|
-
|
|
4232
|
+
if (sni === undefined) {
|
|
4233
|
+
lowerer.noLowering(`${what} without both cert and key`, node, "the supported options object is { cert, key } (PEM strings or Buffers), or { SNICallback } to serve every handshake from the callback's context");
|
|
4234
|
+
}
|
|
4235
|
+
// Node accepts SNICallback without a default pair: the default context
|
|
4236
|
+
// then serves no certificate and the answered context supplies the
|
|
4237
|
+
// handshake's. An empty value carries "absent" to the runtime.
|
|
4238
|
+
const absent = () => ({ kind: "strLit", value: "", type: STRING, loc });
|
|
4239
|
+
if (cert === null)
|
|
4240
|
+
cert = absent();
|
|
4241
|
+
if (key === null)
|
|
4242
|
+
key = absent();
|
|
4243
|
+
// No cert/key entry followed the callback, so the saved read is
|
|
4244
|
+
// attached to the callback argument: it then runs after the entries
|
|
4245
|
+
// that did precede it, as the literal evaluated them.
|
|
4246
|
+
if (pendingSni !== null) {
|
|
4247
|
+
sni = { kind: "seqExpr", stmts: [pendingSni], result: sni, type: sni.type, loc };
|
|
4248
|
+
pendingSni = null;
|
|
4249
|
+
}
|
|
4230
4250
|
}
|
|
4231
4251
|
return sni === undefined ? { cert, key } : { cert, key, sni };
|
|
4232
4252
|
}
|
|
@@ -4561,14 +4581,66 @@ export function lowerTlsRootCertificates(lowerer, bi, loc) {
|
|
|
4561
4581
|
return null;
|
|
4562
4582
|
return { kind: "libCall", fn: "tlsca.root", args: [], type: arrayOf(STRING), loc };
|
|
4563
4583
|
}
|
|
4584
|
+
/** True when a declaration runs at most once, as a statement of the module
|
|
4585
|
+
* body itself. A declaration inside a loop runs once per iteration and each
|
|
4586
|
+
* iteration has its own binding in JS, so it takes the hidden-local storage
|
|
4587
|
+
* instead: its declaration statement allocates the box every pass, and the
|
|
4588
|
+
* closures made in a pass keep that pass's box. */
|
|
4589
|
+
function moduleScopeDecl(decl) {
|
|
4590
|
+
for (let node = decl.parent; node !== undefined; node = node.parent) {
|
|
4591
|
+
if (ts.isSourceFile(node))
|
|
4592
|
+
return true;
|
|
4593
|
+
if (ts.isFunctionLike(node))
|
|
4594
|
+
return false;
|
|
4595
|
+
if (ts.isForStatement(node) ||
|
|
4596
|
+
ts.isForOfStatement(node) ||
|
|
4597
|
+
ts.isForInStatement(node) ||
|
|
4598
|
+
ts.isWhileStatement(node) ||
|
|
4599
|
+
ts.isDoStatement(node)) {
|
|
4600
|
+
return false;
|
|
4601
|
+
}
|
|
4602
|
+
}
|
|
4603
|
+
return false;
|
|
4604
|
+
}
|
|
4564
4605
|
export function httpClientFnBindingOf(lowerer, sym) {
|
|
4565
4606
|
return lowerer.httpClientFnBindings.get(sym);
|
|
4566
4607
|
}
|
|
4567
4608
|
/** The { module, member } of an http/https client-function REFERENCE
|
|
4568
4609
|
* (`https.request` through a namespace import, or a named `request`
|
|
4569
4610
|
* import binding) — null for anything else. */
|
|
4570
|
-
function clientFnRefOf(lowerer, node) {
|
|
4571
|
-
|
|
4611
|
+
function clientFnRefOf(lowerer, node, seen = new Set()) {
|
|
4612
|
+
let e = node;
|
|
4613
|
+
while (ts.isParenthesizedExpression(e))
|
|
4614
|
+
e = e.expression;
|
|
4615
|
+
if (ts.isIdentifier(e)) {
|
|
4616
|
+
// An alias of a client function (`const httpsRequest = https.request`),
|
|
4617
|
+
// registered or not yet lowered: a const binding names the same
|
|
4618
|
+
// function the declaration's initializer names. An import binding
|
|
4619
|
+
// resolves through to the exporting declaration.
|
|
4620
|
+
let sym = lowerer.resolveValueSymbol(e);
|
|
4621
|
+
if (sym && (sym.flags & ts.SymbolFlags.Alias) !== 0) {
|
|
4622
|
+
try {
|
|
4623
|
+
sym = lowerer.checker.getAliasedSymbol(sym);
|
|
4624
|
+
}
|
|
4625
|
+
catch {
|
|
4626
|
+
// Leave the alias symbol in place; its declarations decide.
|
|
4627
|
+
}
|
|
4628
|
+
}
|
|
4629
|
+
if (sym && !seen.has(sym)) {
|
|
4630
|
+
const projection = lowerer.staticCallables.get(sym);
|
|
4631
|
+
if (projection?.kind === "client-function") {
|
|
4632
|
+
return { module: projection.module, member: projection.member };
|
|
4633
|
+
}
|
|
4634
|
+
const decl = sym.declarations[0];
|
|
4635
|
+
if (decl !== undefined &&
|
|
4636
|
+
ts.isVariableDeclaration(decl) &&
|
|
4637
|
+
(ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) !== 0 &&
|
|
4638
|
+
decl.initializer !== undefined) {
|
|
4639
|
+
seen.add(sym);
|
|
4640
|
+
return clientFnRefOf(lowerer, decl.initializer, seen);
|
|
4641
|
+
}
|
|
4642
|
+
}
|
|
4643
|
+
}
|
|
4572
4644
|
const bi = ts.isPropertyAccessExpression(e)
|
|
4573
4645
|
? lowerer.builtinMemberOf(e)
|
|
4574
4646
|
: ts.isIdentifier(e)
|
|
@@ -4642,20 +4714,17 @@ function neverReassigned(lowerer, sym) {
|
|
|
4642
4714
|
visit(root);
|
|
4643
4715
|
return !written;
|
|
4644
4716
|
}
|
|
4645
|
-
/**
|
|
4646
|
-
*
|
|
4647
|
-
*
|
|
4648
|
-
|
|
4649
|
-
* stable identifier fences pointedly; non-client ternaries answer false
|
|
4650
|
-
* (the ordinary decl path and its per-arm fences apply). */
|
|
4651
|
-
export function registerHttpClientFnBinding(lowerer, nameNode, init) {
|
|
4717
|
+
/** The `cond ? <client A> : <client B>` shape where A and B are the SAME
|
|
4718
|
+
* member (request/get) of https and http (either order) — null for any
|
|
4719
|
+
* other initializer. Every other pair fences pointedly. */
|
|
4720
|
+
function clientFnConditionalOf(lowerer, init) {
|
|
4652
4721
|
if (!init)
|
|
4653
|
-
return
|
|
4722
|
+
return null;
|
|
4654
4723
|
let e = init;
|
|
4655
4724
|
while (ts.isParenthesizedExpression(e))
|
|
4656
4725
|
e = e.expression;
|
|
4657
4726
|
if (!ts.isConditionalExpression(e))
|
|
4658
|
-
return
|
|
4727
|
+
return null;
|
|
4659
4728
|
const unwrap = (a) => {
|
|
4660
4729
|
let x = a;
|
|
4661
4730
|
while (ts.isParenthesizedExpression(x))
|
|
@@ -4665,30 +4734,110 @@ export function registerHttpClientFnBinding(lowerer, nameNode, init) {
|
|
|
4665
4734
|
const t = clientFnRefOf(lowerer, unwrap(e.whenTrue));
|
|
4666
4735
|
const f = clientFnRefOf(lowerer, unwrap(e.whenFalse));
|
|
4667
4736
|
if (!t || !f)
|
|
4668
|
-
return
|
|
4737
|
+
return null;
|
|
4669
4738
|
if (t.member !== f.member || t.module === f.module) {
|
|
4670
4739
|
lowerer.noLowering("a conditional between these two client functions", e, "the lowered shape is `cond ? https.request : http.request` (or the .get pair, either order) — the same member of both modules");
|
|
4671
4740
|
}
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4741
|
+
return { cond: unwrap(e.condition), trueSecure: t.module === "https", member: t.member };
|
|
4742
|
+
}
|
|
4743
|
+
/** Whether a condition is a bare identifier over a never-reassigned
|
|
4744
|
+
* binding: a pure, stable read that may be re-lowered at each call. */
|
|
4745
|
+
function stableConditionOf(lowerer, cond) {
|
|
4746
|
+
const sym = ts.isIdentifier(cond) ? lowerer.resolveValueSymbol(cond) : null;
|
|
4747
|
+
return sym !== null && neverReassigned(lowerer, sym);
|
|
4748
|
+
}
|
|
4749
|
+
/** Recognizes a `const x = cond ? <client A> : <client B>` declaration and
|
|
4750
|
+
* registers it for the paths that emit no storage: calls lower as the
|
|
4751
|
+
* runtime-secure client, the condition re-lowered per call. Only a stable
|
|
4752
|
+
* identifier read qualifies here — every other condition is captured once
|
|
4753
|
+
* by lowerHttpClientFnBindingDecl. Non-client ternaries answer false (the
|
|
4754
|
+
* ordinary decl path and its per-arm fences apply). */
|
|
4755
|
+
export function registerHttpClientFnBinding(lowerer, nameNode, init) {
|
|
4756
|
+
const shape = clientFnConditionalOf(lowerer, init);
|
|
4757
|
+
if (!shape)
|
|
4758
|
+
return false;
|
|
4759
|
+
if (!stableConditionOf(lowerer, shape.cond)) {
|
|
4760
|
+
lowerer.noLowering("a client-function conditional with this condition shape", shape.cond, "the condition is evaluated once at the declaration; this declaration form has no place to keep it — declare the binding as a const statement");
|
|
4676
4761
|
}
|
|
4677
4762
|
const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
|
|
4678
|
-
if (symbol)
|
|
4763
|
+
if (symbol)
|
|
4764
|
+
lowerer.httpClientFnBindings.set(symbol, shape);
|
|
4765
|
+
return true;
|
|
4766
|
+
}
|
|
4767
|
+
/** The declaration of a `cond ? <client A> : <client B>` binding, which
|
|
4768
|
+
* answers false when the initializer is not that shape. A stable
|
|
4769
|
+
* identifier condition emits nothing (calls re-lower the pure read);
|
|
4770
|
+
* every other condition is evaluated ONCE here, exactly Node's ternary,
|
|
4771
|
+
* into a hidden bool that calls read. */
|
|
4772
|
+
export function lowerHttpClientFnBindingDecl(lowerer, decl) {
|
|
4773
|
+
const shape = clientFnConditionalOf(lowerer, decl.initializer);
|
|
4774
|
+
if (!shape)
|
|
4775
|
+
return false;
|
|
4776
|
+
const symbol = ts.isIdentifier(decl.name)
|
|
4777
|
+
? lowerer.checker.getSymbolAtLocation(decl.name)
|
|
4778
|
+
: undefined;
|
|
4779
|
+
if (!symbol)
|
|
4780
|
+
return false;
|
|
4781
|
+
if (stableConditionOf(lowerer, shape.cond)) {
|
|
4782
|
+
lowerer.httpClientFnBindings.set(symbol, shape);
|
|
4783
|
+
return null;
|
|
4784
|
+
}
|
|
4785
|
+
const loc = locOf(decl);
|
|
4786
|
+
const secure = lowerer.lowerCondition(shape.cond);
|
|
4787
|
+
if (moduleScopeDecl(decl)) {
|
|
4788
|
+
const sf = ts.getSourceFileOfNode(decl);
|
|
4789
|
+
const rawTag = lowerer.fileTag.get(sf) ?? "";
|
|
4790
|
+
const tag = rawTag === "" ? "e." : rawTag.replace(/^%/, "");
|
|
4791
|
+
const id = `%g.${tag}%clientFnSecure.${lowerer.globalsList.length}`;
|
|
4792
|
+
lowerer.globalsList.push({ id, name: "%clientFnSecure", type: BOOL, mutable: true });
|
|
4679
4793
|
lowerer.httpClientFnBindings.set(symbol, {
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
member: t.member,
|
|
4794
|
+
...shape,
|
|
4795
|
+
secureStorage: { kind: "global", id },
|
|
4683
4796
|
});
|
|
4797
|
+
return { kind: "assign", localId: id, value: secure, loc };
|
|
4684
4798
|
}
|
|
4685
|
-
|
|
4799
|
+
const local = lowerer.declareHiddenLocal("%clientFnSecure", BOOL);
|
|
4800
|
+
lowerer.httpClientFnBindings.set(symbol, {
|
|
4801
|
+
...shape,
|
|
4802
|
+
secureStorage: { kind: "local", local, owner: lowerer.ctx },
|
|
4803
|
+
});
|
|
4804
|
+
return { kind: "varDecl", localId: local.id, init: secure, loc };
|
|
4805
|
+
}
|
|
4806
|
+
/** A read of a binding's saved condition bool: the module global at module
|
|
4807
|
+
* scope, or the hidden local itself at the declaring function and a threaded
|
|
4808
|
+
* capture inside a function that one encloses. A local miss means the owner
|
|
4809
|
+
* context is gone, which no declaration a use can reach should allow; it is
|
|
4810
|
+
* surfaced as a fence rather than a reference the backend cannot see. */
|
|
4811
|
+
export function httpClientSecureRef(lowerer, binding, node, loc) {
|
|
4812
|
+
const storage = binding.secureStorage;
|
|
4813
|
+
if (storage.kind === "global")
|
|
4814
|
+
return { kind: "varRef", localId: storage.id, type: BOOL, loc };
|
|
4815
|
+
const local = lowerer.captureHiddenLocal(storage.local, storage.owner);
|
|
4816
|
+
if (local === null) {
|
|
4817
|
+
lowerer.noLowering("a client function chosen at run time, used outside the function that declared it", node, "declare the binding and use it inside the same function (a nested function in that function can use it)");
|
|
4818
|
+
}
|
|
4819
|
+
return { kind: "varRef", localId: local.id, type: BOOL, loc };
|
|
4820
|
+
}
|
|
4821
|
+
/** The client-function REFERENCE an expression names (a module member, a
|
|
4822
|
+
* named import binding, or an immutable alias chain to either), for call
|
|
4823
|
+
* sites that are not the direct member form. */
|
|
4824
|
+
export function httpClientFnRefOf(lowerer, node) {
|
|
4825
|
+
return clientFnRefOf(lowerer, node);
|
|
4686
4826
|
}
|
|
4687
4827
|
/** A call THROUGH a registered requestFn binding: the http client
|
|
4688
4828
|
* lowering with the RUNTIME-secure extras (the binding mode). */
|
|
4689
4829
|
export function lowerHttpClientFnCall(lowerer, expr, binding, loc) {
|
|
4690
4830
|
return lowerHttpClientCall(lowerer, expr, binding.member, loc, binding);
|
|
4691
4831
|
}
|
|
4832
|
+
/** A call through an immutable alias of a client function
|
|
4833
|
+
* (`const httpsRequest = https.request; httpsRequest(...)`): the same
|
|
4834
|
+
* lowering a direct `https.request(...)` call gets, so the alias adds no
|
|
4835
|
+
* runtime indirection and the secure defaults follow the module it names. */
|
|
4836
|
+
export function lowerHttpClientFnRefCall(lowerer, expr, ref, loc) {
|
|
4837
|
+
return ref.module === "https"
|
|
4838
|
+
? lowerHttpsModuleCall(lowerer, expr, ref, loc)
|
|
4839
|
+
: lowerHttpModuleCall(lowerer, expr, ref, loc);
|
|
4840
|
+
}
|
|
4692
4841
|
/** Module-function calls on https import bindings: createServer(options,
|
|
4693
4842
|
* handler) and request/get — the http client lowering with the secure
|
|
4694
4843
|
* extras (port 443 default, rejectUnauthorized, ca). */
|
|
@@ -5340,11 +5489,15 @@ function lowerUrlFormOptions(lowerer, node) {
|
|
|
5340
5489
|
function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
5341
5490
|
const binding = typeof secure === "object" ? secure : null;
|
|
5342
5491
|
const secureish = binding !== null || secure === true;
|
|
5343
|
-
/**
|
|
5344
|
-
*
|
|
5492
|
+
/** The binding's secure condition: the declaration-time capture when the
|
|
5493
|
+
* condition was not a stable identifier read, otherwise a FRESH lowering
|
|
5494
|
+
* of the pure identifier (each use is its own IR). */
|
|
5345
5495
|
const secureExpr = () => {
|
|
5346
|
-
const
|
|
5347
|
-
|
|
5496
|
+
const b = binding;
|
|
5497
|
+
const c = b.secureStorage !== undefined
|
|
5498
|
+
? httpClientSecureRef(lowerer, b, expr, loc)
|
|
5499
|
+
: lowerer.lowerCondition(b.cond);
|
|
5500
|
+
return b.trueSecure ? c : { kind: "unary", op: "!", operand: c, type: BOOL, loc };
|
|
5348
5501
|
};
|
|
5349
5502
|
const args = expr.arguments.nodes;
|
|
5350
5503
|
if (args.length < 1 || args.length > 3) {
|
|
@@ -5359,30 +5512,48 @@ function lowerHttpClientCall(lowerer, expr, member, loc, secure = false) {
|
|
|
5359
5512
|
// Only the URL form has a middle options argument: (url, options, cb).
|
|
5360
5513
|
lowerer.noLowering(`${member} with 3 arguments`, expr, `the supported forms are ${member}(options[, callback]) and ${member}(url, options[, callback])`);
|
|
5361
5514
|
}
|
|
5362
|
-
const runtimeOptions =
|
|
5515
|
+
const runtimeOptions = runtimeRequestOptions(lowerer, optsNode, secureish);
|
|
5363
5516
|
if (runtimeOptions !== null) {
|
|
5364
5517
|
// The options record is read at run time (the ClientRequest
|
|
5365
5518
|
// constructor's walk in the runtime): a RequestOptions variable, or a
|
|
5366
|
-
// literal that spreads one or sets socketPath.
|
|
5519
|
+
// literal that spreads one or sets socketPath. A binding's secure bool
|
|
5520
|
+
// travels with the walk so the dial follows the same runtime choice.
|
|
5367
5521
|
const autoEnd = boolLit(member === "get", loc);
|
|
5368
5522
|
const secureDyn = secure === true;
|
|
5369
|
-
|
|
5523
|
+
const call = (cb) => {
|
|
5524
|
+
if (binding !== null) {
|
|
5525
|
+
const secureArg = secureExpr();
|
|
5526
|
+
return {
|
|
5527
|
+
kind: "libCall",
|
|
5528
|
+
fn: cb === null ? "https.requestFnDyn" : "https.requestFnDynCb",
|
|
5529
|
+
args: cb === null
|
|
5530
|
+
? [secureArg, runtimeOptions, autoEnd]
|
|
5531
|
+
: [secureArg, runtimeOptions, autoEnd, cb],
|
|
5532
|
+
type: HTTPCLIENTREQ_T,
|
|
5533
|
+
loc,
|
|
5534
|
+
};
|
|
5535
|
+
}
|
|
5536
|
+
if (cb === null) {
|
|
5537
|
+
return {
|
|
5538
|
+
kind: "libCall",
|
|
5539
|
+
fn: secureDyn ? "https.requestDyn" : "http.requestDyn",
|
|
5540
|
+
args: [runtimeOptions, autoEnd],
|
|
5541
|
+
type: HTTPCLIENTREQ_T,
|
|
5542
|
+
loc,
|
|
5543
|
+
};
|
|
5544
|
+
}
|
|
5370
5545
|
return {
|
|
5371
5546
|
kind: "libCall",
|
|
5372
|
-
fn: secureDyn ? "https.
|
|
5373
|
-
args: [runtimeOptions, autoEnd],
|
|
5547
|
+
fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
|
|
5548
|
+
args: [runtimeOptions, autoEnd, cb],
|
|
5374
5549
|
type: HTTPCLIENTREQ_T,
|
|
5375
5550
|
loc,
|
|
5376
5551
|
};
|
|
5377
|
-
}
|
|
5378
|
-
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
5379
|
-
return {
|
|
5380
|
-
kind: "libCall",
|
|
5381
|
-
fn: secureDyn ? "https.requestDynCb" : "http.requestDynCb",
|
|
5382
|
-
args: [runtimeOptions, autoEnd, cb],
|
|
5383
|
-
type: HTTPCLIENTREQ_T,
|
|
5384
|
-
loc,
|
|
5385
5552
|
};
|
|
5553
|
+
if (args.length === 1)
|
|
5554
|
+
return call(null);
|
|
5555
|
+
const { cb } = lowerCallbackArg(lowerer, args[1], "response callbacks", 1, (p) => p.kind === "httpReq", "use (res) or ()", [HTTPREQ_T]);
|
|
5556
|
+
return call(cb);
|
|
5386
5557
|
}
|
|
5387
5558
|
if (!ts.isObjectLiteralExpression(optsNode)) {
|
|
5388
5559
|
const t = optsType;
|