@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
|
@@ -332,6 +332,86 @@ function isPrototypeFunctionAssignment(left, right) {
|
|
|
332
332
|
ts.isPropertyAccessExpression(left.expression) &&
|
|
333
333
|
propertyName(left.expression) === "prototype");
|
|
334
334
|
}
|
|
335
|
+
/** A declared name that is not a builtin module value. */
|
|
336
|
+
const NOT_BUILTIN = { builtin: null, cjs: false, createRequire: false };
|
|
337
|
+
function isScopeBoundary(node) {
|
|
338
|
+
return (isFunctionBoundary(node) ||
|
|
339
|
+
ts.isArrowFunction(node) ||
|
|
340
|
+
ts.isSourceFile(node) ||
|
|
341
|
+
ts.isClassStaticBlockDeclaration(node));
|
|
342
|
+
}
|
|
343
|
+
/** Blocks and statement heads `let`, `const` and class declarations bind
|
|
344
|
+
* in, in addition to a function or static-block scope. */
|
|
345
|
+
function isBlockBoundary(node) {
|
|
346
|
+
return (ts.isBlock(node) ||
|
|
347
|
+
ts.isModuleBlock(node) ||
|
|
348
|
+
ts.isForStatement(node) ||
|
|
349
|
+
ts.isForOfStatement(node) ||
|
|
350
|
+
ts.isForInStatement(node) ||
|
|
351
|
+
ts.isCaseBlock(node));
|
|
352
|
+
}
|
|
353
|
+
/** The scope a declaration binds its name in. `hoisted` asks for the
|
|
354
|
+
* enclosing function's scope: `var`, parameters, and a sloppy block-level
|
|
355
|
+
* function declaration (Annex B.3.2) reach the whole function. */
|
|
356
|
+
function bindingScope(decl, hoisted) {
|
|
357
|
+
// The name climbs through its binding pattern to the declaration that
|
|
358
|
+
// hosts it: the declaration kind decides where the name is visible.
|
|
359
|
+
let host = decl;
|
|
360
|
+
for (;;) {
|
|
361
|
+
const parent = host.parent;
|
|
362
|
+
if (parent === undefined)
|
|
363
|
+
break;
|
|
364
|
+
if (ts.isBindingElement(host) ||
|
|
365
|
+
ts.isObjectBindingPattern(host) ||
|
|
366
|
+
ts.isArrayBindingPattern(host) ||
|
|
367
|
+
(ts.isIdentifier(host) &&
|
|
368
|
+
(ts.isBindingElement(parent) || ts.isVariableDeclaration(parent) || ts.isParameter(parent)))) {
|
|
369
|
+
host = parent;
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
// A named function or class expression binds inside itself only.
|
|
375
|
+
if (ts.isFunctionExpression(host) || ts.isClassExpression(host))
|
|
376
|
+
return host;
|
|
377
|
+
// A catch clause's parameter or declaration names a value that exists
|
|
378
|
+
// only inside the catch block; outside it the name keeps the meaning the
|
|
379
|
+
// enclosing scope gives it.
|
|
380
|
+
if (host.parent !== undefined && ts.isCatchClause(host.parent))
|
|
381
|
+
return host.parent.block;
|
|
382
|
+
const blockScoped = !hoisted &&
|
|
383
|
+
(ts.isFunctionDeclaration(host) ||
|
|
384
|
+
ts.isClassDeclaration(host) ||
|
|
385
|
+
ts.isEnumDeclaration(host) ||
|
|
386
|
+
ts.isModuleDeclaration(host) ||
|
|
387
|
+
(ts.isVariableDeclaration(host) &&
|
|
388
|
+
(ts.getCombinedNodeFlags(host) & ts.NodeFlags.BlockScoped) !== 0));
|
|
389
|
+
for (let cur = host.parent; cur !== undefined; cur = cur.parent) {
|
|
390
|
+
if (isScopeBoundary(cur))
|
|
391
|
+
return cur;
|
|
392
|
+
if (blockScoped && isBlockBoundary(cur))
|
|
393
|
+
return cur;
|
|
394
|
+
}
|
|
395
|
+
// Unreachable for a parsed file (a source file is a scope boundary);
|
|
396
|
+
// declare it at the outermost node so the binding never escapes.
|
|
397
|
+
let root = host;
|
|
398
|
+
while (root.parent !== undefined)
|
|
399
|
+
root = root.parent;
|
|
400
|
+
return root;
|
|
401
|
+
}
|
|
402
|
+
function scopeDepth(scope) {
|
|
403
|
+
let depth = 0;
|
|
404
|
+
for (let cur = scope; cur !== undefined; cur = cur.parent)
|
|
405
|
+
depth++;
|
|
406
|
+
return depth;
|
|
407
|
+
}
|
|
408
|
+
function scopeContains(scope, at) {
|
|
409
|
+
for (let cur = at; cur !== undefined; cur = cur.parent) {
|
|
410
|
+
if (cur === scope)
|
|
411
|
+
return true;
|
|
412
|
+
}
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
335
415
|
/** One module's pre-scan. */
|
|
336
416
|
class ModuleScanner {
|
|
337
417
|
sf;
|
|
@@ -343,14 +423,11 @@ class ModuleScanner {
|
|
|
343
423
|
* variables). */
|
|
344
424
|
functions = new Set();
|
|
345
425
|
classes = new Set();
|
|
346
|
-
/**
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
* a createRequire'd require's result, a default import, or an alias of
|
|
352
|
-
* one. Writes through these names are patches of the module object. */
|
|
353
|
-
cjsBuiltinObjects = new Set();
|
|
426
|
+
/** Every declaration of a name the scan tracks for builtin identity, by
|
|
427
|
+
* name: a use resolves the innermost declaration whose scope contains
|
|
428
|
+
* it, so a parameter or local of the same name masks an outer alias
|
|
429
|
+
* instead of inheriting its identity. */
|
|
430
|
+
bindings = new Map();
|
|
354
431
|
/** Members read through a CommonJS builtin object (H3.4). */
|
|
355
432
|
cjsReads = [];
|
|
356
433
|
/** Reads of names the file declares nowhere and no builtin provides: each
|
|
@@ -398,26 +475,76 @@ class ModuleScanner {
|
|
|
398
475
|
...(member === undefined ? {} : { member }),
|
|
399
476
|
});
|
|
400
477
|
}
|
|
401
|
-
|
|
478
|
+
/** Records that `decl` declares `name` with the identity `value` (null
|
|
479
|
+
* for a declared name that is not a builtin module value, which still
|
|
480
|
+
* masks an outer alias of the same name). */
|
|
481
|
+
recordBinding(name, decl, value, hoisted = false) {
|
|
482
|
+
const scope = bindingScope(decl, hoisted);
|
|
483
|
+
const entry = {
|
|
484
|
+
value: value ?? NOT_BUILTIN,
|
|
485
|
+
scope,
|
|
486
|
+
depth: scopeDepth(scope),
|
|
487
|
+
order: ts.tokenStartOfNode(decl),
|
|
488
|
+
};
|
|
489
|
+
const list = this.bindings.get(name);
|
|
490
|
+
if (list === undefined)
|
|
491
|
+
this.bindings.set(name, [entry]);
|
|
492
|
+
else
|
|
493
|
+
list.push(entry);
|
|
494
|
+
}
|
|
495
|
+
/** The binding `name` resolves to at `at`: the innermost declaration
|
|
496
|
+
* whose scope contains the use. */
|
|
497
|
+
bindingAt(name, at) {
|
|
498
|
+
const list = this.bindings.get(name);
|
|
499
|
+
if (list === undefined)
|
|
500
|
+
return undefined;
|
|
501
|
+
let best;
|
|
502
|
+
for (const entry of list) {
|
|
503
|
+
if (!scopeContains(entry.scope, at))
|
|
504
|
+
continue;
|
|
505
|
+
if (best === undefined ||
|
|
506
|
+
entry.depth > best.depth ||
|
|
507
|
+
(entry.depth === best.depth && entry.order > best.order))
|
|
508
|
+
best = entry;
|
|
509
|
+
}
|
|
510
|
+
return best?.value;
|
|
511
|
+
}
|
|
512
|
+
/** Whether `name` already has a declaration in the scope `decl` binds in. */
|
|
513
|
+
hasBindingInScope(name, decl, hoisted) {
|
|
514
|
+
const list = this.bindings.get(name);
|
|
515
|
+
if (list === undefined)
|
|
516
|
+
return false;
|
|
517
|
+
const scope = bindingScope(decl, hoisted);
|
|
518
|
+
return list.some((entry) => entry.scope === scope);
|
|
519
|
+
}
|
|
520
|
+
bindName(name, init, hoisted = false, identity) {
|
|
402
521
|
if (name === undefined)
|
|
403
522
|
return;
|
|
404
523
|
if (ts.isIdentifier(name)) {
|
|
405
524
|
this.declared.add(name.text);
|
|
406
|
-
if (init === undefined)
|
|
525
|
+
if (init === undefined) {
|
|
526
|
+
// `var fs;` declares the variable again without changing the value
|
|
527
|
+
// it already holds, so it keeps the identity of the declaration it
|
|
528
|
+
// shares a scope with instead of masking it as unbound.
|
|
529
|
+
if (identity === undefined && this.hasBindingInScope(name.text, name, hoisted))
|
|
530
|
+
return;
|
|
531
|
+
this.recordBinding(name.text, name, identity ?? null, hoisted);
|
|
407
532
|
return;
|
|
533
|
+
}
|
|
408
534
|
const value = stripWrappers(init);
|
|
409
535
|
if (ts.isFunctionExpression(value) || ts.isArrowFunction(value))
|
|
410
536
|
this.functions.add(name.text);
|
|
411
537
|
else if (ts.isClassExpression(value))
|
|
412
538
|
this.classes.add(name.text);
|
|
413
539
|
const bound = this.builtinOf(value);
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
540
|
+
const createRequire = ts.isCallExpression(value) && this.isCreateRequireCallee(value.expression);
|
|
541
|
+
this.recordBinding(name.text, name, bound === null && !createRequire
|
|
542
|
+
? null
|
|
543
|
+
: {
|
|
544
|
+
builtin: bound,
|
|
545
|
+
cjs: bound !== null && !bound.includes(".") && this.isCjsObjectValue(value),
|
|
546
|
+
createRequire,
|
|
547
|
+
}, hoisted);
|
|
421
548
|
return;
|
|
422
549
|
}
|
|
423
550
|
if (ts.isObjectBindingPattern(name)) {
|
|
@@ -430,16 +557,21 @@ class ModuleScanner {
|
|
|
430
557
|
if (local !== undefined && ts.isIdentifier(local) && base !== null) {
|
|
431
558
|
const key = element.propertyName;
|
|
432
559
|
const member = key !== undefined && ts.isIdentifier(key) ? key.text : local.text;
|
|
433
|
-
this.
|
|
560
|
+
this.bindName(local, undefined, hoisted, {
|
|
561
|
+
builtin: `${base}.${member}`,
|
|
562
|
+
cjs: false,
|
|
563
|
+
createRequire: false,
|
|
564
|
+
});
|
|
434
565
|
}
|
|
435
|
-
|
|
566
|
+
else
|
|
567
|
+
this.bindName(local, undefined, hoisted);
|
|
436
568
|
}
|
|
437
569
|
return;
|
|
438
570
|
}
|
|
439
571
|
if (ts.isArrayBindingPattern(name)) {
|
|
440
572
|
for (const element of name.elements.nodes) {
|
|
441
573
|
if (ts.isBindingElement(element))
|
|
442
|
-
this.bindName(element.name, undefined);
|
|
574
|
+
this.bindName(element.name, undefined, hoisted);
|
|
443
575
|
}
|
|
444
576
|
}
|
|
445
577
|
}
|
|
@@ -447,18 +579,20 @@ class ModuleScanner {
|
|
|
447
579
|
* createRequire'd require's result of a builtin, or an alias of one. */
|
|
448
580
|
isCjsObjectValue(value) {
|
|
449
581
|
if (ts.isIdentifier(value))
|
|
450
|
-
return this.
|
|
582
|
+
return this.bindingAt(value.text, value)?.cjs === true;
|
|
451
583
|
if (!ts.isCallExpression(value))
|
|
452
584
|
return false;
|
|
453
585
|
return (this.isRequireCallee(value.expression) ||
|
|
454
|
-
(ts.isIdentifier(value.expression) &&
|
|
586
|
+
(ts.isIdentifier(value.expression) &&
|
|
587
|
+
this.bindingAt(value.expression.text, value.expression)?.createRequire === true));
|
|
455
588
|
}
|
|
456
589
|
/** `require("fs")`, `require("node:util").inherits` → "fs", "util.inherits". */
|
|
457
590
|
builtinOf(node) {
|
|
458
591
|
const value = stripWrappers(node);
|
|
459
592
|
if (ts.isCallExpression(value) &&
|
|
460
593
|
(this.isRequireCallee(value.expression) ||
|
|
461
|
-
(ts.isIdentifier(value.expression) &&
|
|
594
|
+
(ts.isIdentifier(value.expression) &&
|
|
595
|
+
this.bindingAt(value.expression.text, value.expression)?.createRequire === true))) {
|
|
462
596
|
const spec = literalText(value.arguments.nodes[0]);
|
|
463
597
|
return spec === null ? null : builtinModuleName(spec);
|
|
464
598
|
}
|
|
@@ -468,7 +602,7 @@ class ModuleScanner {
|
|
|
468
602
|
return base === null || name === null ? null : `${base}.${name}`;
|
|
469
603
|
}
|
|
470
604
|
if (ts.isIdentifier(value))
|
|
471
|
-
return this.
|
|
605
|
+
return this.bindingAt(value.text, value)?.builtin ?? null;
|
|
472
606
|
return null;
|
|
473
607
|
}
|
|
474
608
|
isRequireCallee(node) {
|
|
@@ -477,7 +611,7 @@ class ModuleScanner {
|
|
|
477
611
|
isCreateRequireCallee(node) {
|
|
478
612
|
if (ts.isIdentifier(node)) {
|
|
479
613
|
return (node.text === "createRequire" ||
|
|
480
|
-
this.
|
|
614
|
+
this.bindingAt(node.text, node)?.builtin === "module.createRequire");
|
|
481
615
|
}
|
|
482
616
|
return propertyName(node) === "createRequire";
|
|
483
617
|
}
|
|
@@ -486,10 +620,12 @@ class ModuleScanner {
|
|
|
486
620
|
if (ts.isFunctionDeclaration(node) && node.name !== undefined) {
|
|
487
621
|
this.declared.add(node.name.text);
|
|
488
622
|
this.functions.add(node.name.text);
|
|
623
|
+
this.recordBinding(node.name.text, node, null, this.isAnnexBBlockFunction(node) && !this.isStrict(node));
|
|
489
624
|
}
|
|
490
625
|
else if (ts.isClassDeclaration(node) && node.name !== undefined) {
|
|
491
626
|
this.declared.add(node.name.text);
|
|
492
627
|
this.classes.add(node.name.text);
|
|
628
|
+
this.recordBinding(node.name.text, node, null);
|
|
493
629
|
}
|
|
494
630
|
else if ((ts.isInterfaceDeclaration(node) ||
|
|
495
631
|
ts.isTypeAliasDeclaration(node) ||
|
|
@@ -497,6 +633,10 @@ class ModuleScanner {
|
|
|
497
633
|
ts.isModuleDeclaration(node)) &&
|
|
498
634
|
ts.isIdentifier(node.name)) {
|
|
499
635
|
this.declared.add(node.name.text);
|
|
636
|
+
// An enum or namespace name is also a value binding; an interface
|
|
637
|
+
// or type alias is not, and never shadows a value.
|
|
638
|
+
if (ts.isEnumDeclaration(node) || ts.isModuleDeclaration(node))
|
|
639
|
+
this.recordBinding(node.name.text, node, null);
|
|
500
640
|
}
|
|
501
641
|
else if (ts.isTypeParameterDeclaration(node)) {
|
|
502
642
|
this.declared.add(node.name.text);
|
|
@@ -512,6 +652,10 @@ class ModuleScanner {
|
|
|
512
652
|
}
|
|
513
653
|
else if (ts.isFunctionExpression(node) && node.name !== undefined) {
|
|
514
654
|
this.declared.add(node.name.text);
|
|
655
|
+
this.recordBinding(node.name.text, node, null);
|
|
656
|
+
}
|
|
657
|
+
else if (ts.isClassExpression(node) && node.name !== undefined) {
|
|
658
|
+
this.recordBinding(node.name.text, node, null);
|
|
515
659
|
}
|
|
516
660
|
else if (ts.isCatchClause(node) && node.variableDeclaration !== undefined) {
|
|
517
661
|
this.bindName(node.variableDeclaration.name, undefined);
|
|
@@ -535,18 +679,21 @@ class ModuleScanner {
|
|
|
535
679
|
if (clause !== undefined) {
|
|
536
680
|
if (clause.name !== undefined) {
|
|
537
681
|
this.declared.add(clause.name.text);
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
682
|
+
this.recordBinding(clause.name.text, clause.name, module === null
|
|
683
|
+
? null
|
|
684
|
+
: {
|
|
685
|
+
builtin: module,
|
|
686
|
+
// A default import is the CommonJS object (unlike a
|
|
687
|
+
// namespace or named import, through which Node refuses
|
|
688
|
+
// writes).
|
|
689
|
+
cjs: true,
|
|
690
|
+
createRequire: false,
|
|
691
|
+
});
|
|
544
692
|
}
|
|
545
693
|
const bindings = clause.namedBindings;
|
|
546
694
|
if (bindings !== undefined && ts.isNamespaceImport(bindings)) {
|
|
547
695
|
this.declared.add(bindings.name.text);
|
|
548
|
-
|
|
549
|
-
this.builtinBindings.set(bindings.name.text, module);
|
|
696
|
+
this.recordBinding(bindings.name.text, bindings.name, module === null ? null : { builtin: module, cjs: false, createRequire: false });
|
|
550
697
|
}
|
|
551
698
|
else if (bindings !== undefined && ts.isNamedImports(bindings)) {
|
|
552
699
|
for (const element of bindings.elements.nodes) {
|
|
@@ -555,8 +702,9 @@ class ModuleScanner {
|
|
|
555
702
|
const member = imported !== undefined && ts.isIdentifier(imported)
|
|
556
703
|
? imported.text
|
|
557
704
|
: element.name.text;
|
|
558
|
-
|
|
559
|
-
|
|
705
|
+
this.recordBinding(element.name.text, element.name, module === null
|
|
706
|
+
? null
|
|
707
|
+
: { builtin: `${module}.${member}`, cjs: false, createRequire: false });
|
|
560
708
|
}
|
|
561
709
|
}
|
|
562
710
|
}
|
|
@@ -723,6 +871,14 @@ class ModuleScanner {
|
|
|
723
871
|
this.visitFunction(node);
|
|
724
872
|
}
|
|
725
873
|
}
|
|
874
|
+
/** The builtin module whose CommonJS object `value` names, or null when
|
|
875
|
+
* the binding there holds anything else. */
|
|
876
|
+
cjsModuleOf(value) {
|
|
877
|
+
if (!ts.isIdentifier(value))
|
|
878
|
+
return null;
|
|
879
|
+
const binding = this.bindingAt(value.text, value);
|
|
880
|
+
return binding !== undefined && binding.cjs ? binding.builtin : null;
|
|
881
|
+
}
|
|
726
882
|
/** Records a read of a member of a builtin module's CommonJS object, so
|
|
727
883
|
* a patch installed by an island module can be checked against it
|
|
728
884
|
* (H3.4). The left of an assignment (and a delete or ++/-- target) is a
|
|
@@ -730,11 +886,12 @@ class ModuleScanner {
|
|
|
730
886
|
* so it is recorded as the whole module ("fs.*"). */
|
|
731
887
|
recordCjsRead(node) {
|
|
732
888
|
const root = chainRoot(node);
|
|
733
|
-
if (root === null
|
|
889
|
+
if (root === null)
|
|
734
890
|
return;
|
|
735
|
-
const
|
|
736
|
-
if (
|
|
891
|
+
const binding = this.bindingAt(root.text, root);
|
|
892
|
+
if (binding === undefined || !binding.cjs || binding.builtin === null)
|
|
737
893
|
return;
|
|
894
|
+
const module = binding.builtin;
|
|
738
895
|
const text = chainText(node);
|
|
739
896
|
const parent = node.parent;
|
|
740
897
|
if (parent !== undefined) {
|
|
@@ -841,7 +998,7 @@ class ModuleScanner {
|
|
|
841
998
|
return;
|
|
842
999
|
}
|
|
843
1000
|
if (this.isRequireCallee(callee) ||
|
|
844
|
-
(ts.isIdentifier(callee) && this.
|
|
1001
|
+
(ts.isIdentifier(callee) && this.bindingAt(callee.text, callee)?.createRequire === true)) {
|
|
845
1002
|
if (first !== undefined && !isFoldableSpecifier(first))
|
|
846
1003
|
this.add("R1.2", "dynamic-require", "require() with a computed specifier", call);
|
|
847
1004
|
else if (first !== undefined)
|
|
@@ -883,7 +1040,7 @@ class ModuleScanner {
|
|
|
883
1040
|
return;
|
|
884
1041
|
}
|
|
885
1042
|
const root = chainRoot(target);
|
|
886
|
-
const rootBinding = root === null ? undefined : this.
|
|
1043
|
+
const rootBinding = root === null ? undefined : (this.bindingAt(root.text, root)?.builtin ?? undefined);
|
|
887
1044
|
const resolved = rootBinding !== undefined && root !== null
|
|
888
1045
|
? rootBinding + text.slice(root.text.length)
|
|
889
1046
|
: text;
|
|
@@ -929,9 +1086,7 @@ class ModuleScanner {
|
|
|
929
1086
|
// A definition on a builtin module's CommonJS object is a patch the
|
|
930
1087
|
// code loading that object must see (R2.5, H3.1.4).
|
|
931
1088
|
const target = first === undefined ? undefined : stripWrappers(first);
|
|
932
|
-
const builtin = target
|
|
933
|
-
? (this.builtinBindings.get(target.text) ?? null)
|
|
934
|
-
: null;
|
|
1089
|
+
const builtin = target === undefined ? null : this.cjsModuleOf(target);
|
|
935
1090
|
if (builtin !== null) {
|
|
936
1091
|
const key = literalText(args[1] === undefined ? undefined : stripWrappers(args[1]));
|
|
937
1092
|
this.add("R2.5", "builtin-patch", `'${text}()' on the builtin module '${builtin}'`, call, key === null ? `${builtin}.*` : `${builtin}.${key}`);
|
|
@@ -945,8 +1100,8 @@ class ModuleScanner {
|
|
|
945
1100
|
// literal key is a patch (R2.5, H3.1.4).
|
|
946
1101
|
if (text === "Object.assign" && this.isGlobal("Object") && first !== undefined) {
|
|
947
1102
|
const target = stripWrappers(first);
|
|
948
|
-
|
|
949
|
-
const builtin = this.
|
|
1103
|
+
{
|
|
1104
|
+
const builtin = this.cjsModuleOf(target);
|
|
950
1105
|
if (builtin !== null) {
|
|
951
1106
|
const source = args.length === 2 ? stripWrappers(args[1]) : undefined;
|
|
952
1107
|
const keys = source !== undefined && ts.isObjectLiteralExpression(source)
|
|
@@ -1075,7 +1230,8 @@ class ModuleScanner {
|
|
|
1075
1230
|
}
|
|
1076
1231
|
if (root === null)
|
|
1077
1232
|
return;
|
|
1078
|
-
const
|
|
1233
|
+
const resolvedBinding = this.bindingAt(root.text, root);
|
|
1234
|
+
const binding = resolvedBinding?.builtin ?? undefined;
|
|
1079
1235
|
// Module internals: Module._load = …, Module.prototype.require = …
|
|
1080
1236
|
if (text !== null) {
|
|
1081
1237
|
const resolved = binding !== undefined ? binding + text.slice(root.text.length) : text;
|
|
@@ -1109,7 +1265,7 @@ class ModuleScanner {
|
|
|
1109
1265
|
if (!this.allowedWrite(member)) {
|
|
1110
1266
|
// A write through a builtin module's CommonJS object patches that
|
|
1111
1267
|
// object; only code sharing Node's builtin can see it (H3.1).
|
|
1112
|
-
const patch =
|
|
1268
|
+
const patch = resolvedBinding?.cjs === true;
|
|
1113
1269
|
this.add("R2.5", patch ? "builtin-patch" : "builtin-write", `a ${what} of the builtin module member '${member}'`, node, patch ? member : undefined);
|
|
1114
1270
|
}
|
|
1115
1271
|
return;
|