@scriptc/compiler 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/node-fallback/child_process.d.ts +71 -22
- package/ambient/node-fallback/crypto.d.ts +15 -7
- package/ambient/node-fallback/events.d.ts +29 -6
- package/ambient/node-fallback/fs-promises.d.ts +1 -1
- package/ambient/node-fallback/fs.d.ts +57 -12
- package/ambient/node-fallback/http.d.ts +26 -18
- package/ambient/node-fallback/https.d.ts +5 -2
- package/ambient/node-fallback/net.d.ts +25 -0
- package/ambient/node-fallback/os.d.ts +11 -1
- package/ambient/node-fallback/path-posix.d.ts +6 -0
- package/ambient/node-fallback/path-win32.d.ts +5 -0
- package/ambient/node-fallback/path.d.ts +2 -0
- package/ambient/node-fallback/querystring.d.ts +3 -3
- package/ambient/node-fallback/zlib.d.ts +31 -2
- package/ambient/scriptc-node-fallback.d.ts +95 -20
- package/ambient/scriptc.d.ts +7 -2
- package/dist/backend/executable-features.js +22 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/immutability.d.ts +12 -1
- package/dist/backend/immutability.js +50 -4
- package/dist/backend/immutability.js.map +1 -1
- package/dist/backend/immutability.test.js +95 -1
- package/dist/backend/immutability.test.js.map +1 -1
- package/dist/backend/library-pack.d.ts +6 -0
- package/dist/backend/library-pack.js +18 -5
- package/dist/backend/library-pack.js.map +1 -1
- package/dist/backend/library-pack.test.d.ts +1 -0
- package/dist/backend/library-pack.test.js +28 -0
- package/dist/backend/library-pack.test.js.map +1 -0
- package/dist/backend/linker.d.ts +20 -2
- package/dist/backend/linker.js +221 -35
- package/dist/backend/linker.js.map +1 -1
- package/dist/backend/lld.d.ts +15 -6
- package/dist/backend/lld.js +24 -16
- package/dist/backend/lld.js.map +1 -1
- package/dist/backend/lld.test.js +13 -5
- package/dist/backend/lld.test.js.map +1 -1
- package/dist/backend/llvm/alloc.d.ts +15 -2
- package/dist/backend/llvm/alloc.js +172 -36
- package/dist/backend/llvm/alloc.js.map +1 -1
- package/dist/backend/llvm/alloc.test.js +69 -1
- package/dist/backend/llvm/alloc.test.js.map +1 -1
- package/dist/backend/llvm/arenas.d.ts +17 -4
- package/dist/backend/llvm/arenas.js +105 -10
- package/dist/backend/llvm/arenas.js.map +1 -1
- package/dist/backend/llvm/arenas.test.js +229 -0
- package/dist/backend/llvm/arenas.test.js.map +1 -1
- package/dist/backend/llvm/bytes-alias.js +10 -1
- package/dist/backend/llvm/bytes-alias.js.map +1 -1
- package/dist/backend/llvm/bytes-headers.js +6 -0
- package/dist/backend/llvm/bytes-headers.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +25 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.js +10 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -9
- package/dist/backend/llvm/classes.js +142 -37
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +42 -0
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +50 -1
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +15 -5
- package/dist/backend/llvm/cpu-dispatch.js +34 -9
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +64 -3
- package/dist/backend/llvm/dyn.js +251 -15
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +68 -5
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +226 -77
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.d.ts +1 -0
- package/dist/backend/llvm/emit-module.test.js +52 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -0
- package/dist/backend/llvm/emit-statements.js +138 -34
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +142 -10
- package/dist/backend/llvm/emitter.js +523 -73
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.test.js +31 -3
- package/dist/backend/llvm/emitter.test.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +19 -1
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +16 -1
- package/dist/backend/llvm/expr-bytes.js.map +1 -1
- package/dist/backend/llvm/expr-calls.d.ts +4 -1
- package/dist/backend/llvm/expr-calls.js +38 -6
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +237 -23
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +123 -12
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.d.ts +1 -1
- package/dist/backend/llvm/expr-records.js +124 -56
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
- package/dist/backend/llvm/expr-stream-bridges.js +59 -2
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
- package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
- package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
- package/dist/backend/llvm/integer-values.d.ts +2 -0
- package/dist/backend/llvm/integer-values.js +6 -0
- package/dist/backend/llvm/integer-values.js.map +1 -1
- package/dist/backend/llvm/js-groups.d.ts +21 -0
- package/dist/backend/llvm/js-groups.js +277 -0
- package/dist/backend/llvm/js-groups.js.map +1 -0
- package/dist/backend/llvm/js-ic.d.ts +57 -1
- package/dist/backend/llvm/js-ic.js +389 -22
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +152 -1
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-filesystem.js +116 -11
- package/dist/backend/llvm/lib-filesystem.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +33 -6
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +180 -27
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +139 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-stream.js +67 -0
- package/dist/backend/llvm/lib-stream.js.map +1 -1
- package/dist/backend/llvm/local-union-storage.test.js +32 -0
- package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
- package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
- package/dist/backend/llvm/loop-entry-versions.js +43 -21
- package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
- package/dist/backend/llvm/loop-state.d.ts +7 -1
- package/dist/backend/llvm/loop-state.js +26 -3
- package/dist/backend/llvm/loop-state.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +8 -0
- package/dist/backend/llvm/map-entry-fusion.js +3 -3
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
- package/dist/backend/llvm/map-number-lookup.js +7 -3
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +58 -17
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +7 -6
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.test.js +4 -1
- package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
- package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
- package/dist/backend/llvm/receiver-brackets.test.js +68 -0
- package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
- package/dist/backend/llvm/receivers.js +3 -0
- package/dist/backend/llvm/receivers.js.map +1 -1
- package/dist/backend/llvm/record-entry-fusion.d.ts +32 -0
- package/dist/backend/llvm/record-entry-fusion.js +217 -0
- package/dist/backend/llvm/record-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/record-results.d.ts +5 -2
- package/dist/backend/llvm/record-results.js +13 -12
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-views.d.ts +22 -2
- package/dist/backend/llvm/record-views.js +147 -12
- package/dist/backend/llvm/record-views.js.map +1 -1
- package/dist/backend/llvm/record-views.test.js +76 -0
- package/dist/backend/llvm/record-views.test.js.map +1 -1
- package/dist/backend/llvm/reference-effects.js +1 -0
- package/dist/backend/llvm/reference-effects.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +4 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-ir.js +1 -0
- package/dist/backend/llvm/region-ir.js.map +1 -1
- package/dist/backend/llvm/region-sites.d.ts +18 -0
- package/dist/backend/llvm/region-sites.js +79 -1
- package/dist/backend/llvm/region-sites.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +53 -6
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js +3 -1
- package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
- package/dist/backend/llvm/shapes.d.ts +36 -3
- package/dist/backend/llvm/shapes.js +201 -16
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +4 -0
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/speculative-integers.d.ts +10 -1
- package/dist/backend/llvm/speculative-integers.js +59 -8
- package/dist/backend/llvm/speculative-integers.js.map +1 -1
- package/dist/backend/llvm/stack-objects.d.ts +1 -2
- package/dist/backend/llvm/stack-objects.js +8 -5
- package/dist/backend/llvm/stack-objects.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.d.ts +3 -3
- package/dist/backend/llvm/unwind-abi.js +8 -3
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +12 -0
- package/dist/backend/llvm/walkers.js +47 -3
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/may-throw.js +12 -2
- package/dist/backend/may-throw.js.map +1 -1
- package/dist/backend/may-throw.test.js +13 -0
- package/dist/backend/may-throw.test.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +94 -0
- package/dist/backend/native/executable.js +134 -10
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native/helper-identity-record.d.ts +11 -0
- package/dist/backend/native/helper-identity-record.js +76 -0
- package/dist/backend/native/helper-identity-record.js.map +1 -0
- package/dist/backend/native/helper-identity-record.test.d.ts +1 -0
- package/dist/backend/native/helper-identity-record.test.js +101 -0
- package/dist/backend/native/helper-identity-record.test.js.map +1 -0
- package/dist/backend/native/library.js +10 -2
- package/dist/backend/native/library.js.map +1 -1
- package/dist/backend/native/runtime-inputs.js +8 -1
- package/dist/backend/native/runtime-inputs.js.map +1 -1
- package/dist/backend/native/vendor.d.ts +1 -1
- package/dist/backend/native/vendor.js +1 -1
- package/dist/backend/native/vendor.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +13 -10
- package/dist/backend/native-codegen-core.js +26 -13
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.js +30 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +110 -14
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +72 -0
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.js +1 -0
- package/dist/backend/native-link-info.js.map +1 -1
- package/dist/backend/native-profile.d.ts +4 -1
- package/dist/backend/native-profile.js +12 -1
- package/dist/backend/native-profile.js.map +1 -1
- package/dist/backend/native-profile.test.js +10 -0
- package/dist/backend/native-profile.test.js.map +1 -1
- package/dist/backend/publication.d.ts +4 -1
- package/dist/backend/publication.js +4 -2
- package/dist/backend/publication.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-core.d.ts +46 -7
- package/dist/backend/runtime-pack-core.js +37 -2
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack-native.d.ts +18 -1
- package/dist/backend/runtime-pack-native.js +138 -29
- package/dist/backend/runtime-pack-native.js.map +1 -1
- package/dist/backend/runtime-pack-native.test.js +166 -4
- package/dist/backend/runtime-pack-native.test.js.map +1 -1
- package/dist/backend/runtime-pack-targets.test.js +3 -1
- package/dist/backend/runtime-pack-targets.test.js.map +1 -1
- package/dist/backend/runtime-pack.d.ts +7 -0
- package/dist/backend/runtime-pack.js +25 -3
- package/dist/backend/runtime-pack.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +213 -12
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/tree-classes.d.ts +42 -0
- package/dist/backend/tree-classes.js +723 -0
- package/dist/backend/tree-classes.js.map +1 -0
- package/dist/backend/tree-classes.test.d.ts +1 -0
- package/dist/backend/tree-classes.test.js +338 -0
- package/dist/backend/tree-classes.test.js.map +1 -0
- package/dist/backend/vendor-archives.d.ts +8 -1
- package/dist/backend/vendor-archives.js +313 -8
- package/dist/backend/vendor-archives.js.map +1 -1
- package/dist/backend/vendor-inputs.d.ts +60 -3
- package/dist/backend/vendor-inputs.js +109 -3
- package/dist/backend/vendor-inputs.js.map +1 -1
- package/dist/backend/vendor-inputs.test.js +62 -1
- package/dist/backend/vendor-inputs.test.js.map +1 -1
- package/dist/backend/warm-cache.js +2 -0
- package/dist/backend/warm-cache.js.map +1 -1
- package/dist/compat/fetch-profile.d.ts +7 -1
- package/dist/compat/fetch-profile.js +25 -12
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +7 -0
- package/dist/contracts/check.d.ts +3 -0
- package/dist/contracts/check.js +18 -5
- package/dist/contracts/check.js.map +1 -1
- package/dist/coverage/report.js +47 -0
- package/dist/coverage/report.js.map +1 -1
- package/dist/coverage/surface-manifest.js +1 -1
- package/dist/coverage/surface-manifest.js.map +1 -1
- package/dist/diagnostics/codes.d.ts +14 -0
- package/dist/diagnostics/codes.js +14 -0
- package/dist/diagnostics/codes.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +68 -0
- package/dist/diagnostics/diagnostic.js +186 -6
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/diagnostics/dynamic-tier.js +3 -1
- package/dist/diagnostics/dynamic-tier.js.map +1 -1
- package/dist/diagnostics/envelope.d.ts +18 -0
- package/dist/diagnostics/envelope.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +48 -0
- package/dist/executable/executable-cache.js +38 -0
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/executable-cache.test.js +127 -1
- package/dist/executable/executable-cache.test.js.map +1 -1
- package/dist/executable/prepare.d.ts +13 -3
- package/dist/executable/prepare.js +438 -234
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +200 -18
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/builtin-modules.d.ts +4 -0
- package/dist/frontend/builtin-modules.js +10 -0
- package/dist/frontend/builtin-modules.js.map +1 -1
- package/dist/frontend/early-errors.d.ts +24 -0
- package/dist/frontend/early-errors.js +836 -0
- package/dist/frontend/early-errors.js.map +1 -0
- package/dist/frontend/early-errors.test.d.ts +1 -0
- package/dist/frontend/early-errors.test.js +207 -0
- package/dist/frontend/early-errors.test.js.map +1 -0
- package/dist/frontend/inferred-js-diagnostics.test.js +88 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/input-tracker.d.ts +47 -0
- package/dist/frontend/input-tracker.js +173 -36
- package/dist/frontend/input-tracker.js.map +1 -1
- package/dist/frontend/input-tracker.test.js +86 -2
- package/dist/frontend/input-tracker.test.js.map +1 -1
- package/dist/frontend/js-inference.d.ts +2 -0
- package/dist/frontend/js-inference.js +18 -0
- package/dist/frontend/js-inference.js.map +1 -0
- package/dist/frontend/jsx-opinion-sites.test.d.ts +1 -0
- package/dist/frontend/jsx-opinion-sites.test.js +86 -0
- package/dist/frontend/jsx-opinion-sites.test.js.map +1 -0
- package/dist/frontend/lib-exports.d.ts +23 -4
- package/dist/frontend/lib-exports.js +98 -26
- package/dist/frontend/lib-exports.js.map +1 -1
- package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
- package/dist/frontend/lowering/binding-analysis.js +86 -4
- package/dist/frontend/lowering/binding-analysis.js.map +1 -1
- package/dist/frontend/lowering/buffers.d.ts +8 -0
- package/dist/frontend/lowering/buffers.js +43 -0
- package/dist/frontend/lowering/buffers.js.map +1 -0
- package/dist/frontend/lowering/builtin-calls.js +13 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +3 -2
- package/dist/frontend/lowering/builtin-namespaces.js +41 -3
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtin-statics.d.ts +24 -0
- package/dist/frontend/lowering/builtin-statics.js +407 -0
- package/dist/frontend/lowering/builtin-statics.js.map +1 -0
- package/dist/frontend/lowering/builtins/arguments.d.ts +4 -0
- package/dist/frontend/lowering/builtins/arguments.js +12 -0
- package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
- package/dist/frontend/lowering/builtins/atomics.d.ts +6 -1
- package/dist/frontend/lowering/builtins/atomics.js +87 -1
- package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
- package/dist/frontend/lowering/builtins/child-process-methods.js +52 -12
- package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-sync.d.ts +13 -0
- package/dist/frontend/lowering/builtins/child-process-sync.js +1 -13
- package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +10 -4
- package/dist/frontend/lowering/builtins/child-process.js +565 -28
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +2 -2
- package/dist/frontend/lowering/builtins/compression.js +41 -21
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +7 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
- package/dist/frontend/lowering/builtins/dates.js +23 -1
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
- package/dist/frontend/lowering/builtins/environment.js +213 -2
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +1 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +75 -18
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
- package/dist/frontend/lowering/builtins/filesystem.js +185 -16
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/json.js +4 -0
- package/dist/frontend/lowering/builtins/json.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-calls.js +42 -3
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
- package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/numbers.d.ts +4 -1
- package/dist/frontend/lowering/builtins/numbers.js +10 -2
- package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
- package/dist/frontend/lowering/builtins/operating-system.d.ts +9 -5
- package/dist/frontend/lowering/builtins/operating-system.js +101 -20
- package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.d.ts +18 -2
- package/dist/frontend/lowering/builtins/process.js +386 -25
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +169 -8
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/properties.js +6 -2
- package/dist/frontend/lowering/builtins/properties.js.map +1 -1
- package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
- package/dist/frontend/lowering/builtins/querystring.js +202 -18
- package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +6 -4
- package/dist/frontend/lowering/builtins/readline.js +200 -38
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/reflection.js +60 -1
- package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
- package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
- package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.js +55 -13
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
- package/dist/frontend/lowering/builtins/v8.js +7 -5
- package/dist/frontend/lowering/builtins/v8.js.map +1 -1
- package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
- package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
- package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
- package/dist/frontend/lowering/builtins/webassembly.js +2 -0
- package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.d.ts +10 -0
- package/dist/frontend/lowering/call-arguments.js +37 -2
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/call-signatures.d.ts +10 -0
- package/dist/frontend/lowering/call-signatures.js +180 -0
- package/dist/frontend/lowering/call-signatures.js.map +1 -1
- package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
- package/dist/frontend/lowering/cjs-exports-object.js +1 -1
- package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.js +5 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/class-construction.d.ts +14 -2
- package/dist/frontend/lowering/class-construction.js +99 -5
- package/dist/frontend/lowering/class-construction.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +14 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +1376 -1009
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js +158 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.js +59 -10
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-prototypes.js +20 -15
- package/dist/frontend/lowering/class-prototypes.js.map +1 -1
- package/dist/frontend/lowering/class-runtime-statics.d.ts +8 -0
- package/dist/frontend/lowering/class-runtime-statics.js +35 -1
- package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +21 -4
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/class-views.d.ts +13 -0
- package/dist/frontend/lowering/class-views.js +51 -0
- package/dist/frontend/lowering/class-views.js.map +1 -0
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
- package/dist/frontend/lowering/coercions/function-adapters.js +63 -10
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/state.d.ts +15 -0
- package/dist/frontend/lowering/coercions/state.js +24 -0
- package/dist/frontend/lowering/coercions/state.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +75 -3
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +39 -2
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/coercions/unions.d.ts +2 -1
- package/dist/frontend/lowering/coercions/unions.js +54 -10
- package/dist/frontend/lowering/coercions/unions.js.map +1 -1
- package/dist/frontend/lowering/constructor-returns.d.ts +23 -2
- package/dist/frontend/lowering/constructor-returns.js +284 -58
- package/dist/frontend/lowering/constructor-returns.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +288 -90
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/array-construction.js +37 -8
- package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
- package/dist/frontend/lowering/containers/array-from-async.js +139 -3
- package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
- package/dist/frontend/lowering/containers/array-iteration.d.ts +14 -4
- package/dist/frontend/lowering/containers/array-iteration.js +24 -7
- package/dist/frontend/lowering/containers/array-iteration.js.map +1 -1
- package/dist/frontend/lowering/containers/array-methods.js +30 -11
- package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.d.ts +6 -0
- package/dist/frontend/lowering/containers/bytes.js +450 -86
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/callback-arguments.d.ts +16 -0
- package/dist/frontend/lowering/containers/callback-arguments.js +74 -12
- package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-grouping.js +421 -2
- package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +52 -17
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
- package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/containers/iterator-helpers.d.ts +23 -0
- package/dist/frontend/lowering/containers/iterator-helpers.js +176 -10
- package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
- package/dist/frontend/lowering/containers/string-and-regexp.d.ts +5 -2
- package/dist/frontend/lowering/containers/string-and-regexp.js +45 -11
- package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
- package/dist/frontend/lowering/crypto-tables.d.ts +3 -3
- package/dist/frontend/lowering/crypto-tables.js +5 -5
- package/dist/frontend/lowering/dispatch-sites.js +3 -0
- package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
- package/dist/frontend/lowering/divergences.d.ts +40 -0
- package/dist/frontend/lowering/divergences.js +239 -20
- package/dist/frontend/lowering/divergences.js.map +1 -1
- package/dist/frontend/lowering/effect-free.d.ts +12 -0
- package/dist/frontend/lowering/effect-free.js +44 -0
- package/dist/frontend/lowering/effect-free.js.map +1 -0
- package/dist/frontend/lowering/expressions/array-literals.d.ts +24 -0
- package/dist/frontend/lowering/expressions/array-literals.js +88 -10
- package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +216 -14
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +272 -11
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +15 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +54 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +173 -4
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
- package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +3 -0
- package/dist/frontend/lowering/expressions/narrowing.js +195 -18
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
- package/dist/frontend/lowering/expressions/object-literals.js +951 -240
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +71 -21
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +39 -0
- package/dist/frontend/lowering/expressions/property-access.js +1141 -87
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.js +262 -4
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/typeof.js +25 -0
- package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.d.ts +20 -1
- package/dist/frontend/lowering/expressions/union-fields.js +103 -13
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +156 -22
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.d.ts +6 -0
- package/dist/frontend/lowering/frozen-records.js +10 -4
- package/dist/frontend/lowering/frozen-records.js.map +1 -1
- package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
- package/dist/frontend/lowering/frozen-records.test.js +44 -0
- package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
- package/dist/frontend/lowering/function-names.d.ts +9 -0
- package/dist/frontend/lowering/function-names.js +95 -0
- package/dist/frontend/lowering/function-names.js.map +1 -0
- package/dist/frontend/lowering/function-returns.js +42 -13
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/general-streams.js +5 -0
- package/dist/frontend/lowering/general-streams.js.map +1 -1
- package/dist/frontend/lowering/generator-delegation.d.ts +15 -7
- package/dist/frontend/lowering/generator-delegation.js +301 -118
- package/dist/frontend/lowering/generator-delegation.js.map +1 -1
- package/dist/frontend/lowering/generic-functions.d.ts +75 -0
- package/dist/frontend/lowering/generic-functions.js +790 -18
- package/dist/frontend/lowering/generic-functions.js.map +1 -1
- package/dist/frontend/lowering/global-function-values.d.ts +25 -0
- package/dist/frontend/lowering/global-function-values.js +193 -0
- package/dist/frontend/lowering/global-function-values.js.map +1 -0
- package/dist/frontend/lowering/global-values.d.ts +15 -4
- package/dist/frontend/lowering/global-values.js +67 -9
- package/dist/frontend/lowering/global-values.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.js +34 -1
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/host-global-values.d.ts +31 -0
- package/dist/frontend/lowering/host-global-values.js +121 -0
- package/dist/frontend/lowering/host-global-values.js.map +1 -0
- package/dist/frontend/lowering/host-globals.d.ts +74 -0
- package/dist/frontend/lowering/host-globals.js +344 -0
- package/dist/frontend/lowering/host-globals.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.js +1 -1
- package/dist/frontend/lowering/iterator-adapters.js +46 -17
- package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
- package/dist/frontend/lowering/iterator-prototype.d.ts +30 -0
- package/dist/frontend/lowering/iterator-prototype.js +160 -0
- package/dist/frontend/lowering/iterator-prototype.js.map +1 -0
- package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
- package/dist/frontend/lowering/key-order-witness.js +571 -9
- package/dist/frontend/lowering/key-order-witness.js.map +1 -1
- package/dist/frontend/lowering/key-order-witness.test.js +1 -0
- package/dist/frontend/lowering/key-order-witness.test.js.map +1 -1
- package/dist/frontend/lowering/lib-boundary.js +25 -3
- package/dist/frontend/lowering/lib-boundary.js.map +1 -1
- package/dist/frontend/lowering/lower-assert.js +140 -16
- package/dist/frontend/lowering/lower-assert.js.map +1 -1
- package/dist/frontend/lowering/lower-async-iteration.d.ts +11 -0
- package/dist/frontend/lowering/lower-async-iteration.js +15 -0
- package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
- package/dist/frontend/lowering/lower-builtin-values.js +342 -58
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.d.ts +47 -1
- package/dist/frontend/lowering/lower-calls.js +1354 -273
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
- package/dist/frontend/lowering/lower-calls.test.js +121 -0
- package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +36 -5
- package/dist/frontend/lowering/lower-classes.js +630 -89
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +15 -2
- package/dist/frontend/lowering/lower-event-emitter.js +610 -98
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +15 -1
- package/dist/frontend/lowering/lower-exprs.js +96 -20
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +27 -6
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-generators.js +57 -10
- package/dist/frontend/lowering/lower-generators.js.map +1 -1
- package/dist/frontend/lowering/lower-global-value.d.ts +6 -0
- package/dist/frontend/lowering/lower-global-value.js +14 -5
- package/dist/frontend/lowering/lower-global-value.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.d.ts +4 -0
- package/dist/frontend/lowering/lower-inspect.js +713 -92
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +135 -27
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-namespaces.js +18 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
- package/dist/frontend/lowering/lower-node-island.js +472 -67
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.js +463 -96
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-shared-modules.js +13 -1
- package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
- package/dist/frontend/lowering/lower-stdlib.js +77 -18
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -4
- package/dist/frontend/lowering/lower-stmts.js +831 -136
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +126 -8
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-timers.js +243 -48
- package/dist/frontend/lowering/lower-timers.js.map +1 -1
- package/dist/frontend/lowering/lower-url.js +6 -3
- package/dist/frontend/lowering/lower-url.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +363 -21
- package/dist/frontend/lowering/lowerer.js +1224 -129
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/lowerer.test.js +19 -1
- package/dist/frontend/lowering/lowerer.test.js.map +1 -1
- package/dist/frontend/lowering/lowering-facts.d.ts +110 -0
- package/dist/frontend/lowering/lowering-facts.js +323 -0
- package/dist/frontend/lowering/lowering-facts.js.map +1 -0
- package/dist/frontend/lowering/lowering-facts.test.d.ts +1 -0
- package/dist/frontend/lowering/lowering-facts.test.js +100 -0
- package/dist/frontend/lowering/lowering-facts.test.js.map +1 -0
- package/dist/frontend/lowering/module-namespace-elements.js +15 -0
- package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
- package/dist/frontend/lowering/nan-coded-reads.d.ts +27 -4
- package/dist/frontend/lowering/nan-coded-reads.js +112 -9
- package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +2 -2
- package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
- package/dist/frontend/lowering/optional-arguments.d.ts +4 -0
- package/dist/frontend/lowering/optional-arguments.js +26 -2
- package/dist/frontend/lowering/optional-arguments.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.d.ts +36 -0
- package/dist/frontend/lowering/partial-assertions.js +189 -0
- package/dist/frontend/lowering/partial-assertions.js.map +1 -0
- package/dist/frontend/lowering/primitive-throws.d.ts +100 -0
- package/dist/frontend/lowering/primitive-throws.js +241 -0
- package/dist/frontend/lowering/primitive-throws.js.map +1 -0
- package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
- package/dist/frontend/lowering/primitive-wrappers.js +221 -0
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
- package/dist/frontend/lowering/private-statics.d.ts +46 -0
- package/dist/frontend/lowering/private-statics.js +322 -0
- package/dist/frontend/lowering/private-statics.js.map +1 -0
- package/dist/frontend/lowering/record-inherited.d.ts +17 -1
- package/dist/frontend/lowering/record-inherited.js +16 -2
- package/dist/frontend/lowering/record-inherited.js.map +1 -1
- package/dist/frontend/lowering/record-links.d.ts +73 -0
- package/dist/frontend/lowering/record-links.js +797 -0
- package/dist/frontend/lowering/record-links.js.map +1 -0
- package/dist/frontend/lowering/record-sources.d.ts +12 -1
- package/dist/frontend/lowering/record-sources.js +60 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-provenance.d.ts +27 -7
- package/dist/frontend/lowering/runtime-optional-provenance.js +25 -11
- package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
- package/dist/frontend/lowering/runtime-optional-report.d.ts +40 -0
- package/dist/frontend/lowering/runtime-optional-report.js +300 -0
- package/dist/frontend/lowering/runtime-optional-report.js.map +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.d.ts +1 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js +86 -0
- package/dist/frontend/lowering/scoped-type-memo.test.js.map +1 -0
- package/dist/frontend/lowering/static-typeof.d.ts +3 -1
- package/dist/frontend/lowering/static-typeof.js +6 -1
- package/dist/frontend/lowering/static-typeof.js.map +1 -1
- package/dist/frontend/lowering/strict-equality.d.ts +4 -0
- package/dist/frontend/lowering/strict-equality.js +14 -0
- package/dist/frontend/lowering/strict-equality.js.map +1 -1
- package/dist/frontend/lowering/strict-mode.d.ts +1 -5
- package/dist/frontend/lowering/strict-mode.js +4 -30
- package/dist/frontend/lowering/strict-mode.js.map +1 -1
- package/dist/frontend/lowering/structural-instances.d.ts +7 -0
- package/dist/frontend/lowering/structural-instances.js +23 -0
- package/dist/frontend/lowering/structural-instances.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +42 -1
- package/dist/frontend/lowering/surfaces.js +212 -71
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/union-retag.d.ts +13 -1
- package/dist/frontend/lowering/union-retag.js +55 -1
- package/dist/frontend/lowering/union-retag.js.map +1 -1
- package/dist/frontend/lowering/union-retag.test.js +51 -0
- package/dist/frontend/lowering/union-retag.test.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.d.ts +136 -17
- package/dist/frontend/lowering/unit-journal.js +324 -53
- package/dist/frontend/lowering/unit-journal.js.map +1 -1
- package/dist/frontend/lowering/unit-journal.test.js +126 -3
- package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
- package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
- package/dist/frontend/lowering/unit-reuse.js +1008 -0
- package/dist/frontend/lowering/unit-reuse.js.map +1 -0
- package/dist/frontend/lowering/width-lift.d.ts +12 -0
- package/dist/frontend/lowering/zlib-constants.js +3 -2
- package/dist/frontend/lowering/zlib-constants.js.map +1 -1
- package/dist/frontend/npm-file-import.test.d.ts +1 -0
- package/dist/frontend/npm-file-import.test.js +76 -0
- package/dist/frontend/npm-file-import.test.js.map +1 -0
- package/dist/frontend/npm-static.js +95 -11
- package/dist/frontend/npm-static.js.map +1 -1
- package/dist/frontend/npm-static.test.js +95 -2
- package/dist/frontend/npm-static.test.js.map +1 -1
- package/dist/frontend/npm.d.ts +9 -0
- package/dist/frontend/npm.js +82 -0
- package/dist/frontend/npm.js.map +1 -1
- package/dist/frontend/pipeline-native.js +2 -1
- package/dist/frontend/pipeline-native.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +9 -4
- package/dist/frontend/pipeline.js +162 -38
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/pipeline.test.js +68 -11
- package/dist/frontend/pipeline.test.js.map +1 -1
- package/dist/frontend/program-node.d.ts +3 -0
- package/dist/frontend/program-node.js +13 -6
- package/dist/frontend/program-node.js.map +1 -1
- package/dist/frontend/program.d.ts +71 -2
- package/dist/frontend/program.js +836 -411
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +37 -1
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/provenance-core.js +4 -0
- package/dist/frontend/provenance-core.js.map +1 -1
- package/dist/frontend/services-node.d.ts +7 -0
- package/dist/frontend/services-node.js +32 -1
- package/dist/frontend/services-node.js.map +1 -1
- package/dist/frontend/services-node.test.js +51 -0
- package/dist/frontend/services-node.test.js.map +1 -1
- package/dist/frontend/services.d.ts +14 -0
- package/dist/frontend/services.js +52 -2
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/services.test.js +61 -1
- package/dist/frontend/services.test.js.map +1 -1
- package/dist/frontend/shape-inference/analyze.d.ts +5 -0
- package/dist/frontend/shape-inference/analyze.js +104 -4
- package/dist/frontend/shape-inference/analyze.js.map +1 -1
- package/dist/frontend/shape-inference/domain.js +0 -1
- package/dist/frontend/shape-inference/domain.js.map +1 -1
- package/dist/frontend/shape-inference/index.js +5 -1
- package/dist/frontend/shape-inference/index.js.map +1 -1
- package/dist/frontend/shape-inference/memo.d.ts +2 -1
- package/dist/frontend/shape-inference/memo.js +6 -2
- package/dist/frontend/shape-inference/memo.js.map +1 -1
- package/dist/frontend/shape-inference/overlay.d.ts +1 -1
- package/dist/frontend/shape-inference/overlay.js +184 -4
- package/dist/frontend/shape-inference/overlay.js.map +1 -1
- package/dist/frontend/shape-inference/static-objects.js +11 -6
- package/dist/frontend/shape-inference/static-objects.js.map +1 -1
- package/dist/frontend/source-phase-imports.test.d.ts +1 -0
- package/dist/frontend/source-phase-imports.test.js +37 -0
- package/dist/frontend/source-phase-imports.test.js.map +1 -0
- package/dist/frontend/tier-analysis.d.ts +9 -0
- package/dist/frontend/tier-analysis.js +1 -0
- package/dist/frontend/tier-analysis.js.map +1 -1
- package/dist/frontend/ts7/ast-node.d.ts +6 -1
- package/dist/frontend/ts7/ast-node.js +12 -0
- package/dist/frontend/ts7/ast-node.js.map +1 -1
- package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
- package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
- package/dist/frontend/ts7/ast-wire.js +3 -5
- package/dist/frontend/ts7/ast-wire.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.d.ts +13 -0
- package/dist/frontend/ts7/checker-backend.js +84 -2
- package/dist/frontend/ts7/checker-backend.js.map +1 -1
- package/dist/frontend/ts7/checker-backend.test.js +126 -2
- package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +22 -1
- package/dist/frontend/ts7/program-host.js +49 -4
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +83 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.d.ts +16 -1
- package/dist/frontend/ts7/rpc-process.js +170 -92
- package/dist/frontend/ts7/rpc-process.js.map +1 -1
- package/dist/frontend/ts7/rpc-process.test.js +49 -21
- package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +57 -3
- package/dist/frontend/tsc-codes.js +956 -101
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/tsc-codes.test.js +221 -12
- package/dist/frontend/tsc-codes.test.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +98 -11
- package/dist/frontend/type-mapper.js +770 -182
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +224 -15
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +1 -0
- package/dist/index.test.js +60 -0
- package/dist/index.test.js.map +1 -0
- package/dist/ir/api.d.ts +1 -1
- package/dist/ir/api.js +1 -1
- package/dist/ir/api.js.map +1 -1
- package/dist/ir/build.d.ts +3 -2
- package/dist/ir/build.js +4 -2
- package/dist/ir/build.js.map +1 -1
- package/dist/ir/builtin-effects.js +96 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +453 -26
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/callback-specialization.d.ts +3 -2
- package/dist/ir/callback-specialization.js +35 -25
- package/dist/ir/callback-specialization.js.map +1 -1
- package/dist/ir/capture-values.d.ts +8 -4
- package/dist/ir/capture-values.js +9 -6
- package/dist/ir/capture-values.js.map +1 -1
- package/dist/ir/char-unit-locals.d.ts +6 -2
- package/dist/ir/char-unit-locals.js +11 -2
- package/dist/ir/char-unit-locals.js.map +1 -1
- package/dist/ir/class-key-index.d.ts +18 -0
- package/dist/ir/class-key-index.js +29 -0
- package/dist/ir/class-key-index.js.map +1 -0
- package/dist/ir/class-key-index.test.d.ts +1 -0
- package/dist/ir/class-key-index.test.js +25 -0
- package/dist/ir/class-key-index.test.js.map +1 -0
- package/dist/ir/codec.d.ts +82 -0
- package/dist/ir/codec.generated.d.ts +13 -0
- package/dist/ir/codec.generated.js +5350 -0
- package/dist/ir/codec.generated.js.map +1 -0
- package/dist/ir/codec.js +325 -0
- package/dist/ir/codec.js.map +1 -0
- package/dist/ir/codec.test.d.ts +1 -0
- package/dist/ir/codec.test.js +225 -0
- package/dist/ir/codec.test.js.map +1 -0
- package/dist/ir/constant-globals.d.ts +5 -2
- package/dist/ir/constant-globals.js +25 -27
- package/dist/ir/constant-globals.js.map +1 -1
- package/dist/ir/expression-inlining.d.ts +4 -2
- package/dist/ir/expression-inlining.js +8 -2
- package/dist/ir/expression-inlining.js.map +1 -1
- package/dist/ir/field-values.d.ts +5 -2
- package/dist/ir/field-values.js +32 -21
- package/dist/ir/field-values.js.map +1 -1
- package/dist/ir/fields.generated.d.ts +29 -10
- package/dist/ir/fields.generated.js +1039 -11
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/fields.test.js +46 -2
- package/dist/ir/fields.test.js.map +1 -1
- package/dist/ir/final-fields.js +1 -1
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.d.ts +6 -4
- package/dist/ir/function-references.js +11 -4
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +14 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +4 -2
- package/dist/ir/init-only-globals.js +17 -18
- package/dist/ir/init-only-globals.js.map +1 -1
- package/dist/ir/inline-array-sources.js +4 -1
- package/dist/ir/inline-array-sources.js.map +1 -1
- package/dist/ir/inline-array-views.d.ts +13 -0
- package/dist/ir/inline-array-views.js +945 -0
- package/dist/ir/inline-array-views.js.map +1 -0
- package/dist/ir/inline-arrays.d.ts +7 -0
- package/dist/ir/inline-arrays.js +190 -55
- package/dist/ir/inline-arrays.js.map +1 -1
- package/dist/ir/inline-arrays.test.js +140 -2
- package/dist/ir/inline-arrays.test.js.map +1 -1
- package/dist/ir/int32-slots.js +7 -0
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/integer-ranges.js +16 -6
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/ir.d.ts +130 -44
- package/dist/ir/ir.js +7 -0
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/js-groups.d.ts +51 -0
- package/dist/ir/js-groups.js +394 -0
- package/dist/ir/js-groups.js.map +1 -0
- package/dist/ir/js-groups.test.d.ts +1 -0
- package/dist/ir/js-groups.test.js +555 -0
- package/dist/ir/js-groups.test.js.map +1 -0
- package/dist/ir/js-ic.d.ts +10 -9
- package/dist/ir/js-ic.js +58 -25
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +37 -3
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/jsval.js +374 -63
- package/dist/ir/jsval.js.map +1 -1
- package/dist/ir/jsval.test.js +96 -2
- package/dist/ir/jsval.test.js.map +1 -1
- package/dist/ir/loop-entry-ranges.js +112 -9
- package/dist/ir/loop-entry-ranges.js.map +1 -1
- package/dist/ir/loop-entry-ranges.test.js +40 -0
- package/dist/ir/loop-entry-ranges.test.js.map +1 -1
- package/dist/ir/node-index.d.ts +23 -6
- package/dist/ir/node-index.js +126 -49
- package/dist/ir/node-index.js.map +1 -1
- package/dist/ir/numeric-call-specialization.d.ts +4 -2
- package/dist/ir/numeric-call-specialization.js +40 -26
- package/dist/ir/numeric-call-specialization.js.map +1 -1
- package/dist/ir/paired-while-loops.d.ts +4 -2
- package/dist/ir/paired-while-loops.js +8 -2
- package/dist/ir/paired-while-loops.js.map +1 -1
- package/dist/ir/parameter-versions.d.ts +13 -3
- package/dist/ir/parameter-versions.js +63 -40
- package/dist/ir/parameter-versions.js.map +1 -1
- package/dist/ir/property-bags.d.ts +4 -2
- package/dist/ir/property-bags.js +22 -17
- package/dist/ir/property-bags.js.map +1 -1
- package/dist/ir/receiver-readers.js +58 -2
- package/dist/ir/receiver-readers.js.map +1 -1
- package/dist/ir/row-pairs.d.ts +4 -2
- package/dist/ir/row-pairs.js +12 -11
- package/dist/ir/row-pairs.js.map +1 -1
- package/dist/ir/runtime-features.d.ts +139 -5
- package/dist/ir/runtime-features.js +397 -19
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +135 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/runtime-jam-loops.d.ts +35 -0
- package/dist/ir/runtime-jam-loops.js +604 -0
- package/dist/ir/runtime-jam-loops.js.map +1 -0
- package/dist/ir/runtime-jam-loops.test.d.ts +1 -0
- package/dist/ir/runtime-jam-loops.test.js +565 -0
- package/dist/ir/runtime-jam-loops.test.js.map +1 -0
- package/dist/ir/saturating-loop-jams.d.ts +11 -2
- package/dist/ir/saturating-loop-jams.js +56 -16
- package/dist/ir/saturating-loop-jams.js.map +1 -1
- package/dist/ir/saturating-loop-jams.test.js +39 -1
- package/dist/ir/saturating-loop-jams.test.js.map +1 -1
- package/dist/ir/scalar-records.d.ts +5 -2
- package/dist/ir/scalar-records.js +12 -2
- package/dist/ir/scalar-records.js.map +1 -1
- package/dist/ir/self-captures.d.ts +4 -2
- package/dist/ir/self-captures.js +40 -28
- package/dist/ir/self-captures.js.map +1 -1
- package/dist/ir/self-captures.test.js +15 -0
- package/dist/ir/self-captures.test.js.map +1 -1
- package/dist/ir/serialize.d.ts +8 -2
- package/dist/ir/serialize.js +92 -24
- package/dist/ir/serialize.js.map +1 -1
- package/dist/ir/serialize.test.js +26 -0
- package/dist/ir/serialize.test.js.map +1 -1
- package/dist/ir/tiers.js +1 -0
- package/dist/ir/tiers.js.map +1 -1
- package/dist/ir/traverse.js +4 -0
- package/dist/ir/traverse.js.map +1 -1
- package/dist/ir/typed-argument-clones.d.ts +30 -0
- package/dist/ir/typed-argument-clones.js +789 -0
- package/dist/ir/typed-argument-clones.js.map +1 -0
- package/dist/ir/union-arm-loops.d.ts +3 -0
- package/dist/ir/union-arm-loops.js +373 -0
- package/dist/ir/union-arm-loops.js.map +1 -0
- package/dist/ir/union-arm-loops.test.d.ts +1 -0
- package/dist/ir/union-arm-loops.test.js +230 -0
- package/dist/ir/union-arm-loops.test.js.map +1 -0
- package/dist/ir/validate.js +170 -22
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +46 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/compiler-self-identity.d.ts +8 -2
- package/dist/library/compiler-self-identity.js +92 -18
- package/dist/library/compiler-self-identity.js.map +1 -1
- package/dist/library/compiler-self-identity.test.js +150 -3
- package/dist/library/compiler-self-identity.test.js.map +1 -1
- package/dist/library/int-infer.d.ts +5 -0
- package/dist/library/int-infer.js +15 -3
- package/dist/library/int-infer.js.map +1 -1
- package/dist/library/ir-policy.js +4 -0
- package/dist/library/ir-policy.js.map +1 -1
- package/dist/library/library-cache.d.ts +4 -0
- package/dist/library/library-cache.js +2 -0
- package/dist/library/library-cache.js.map +1 -1
- package/dist/library/library-cache.test.js +26 -0
- package/dist/library/library-cache.test.js.map +1 -1
- package/dist/library/prepare.js +99 -31
- package/dist/library/prepare.js.map +1 -1
- package/dist/native/cache.d.ts +7 -0
- package/dist/native/cache.js +49 -0
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +13 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +2 -0
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.js +26 -5
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/executable-cache-open.test.js +31 -5
- package/dist/native/executable-cache-open.test.js.map +1 -1
- package/dist/native/executable-cache.d.ts +6 -1
- package/dist/native/executable-cache.js +7 -1
- package/dist/native/executable-cache.js.map +1 -1
- package/dist/native/prepare.d.ts +3 -0
- package/dist/native/prepare.js +74 -28
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/prepare.test.js +25 -3
- package/dist/native/prepare.test.js.map +1 -1
- package/dist/native/sanitizer.js +63 -4
- package/dist/native/sanitizer.js.map +1 -1
- package/dist/native/sanitizer.test.js +93 -2
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/toolchain.js +9 -2
- package/dist/native/toolchain.js.map +1 -1
- package/dist/node-islands/boundary.d.ts +37 -1
- package/dist/node-islands/boundary.js +65 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.d.ts +1 -0
- package/dist/node-islands/boundary.test.js +76 -0
- package/dist/node-islands/boundary.test.js.map +1 -0
- package/dist/node-islands/detect.d.ts +27 -1
- package/dist/node-islands/detect.js +475 -40
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +175 -4
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/effect-gate.js +30 -20
- package/dist/node-islands/effect-gate.js.map +1 -1
- package/dist/node-islands/effect-gate.test.js +4 -1
- package/dist/node-islands/effect-gate.test.js.map +1 -1
- package/dist/node-islands/graph-islands.d.ts +40 -0
- package/dist/node-islands/graph-islands.js +128 -0
- package/dist/node-islands/graph-islands.js.map +1 -0
- package/dist/node-islands/growth.d.ts +57 -0
- package/dist/node-islands/growth.js +205 -0
- package/dist/node-islands/growth.js.map +1 -0
- package/dist/node-islands/libnode.d.ts +1 -1
- package/dist/node-islands/libnode.js +1 -1
- package/dist/node-islands/libnode.js.map +1 -1
- package/dist/node-islands/modules.d.ts +28 -0
- package/dist/node-islands/modules.js +156 -0
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +105 -1
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/policy.js +2 -3
- package/dist/node-islands/policy.js.map +1 -1
- package/dist/node-islands/probe-recorder.d.ts +1 -0
- package/dist/node-islands/probe-recorder.js +596 -0
- package/dist/node-islands/probe-recorder.js.map +1 -0
- package/dist/node-islands/probe-recorder.test.d.ts +1 -0
- package/dist/node-islands/probe-recorder.test.js +80 -0
- package/dist/node-islands/probe-recorder.test.js.map +1 -0
- package/dist/node-islands/report.d.ts +12 -0
- package/dist/node-islands/report.js +28 -0
- package/dist/node-islands/report.js.map +1 -1
- package/dist/node-islands/report.test.js +4 -0
- package/dist/node-islands/report.test.js.map +1 -1
- package/dist/node-islands/rules.js +9 -0
- package/dist/node-islands/rules.js.map +1 -1
- package/dist/node-islands/scan.d.ts +16 -1
- package/dist/node-islands/scan.js +110 -9
- package/dist/node-islands/scan.js.map +1 -1
- package/dist/node-islands/snapshot.d.ts +38 -1
- package/dist/node-islands/snapshot.js +165 -161
- package/dist/node-islands/snapshot.js.map +1 -1
- package/dist/node-islands/snapshot.test.js +63 -2
- package/dist/node-islands/snapshot.test.js.map +1 -1
- package/dist/node-islands/summary.js +8 -0
- package/dist/node-islands/summary.js.map +1 -1
- package/dist/node-islands/type-strip.d.ts +11 -0
- package/dist/node-islands/type-strip.js +157 -0
- package/dist/node-islands/type-strip.js.map +1 -0
- package/dist/node-islands/type-strip.test.d.ts +1 -0
- package/dist/node-islands/type-strip.test.js +31 -0
- package/dist/node-islands/type-strip.test.js.map +1 -0
- package/dist/project-config.d.ts +4 -0
- package/dist/project-config.js +19 -0
- package/dist/project-config.js.map +1 -1
- package/dist/project-config.test.js +10 -0
- package/dist/project-config.test.js.map +1 -1
- package/dist/wasm/translate.js +11 -5
- package/dist/wasm/translate.js.map +1 -1
- package/dist/wasm/translate.test.js +35 -0
- package/dist/wasm/translate.test.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +221 -122
|
@@ -67,6 +67,20 @@ const BUILTIN_GLOBALS = new Set([
|
|
|
67
67
|
"queueMicrotask",
|
|
68
68
|
"structuredClone",
|
|
69
69
|
]);
|
|
70
|
+
/** CommonJS module-scope names and JavaScript's value keywords: provided by
|
|
71
|
+
* the module wrapper or the language, never the global object. */
|
|
72
|
+
const MODULE_SCOPE_NAMES = new Set([
|
|
73
|
+
"require",
|
|
74
|
+
"module",
|
|
75
|
+
"exports",
|
|
76
|
+
"__dirname",
|
|
77
|
+
"__filename",
|
|
78
|
+
"arguments",
|
|
79
|
+
"eval",
|
|
80
|
+
"undefined",
|
|
81
|
+
"NaN",
|
|
82
|
+
"Infinity",
|
|
83
|
+
]);
|
|
70
84
|
/** Writes to builtin members that the native subset models (process
|
|
71
85
|
* state, tuning knobs). */
|
|
72
86
|
const ALLOWED_BUILTIN_WRITES = new Set([
|
|
@@ -96,6 +110,21 @@ function builtinModuleName(spec) {
|
|
|
96
110
|
return bare;
|
|
97
111
|
return null;
|
|
98
112
|
}
|
|
113
|
+
/** Parentheses and the TypeScript wrappers Node erases (`as`,
|
|
114
|
+
* `satisfies`, `!` and the angle-bracket assertion). */
|
|
115
|
+
function stripWrappers(node) {
|
|
116
|
+
let value = node;
|
|
117
|
+
for (;;) {
|
|
118
|
+
if (ts.isParenthesizedExpression(value) ||
|
|
119
|
+
ts.isAsExpression(value) ||
|
|
120
|
+
ts.isTypeAssertion(value) ||
|
|
121
|
+
ts.isNonNullExpression(value) ||
|
|
122
|
+
ts.isSatisfiesExpression(value))
|
|
123
|
+
value = value.expression;
|
|
124
|
+
else
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
99
128
|
function literalText(node) {
|
|
100
129
|
if (node === undefined)
|
|
101
130
|
return null;
|
|
@@ -103,6 +132,15 @@ function literalText(node) {
|
|
|
103
132
|
return node.text;
|
|
104
133
|
return null;
|
|
105
134
|
}
|
|
135
|
+
/** A property name the scan can spell: an identifier, a string or number
|
|
136
|
+
* literal, or a computed literal key. */
|
|
137
|
+
function staticKey(node) {
|
|
138
|
+
if (ts.isIdentifier(node) || ts.isNumericLiteral(node))
|
|
139
|
+
return node.text;
|
|
140
|
+
if (ts.isComputedPropertyName(node))
|
|
141
|
+
return literalText(stripWrappers(node.expression));
|
|
142
|
+
return literalText(node);
|
|
143
|
+
}
|
|
106
144
|
/** A specifier that folds at build time: a literal, or a concatenation of
|
|
107
145
|
* literals. */
|
|
108
146
|
function isFoldableSpecifier(node) {
|
|
@@ -117,6 +155,15 @@ function isFoldableSpecifier(node) {
|
|
|
117
155
|
function isAssignmentOperator(kind) {
|
|
118
156
|
return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
|
|
119
157
|
}
|
|
158
|
+
/** The key of an object-literal property (`name`, `"name"` or a
|
|
159
|
+
* template without substitutions). */
|
|
160
|
+
function literalKeyName(name) {
|
|
161
|
+
if (name === undefined)
|
|
162
|
+
return null;
|
|
163
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name))
|
|
164
|
+
return name.text;
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
120
167
|
function propertyName(node) {
|
|
121
168
|
if (ts.isPropertyAccessExpression(node)) {
|
|
122
169
|
const name = node.name;
|
|
@@ -129,15 +176,14 @@ function propertyName(node) {
|
|
|
129
176
|
/** `a.b.c` as "a.b.c" (element accesses with literal keys included), or
|
|
130
177
|
* null when the chain has a computed key or does not start at a name. */
|
|
131
178
|
function chainText(node) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
179
|
+
const value = stripWrappers(node);
|
|
180
|
+
if (ts.isIdentifier(value))
|
|
181
|
+
return value.text;
|
|
182
|
+
if (value.kind === ts.SyntaxKind.ThisKeyword)
|
|
135
183
|
return "this";
|
|
136
|
-
if (ts.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const base = chainText(node.expression);
|
|
140
|
-
const name = propertyName(node);
|
|
184
|
+
if (ts.isPropertyAccessExpression(value) || ts.isElementAccessExpression(value)) {
|
|
185
|
+
const base = chainText(value.expression);
|
|
186
|
+
const name = propertyName(value);
|
|
141
187
|
if (base === null || name === null)
|
|
142
188
|
return null;
|
|
143
189
|
return `${base}.${name}`;
|
|
@@ -146,32 +192,29 @@ function chainText(node) {
|
|
|
146
192
|
}
|
|
147
193
|
/** Like chainText, with computed keys spelled `[…]`: `process.env[…]`. */
|
|
148
194
|
function memberText(node) {
|
|
149
|
-
const
|
|
195
|
+
const value = stripWrappers(node);
|
|
196
|
+
const text = chainText(value);
|
|
150
197
|
if (text !== null)
|
|
151
198
|
return text;
|
|
152
|
-
if (ts.isElementAccessExpression(
|
|
153
|
-
const base = memberText(
|
|
199
|
+
if (ts.isElementAccessExpression(value)) {
|
|
200
|
+
const base = memberText(value.expression);
|
|
154
201
|
return base === null ? null : `${base}[…]`;
|
|
155
202
|
}
|
|
156
|
-
if (ts.isPropertyAccessExpression(
|
|
157
|
-
const base = memberText(
|
|
158
|
-
const name = propertyName(
|
|
203
|
+
if (ts.isPropertyAccessExpression(value)) {
|
|
204
|
+
const base = memberText(value.expression);
|
|
205
|
+
const name = propertyName(value);
|
|
159
206
|
return base === null || name === null ? null : `${base}.${name}`;
|
|
160
207
|
}
|
|
161
208
|
return null;
|
|
162
209
|
}
|
|
163
210
|
/** The identifier a member chain starts at (`a` of `a.b[c].d`). */
|
|
164
211
|
function chainRoot(node) {
|
|
165
|
-
let cur = node;
|
|
212
|
+
let cur = stripWrappers(node);
|
|
166
213
|
for (;;) {
|
|
167
214
|
if (ts.isIdentifier(cur))
|
|
168
215
|
return cur;
|
|
169
216
|
if (ts.isPropertyAccessExpression(cur) || ts.isElementAccessExpression(cur)) {
|
|
170
|
-
cur = cur.expression;
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
if (ts.isParenthesizedExpression(cur)) {
|
|
174
|
-
cur = cur.expression;
|
|
217
|
+
cur = stripWrappers(cur.expression);
|
|
175
218
|
continue;
|
|
176
219
|
}
|
|
177
220
|
return null;
|
|
@@ -212,6 +255,83 @@ function isFunctionBoundary(node) {
|
|
|
212
255
|
ts.isGetAccessorDeclaration(node) ||
|
|
213
256
|
ts.isSetAccessorDeclaration(node));
|
|
214
257
|
}
|
|
258
|
+
/** Whether `node`, an identifier, is read rather than written, declared or
|
|
259
|
+
* used as a name. A shorthand property and a `typeof` operand are reads. */
|
|
260
|
+
function isReadPosition(node, parent) {
|
|
261
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
262
|
+
return false;
|
|
263
|
+
if ((ts.isPropertyAssignment(parent) ||
|
|
264
|
+
ts.isMethodDeclaration(parent) ||
|
|
265
|
+
ts.isPropertyDeclaration(parent) ||
|
|
266
|
+
ts.isGetAccessorDeclaration(parent) ||
|
|
267
|
+
ts.isSetAccessorDeclaration(parent)) &&
|
|
268
|
+
parent.name === node)
|
|
269
|
+
return false;
|
|
270
|
+
if ((ts.isPropertySignature(parent) || ts.isMethodSignatureDeclaration(parent)) &&
|
|
271
|
+
parent.name === node)
|
|
272
|
+
return false;
|
|
273
|
+
if (ts.isLabeledStatement(parent) && parent.label === node)
|
|
274
|
+
return false;
|
|
275
|
+
if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === node)
|
|
276
|
+
return false;
|
|
277
|
+
if (ts.isBinaryExpression(parent) &&
|
|
278
|
+
parent.left === node &&
|
|
279
|
+
isAssignmentOperator(parent.operatorToken.kind))
|
|
280
|
+
return false;
|
|
281
|
+
if ((ts.isPrefixUnaryExpression(parent) || ts.isPostfixUnaryExpression(parent)) &&
|
|
282
|
+
parent.operand === node &&
|
|
283
|
+
(parent.operator === ts.SyntaxKind.PlusPlusToken ||
|
|
284
|
+
parent.operator === ts.SyntaxKind.MinusMinusToken))
|
|
285
|
+
return false;
|
|
286
|
+
if (ts.isDeleteExpression(parent) && parent.expression === node)
|
|
287
|
+
return false;
|
|
288
|
+
if ((ts.isForOfStatement(parent) || ts.isForInStatement(parent)) && parent.initializer === node)
|
|
289
|
+
return false;
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
/** Whether `node` sits in a type position: a name there is a type, not a
|
|
293
|
+
* value the global object could provide. */
|
|
294
|
+
function isTypePosition(node) {
|
|
295
|
+
let current = node;
|
|
296
|
+
let parent = current.parent;
|
|
297
|
+
while (parent !== undefined) {
|
|
298
|
+
if (ts.isTypeNode(parent))
|
|
299
|
+
return true;
|
|
300
|
+
// A declaration's annotation (`const x: T`), a return type, `as` and
|
|
301
|
+
// `satisfies` all hold their type in a `type` child.
|
|
302
|
+
if (parent.type === current)
|
|
303
|
+
return true;
|
|
304
|
+
if (ts.isExpression(parent) || ts.isStatement(parent))
|
|
305
|
+
return false;
|
|
306
|
+
current = parent;
|
|
307
|
+
parent = parent.parent;
|
|
308
|
+
}
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
/** The name a plain function value is bound to in the same file
|
|
312
|
+
* (`function f`, `var f = function`), for the constructor refinement. */
|
|
313
|
+
function boundFunctionName(fn) {
|
|
314
|
+
if (ts.isFunctionDeclaration(fn))
|
|
315
|
+
return fn.name?.text ?? null;
|
|
316
|
+
const parent = fn.parent;
|
|
317
|
+
if (parent === undefined)
|
|
318
|
+
return null;
|
|
319
|
+
if (ts.isVariableDeclaration(parent) && ts.isIdentifier(parent.name))
|
|
320
|
+
return parent.name.text;
|
|
321
|
+
if (ts.isPropertyAssignment(parent))
|
|
322
|
+
return propertyName(parent.name);
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
/** `X.prototype.name = function () {}`: a method assignment, whose every
|
|
326
|
+
* call through the same spelling has a receiver. */
|
|
327
|
+
function isPrototypeFunctionAssignment(left, right) {
|
|
328
|
+
let value = right;
|
|
329
|
+
while (ts.isParenthesizedExpression(value))
|
|
330
|
+
value = value.expression;
|
|
331
|
+
return (ts.isFunctionExpression(value) &&
|
|
332
|
+
ts.isPropertyAccessExpression(left.expression) &&
|
|
333
|
+
propertyName(left.expression) === "prototype");
|
|
334
|
+
}
|
|
215
335
|
/** One module's pre-scan. */
|
|
216
336
|
class ModuleScanner {
|
|
217
337
|
sf;
|
|
@@ -227,6 +347,25 @@ class ModuleScanner {
|
|
|
227
347
|
builtinBindings = new Map();
|
|
228
348
|
/** Local names bound to a createRequire(...) result. */
|
|
229
349
|
createdRequires = new Set();
|
|
350
|
+
/** Local names bound to a builtin module's CommonJS object: require(),
|
|
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();
|
|
354
|
+
/** Members read through a CommonJS builtin object (H3.4). */
|
|
355
|
+
cjsReads = [];
|
|
356
|
+
/** Reads of names the file declares nowhere and no builtin provides: each
|
|
357
|
+
* resolves on the global object at run time. */
|
|
358
|
+
globalReads = [];
|
|
359
|
+
globalReadNames = new Set();
|
|
360
|
+
/** Names the file constructs with `new`: a constructor's `this` is never
|
|
361
|
+
* the global object, so its `this` uses need no island (decision S5). */
|
|
362
|
+
constructed = new Set();
|
|
363
|
+
/** Names the file calls as a bare identifier, `f(...)`: a name used both
|
|
364
|
+
* ways is a constructor and a plain function, so it still marks. */
|
|
365
|
+
bareCalled = new Set();
|
|
366
|
+
/** Function expressions the file assigns to `X.prototype.name`: every
|
|
367
|
+
* same-file call of them is a receiver call (decision S5). */
|
|
368
|
+
prototypeFunctions = new Set();
|
|
230
369
|
strictness = new Map();
|
|
231
370
|
moduleStrict;
|
|
232
371
|
constructor(sf) {
|
|
@@ -248,7 +387,7 @@ class ModuleScanner {
|
|
|
248
387
|
});
|
|
249
388
|
return this.markers;
|
|
250
389
|
}
|
|
251
|
-
add(rule, reason, construct, node) {
|
|
390
|
+
add(rule, reason, construct, node, member) {
|
|
252
391
|
if (this.markers.length >= MARKER_CAP)
|
|
253
392
|
return;
|
|
254
393
|
this.markers.push({
|
|
@@ -256,6 +395,7 @@ class ModuleScanner {
|
|
|
256
395
|
reason,
|
|
257
396
|
construct,
|
|
258
397
|
loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
|
|
398
|
+
...(member === undefined ? {} : { member }),
|
|
259
399
|
});
|
|
260
400
|
}
|
|
261
401
|
bindName(name, init) {
|
|
@@ -265,21 +405,23 @@ class ModuleScanner {
|
|
|
265
405
|
this.declared.add(name.text);
|
|
266
406
|
if (init === undefined)
|
|
267
407
|
return;
|
|
268
|
-
|
|
269
|
-
while (ts.isParenthesizedExpression(value))
|
|
270
|
-
value = value.expression;
|
|
408
|
+
const value = stripWrappers(init);
|
|
271
409
|
if (ts.isFunctionExpression(value) || ts.isArrowFunction(value))
|
|
272
410
|
this.functions.add(name.text);
|
|
273
411
|
else if (ts.isClassExpression(value))
|
|
274
412
|
this.classes.add(name.text);
|
|
275
413
|
const bound = this.builtinOf(value);
|
|
276
|
-
if (bound !== null)
|
|
414
|
+
if (bound !== null) {
|
|
277
415
|
this.builtinBindings.set(name.text, bound);
|
|
416
|
+
if (!bound.includes(".") && this.isCjsObjectValue(value))
|
|
417
|
+
this.cjsBuiltinObjects.add(name.text);
|
|
418
|
+
}
|
|
278
419
|
if (ts.isCallExpression(value) && this.isCreateRequireCallee(value.expression))
|
|
279
420
|
this.createdRequires.add(name.text);
|
|
280
421
|
return;
|
|
281
422
|
}
|
|
282
423
|
if (ts.isObjectBindingPattern(name)) {
|
|
424
|
+
this.recordCjsPatternReads(name, init);
|
|
283
425
|
const base = init === undefined ? null : this.builtinOf(init);
|
|
284
426
|
for (const element of name.elements.nodes) {
|
|
285
427
|
if (!ts.isBindingElement(element))
|
|
@@ -301,12 +443,22 @@ class ModuleScanner {
|
|
|
301
443
|
}
|
|
302
444
|
}
|
|
303
445
|
}
|
|
446
|
+
/** A value that is a builtin module's CommonJS object: a require() or a
|
|
447
|
+
* createRequire'd require's result of a builtin, or an alias of one. */
|
|
448
|
+
isCjsObjectValue(value) {
|
|
449
|
+
if (ts.isIdentifier(value))
|
|
450
|
+
return this.cjsBuiltinObjects.has(value.text);
|
|
451
|
+
if (!ts.isCallExpression(value))
|
|
452
|
+
return false;
|
|
453
|
+
return (this.isRequireCallee(value.expression) ||
|
|
454
|
+
(ts.isIdentifier(value.expression) && this.createdRequires.has(value.expression.text)));
|
|
455
|
+
}
|
|
304
456
|
/** `require("fs")`, `require("node:util").inherits` → "fs", "util.inherits". */
|
|
305
457
|
builtinOf(node) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
value
|
|
309
|
-
|
|
458
|
+
const value = stripWrappers(node);
|
|
459
|
+
if (ts.isCallExpression(value) &&
|
|
460
|
+
(this.isRequireCallee(value.expression) ||
|
|
461
|
+
(ts.isIdentifier(value.expression) && this.createdRequires.has(value.expression.text)))) {
|
|
310
462
|
const spec = literalText(value.arguments.nodes[0]);
|
|
311
463
|
return spec === null ? null : builtinModuleName(spec);
|
|
312
464
|
}
|
|
@@ -339,12 +491,43 @@ class ModuleScanner {
|
|
|
339
491
|
this.declared.add(node.name.text);
|
|
340
492
|
this.classes.add(node.name.text);
|
|
341
493
|
}
|
|
494
|
+
else if ((ts.isInterfaceDeclaration(node) ||
|
|
495
|
+
ts.isTypeAliasDeclaration(node) ||
|
|
496
|
+
ts.isEnumDeclaration(node) ||
|
|
497
|
+
ts.isModuleDeclaration(node)) &&
|
|
498
|
+
ts.isIdentifier(node.name)) {
|
|
499
|
+
this.declared.add(node.name.text);
|
|
500
|
+
}
|
|
501
|
+
else if (ts.isTypeParameterDeclaration(node)) {
|
|
502
|
+
this.declared.add(node.name.text);
|
|
503
|
+
}
|
|
504
|
+
else if (ts.isEnumMember(node) && ts.isIdentifier(node.name)) {
|
|
505
|
+
this.declared.add(node.name.text);
|
|
506
|
+
}
|
|
342
507
|
else if (ts.isVariableDeclaration(node)) {
|
|
343
508
|
this.bindName(node.name, node.initializer);
|
|
344
509
|
}
|
|
345
510
|
else if (ts.isParameter(node)) {
|
|
346
511
|
this.bindName(node.name, undefined);
|
|
347
512
|
}
|
|
513
|
+
else if (ts.isFunctionExpression(node) && node.name !== undefined) {
|
|
514
|
+
this.declared.add(node.name.text);
|
|
515
|
+
}
|
|
516
|
+
else if (ts.isCatchClause(node) && node.variableDeclaration !== undefined) {
|
|
517
|
+
this.bindName(node.variableDeclaration.name, undefined);
|
|
518
|
+
}
|
|
519
|
+
else if (ts.isNewExpression(node) && ts.isIdentifier(node.expression)) {
|
|
520
|
+
this.constructed.add(node.expression.text);
|
|
521
|
+
}
|
|
522
|
+
else if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {
|
|
523
|
+
this.bareCalled.add(node.expression.text);
|
|
524
|
+
}
|
|
525
|
+
else if (ts.isBinaryExpression(node) &&
|
|
526
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
527
|
+
ts.isPropertyAccessExpression(node.left) &&
|
|
528
|
+
isPrototypeFunctionAssignment(node.left, node.right)) {
|
|
529
|
+
this.prototypeFunctions.add(node.right);
|
|
530
|
+
}
|
|
348
531
|
else if (ts.isImportDeclaration(node)) {
|
|
349
532
|
const spec = literalText(node.moduleSpecifier);
|
|
350
533
|
const module = spec === null ? null : builtinModuleName(spec);
|
|
@@ -352,8 +535,12 @@ class ModuleScanner {
|
|
|
352
535
|
if (clause !== undefined) {
|
|
353
536
|
if (clause.name !== undefined) {
|
|
354
537
|
this.declared.add(clause.name.text);
|
|
355
|
-
if (module !== null)
|
|
538
|
+
if (module !== null) {
|
|
356
539
|
this.builtinBindings.set(clause.name.text, module);
|
|
540
|
+
// A default import is the CommonJS object (unlike a namespace
|
|
541
|
+
// or named import, through which Node refuses writes).
|
|
542
|
+
this.cjsBuiltinObjects.add(clause.name.text);
|
|
543
|
+
}
|
|
357
544
|
}
|
|
358
545
|
const bindings = clause.namedBindings;
|
|
359
546
|
if (bindings !== undefined && ts.isNamespaceImport(bindings)) {
|
|
@@ -411,13 +598,79 @@ class ModuleScanner {
|
|
|
411
598
|
isGlobal(name) {
|
|
412
599
|
return BUILTIN_GLOBALS.has(name) && !this.declared.has(name);
|
|
413
600
|
}
|
|
601
|
+
/** A function declaration whose parent is a block that is not a function
|
|
602
|
+
* body: Annex B.3.2's block-level declaration, which in sloppy code also
|
|
603
|
+
* creates a `var`-like binding in the enclosing function (DESIGN.md note 1
|
|
604
|
+
* §3.1, construct 5). A declaration directly in a function body or at the
|
|
605
|
+
* top level of a script is ordinary. */
|
|
606
|
+
isAnnexBBlockFunction(fn) {
|
|
607
|
+
const parent = fn.parent;
|
|
608
|
+
if (parent === undefined || !ts.isBlock(parent))
|
|
609
|
+
return false;
|
|
610
|
+
const owner = parent.parent;
|
|
611
|
+
if (owner === undefined)
|
|
612
|
+
return false;
|
|
613
|
+
// A function-like body, a class static block or a class member
|
|
614
|
+
// initializer block is not a bare block statement.
|
|
615
|
+
return owner.body !== parent;
|
|
616
|
+
}
|
|
617
|
+
/** Whether the file shows the function is only ever called with a
|
|
618
|
+
* receiver, so native's missing sloppy `this` cannot be observed: it is
|
|
619
|
+
* constructed with `new`, or it is a `X.prototype.name` method (decision
|
|
620
|
+
* S5 — the marker islands what native gets wrong, and native passes the
|
|
621
|
+
* receiver for both shapes). */
|
|
622
|
+
receiverSafe(fn) {
|
|
623
|
+
if (this.prototypeFunctions.has(fn))
|
|
624
|
+
return true;
|
|
625
|
+
const name = boundFunctionName(fn);
|
|
626
|
+
return name !== null && this.constructed.has(name) && !this.bareCalled.has(name);
|
|
627
|
+
}
|
|
628
|
+
/** `this` in a plain function call: a sloppy function that is not a
|
|
629
|
+
* method, constructor, accessor or class member, and is not an arrow
|
|
630
|
+
* function (whose `this` is its enclosing function's). Conservative
|
|
631
|
+
* (decision S2): a file-level scan cannot see cross-file call sites, so
|
|
632
|
+
* any `this` in such a function marks the module, except the shapes the
|
|
633
|
+
* file itself proves are receiver calls (decision S5). Top-level `this`
|
|
634
|
+
* is not this marker: it is the module's exports object, and the test262
|
|
635
|
+
* profile's script-environment exclusion covers the script form. */
|
|
636
|
+
visitThis(node) {
|
|
637
|
+
if (this.isStrict(node))
|
|
638
|
+
return;
|
|
639
|
+
for (let cur = node.parent; cur !== undefined; cur = cur.parent) {
|
|
640
|
+
// An arrow function has no `this` of its own: keep looking outward.
|
|
641
|
+
if (ts.isArrowFunction(cur))
|
|
642
|
+
continue;
|
|
643
|
+
if (ts.isFunctionDeclaration(cur) || ts.isFunctionExpression(cur)) {
|
|
644
|
+
if (this.receiverSafe(cur))
|
|
645
|
+
return;
|
|
646
|
+
this.add("R2.4", "sloppy-this", "'this' in a plain call in sloppy mode", node);
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
// A method, constructor or accessor has a receiver; a class member
|
|
650
|
+
// initializer and a class static block have their own `this`; a
|
|
651
|
+
// property assignment's function is commonly a method too.
|
|
652
|
+
if (isFunctionBoundary(cur) ||
|
|
653
|
+
ts.isClassDeclaration(cur) ||
|
|
654
|
+
ts.isClassExpression(cur) ||
|
|
655
|
+
ts.isClassStaticBlockDeclaration(cur) ||
|
|
656
|
+
ts.isPropertyDeclaration(cur) ||
|
|
657
|
+
ts.isPropertyAssignment(cur))
|
|
658
|
+
return;
|
|
659
|
+
// Top-level `this` is the module's exports object, not a call site.
|
|
660
|
+
if (ts.isSourceFile(cur))
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
414
664
|
visit(node) {
|
|
415
665
|
if (ts.isCallExpression(node))
|
|
416
666
|
this.visitCall(node);
|
|
417
667
|
else if (ts.isNewExpression(node))
|
|
418
668
|
this.visitNew(node);
|
|
419
|
-
else if (ts.isBinaryExpression(node) && isAssignmentOperator(node.operatorToken.kind))
|
|
669
|
+
else if (ts.isBinaryExpression(node) && isAssignmentOperator(node.operatorToken.kind)) {
|
|
420
670
|
this.visitWrite(node.left, node, "write");
|
|
671
|
+
if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken)
|
|
672
|
+
this.recordCjsPatternReads(node.left, node.right);
|
|
673
|
+
}
|
|
421
674
|
else if (ts.isDeleteExpression(node))
|
|
422
675
|
this.visitDelete(node);
|
|
423
676
|
else if (ts.isPrefixUnaryExpression(node) || ts.isPostfixUnaryExpression(node)) {
|
|
@@ -426,7 +679,10 @@ class ModuleScanner {
|
|
|
426
679
|
this.visitWrite(node.operand, node, "write");
|
|
427
680
|
}
|
|
428
681
|
else if (ts.isWithStatement(node)) {
|
|
429
|
-
|
|
682
|
+
// A `with` in strict code is an early error (Node refuses the file
|
|
683
|
+
// too), so only sloppy code carries the sloppy-semantics marker.
|
|
684
|
+
if (!this.isStrict(node))
|
|
685
|
+
this.add("R2.4", "with", "a 'with' statement", node);
|
|
430
686
|
}
|
|
431
687
|
else if (ts.isImportDeclaration(node)) {
|
|
432
688
|
const spec = literalText(node.moduleSpecifier);
|
|
@@ -445,6 +701,13 @@ class ModuleScanner {
|
|
|
445
701
|
const text = chainText(node);
|
|
446
702
|
if ((text === "arguments.callee" || text === "arguments.caller") && !this.isStrict(node))
|
|
447
703
|
this.add("R2.4", "sloppy-arguments", `'${text}'`, node);
|
|
704
|
+
this.recordCjsRead(node);
|
|
705
|
+
}
|
|
706
|
+
else if (ts.isElementAccessExpression(node)) {
|
|
707
|
+
this.recordCjsRead(node);
|
|
708
|
+
}
|
|
709
|
+
else if (node.kind === ts.SyntaxKind.ThisKeyword) {
|
|
710
|
+
this.visitThis(node);
|
|
448
711
|
}
|
|
449
712
|
else if (ts.isObjectLiteralExpression(node)) {
|
|
450
713
|
for (const prop of node.properties.nodes) {
|
|
@@ -460,6 +723,100 @@ class ModuleScanner {
|
|
|
460
723
|
this.visitFunction(node);
|
|
461
724
|
}
|
|
462
725
|
}
|
|
726
|
+
/** Records a read of a member of a builtin module's CommonJS object, so
|
|
727
|
+
* a patch installed by an island module can be checked against it
|
|
728
|
+
* (H3.4). The left of an assignment (and a delete or ++/-- target) is a
|
|
729
|
+
* write, not a read. A computed key reads a member the scan cannot name,
|
|
730
|
+
* so it is recorded as the whole module ("fs.*"). */
|
|
731
|
+
recordCjsRead(node) {
|
|
732
|
+
const root = chainRoot(node);
|
|
733
|
+
if (root === null || !this.cjsBuiltinObjects.has(root.text))
|
|
734
|
+
return;
|
|
735
|
+
const module = this.builtinBindings.get(root.text);
|
|
736
|
+
if (module === undefined)
|
|
737
|
+
return;
|
|
738
|
+
const text = chainText(node);
|
|
739
|
+
const parent = node.parent;
|
|
740
|
+
if (parent !== undefined) {
|
|
741
|
+
if (ts.isBinaryExpression(parent) &&
|
|
742
|
+
isAssignmentOperator(parent.operatorToken.kind) &&
|
|
743
|
+
parent.left === node)
|
|
744
|
+
return;
|
|
745
|
+
if (ts.isDeleteExpression(parent) ||
|
|
746
|
+
ts.isPrefixUnaryExpression(parent) ||
|
|
747
|
+
ts.isPostfixUnaryExpression(parent))
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
this.pushCjsRead(text === null ? `${module}.*` : module + text.slice(root.text.length), node);
|
|
751
|
+
}
|
|
752
|
+
pushCjsRead(member, node) {
|
|
753
|
+
this.cjsReads.push({
|
|
754
|
+
member,
|
|
755
|
+
loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
/** The reads of a destructuring whose source is a builtin module's
|
|
759
|
+
* CommonJS object (`const { readFileSync } = require("fs")`,
|
|
760
|
+
* `({ readFileSync } = fs)`): each property it takes is read when the
|
|
761
|
+
* destructuring runs, so it sees a patch installed before. A rest element
|
|
762
|
+
* or a computed key reads members the scan cannot name ("fs.*"). */
|
|
763
|
+
recordCjsPatternReads(pattern, source) {
|
|
764
|
+
if (source === undefined)
|
|
765
|
+
return;
|
|
766
|
+
const value = stripWrappers(source);
|
|
767
|
+
if (!this.isCjsObjectValue(value))
|
|
768
|
+
return;
|
|
769
|
+
const module = this.builtinOf(value);
|
|
770
|
+
if (module === null || module.includes("."))
|
|
771
|
+
return;
|
|
772
|
+
this.recordPatternReads(pattern, module);
|
|
773
|
+
}
|
|
774
|
+
recordPatternReads(pattern, base) {
|
|
775
|
+
const target = stripWrappers(pattern);
|
|
776
|
+
const elements = [];
|
|
777
|
+
if (ts.isObjectBindingPattern(target)) {
|
|
778
|
+
for (const element of target.elements.nodes) {
|
|
779
|
+
if (!ts.isBindingElement(element))
|
|
780
|
+
continue;
|
|
781
|
+
elements.push({
|
|
782
|
+
key: element.propertyName ?? element.name,
|
|
783
|
+
value: element.name,
|
|
784
|
+
rest: element.dotDotDotToken !== undefined,
|
|
785
|
+
node: element,
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
else if (ts.isObjectLiteralExpression(target)) {
|
|
790
|
+
for (const prop of target.properties.nodes) {
|
|
791
|
+
if (ts.isPropertyAssignment(prop))
|
|
792
|
+
elements.push({ key: prop.name, value: prop.initializer, rest: false, node: prop });
|
|
793
|
+
else if (ts.isShorthandPropertyAssignment(prop))
|
|
794
|
+
elements.push({ key: prop.name, value: undefined, rest: false, node: prop });
|
|
795
|
+
else if (ts.isSpreadAssignment(prop))
|
|
796
|
+
elements.push({ key: undefined, value: undefined, rest: true, node: prop });
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
else
|
|
800
|
+
return;
|
|
801
|
+
for (const element of elements) {
|
|
802
|
+
const key = element.rest || element.key === undefined ? null : staticKey(element.key);
|
|
803
|
+
if (key === null) {
|
|
804
|
+
this.pushCjsRead(`${base.split(".")[0]}.*`, element.node);
|
|
805
|
+
continue;
|
|
806
|
+
}
|
|
807
|
+
const member = `${base}.${key}`;
|
|
808
|
+
this.pushCjsRead(member, element.node);
|
|
809
|
+
// A nested pattern reads the member's own properties too.
|
|
810
|
+
if (element.value !== undefined) {
|
|
811
|
+
let inner = stripWrappers(element.value);
|
|
812
|
+
// `{ readFileSync = fallback }` (a default) and `{ a: { b } = {} }`.
|
|
813
|
+
if (ts.isBinaryExpression(inner) && inner.operatorToken.kind === ts.SyntaxKind.EqualsToken)
|
|
814
|
+
inner = stripWrappers(inner.left);
|
|
815
|
+
if (ts.isObjectBindingPattern(inner) || ts.isObjectLiteralExpression(inner))
|
|
816
|
+
this.recordPatternReads(inner, member);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
463
820
|
visitSpecifier(spec, node) {
|
|
464
821
|
const builtin = builtinModuleName(spec);
|
|
465
822
|
if (builtin === "vm")
|
|
@@ -500,15 +857,24 @@ class ModuleScanner {
|
|
|
500
857
|
let target = callee;
|
|
501
858
|
while (ts.isParenthesizedExpression(target))
|
|
502
859
|
target = target.expression;
|
|
860
|
+
// A bare `eval(...)` is the intrinsic's DIRECT call: it reads and
|
|
861
|
+
// creates bindings in the caller's scope, and in sloppy mode creates
|
|
862
|
+
// globals (DESIGN.md note 1 §3.1). `globalThis.eval(...)`, the
|
|
863
|
+
// comma-operator idiom `(0, eval)(...)` and the other spellings are
|
|
864
|
+
// indirect: they observe no caller scope, so only R1.1.
|
|
865
|
+
const direct = ts.isIdentifier(target) && target.text === "eval" && !this.declared.has("eval");
|
|
503
866
|
if (ts.isBinaryExpression(target) && target.operatorToken.kind === ts.SyntaxKind.CommaToken)
|
|
504
867
|
target = target.right;
|
|
505
868
|
const text = chainText(target);
|
|
506
869
|
if (text === null)
|
|
507
870
|
return;
|
|
508
|
-
if (
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
871
|
+
if (text === "eval" && !this.declared.has("eval")) {
|
|
872
|
+
this.add("R1.1", "code-from-string", "eval()", call);
|
|
873
|
+
if (direct && !this.isStrict(call))
|
|
874
|
+
this.add("R2.4", "direct-eval", "a direct call of eval() in sloppy mode", call);
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
if (text === "globalThis.eval" || text === "global.eval" || text === "window.eval") {
|
|
512
878
|
this.add("R1.1", "code-from-string", "eval()", call);
|
|
513
879
|
return;
|
|
514
880
|
}
|
|
@@ -560,10 +926,45 @@ class ModuleScanner {
|
|
|
560
926
|
if (((text === "Object.defineProperty" || text === "Object.defineProperties") &&
|
|
561
927
|
this.isGlobal("Object")) ||
|
|
562
928
|
(text === "Reflect.defineProperty" && this.isGlobal("Reflect"))) {
|
|
929
|
+
// A definition on a builtin module's CommonJS object is a patch the
|
|
930
|
+
// code loading that object must see (R2.5, H3.1.4).
|
|
931
|
+
const target = first === undefined ? undefined : stripWrappers(first);
|
|
932
|
+
const builtin = target !== undefined && ts.isIdentifier(target) && this.cjsBuiltinObjects.has(target.text)
|
|
933
|
+
? (this.builtinBindings.get(target.text) ?? null)
|
|
934
|
+
: null;
|
|
935
|
+
if (builtin !== null) {
|
|
936
|
+
const key = literalText(args[1] === undefined ? undefined : stripWrappers(args[1]));
|
|
937
|
+
this.add("R2.5", "builtin-patch", `'${text}()' on the builtin module '${builtin}'`, call, key === null ? `${builtin}.*` : `${builtin}.${key}`);
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
563
940
|
if (first !== undefined && !this.isModuleObject(first) && !this.inInteropHelper(call))
|
|
564
941
|
this.add("R2.3", "define-property", `'${text}()'`, call);
|
|
565
942
|
return;
|
|
566
943
|
}
|
|
944
|
+
// Object.assign(fs, …) on a builtin module's CommonJS object: every
|
|
945
|
+
// literal key is a patch (R2.5, H3.1.4).
|
|
946
|
+
if (text === "Object.assign" && this.isGlobal("Object") && first !== undefined) {
|
|
947
|
+
const target = stripWrappers(first);
|
|
948
|
+
if (ts.isIdentifier(target) && this.cjsBuiltinObjects.has(target.text)) {
|
|
949
|
+
const builtin = this.builtinBindings.get(target.text) ?? null;
|
|
950
|
+
if (builtin !== null) {
|
|
951
|
+
const source = args.length === 2 ? stripWrappers(args[1]) : undefined;
|
|
952
|
+
const keys = source !== undefined && ts.isObjectLiteralExpression(source)
|
|
953
|
+
? source.properties.nodes
|
|
954
|
+
.map((property) => ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)
|
|
955
|
+
? literalKeyName(property.name)
|
|
956
|
+
: null)
|
|
957
|
+
.filter((key) => key !== null)
|
|
958
|
+
: [];
|
|
959
|
+
if (keys.length === 0)
|
|
960
|
+
this.add("R2.5", "builtin-patch", `'Object.assign()' on the builtin module '${builtin}'`, call, `${builtin}.*`);
|
|
961
|
+
else
|
|
962
|
+
for (const key of keys)
|
|
963
|
+
this.add("R2.5", "builtin-patch", `'Object.assign()' on the builtin module '${builtin}'`, call, `${builtin}.${key}`);
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
567
968
|
if (text.endsWith(".__defineGetter__") || text.endsWith(".__defineSetter__")) {
|
|
568
969
|
this.add("R2.3", "define-property", `'${text.slice(text.lastIndexOf(".") + 1)}()'`, call);
|
|
569
970
|
return;
|
|
@@ -706,7 +1107,10 @@ class ModuleScanner {
|
|
|
706
1107
|
if (binding !== undefined) {
|
|
707
1108
|
const member = binding + spelled.slice(root.text.length);
|
|
708
1109
|
if (!this.allowedWrite(member)) {
|
|
709
|
-
|
|
1110
|
+
// A write through a builtin module's CommonJS object patches that
|
|
1111
|
+
// object; only code sharing Node's builtin can see it (H3.1).
|
|
1112
|
+
const patch = this.cjsBuiltinObjects.has(root.text);
|
|
1113
|
+
this.add("R2.5", patch ? "builtin-patch" : "builtin-write", `a ${what} of the builtin module member '${member}'`, node, patch ? member : undefined);
|
|
710
1114
|
}
|
|
711
1115
|
return;
|
|
712
1116
|
}
|
|
@@ -738,6 +1142,7 @@ class ModuleScanner {
|
|
|
738
1142
|
}
|
|
739
1143
|
visitIdentifier(node) {
|
|
740
1144
|
const name = node.text;
|
|
1145
|
+
this.collectGlobalRead(node);
|
|
741
1146
|
if (name !== "WeakRef" && name !== "FinalizationRegistry")
|
|
742
1147
|
return;
|
|
743
1148
|
if (this.declared.has(name))
|
|
@@ -754,9 +1159,29 @@ class ModuleScanner {
|
|
|
754
1159
|
return;
|
|
755
1160
|
this.add("R1.6", "weak-ref", `'${name}'`, node);
|
|
756
1161
|
}
|
|
1162
|
+
/** Records a read of a name the file declares nowhere and no builtin
|
|
1163
|
+
* provides: Node resolves it on the global object at run time, where an
|
|
1164
|
+
* island module's sloppy implicit-global write may have created it. */
|
|
1165
|
+
collectGlobalRead(node) {
|
|
1166
|
+
const name = node.text;
|
|
1167
|
+
if (this.declared.has(name) || this.isGlobal(name) || MODULE_SCOPE_NAMES.has(name))
|
|
1168
|
+
return;
|
|
1169
|
+
if (this.globalReadNames.has(name) || this.globalReads.length >= MARKER_CAP)
|
|
1170
|
+
return;
|
|
1171
|
+
const parent = node.parent;
|
|
1172
|
+
if (parent === undefined || isTypePosition(node) || !isReadPosition(node, parent))
|
|
1173
|
+
return;
|
|
1174
|
+
this.globalReadNames.add(name);
|
|
1175
|
+
this.globalReads.push({
|
|
1176
|
+
name,
|
|
1177
|
+
loc: { file: this.sf.fileName, start: ts.tokenStartOfNode(node), end: node.end },
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
757
1180
|
/** Observable `arguments` aliasing in a sloppy function: writes to
|
|
758
1181
|
* arguments[i], or to a parameter while `arguments` is read. */
|
|
759
1182
|
visitFunction(fn) {
|
|
1183
|
+
if (ts.isFunctionDeclaration(fn) && this.isAnnexBBlockFunction(fn) && !this.isStrict(fn))
|
|
1184
|
+
this.add("R2.4", "annexb-block-function", "a function declaration in a block in sloppy mode", fn);
|
|
760
1185
|
const body = fn.body;
|
|
761
1186
|
if (body === undefined || !ts.isBlock(body))
|
|
762
1187
|
return;
|
|
@@ -797,9 +1222,19 @@ class ModuleScanner {
|
|
|
797
1222
|
this.add("R2.4", "sloppy-arguments", "a parameter write while 'arguments' is read in sloppy mode", seen.paramWrite);
|
|
798
1223
|
}
|
|
799
1224
|
}
|
|
800
|
-
/** The R1/R2 markers of one
|
|
1225
|
+
/** The R1/R2 markers and CommonJS-object reads of one module, in source
|
|
1226
|
+
* order. */
|
|
1227
|
+
export function scanModuleFacts(sf) {
|
|
1228
|
+
const scanner = new ModuleScanner(sf);
|
|
1229
|
+
const markers = scanner.scan();
|
|
1230
|
+
return {
|
|
1231
|
+
markers: markers.sort((a, b) => a.loc.start - b.loc.start),
|
|
1232
|
+
cjsReads: scanner.cjsReads.sort((a, b) => a.loc.start - b.loc.start),
|
|
1233
|
+
globalReads: scanner.globalReads.sort((a, b) => a.loc.start - b.loc.start),
|
|
1234
|
+
};
|
|
1235
|
+
}
|
|
1236
|
+
/** The R1/R2 markers of one module, in source order. */
|
|
801
1237
|
export function scanModule(sf) {
|
|
802
|
-
|
|
803
|
-
return markers.sort((a, b) => a.loc.start - b.loc.start);
|
|
1238
|
+
return scanModuleFacts(sf).markers;
|
|
804
1239
|
}
|
|
805
1240
|
//# sourceMappingURL=detect.js.map
|