@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
|
@@ -16,19 +16,20 @@
|
|
|
16
16
|
* checked against the declared result type, like `JSON.parse(s) as T`; a
|
|
17
17
|
* thrown Error crosses as its nearest intrinsic class with its message and
|
|
18
18
|
* string `code`. */
|
|
19
|
-
import { readFileSync, realpathSync } from "node:fs";
|
|
19
|
+
import { readFileSync, realpathSync, statSync } from "node:fs";
|
|
20
20
|
import { resolveFrom } from "../../node-islands/resolve.js";
|
|
21
|
-
import { dirname, isAbsolute, join } from "node:path";
|
|
21
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
22
22
|
import * as ts from "../ts7/adapter.js";
|
|
23
|
-
import { locOf } from "../program.js";
|
|
23
|
+
import { isJsSourceFile, locOf } from "../program.js";
|
|
24
|
+
import { isRelativeSpecifier } from "../workspace-registry.js";
|
|
24
25
|
import { PoisonError, newFnCtx } from "./lowerer.js";
|
|
25
26
|
import { BOOL, DYN, FOREIGN, STRING, VOID, } from "../../ir/ir.js";
|
|
26
27
|
import { dynUndefinedExpr, varRef } from "../../ir/build.js";
|
|
27
28
|
import { classMethodValue } from "./class-method-values.js";
|
|
28
29
|
import { funcTypeFromParamShapes } from "./call-signatures.js";
|
|
29
30
|
import { resolveBareModule } from "../resolve.js";
|
|
30
|
-
import { nativeSubclassOfIslandDiag, nodeIslandBoundaryDiag, nodeIslandModuleDiag, } from "../../diagnostics/diagnostic.js";
|
|
31
|
-
import { crossingOf, isForeignType, isIslandSubclassDecl, markIslandSubclass,
|
|
31
|
+
import { nativeSubclassOfIslandDiag, nodeIslandBoundaryDiag, nodeIslandDataFileDiag, nodeIslandModuleDiag, } from "../../diagnostics/diagnostic.js";
|
|
32
|
+
import { crossingOf, isForeignType, isIslandProgramModule, isIslandSubclassDecl, markIslandSubclass, islandOwnerOfFile, } from "../../node-islands/boundary.js";
|
|
32
33
|
import { stripTypeWrappers } from "./typed-arguments.js";
|
|
33
34
|
import { thenReader } from "./checked-promise-all.js";
|
|
34
35
|
import { dynCompoundValue } from "./lower-exprs.js";
|
|
@@ -108,7 +109,10 @@ export function lowerNodeApiCall(lowerer, call, member) {
|
|
|
108
109
|
const caller = callerPath(call);
|
|
109
110
|
const problem = lowerer.nodeIslandModules.add(caller, specifierNode.text);
|
|
110
111
|
if (problem !== null) {
|
|
111
|
-
lowerer.
|
|
112
|
+
const diag = lowerer.nodeIslandModules.isDataFileProblem(problem)
|
|
113
|
+
? nodeIslandDataFileDiag
|
|
114
|
+
: nodeIslandModuleDiag;
|
|
115
|
+
lowerer.pushDiag(diag(`${surface}: ${problem}`, locOf(specifierNode)));
|
|
112
116
|
throw new PoisonError();
|
|
113
117
|
}
|
|
114
118
|
const specifier = lowerer.lowerExprExpecting(specifierNode, STRING);
|
|
@@ -221,19 +225,59 @@ export function isEsmFile(file) {
|
|
|
221
225
|
dir = parent;
|
|
222
226
|
}
|
|
223
227
|
}
|
|
228
|
+
/** The file a relative (or absolute) specifier names from `fromFile`, as
|
|
229
|
+
* Node's CommonJS/ESM resolution would find it, or null. Extension fallback
|
|
230
|
+
* and directory indexes only: an island module is a file the program
|
|
231
|
+
* already loaded, and `exports` maps stay Node's job. */
|
|
232
|
+
function relativeIslandFile(fromFile, spec) {
|
|
233
|
+
const base = isAbsolute(spec) ? spec : resolve(dirname(fromFile), spec);
|
|
234
|
+
const candidates = [base];
|
|
235
|
+
if (!/\.[cm]?js$/.test(base)) {
|
|
236
|
+
for (const ext of [".js", ".cjs", ".mjs"])
|
|
237
|
+
candidates.push(base + ext);
|
|
238
|
+
}
|
|
239
|
+
for (const ext of [".js", ".cjs", ".mjs"])
|
|
240
|
+
candidates.push(join(base, `index${ext}`));
|
|
241
|
+
for (const candidate of candidates) {
|
|
242
|
+
try {
|
|
243
|
+
if (statSync(candidate).isFile())
|
|
244
|
+
return candidate;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
/* the next candidate */
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
224
252
|
/** The island module file `spec` names from `fromFile`, or null when the
|
|
225
|
-
* specifier does not resolve into an island package. */
|
|
253
|
+
* specifier does not resolve into an island package or module. */
|
|
226
254
|
export function islandModuleFile(islands, fromFile, spec, kind) {
|
|
227
|
-
|
|
228
|
-
if (
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
255
|
+
let file;
|
|
256
|
+
if (isRelativeSpecifier(spec) || isAbsolute(spec)) {
|
|
257
|
+
// A program module the pre-scan put in a Node island (DESIGN.md note 1
|
|
258
|
+
// §3.2): the file itself is the island, resolved as Node would.
|
|
259
|
+
if (islands.modules.size === 0)
|
|
260
|
+
return null;
|
|
261
|
+
const resolved = relativeIslandFile(fromFile, spec);
|
|
262
|
+
if (resolved === null)
|
|
263
|
+
return null;
|
|
264
|
+
if (islandOwnerOfFile(islands, resolved) === null)
|
|
265
|
+
return null;
|
|
266
|
+
file = resolved;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
const js = resolveBareModule(fromFile, spec, "js-only", kind);
|
|
270
|
+
if (js === null)
|
|
271
|
+
return null;
|
|
272
|
+
if (islandOwnerOfFile(islands, js.typesFile) === null)
|
|
273
|
+
return null;
|
|
274
|
+
file = js.typesFile;
|
|
275
|
+
}
|
|
232
276
|
try {
|
|
233
|
-
return realpathSync(
|
|
277
|
+
return realpathSync(file);
|
|
234
278
|
}
|
|
235
279
|
catch {
|
|
236
|
-
return
|
|
280
|
+
return file;
|
|
237
281
|
}
|
|
238
282
|
}
|
|
239
283
|
/** The module global of the island module at `path`, created on first use. */
|
|
@@ -269,7 +313,10 @@ function islandLoadPath(lowerer, path, loc) {
|
|
|
269
313
|
}
|
|
270
314
|
const problem = lowerer.nodeIslandModules.addLoaded(real);
|
|
271
315
|
if (problem !== null) {
|
|
272
|
-
lowerer.
|
|
316
|
+
const diag = lowerer.nodeIslandModules.isDataFileProblem(problem)
|
|
317
|
+
? nodeIslandDataFileDiag
|
|
318
|
+
: nodeIslandModuleDiag;
|
|
319
|
+
lowerer.pushDiag(diag(problem, loc));
|
|
273
320
|
throw new PoisonError();
|
|
274
321
|
}
|
|
275
322
|
lowerer.nodeIslandLoads.push({ literal, path: real });
|
|
@@ -296,8 +343,16 @@ function loadIslandModule(lowerer, path, loc) {
|
|
|
296
343
|
/** A static import's load: `nodeIsland.defer(path, snapshot)`, which the
|
|
297
344
|
* build decides after lowering (node-islands/snapshot.ts, scope-B NI-7):
|
|
298
345
|
* a module proved effect-free at load keeps it with its interface snapshot
|
|
299
|
-
* and evaluates on first use; any other becomes nodeIsland.require.
|
|
346
|
+
* and evaluates on first use; any other becomes nodeIsland.require.
|
|
347
|
+
*
|
|
348
|
+
* A program module that runs in an island loads eagerly
|
|
349
|
+
* (`nodeIsland.require`): deciding a deferral means evaluating the module
|
|
350
|
+
* in the build-time probe, and the build never runs the program's own
|
|
351
|
+
* source. */
|
|
300
352
|
function deferIslandModule(lowerer, path, loc) {
|
|
353
|
+
const islands = lowerer.nodeIslands;
|
|
354
|
+
if (islands !== null && isIslandProgramModule(islands, path))
|
|
355
|
+
return loadIslandModule(lowerer, path, loc);
|
|
301
356
|
return {
|
|
302
357
|
kind: "libCall",
|
|
303
358
|
fn: "nodeIsland.defer",
|
|
@@ -306,9 +361,36 @@ function deferIslandModule(lowerer, path, loc) {
|
|
|
306
361
|
loc,
|
|
307
362
|
};
|
|
308
363
|
}
|
|
364
|
+
/** Whether `node` runs while its module evaluates: no enclosing function,
|
|
365
|
+
* method, accessor, constructor or class member initializer. */
|
|
366
|
+
function runsAtModuleEvaluation(node) {
|
|
367
|
+
for (let n = node.parent; n !== undefined; n = n.parent) {
|
|
368
|
+
if (ts.isSourceFile(n))
|
|
369
|
+
return true;
|
|
370
|
+
if (ts.isFunctionLike(n) || ts.isClassStaticBlockDeclaration(n) || ts.isPropertyDeclaration(n))
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
/** The %init statements that run in `stmt`'s place in its file's %init
|
|
376
|
+
* header (Lowerer.islandImportActions). */
|
|
377
|
+
function islandStatementActions(lowerer, sf, stmt) {
|
|
378
|
+
let byStatement = lowerer.islandImportActions.get(sf);
|
|
379
|
+
if (byStatement === undefined) {
|
|
380
|
+
byStatement = new Map();
|
|
381
|
+
lowerer.islandImportActions.set(sf, byStatement);
|
|
382
|
+
}
|
|
383
|
+
let actions = byStatement.get(stmt);
|
|
384
|
+
if (actions === undefined) {
|
|
385
|
+
actions = [];
|
|
386
|
+
byStatement.set(stmt, actions);
|
|
387
|
+
}
|
|
388
|
+
return actions;
|
|
389
|
+
}
|
|
309
390
|
/** A static import (or re-export) of an island package: loads the module
|
|
310
|
-
* in the importer's %init
|
|
311
|
-
*
|
|
391
|
+
* in the importer's %init header, in the statement's place among the
|
|
392
|
+
* dependencies' %init calls, as Node evaluates it in source order. Returns
|
|
393
|
+
* false when `spec` is not an island module. */
|
|
312
394
|
export function collectIslandImport(lowerer, sf, stmt, spec) {
|
|
313
395
|
const islands = lowerer.nodeIslands;
|
|
314
396
|
if (islands === null)
|
|
@@ -317,14 +399,42 @@ export function collectIslandImport(lowerer, sf, stmt, spec) {
|
|
|
317
399
|
if (path === null)
|
|
318
400
|
return false;
|
|
319
401
|
if (ts.isExportDeclaration(stmt)) {
|
|
320
|
-
|
|
402
|
+
// `export { Type } from "typebox"`: the re-exporting module loads the
|
|
403
|
+
// island module and every name it re-exports binds the island's own
|
|
404
|
+
// export, so importers of this module reach it through the alias chain
|
|
405
|
+
// (islandBindingOf). A namespace or star re-export has no name to bind.
|
|
406
|
+
const clause = stmt.exportClause;
|
|
407
|
+
if (stmt.isTypeOnly || clause === undefined || !ts.isNamedExports(clause)) {
|
|
408
|
+
lowerer.pushDiag(nodeIslandBoundaryDiag(`re-exporting the Node island module '${spec}'`, locOf(stmt)));
|
|
409
|
+
return true;
|
|
410
|
+
}
|
|
411
|
+
lowerer.usesNodeIsland = true;
|
|
412
|
+
const exportLoc = locOf(stmt);
|
|
413
|
+
const exported = islandModuleGlobal(lowerer, path);
|
|
414
|
+
const initActions = islandStatementActions(lowerer, sf, stmt);
|
|
415
|
+
initActions.push({
|
|
416
|
+
kind: "assign",
|
|
417
|
+
localId: exported.global.id,
|
|
418
|
+
value: deferIslandModule(lowerer, path, exportLoc),
|
|
419
|
+
loc: exportLoc,
|
|
420
|
+
});
|
|
421
|
+
for (const el of clause.elements.nodes) {
|
|
422
|
+
if (el.isTypeOnly)
|
|
423
|
+
continue;
|
|
424
|
+
const name = el.propertyName?.text ?? el.name.text;
|
|
425
|
+
// CommonJS named exports are the namespace's snapshot (below).
|
|
426
|
+
if (!exported.esm && name !== "default")
|
|
427
|
+
initActions.push(islandSnapshotAssign(lowerer, exported, name, exportLoc));
|
|
428
|
+
registerIslandReexport(lowerer, stmt, el, name === "default"
|
|
429
|
+
? { kind: "default", module: exported }
|
|
430
|
+
: { kind: "named", module: exported, name });
|
|
431
|
+
}
|
|
321
432
|
return true;
|
|
322
433
|
}
|
|
323
434
|
lowerer.usesNodeIsland = true;
|
|
324
435
|
const loc = locOf(stmt);
|
|
325
436
|
const binding = islandModuleGlobal(lowerer, path);
|
|
326
|
-
const actions = lowerer
|
|
327
|
-
lowerer.jsonInitActions.set(sf, actions);
|
|
437
|
+
const actions = islandStatementActions(lowerer, sf, stmt);
|
|
328
438
|
actions.push({
|
|
329
439
|
kind: "assign",
|
|
330
440
|
localId: binding.global.id,
|
|
@@ -358,31 +468,30 @@ export function collectIslandImport(lowerer, sf, stmt, spec) {
|
|
|
358
468
|
return undefined;
|
|
359
469
|
});
|
|
360
470
|
}
|
|
361
|
-
{
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
let g = binding.snapshots.get(name);
|
|
366
|
-
if (g === undefined) {
|
|
367
|
-
g = {
|
|
368
|
-
id: `%g.island.${lowerer.globalsList.length}`,
|
|
369
|
-
name,
|
|
370
|
-
type: DYN,
|
|
371
|
-
mutable: true,
|
|
372
|
-
};
|
|
373
|
-
lowerer.globalsList.push(g);
|
|
374
|
-
binding.snapshots.set(name, g);
|
|
375
|
-
}
|
|
376
|
-
actions.push({
|
|
377
|
-
kind: "assign",
|
|
378
|
-
localId: g.id,
|
|
379
|
-
value: islandGet(varRef(binding.global.id, DYN, loc), name, loc),
|
|
380
|
-
loc,
|
|
381
|
-
});
|
|
382
|
-
}
|
|
471
|
+
for (const name of snapshotNames) {
|
|
472
|
+
if (name === "default")
|
|
473
|
+
continue;
|
|
474
|
+
actions.push(islandSnapshotAssign(lowerer, binding, name, loc));
|
|
383
475
|
}
|
|
384
476
|
return true;
|
|
385
477
|
}
|
|
478
|
+
/** A CommonJS island name's snapshot global and the %init action that
|
|
479
|
+
* assigns it once the module evaluated (Node's namespace snapshots named
|
|
480
|
+
* exports). */
|
|
481
|
+
function islandSnapshotAssign(lowerer, binding, name, loc) {
|
|
482
|
+
let g = binding.snapshots.get(name);
|
|
483
|
+
if (g === undefined) {
|
|
484
|
+
g = { id: `%g.island.${lowerer.globalsList.length}`, name, type: DYN, mutable: true };
|
|
485
|
+
lowerer.globalsList.push(g);
|
|
486
|
+
binding.snapshots.set(name, g);
|
|
487
|
+
}
|
|
488
|
+
return {
|
|
489
|
+
kind: "assign",
|
|
490
|
+
localId: g.id,
|
|
491
|
+
value: islandGet(varRef(binding.global.id, DYN, loc), name, loc),
|
|
492
|
+
loc,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
386
495
|
function islandGet(target, key, loc) {
|
|
387
496
|
return {
|
|
388
497
|
kind: "libCall",
|
|
@@ -392,6 +501,47 @@ function islandGet(target, key, loc) {
|
|
|
392
501
|
loc,
|
|
393
502
|
};
|
|
394
503
|
}
|
|
504
|
+
/** Records that `specifier`'s exported name binds `binding`: importers of
|
|
505
|
+
* the re-exporting module reach the island's own export through the alias
|
|
506
|
+
* chain, whatever they spell it (`export { Num as NumberSchema }`). The
|
|
507
|
+
* island's export symbol is the key a chain ends on, so it is registered
|
|
508
|
+
* beside the specifier's own symbol. */
|
|
509
|
+
function registerIslandReexport(lowerer, stmt, specifier, binding) {
|
|
510
|
+
const named = lowerer.checker.getSymbolAtLocation(specifier.name);
|
|
511
|
+
if (named !== undefined)
|
|
512
|
+
lowerer.islandReexports.set(named, binding);
|
|
513
|
+
const moduleSpecifier = stmt.moduleSpecifier;
|
|
514
|
+
if (moduleSpecifier === undefined)
|
|
515
|
+
return;
|
|
516
|
+
const moduleSymbol = lowerer.checker.getSymbolAtLocation(moduleSpecifier);
|
|
517
|
+
if (moduleSymbol === undefined)
|
|
518
|
+
return;
|
|
519
|
+
const exported = lowerer.checker.getExportsOfModule(moduleSymbol);
|
|
520
|
+
const found = exported.find((s) => ts.symbolName(s) === (specifier.propertyName?.text ?? specifier.name.text));
|
|
521
|
+
if (found === undefined)
|
|
522
|
+
return;
|
|
523
|
+
lowerer.islandReexports.set(found, binding);
|
|
524
|
+
if ((found.flags & ts.SymbolFlags.Alias) !== 0)
|
|
525
|
+
lowerer.islandReexports.set(lowerer.checker.getAliasedSymbol(found), binding);
|
|
526
|
+
}
|
|
527
|
+
/** The island binding an alias chain reaches, or null: a name re-exported
|
|
528
|
+
* by a native module resolves to the island's export symbol itself. */
|
|
529
|
+
function islandReexportOf(lowerer, symbol) {
|
|
530
|
+
if (symbol === undefined || lowerer.islandReexports.size === 0)
|
|
531
|
+
return null;
|
|
532
|
+
const seen = new Set();
|
|
533
|
+
let s = symbol;
|
|
534
|
+
while (s !== undefined && !seen.has(s)) {
|
|
535
|
+
seen.add(s);
|
|
536
|
+
const bound = lowerer.islandReexports.get(s);
|
|
537
|
+
if (bound !== undefined)
|
|
538
|
+
return bound;
|
|
539
|
+
if ((s.flags & ts.SymbolFlags.Alias) === 0)
|
|
540
|
+
return null;
|
|
541
|
+
s = lowerer.checker.getAliasedSymbol(s);
|
|
542
|
+
}
|
|
543
|
+
return null;
|
|
544
|
+
}
|
|
395
545
|
function moduleSpecifierOf(decl) {
|
|
396
546
|
return ts.isImportDeclaration(decl) && ts.isStringLiteral(decl.moduleSpecifier)
|
|
397
547
|
? decl.moduleSpecifier.text
|
|
@@ -408,6 +558,11 @@ function islandBindingOf(lowerer, ident) {
|
|
|
408
558
|
if (islands === null)
|
|
409
559
|
return null;
|
|
410
560
|
const symbol = lowerer.checker.getSymbolAtLocation(ident);
|
|
561
|
+
// A name a native module re-exports from an island package binds the
|
|
562
|
+
// island's own export: the import's alias chain reaches it.
|
|
563
|
+
const reexport = islandReexportOf(lowerer, symbol);
|
|
564
|
+
if (reexport !== null)
|
|
565
|
+
return reexport;
|
|
411
566
|
const decl = symbol ? symbol.declarations[0] : undefined;
|
|
412
567
|
if (decl === undefined)
|
|
413
568
|
return null;
|
|
@@ -427,8 +582,24 @@ function islandBindingOf(lowerer, ident) {
|
|
|
427
582
|
binding = name === "default" ? "default" : { name };
|
|
428
583
|
}
|
|
429
584
|
else {
|
|
585
|
+
// `const { name } = require("pkg")`: a member of module.exports, read
|
|
586
|
+
// at each use (shortcut: not copied once at the declaration).
|
|
587
|
+
const property = requiredPropertyOf(decl);
|
|
588
|
+
if (property !== null && loadsAtStatement(property.declaration)) {
|
|
589
|
+
const spec = requireInitSpecOf(lowerer, property.declaration);
|
|
590
|
+
if (spec === null)
|
|
591
|
+
return null;
|
|
592
|
+
const file = ts.getSourceFileOfNode(decl).fileName;
|
|
593
|
+
const path = islandModuleFile(islands, file, spec, "require");
|
|
594
|
+
const module = path === null ? undefined : lowerer.islandModules.get(path);
|
|
595
|
+
return module === undefined ? null : { kind: "named", module, name: property.name };
|
|
596
|
+
}
|
|
430
597
|
// `const x = require("pkg")` (a CommonJS module of a native package
|
|
431
|
-
// requiring an island package): x is module.exports.
|
|
598
|
+
// requiring an island package): x is module.exports. Only at the
|
|
599
|
+
// module's top level: a function's own binding is a local.
|
|
600
|
+
const statement = decl.parent?.parent;
|
|
601
|
+
if (statement === undefined || !ts.isSourceFile(statement.parent))
|
|
602
|
+
return null;
|
|
432
603
|
const spec = requireSpecOf(lowerer, decl);
|
|
433
604
|
if (spec === null)
|
|
434
605
|
return null;
|
|
@@ -484,8 +655,16 @@ function fromIsland(lowerer, raw, node) {
|
|
|
484
655
|
if ((tsType.flags & (ts.TypeFlags.Void | ts.TypeFlags.Undefined)) !== 0 && isDiscarded(node))
|
|
485
656
|
return raw;
|
|
486
657
|
const mapped = lowerer.mapTypeOf(tsType);
|
|
487
|
-
if (mapped === null)
|
|
658
|
+
if (mapped === null) {
|
|
659
|
+
// An intersection of containers (`Choice[] & GenChoice[]`: the
|
|
660
|
+
// island's array extended by the caller's own type) has no native
|
|
661
|
+
// representation of its own. Where the program only uses it through
|
|
662
|
+
// island operations it stays a handle, like an array the island does
|
|
663
|
+
// not declare.
|
|
664
|
+
if (containerType(lowerer, tsType) && handleUseOk(lowerer, node))
|
|
665
|
+
return raw;
|
|
488
666
|
boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(tsType)}'`, node);
|
|
667
|
+
}
|
|
489
668
|
if (mapped.kind === "dyn")
|
|
490
669
|
return raw;
|
|
491
670
|
if (mapped.kind === "void")
|
|
@@ -528,7 +707,7 @@ function fromIsland(lowerer, raw, node) {
|
|
|
528
707
|
if (!copiedType(lowerer, mapped) && containerType(lowerer, tsType) && handleUseOk(lowerer, node))
|
|
529
708
|
return raw;
|
|
530
709
|
// Otherwise an array of copied values is a copy (above).
|
|
531
|
-
if (
|
|
710
|
+
if (copyableArrayType(lowerer, mapped)) {
|
|
532
711
|
const copy = {
|
|
533
712
|
kind: "libCall",
|
|
534
713
|
fn: "nodeIsland.copyArrays",
|
|
@@ -538,7 +717,7 @@ function fromIsland(lowerer, raw, node) {
|
|
|
538
717
|
};
|
|
539
718
|
return lowerer.coerceToExpected(copy, mapped);
|
|
540
719
|
}
|
|
541
|
-
if (!copiedType(lowerer, mapped) &&
|
|
720
|
+
if (!copiedType(lowerer, mapped) && copiedRecordType(lowerer, tsType))
|
|
542
721
|
return lowerer.coerceToExpected(raw, mapped);
|
|
543
722
|
if (!copiedType(lowerer, mapped))
|
|
544
723
|
boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(tsType)}' (only primitives and strings are copied; objects of types the island does not declare stay handles from NI-5 on)`, node);
|
|
@@ -550,6 +729,33 @@ function copiedArrayType(lowerer, t) {
|
|
|
550
729
|
return false;
|
|
551
730
|
return copiedType(lowerer, t.elem) || copiedArrayType(lowerer, t.elem);
|
|
552
731
|
}
|
|
732
|
+
/** An array of copied values, or a union of one with null and/or
|
|
733
|
+
* undefined (`string[] | undefined`): the copy converts whatever the
|
|
734
|
+
* island value holds (a non-array crosses as itself, so a nullish value
|
|
735
|
+
* stays nullish) and the checked conversion throws on an element of the
|
|
736
|
+
* wrong type. */
|
|
737
|
+
function copyableArrayType(lowerer, t) {
|
|
738
|
+
if (t.kind !== "union")
|
|
739
|
+
return copiedArrayType(lowerer, t);
|
|
740
|
+
const def = lowerer.unions.get(t.unionId);
|
|
741
|
+
if (def === undefined)
|
|
742
|
+
return false;
|
|
743
|
+
let arrays = 0;
|
|
744
|
+
for (const arm of def.arms) {
|
|
745
|
+
if (arm.kind === "nullT" || arm.kind === "undefinedT")
|
|
746
|
+
continue;
|
|
747
|
+
if (!copiedArrayType(lowerer, arm))
|
|
748
|
+
return false;
|
|
749
|
+
arrays++;
|
|
750
|
+
}
|
|
751
|
+
return arrays > 0;
|
|
752
|
+
}
|
|
753
|
+
/** The IR type an island value crosses as when it is a copyable array
|
|
754
|
+
* (`copyableArrayType`), or null when the declared type is not one. */
|
|
755
|
+
function copyableCrossing(lowerer, node) {
|
|
756
|
+
const mapped = lowerer.mapTypeOf(lowerer.typeOf(node));
|
|
757
|
+
return mapped !== null && copyableArrayType(lowerer, mapped) ? mapped : null;
|
|
758
|
+
}
|
|
553
759
|
/** Whether a value of IR type `t` is copied at the boundary: primitives,
|
|
554
760
|
* strings, null/undefined, and unions of those. */
|
|
555
761
|
function copiedType(lowerer, t) {
|
|
@@ -626,20 +832,56 @@ function undeclaredHandleType(lowerer, type) {
|
|
|
626
832
|
return false;
|
|
627
833
|
return containerType(lowerer, type);
|
|
628
834
|
}
|
|
835
|
+
/** Builtin classes whose native representation is not a JavaScript object
|
|
836
|
+
* (URLSearchParams, Headers, Request, …): an island instance of one has no
|
|
837
|
+
* native counterpart to convert into, so it stays a handle. */
|
|
838
|
+
const BUILTIN_HANDLE_CLASSES = new Set([
|
|
839
|
+
"URL",
|
|
840
|
+
"URLSearchParams",
|
|
841
|
+
"Headers",
|
|
842
|
+
"Request",
|
|
843
|
+
"Response",
|
|
844
|
+
"FormData",
|
|
845
|
+
"Blob",
|
|
846
|
+
"File",
|
|
847
|
+
"AbortController",
|
|
848
|
+
"AbortSignal",
|
|
849
|
+
"ReadableStream",
|
|
850
|
+
"WritableStream",
|
|
851
|
+
"TransformStream",
|
|
852
|
+
"TextEncoder",
|
|
853
|
+
"TextDecoder",
|
|
854
|
+
]);
|
|
855
|
+
/** Whether `type` is one of BUILTIN_HANDLE_CLASSES as declared by the
|
|
856
|
+
* standard library or @types/node (not a program class of the same name). */
|
|
857
|
+
function builtinHandleClass(type) {
|
|
858
|
+
const symbol = type.getSymbol();
|
|
859
|
+
if (symbol === undefined || !BUILTIN_HANDLE_CLASSES.has(String(symbol.escapedName)))
|
|
860
|
+
return false;
|
|
861
|
+
return (symbol.declarations.length > 0 &&
|
|
862
|
+
symbol.declarations.every((d) => ts.getSourceFileOfNode(d).isDeclarationFile));
|
|
863
|
+
}
|
|
629
864
|
/** Arrays, tuples, Maps and Sets (every arm of a union, nullish arms
|
|
630
|
-
* aside)
|
|
865
|
+
* aside), and the builtin classes of builtinHandleClass: the object types
|
|
866
|
+
* an island hands back without declaring them. An intersection of those
|
|
867
|
+
* (`Choice[] & GenChoice[]`) is a container too: it is a value of each. */
|
|
631
868
|
function containerType(lowerer, type) {
|
|
632
869
|
if (type.isUnionType())
|
|
633
870
|
return ts
|
|
634
871
|
.constituentTypes(type)
|
|
635
872
|
.every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
|
|
636
873
|
containerType(lowerer, t));
|
|
874
|
+
if ((type.flags & ts.TypeFlags.Intersection) !== 0)
|
|
875
|
+
return ts
|
|
876
|
+
.constituentTypes(type)
|
|
877
|
+
.every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
|
|
878
|
+
containerType(lowerer, t));
|
|
637
879
|
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
638
880
|
return false;
|
|
639
881
|
if (lowerer.checker.isArrayType(type) || lowerer.checker.isTupleType(type))
|
|
640
882
|
return true;
|
|
641
883
|
const name = type.getSymbol()?.escapedName;
|
|
642
|
-
return name === "Map" || name === "Set";
|
|
884
|
+
return name === "Map" || name === "Set" || builtinHandleClass(type);
|
|
643
885
|
}
|
|
644
886
|
/** A member read, call, index or `new` whose receiver or callee is an
|
|
645
887
|
* island value. */
|
|
@@ -890,8 +1132,11 @@ export function classConstructHelper(lowerer, ident, loc) {
|
|
|
890
1132
|
for (let c = info; c; c = c.base)
|
|
891
1133
|
if (c.def.baseValueGlobal)
|
|
892
1134
|
return null;
|
|
893
|
-
|
|
894
|
-
|
|
1135
|
+
/* A ctor-less Error subclass keeps the builtin base's constructor
|
|
1136
|
+
* parameters — the (message?, options?) checked-dynamic pair the
|
|
1137
|
+
* synthesized constructor forwards — so its helper constructs exactly
|
|
1138
|
+
* what native `new C(...)` does. Only an explicit constructor with
|
|
1139
|
+
* another shape falls through the mode check below. */
|
|
895
1140
|
const shapes = info.ctorParams;
|
|
896
1141
|
if (shapes.some((s) => s.mode !== "required" && s.mode !== "omittable"))
|
|
897
1142
|
return null;
|
|
@@ -934,7 +1179,11 @@ export function classConstructHelper(lowerer, ident, loc) {
|
|
|
934
1179
|
/** Native values NI-5 exports into the island by reference: functions,
|
|
935
1180
|
* promises, and object types other than arrays, tuples, Maps and Sets
|
|
936
1181
|
* (records, interfaces, class instances). A union qualifies when every
|
|
937
|
-
* arm does or is copied
|
|
1182
|
+
* arm does or is copied, and an intersection of them qualifies: a merged
|
|
1183
|
+
* generic record (`Omit<Base, "k"> & Extras`, the `Type.Object(props)`
|
|
1184
|
+
* shape) is one native object, and the island reads the program's own
|
|
1185
|
+
* object, not a copy of it. An intersection with a primitive arm
|
|
1186
|
+
* (`string & {brand}`) is a primitive value, which the runtime copies. */
|
|
938
1187
|
function exportedByReference(lowerer, type) {
|
|
939
1188
|
const checker = lowerer.checker;
|
|
940
1189
|
if (type.isUnionType())
|
|
@@ -942,6 +1191,11 @@ function exportedByReference(lowerer, type) {
|
|
|
942
1191
|
.constituentTypes(type)
|
|
943
1192
|
.every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
|
|
944
1193
|
exportedByReference(lowerer, t));
|
|
1194
|
+
if ((type.flags & ts.TypeFlags.Intersection) !== 0)
|
|
1195
|
+
return ts
|
|
1196
|
+
.constituentTypes(type)
|
|
1197
|
+
.every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
|
|
1198
|
+
exportedByReference(lowerer, t));
|
|
945
1199
|
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
946
1200
|
return false;
|
|
947
1201
|
// Arrays and tuples cross as Proxies over the native array (NI-5b).
|
|
@@ -951,6 +1205,21 @@ function exportedByReference(lowerer, type) {
|
|
|
951
1205
|
return false;
|
|
952
1206
|
return true;
|
|
953
1207
|
}
|
|
1208
|
+
/** A record type an island object crosses OUT into as a deep checked
|
|
1209
|
+
* copy: the object types exportedByReference names, and intersections of
|
|
1210
|
+
* them — a mapped pair (`{[K in Fg]: V} & {[K in Bg]?: V}`) or a merged
|
|
1211
|
+
* generic record (`Omit<Base, "k"> & Extras`) is one record, so the
|
|
1212
|
+
* island's object converts into the native one the same way a plain
|
|
1213
|
+
* record's does. An intersection with a primitive arm (`string & {brand}`)
|
|
1214
|
+
* is a primitive value, which copies as its arm. */
|
|
1215
|
+
function copiedRecordType(lowerer, type) {
|
|
1216
|
+
if ((type.flags & ts.TypeFlags.Intersection) !== 0)
|
|
1217
|
+
return ts
|
|
1218
|
+
.constituentTypes(type)
|
|
1219
|
+
.every((t) => (t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined | ts.TypeFlags.Void)) !== 0 ||
|
|
1220
|
+
copiedRecordType(lowerer, t));
|
|
1221
|
+
return exportedByReference(lowerer, type);
|
|
1222
|
+
}
|
|
954
1223
|
/** A fresh object or array literal crosses as a copy (a plain dyn object
|
|
955
1224
|
* or array the runtime copies into V8): nothing native can alias it. Its
|
|
956
1225
|
* members cross by the same rules (toIsland). */
|
|
@@ -1135,6 +1404,16 @@ function lowerIslandChain(lowerer, expr, chain, loc) {
|
|
|
1135
1404
|
const result = fromIsland(lowerer, value, expr);
|
|
1136
1405
|
return stmts.length > 0 ? { kind: "seqExpr", stmts, result, type: result.type, loc } : result;
|
|
1137
1406
|
}
|
|
1407
|
+
/** The local an island handle binding reads here: its own binding, retyped
|
|
1408
|
+
* checked-dynamic, or, inside a closure, the capture of an enclosing
|
|
1409
|
+
* function's binding, which resolveLocal registers. */
|
|
1410
|
+
function islandHandleLocal(lowerer, ident) {
|
|
1411
|
+
const origin = lowerer.peekLocal(ident);
|
|
1412
|
+
if (origin === null)
|
|
1413
|
+
return null;
|
|
1414
|
+
origin.type = DYN;
|
|
1415
|
+
return lowerer.resolveLocal(ident);
|
|
1416
|
+
}
|
|
1138
1417
|
/** Expressions on island values (the lowerExpr hook; null: not an island
|
|
1139
1418
|
* expression, the ordinary lowering applies). */
|
|
1140
1419
|
export function lowerIslandExpr(lowerer, expr) {
|
|
@@ -1151,14 +1430,24 @@ export function lowerIslandExpr(lowerer, expr) {
|
|
|
1151
1430
|
if (b === null) {
|
|
1152
1431
|
if (!islandHandleBinding(lowerer, expr))
|
|
1153
1432
|
return null;
|
|
1154
|
-
|
|
1433
|
+
// The DECLARED type decides the crossing, not the use: an island
|
|
1434
|
+
// handle whose type is an array of copied values crosses as a copy of
|
|
1435
|
+
// its elements wherever native code needs a native value, and the
|
|
1436
|
+
// checked conversion throws on an element of the wrong type. Every
|
|
1437
|
+
// other native use stays refused (the value is a handle).
|
|
1438
|
+
const ok = handleUseOk(lowerer, expr);
|
|
1439
|
+
const copy = ok ? null : copyableCrossing(lowerer, expr);
|
|
1440
|
+
if (!ok && copy === null)
|
|
1155
1441
|
boundaryFail(lowerer, `an island value of type '${lowerer.checker.typeToString(lowerer.typeOf(expr))}' used as a native value (island arrays, Maps and Sets stay handles: read members, call methods, index or spread them)`, expr);
|
|
1156
1442
|
lowerer.usesNodeIsland = true;
|
|
1157
|
-
const
|
|
1158
|
-
if (
|
|
1443
|
+
const slot = lowerer.globalOf(expr) ?? islandHandleLocal(lowerer, expr);
|
|
1444
|
+
if (slot === null)
|
|
1159
1445
|
return null; // the local is declared dyn
|
|
1160
|
-
|
|
1161
|
-
|
|
1446
|
+
slot.type = DYN;
|
|
1447
|
+
const ref = varRef(slot.id, DYN, loc);
|
|
1448
|
+
return copy === null
|
|
1449
|
+
? ref
|
|
1450
|
+
: lowerer.coerceToExpected({ kind: "libCall", fn: "nodeIsland.copyArrays", args: [ref], type: DYN, loc }, copy);
|
|
1162
1451
|
}
|
|
1163
1452
|
lowerer.usesNodeIsland = true;
|
|
1164
1453
|
return fromIsland(lowerer, islandBindingValue(lowerer, b, expr, loc), expr);
|
|
@@ -1196,7 +1485,9 @@ export function lowerIslandExpr(lowerer, expr) {
|
|
|
1196
1485
|
if (!isForeignExpr(lowerer, expr.expression))
|
|
1197
1486
|
return null;
|
|
1198
1487
|
lowerer.usesNodeIsland = true;
|
|
1199
|
-
|
|
1488
|
+
// `(p as V)[k]`: an assertion on a handle is a view, never a conversion
|
|
1489
|
+
// (the read meets the member's declared type in fromIsland below).
|
|
1490
|
+
const target = lowerer.lowerExpr(stripTypeWrappers(expr.expression));
|
|
1200
1491
|
const key = toIsland(lowerer, expr.argumentExpression);
|
|
1201
1492
|
return fromIsland(lowerer, { kind: "libCall", fn: "nodeIsland.getKey", args: [target, key], type: DYN, loc }, expr);
|
|
1202
1493
|
}
|
|
@@ -1372,7 +1663,9 @@ export function lowerIslandExpr(lowerer, expr) {
|
|
|
1372
1663
|
stmts.push({ kind: "varDecl", localId: local.id, init, loc });
|
|
1373
1664
|
return varRef(local.id, type, loc);
|
|
1374
1665
|
};
|
|
1375
|
-
|
|
1666
|
+
// `(p as V).k = v`: write the HANDLE the assertion views, not the
|
|
1667
|
+
// asserted record the conversion would build.
|
|
1668
|
+
const target = lowerer.lowerExpr(stripTypeWrappers(left.expression));
|
|
1376
1669
|
const receiver = hold("%islandSetTarget", target, target.type);
|
|
1377
1670
|
const key = ts.isPropertyAccessExpression(left)
|
|
1378
1671
|
? null
|
|
@@ -1435,7 +1728,8 @@ function islandCompoundAssign(lowerer, expr, left, op, loc) {
|
|
|
1435
1728
|
stmts.push({ kind: "varDecl", localId: local.id, init, loc });
|
|
1436
1729
|
return varRef(local.id, DYN, loc);
|
|
1437
1730
|
};
|
|
1438
|
-
|
|
1731
|
+
// `(p as V).k op= v`: the view is erased, so the handle is the receiver.
|
|
1732
|
+
const target = hold("%islandObj", lowerer.coerceToExpected(lowerer.lowerExpr(stripTypeWrappers(left.expression)), DYN));
|
|
1439
1733
|
const key = ts.isPropertyAccessExpression(left)
|
|
1440
1734
|
? null
|
|
1441
1735
|
: hold("%islandKey", toIsland(lowerer, left.argumentExpression));
|
|
@@ -1487,7 +1781,22 @@ function islandReceiver(lowerer, receiver, member, loc, call = false) {
|
|
|
1487
1781
|
return { value: exports };
|
|
1488
1782
|
}
|
|
1489
1783
|
}
|
|
1490
|
-
|
|
1784
|
+
// `(p as V).k`: the assertion is a view of `p`'s handle, not a
|
|
1785
|
+
// conversion of it (the read meets the member's type in fromIsland).
|
|
1786
|
+
return { value: lowerer.coerceToExpected(lowerer.lowerExpr(inner), FOREIGN) };
|
|
1787
|
+
}
|
|
1788
|
+
/** Whether `require(spec)` in `file` loads an island module. */
|
|
1789
|
+
export function isIslandRequireSpec(lowerer, file, spec) {
|
|
1790
|
+
const islands = lowerer.nodeIslands;
|
|
1791
|
+
return islands !== null && islandModuleFile(islands, file, spec, "require") !== null;
|
|
1792
|
+
}
|
|
1793
|
+
/** `require("<island pkg>")` in a CommonJS module, at a call no other
|
|
1794
|
+
* lowering claimed (inside a function, or as a subexpression): the island
|
|
1795
|
+
* module loads at the call. Null when the package is not an island. */
|
|
1796
|
+
export function lowerIslandRequireCall(lowerer, call) {
|
|
1797
|
+
if (lowerer.nodeIslands === null)
|
|
1798
|
+
return null;
|
|
1799
|
+
return lowerIslandLoadCall(lowerer, call, locOf(call)) ?? null;
|
|
1491
1800
|
}
|
|
1492
1801
|
/** `require("pkg")` (the global require, anywhere) and `import("pkg")` of
|
|
1493
1802
|
* an island module: load it at the call. Undefined: not such a call. */
|
|
@@ -1518,7 +1827,14 @@ function lowerIslandLoadCall(lowerer, expr, loc) {
|
|
|
1518
1827
|
loc,
|
|
1519
1828
|
};
|
|
1520
1829
|
}
|
|
1521
|
-
|
|
1830
|
+
// A require() the module's own evaluation runs (not inside a function or
|
|
1831
|
+
// class body) loads the island exactly when a static import would: it is
|
|
1832
|
+
// deferred the same way (scope-B NI-7d), so a native package's top-level
|
|
1833
|
+
// `const x = require("<island>")` does not start Node at boot.
|
|
1834
|
+
const load = runsAtModuleEvaluation(expr)
|
|
1835
|
+
? deferIslandModule(lowerer, path, loc)
|
|
1836
|
+
: loadIslandModule(lowerer, path, loc);
|
|
1837
|
+
return fromIsland(lowerer, load, expr);
|
|
1522
1838
|
}
|
|
1523
1839
|
/* ── native classes extending island classes (scope-B NI-5b) ───────────
|
|
1524
1840
|
* `class Sub extends IslandBase { ... }` at module top level: the class is
|
|
@@ -1808,14 +2124,89 @@ function plainLiteral(node) {
|
|
|
1808
2124
|
/** The specifier of `x = require("spec")` (a variable declaration binding
|
|
1809
2125
|
* an identifier to a literal require), or null. */
|
|
1810
2126
|
function requireSpecOf(lowerer, decl) {
|
|
1811
|
-
if (!ts.isVariableDeclaration(decl) ||
|
|
1812
|
-
!ts.isIdentifier(decl.name) ||
|
|
1813
|
-
decl.initializer === undefined)
|
|
2127
|
+
if (!ts.isVariableDeclaration(decl) || !ts.isIdentifier(decl.name))
|
|
1814
2128
|
return null;
|
|
1815
2129
|
// Only a const keeps the module: a let or var can be reassigned.
|
|
1816
2130
|
const list = decl.parent;
|
|
1817
2131
|
if (!ts.isVariableDeclarationList(list) || (list.flags & ts.NodeFlags.Const) === 0)
|
|
1818
2132
|
return null;
|
|
2133
|
+
return requireInitSpecOf(lowerer, decl);
|
|
2134
|
+
}
|
|
2135
|
+
/** The property a destructured CommonJS require binds: `name` in
|
|
2136
|
+
* `const { name } = require("spec")` or `const { name: local } = …`, with
|
|
2137
|
+
* the declaration. Rest elements, defaults and nested patterns are null. */
|
|
2138
|
+
function requiredPropertyOf(decl) {
|
|
2139
|
+
if (!ts.isBindingElement(decl) || decl.dotDotDotToken || decl.initializer)
|
|
2140
|
+
return null;
|
|
2141
|
+
if (!ts.isIdentifier(decl.name))
|
|
2142
|
+
return null;
|
|
2143
|
+
const pattern = decl.parent;
|
|
2144
|
+
if (pattern === undefined || !ts.isObjectBindingPattern(pattern))
|
|
2145
|
+
return null;
|
|
2146
|
+
const declaration = pattern.parent;
|
|
2147
|
+
if (declaration === undefined || !ts.isVariableDeclaration(declaration))
|
|
2148
|
+
return null;
|
|
2149
|
+
const key = decl.propertyName;
|
|
2150
|
+
const name = key === undefined
|
|
2151
|
+
? decl.name.text
|
|
2152
|
+
: ts.isIdentifier(key) || ts.isStringLiteral(key)
|
|
2153
|
+
? key.text
|
|
2154
|
+
: null;
|
|
2155
|
+
return name === null ? null : { name, declaration };
|
|
2156
|
+
}
|
|
2157
|
+
/** Whether every element of `const { … } = require("<island>")` binds a
|
|
2158
|
+
* plain member (requiredPropertyOf): only then do the names read the
|
|
2159
|
+
* module global; other patterns keep the ordinary lowering. */
|
|
2160
|
+
function islandPatternBindable(pattern) {
|
|
2161
|
+
return pattern.elements.nodes.every((e) => requiredPropertyOf(e) !== null);
|
|
2162
|
+
}
|
|
2163
|
+
/** Whether the top-level declaration `decl` of a JavaScript module loads
|
|
2164
|
+
* its island module at the statement (lowerIslandRequireAtStatement)
|
|
2165
|
+
* rather than in the module's %init prelude: `const` declarations binding
|
|
2166
|
+
* an identifier or a plain object pattern. Reads before the statement are
|
|
2167
|
+
* TDZ errors in Node, so the binding is never observed unassigned. `let`
|
|
2168
|
+
* and `var` bindings can be reassigned: they keep the ordinary lowering. */
|
|
2169
|
+
function loadsAtStatement(decl) {
|
|
2170
|
+
const list = decl.parent;
|
|
2171
|
+
if (list === undefined || !ts.isVariableDeclarationList(list))
|
|
2172
|
+
return false;
|
|
2173
|
+
if ((list.flags & ts.NodeFlags.Const) === 0)
|
|
2174
|
+
return false;
|
|
2175
|
+
if (!isJsSourceFile(ts.getSourceFileOfNode(decl)))
|
|
2176
|
+
return false;
|
|
2177
|
+
if (ts.isIdentifier(decl.name))
|
|
2178
|
+
return true;
|
|
2179
|
+
return ts.isObjectBindingPattern(decl.name) && islandPatternBindable(decl.name);
|
|
2180
|
+
}
|
|
2181
|
+
/** The top-level statement `const x = require("<island>")` or `const { a,
|
|
2182
|
+
* b: c } = require("<island>")` of a JavaScript module: assigns the island
|
|
2183
|
+
* module (deferred like any top-level require) to its module global at the
|
|
2184
|
+
* statement's position, so writes before it (`process.env.NODE_ENV = …`)
|
|
2185
|
+
* are visible to the module's evaluation, as in Node; `x` is the module,
|
|
2186
|
+
* `a` and `c` read its members at each use (shortcut: not copied once at
|
|
2187
|
+
* the declaration). Null for any other declaration. */
|
|
2188
|
+
export function lowerIslandRequireAtStatement(lowerer, decl) {
|
|
2189
|
+
const islands = lowerer.nodeIslands;
|
|
2190
|
+
if (islands === null || !loadsAtStatement(decl))
|
|
2191
|
+
return null;
|
|
2192
|
+
const spec = requireInitSpecOf(lowerer, decl);
|
|
2193
|
+
if (spec === null)
|
|
2194
|
+
return null;
|
|
2195
|
+
const path = islandModuleFile(islands, ts.getSourceFileOfNode(decl).fileName, spec, "require");
|
|
2196
|
+
const module = path === null ? undefined : lowerer.islandModules.get(path);
|
|
2197
|
+
if (path === null || module === undefined)
|
|
2198
|
+
return null;
|
|
2199
|
+
const loc = locOf(decl);
|
|
2200
|
+
const load = runsAtModuleEvaluation(decl)
|
|
2201
|
+
? deferIslandModule(lowerer, path, loc)
|
|
2202
|
+
: loadIslandModule(lowerer, path, loc);
|
|
2203
|
+
return { kind: "assign", localId: module.global.id, value: load, loc };
|
|
2204
|
+
}
|
|
2205
|
+
/** The specifier of a variable declaration initialized with a literal
|
|
2206
|
+
* `require("spec")`, whatever its binding name or pattern, or null. */
|
|
2207
|
+
function requireInitSpecOf(lowerer, decl) {
|
|
2208
|
+
if (decl.initializer === undefined)
|
|
2209
|
+
return null;
|
|
1819
2210
|
let init = decl.initializer;
|
|
1820
2211
|
while (ts.isParenthesizedExpression(init))
|
|
1821
2212
|
init = init.expression;
|
|
@@ -1835,7 +2226,9 @@ function requireSpecOf(lowerer, decl) {
|
|
|
1835
2226
|
/** Top-level `const x = require("pkg")` statements of island packages in a
|
|
1836
2227
|
* compiled module (a native package requiring an island package): load the
|
|
1837
2228
|
* island module in the module's %init prelude (shortcut: before the body,
|
|
1838
|
-
* not at the statement
|
|
2229
|
+
* not at the statement; JavaScript `const` declarations load at the
|
|
2230
|
+
* statement instead, loadsAtStatement), deferred exactly like a static import (scope-B
|
|
2231
|
+
* NI-7d: the build decides from the probe, stubs stand in until first use). */
|
|
1839
2232
|
export function collectIslandRequires(lowerer, sf) {
|
|
1840
2233
|
const islands = lowerer.nodeIslands;
|
|
1841
2234
|
if (islands === null)
|
|
@@ -1844,6 +2237,18 @@ export function collectIslandRequires(lowerer, sf) {
|
|
|
1844
2237
|
if (!ts.isVariableStatement(stmt))
|
|
1845
2238
|
continue;
|
|
1846
2239
|
for (const decl of stmt.declarationList.declarations.nodes) {
|
|
2240
|
+
// JavaScript `const` requires: the module global exists from
|
|
2241
|
+
// here on; the statement itself loads the module at its position
|
|
2242
|
+
// (lowerIslandRequireAtStatement).
|
|
2243
|
+
if (loadsAtStatement(decl)) {
|
|
2244
|
+
const spec = requireInitSpecOf(lowerer, decl);
|
|
2245
|
+
const path = spec === null ? null : islandModuleFile(islands, sf.fileName, spec, "require");
|
|
2246
|
+
if (path !== null) {
|
|
2247
|
+
lowerer.usesNodeIsland = true;
|
|
2248
|
+
islandModuleGlobal(lowerer, path);
|
|
2249
|
+
}
|
|
2250
|
+
continue;
|
|
2251
|
+
}
|
|
1847
2252
|
const spec = requireSpecOf(lowerer, decl);
|
|
1848
2253
|
if (spec === null)
|
|
1849
2254
|
continue;
|
|
@@ -1858,7 +2263,7 @@ export function collectIslandRequires(lowerer, sf) {
|
|
|
1858
2263
|
actions.push({
|
|
1859
2264
|
kind: "assign",
|
|
1860
2265
|
localId: binding.global.id,
|
|
1861
|
-
value:
|
|
2266
|
+
value: deferIslandModule(lowerer, path, loc),
|
|
1862
2267
|
loc,
|
|
1863
2268
|
});
|
|
1864
2269
|
}
|