@scriptc/compiler 0.4.8 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ambient/node-fallback/buffer.d.ts +2 -0
- package/ambient/node-fallback/child_process.d.ts +9 -3
- package/ambient/node-fallback/dns-promises.d.ts +25 -0
- package/ambient/node-fallback/dns.d.ts +29 -0
- package/ambient/node-fallback/test.d.ts +7 -0
- package/ambient/scriptc-node-fallback.d.ts +145 -2
- package/ambient/scriptc-overrides.d.ts +22 -13
- package/dist/backend/build-cache.d.ts +1 -1
- package/dist/backend/build-cache.js +1 -1
- package/dist/backend/build-cache.js.map +1 -1
- package/dist/backend/cache-root.d.ts +7 -0
- package/dist/backend/cache-root.js +27 -0
- package/dist/backend/cache-root.js.map +1 -1
- package/dist/backend/executable-features.js +5 -1
- package/dist/backend/executable-features.js.map +1 -1
- package/dist/backend/link-plan.js +7 -1
- package/dist/backend/link-plan.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.d.ts +12 -1
- package/dist/backend/llvm/bytes-loop-versions.js +107 -30
- package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
- package/dist/backend/llvm/bytes-loop-versions.test.js +96 -0
- package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
- package/dist/backend/llvm/checked-value-lifetimes.js +1 -0
- package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
- package/dist/backend/llvm/classes.d.ts +16 -5
- package/dist/backend/llvm/classes.js +34 -6
- package/dist/backend/llvm/classes.js.map +1 -1
- package/dist/backend/llvm/classes.test.js +21 -2
- package/dist/backend/llvm/classes.test.js.map +1 -1
- package/dist/backend/llvm/common.d.ts +9 -0
- package/dist/backend/llvm/common.js +9 -0
- package/dist/backend/llvm/common.js.map +1 -1
- package/dist/backend/llvm/cpu-dispatch.d.ts +36 -2
- package/dist/backend/llvm/cpu-dispatch.js +96 -2
- package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +5 -2
- package/dist/backend/llvm/dense-array-access.js +16 -12
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.test.js +3 -1
- package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +24 -0
- package/dist/backend/llvm/dyn.js +117 -3
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emit-function.js +6 -0
- package/dist/backend/llvm/emit-function.js.map +1 -1
- package/dist/backend/llvm/emit-journal.d.ts +1 -0
- package/dist/backend/llvm/emit-journal.js.map +1 -1
- package/dist/backend/llvm/emit-module.js +48 -5
- package/dist/backend/llvm/emit-module.js.map +1 -1
- package/dist/backend/llvm/emit-module.test.js +41 -0
- package/dist/backend/llvm/emit-module.test.js.map +1 -1
- package/dist/backend/llvm/emit-statements.js +11 -0
- package/dist/backend/llvm/emit-statements.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +87 -7
- package/dist/backend/llvm/emitter.js +136 -15
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +28 -6
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +19 -5
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-dynamic.js +29 -1
- package/dist/backend/llvm/expr-dynamic.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +104 -6
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-records.js +15 -1
- package/dist/backend/llvm/expr-records.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +53 -5
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/inline-arrays.js +1 -1
- package/dist/backend/llvm/inline-arrays.js.map +1 -1
- package/dist/backend/llvm/js-ic.js +126 -2
- package/dist/backend/llvm/js-ic.js.map +1 -1
- package/dist/backend/llvm/lanes.d.ts +38 -0
- package/dist/backend/llvm/lanes.js +778 -0
- package/dist/backend/llvm/lanes.js.map +1 -0
- package/dist/backend/llvm/lanes.test.d.ts +1 -0
- package/dist/backend/llvm/lanes.test.js +402 -0
- package/dist/backend/llvm/lanes.test.js.map +1 -0
- package/dist/backend/llvm/lib-dispatch.js +9 -4
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-network.js +20 -0
- package/dist/backend/llvm/lib-network.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +27 -0
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-test.js +11 -0
- package/dist/backend/llvm/lib-test.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +2 -2
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.js +8 -2
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/nullable-unions.js +5 -2
- package/dist/backend/llvm/nullable-unions.js.map +1 -1
- package/dist/backend/llvm/publish.d.ts +3 -0
- package/dist/backend/llvm/publish.js +2 -2
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/reference-writes.js +1 -0
- package/dist/backend/llvm/reference-writes.js.map +1 -1
- package/dist/backend/llvm/region-groups.js +43 -4
- package/dist/backend/llvm/region-groups.js.map +1 -1
- package/dist/backend/llvm/region-groups.test.js +79 -0
- package/dist/backend/llvm/region-groups.test.js.map +1 -1
- package/dist/backend/llvm/runtime-registries.test.js +32 -1
- package/dist/backend/llvm/runtime-registries.test.js.map +1 -1
- package/dist/backend/llvm/shapes.js +10 -1
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/string-reads.d.ts +1 -1
- package/dist/backend/llvm/string-reads.js +1 -1
- package/dist/backend/llvm/string-reads.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.js +24 -2
- package/dist/backend/llvm/unwind-abi.js.map +1 -1
- package/dist/backend/llvm/unwind-abi.test.js +38 -0
- package/dist/backend/llvm/unwind-abi.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +3 -0
- package/dist/backend/llvm/walkers.js +20 -2
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +15 -3
- package/dist/backend/native/executable.js +19 -5
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/native-codegen-core.d.ts +20 -0
- package/dist/backend/native-codegen-core.js +15 -0
- package/dist/backend/native-codegen-core.js.map +1 -1
- package/dist/backend/native-codegen.d.ts +5 -0
- package/dist/backend/native-codegen.js +62 -8
- package/dist/backend/native-codegen.js.map +1 -1
- package/dist/backend/native-codegen.test.js +48 -8
- package/dist/backend/native-codegen.test.js.map +1 -1
- package/dist/backend/native-link-info-core.d.ts +27 -3
- package/dist/backend/native-link-info-core.js.map +1 -1
- package/dist/backend/native-link-info.test.js +17 -1
- package/dist/backend/native-link-info.test.js.map +1 -1
- package/dist/backend/native-toolchain.d.ts +1 -1
- package/dist/backend/native-toolchain.js +1 -1
- package/dist/backend/native-toolchain.js.map +1 -1
- package/dist/backend/native-toolchain.test.js +14 -1
- package/dist/backend/native-toolchain.test.js.map +1 -1
- package/dist/backend/runtime-pack-core.d.ts +9 -3
- package/dist/backend/runtime-pack-core.js +6 -1
- package/dist/backend/runtime-pack-core.js.map +1 -1
- package/dist/backend/runtime-pack.test.js +32 -1
- package/dist/backend/runtime-pack.test.js.map +1 -1
- package/dist/backend/targets.d.ts +9 -1
- package/dist/backend/targets.js +11 -2
- package/dist/backend/targets.js.map +1 -1
- package/dist/backend/targets.test.js +6 -0
- package/dist/backend/targets.test.js.map +1 -1
- package/dist/cli/command.js +15 -1
- package/dist/cli/command.js.map +1 -1
- package/dist/cli/host.d.ts +6 -0
- package/dist/cli/mcp.d.ts +72 -0
- package/dist/cli/mcp.js +601 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/mcp.test.d.ts +1 -0
- package/dist/cli/mcp.test.js +380 -0
- package/dist/cli/mcp.test.js.map +1 -0
- package/dist/cli/output-options.d.ts +1 -0
- package/dist/cli/output-options.js +3 -0
- package/dist/cli/output-options.js.map +1 -1
- package/dist/cli/usage.d.ts +51 -1
- package/dist/cli/usage.js +709 -186
- package/dist/cli/usage.js.map +1 -1
- package/dist/compat/fetch-profile.js +9 -4
- package/dist/compat/fetch-profile.js.map +1 -1
- package/dist/compile-types.d.ts +17 -0
- package/dist/coverage/report.d.ts +5 -9
- package/dist/coverage/report.js.map +1 -1
- package/dist/executable/executable-cache.d.ts +17 -3
- package/dist/executable/executable-cache.js +17 -3
- package/dist/executable/executable-cache.js.map +1 -1
- package/dist/executable/prepare.js +87 -10
- package/dist/executable/prepare.js.map +1 -1
- package/dist/frontend/analysis.js +3 -2
- package/dist/frontend/analysis.js.map +1 -1
- package/dist/frontend/canon-map.js +13 -8
- package/dist/frontend/canon-map.js.map +1 -1
- package/dist/frontend/decl-projection.d.ts +18 -0
- package/dist/frontend/decl-projection.js +90 -22
- package/dist/frontend/decl-projection.js.map +1 -1
- package/dist/frontend/decl-projection.test.js +47 -1
- package/dist/frontend/decl-projection.test.js.map +1 -1
- package/dist/frontend/default-library.d.ts +10 -0
- package/dist/frontend/default-library.js +43 -0
- package/dist/frontend/default-library.js.map +1 -0
- package/dist/frontend/fork-target.js +54 -9
- package/dist/frontend/fork-target.js.map +1 -1
- package/dist/frontend/fork-target.test.js +82 -0
- package/dist/frontend/fork-target.test.js.map +1 -1
- package/dist/frontend/inferred-js-diagnostics.test.js +73 -0
- package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
- package/dist/frontend/lowering/abstract-equality.d.ts +2 -1
- package/dist/frontend/lowering/abstract-equality.js +7 -1
- package/dist/frontend/lowering/abstract-equality.js.map +1 -1
- package/dist/frontend/lowering/array-values.js +2 -2
- package/dist/frontend/lowering/array-values.js.map +1 -1
- package/dist/frontend/lowering/assertion-members.js +52 -2
- package/dist/frontend/lowering/assertion-members.js.map +1 -1
- package/dist/frontend/lowering/builtin-namespaces.d.ts +5 -0
- package/dist/frontend/lowering/builtin-namespaces.js +19 -12
- package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +42 -6
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process.d.ts +12 -11
- package/dist/frontend/lowering/builtins/child-process.js +235 -38
- package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
- package/dist/frontend/lowering/builtins/compression.d.ts +6 -1
- package/dist/frontend/lowering/builtins/compression.js +3 -3
- package/dist/frontend/lowering/builtins/compression.js.map +1 -1
- package/dist/frontend/lowering/builtins/constants.js +2 -2
- package/dist/frontend/lowering/builtins/constants.js.map +1 -1
- package/dist/frontend/lowering/builtins/crypto.d.ts +3 -1
- package/dist/frontend/lowering/builtins/crypto.js +9 -1
- package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
- package/dist/frontend/lowering/builtins/dates.js +26 -6
- package/dist/frontend/lowering/builtins/dates.js.map +1 -1
- package/dist/frontend/lowering/builtins/environment.d.ts +13 -1
- package/dist/frontend/lowering/builtins/environment.js +15 -4
- package/dist/frontend/lowering/builtins/environment.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-bindings.d.ts +33 -0
- package/dist/frontend/lowering/builtins/module-bindings.js +213 -11
- package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
- package/dist/frontend/lowering/builtins/module-resolution.d.ts +9 -2
- package/dist/frontend/lowering/builtins/module-resolution.js +187 -19
- package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
- package/dist/frontend/lowering/builtins/performance.js +1 -1
- package/dist/frontend/lowering/builtins/performance.js.map +1 -1
- package/dist/frontend/lowering/builtins/process.js +40 -2
- package/dist/frontend/lowering/builtins/process.js.map +1 -1
- package/dist/frontend/lowering/builtins/promises.js +33 -0
- package/dist/frontend/lowering/builtins/promises.js.map +1 -1
- package/dist/frontend/lowering/builtins/readline.d.ts +9 -5
- package/dist/frontend/lowering/builtins/readline.js +184 -75
- package/dist/frontend/lowering/builtins/readline.js.map +1 -1
- package/dist/frontend/lowering/builtins/url.d.ts +4 -0
- package/dist/frontend/lowering/builtins/url.js +6 -0
- package/dist/frontend/lowering/builtins/url.js.map +1 -1
- package/dist/frontend/lowering/call-arguments.js +15 -0
- package/dist/frontend/lowering/call-arguments.js.map +1 -1
- package/dist/frontend/lowering/callable-properties.d.ts +34 -0
- package/dist/frontend/lowering/callable-properties.js +210 -0
- package/dist/frontend/lowering/callable-properties.js.map +1 -0
- package/dist/frontend/lowering/cjs-inline-require.d.ts +16 -0
- package/dist/frontend/lowering/cjs-inline-require.js +105 -0
- package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
- package/dist/frontend/lowering/cjs-inline-require.test.d.ts +1 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js +61 -0
- package/dist/frontend/lowering/cjs-inline-require.test.js.map +1 -0
- package/dist/frontend/lowering/class-dynamic-dispatch.js +82 -2
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/class-protocols.d.ts +57 -4
- package/dist/frontend/lowering/class-protocols.js +597 -30
- package/dist/frontend/lowering/class-protocols.js.map +1 -1
- package/dist/frontend/lowering/class-unions.js +2 -2
- package/dist/frontend/lowering/class-unions.js.map +1 -1
- package/dist/frontend/lowering/coercions/function-adapters.d.ts +12 -0
- package/dist/frontend/lowering/coercions/function-adapters.js +62 -0
- package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural-plans.js +56 -1
- package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
- package/dist/frontend/lowering/coercions/structural.js +9 -4
- package/dist/frontend/lowering/coercions/structural.js.map +1 -1
- package/dist/frontend/lowering/collection-ingestion.d.ts +9 -0
- package/dist/frontend/lowering/collection-ingestion.js +115 -41
- package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
- package/dist/frontend/lowering/containers/array-callbacks.js +16 -0
- package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +66 -10
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/containers/collection-methods.js +61 -5
- package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
- package/dist/frontend/lowering/containers/filter-predicates.js +11 -0
- package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
- package/dist/frontend/lowering/containers/indexed-objects.d.ts +15 -0
- package/dist/frontend/lowering/containers/indexed-objects.js +213 -30
- package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
- package/dist/frontend/lowering/error-name-order.d.ts +16 -0
- package/dist/frontend/lowering/error-name-order.js +61 -0
- package/dist/frontend/lowering/error-name-order.js.map +1 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.d.ts +17 -0
- package/dist/frontend/lowering/expressions/asserted-receiver.js +123 -1
- package/dist/frontend/lowering/expressions/asserted-receiver.js.map +1 -1
- package/dist/frontend/lowering/expressions/binary.js +147 -20
- package/dist/frontend/lowering/expressions/binary.js.map +1 -1
- package/dist/frontend/lowering/expressions/element-access.js +63 -14
- package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/erased-delete.d.ts +59 -0
- package/dist/frontend/lowering/expressions/erased-delete.js +247 -0
- package/dist/frontend/lowering/expressions/erased-delete.js.map +1 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +10 -0
- package/dist/frontend/lowering/expressions/hosted-narrowing.js +48 -1
- package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/identifiers.js +20 -0
- package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
- package/dist/frontend/lowering/expressions/narrowing.d.ts +7 -2
- package/dist/frontend/lowering/expressions/narrowing.js +77 -45
- package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
- package/dist/frontend/lowering/expressions/object-literals.js +62 -19
- package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
- package/dist/frontend/lowering/expressions/optional-chains.js +19 -0
- package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
- package/dist/frontend/lowering/expressions/property-access.d.ts +7 -7
- package/dist/frontend/lowering/expressions/property-access.js +247 -48
- package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
- package/dist/frontend/lowering/expressions/relational.d.ts +1 -0
- package/dist/frontend/lowering/expressions/relational.js +18 -8
- package/dist/frontend/lowering/expressions/relational.js.map +1 -1
- package/dist/frontend/lowering/expressions/union-fields.js +11 -5
- package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
- package/dist/frontend/lowering/expressions/updates.js +121 -11
- package/dist/frontend/lowering/expressions/updates.js.map +1 -1
- package/dist/frontend/lowering/function-context.d.ts +10 -0
- package/dist/frontend/lowering/function-context.js +36 -0
- package/dist/frontend/lowering/function-context.js.map +1 -1
- package/dist/frontend/lowering/function-returns.js +8 -8
- package/dist/frontend/lowering/function-returns.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.d.ts +62 -3
- package/dist/frontend/lowering/handle-properties.js +674 -26
- package/dist/frontend/lowering/handle-properties.js.map +1 -1
- package/dist/frontend/lowering/handle-properties.test.js +95 -2
- package/dist/frontend/lowering/handle-properties.test.js.map +1 -1
- package/dist/frontend/lowering/lower-builtin-values.d.ts +12 -0
- package/dist/frontend/lowering/lower-builtin-values.js +44 -0
- package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +328 -136
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +82 -17
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.js +113 -9
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-expando.d.ts +13 -21
- package/dist/frontend/lowering/lower-expando.js +90 -126
- package/dist/frontend/lowering/lower-expando.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.js +2 -2
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-functions.js +65 -0
- package/dist/frontend/lowering/lower-functions.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +471 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-modules.js +36 -10
- package/dist/frontend/lowering/lower-modules.js.map +1 -1
- package/dist/frontend/lowering/lower-node-island.js +28 -0
- package/dist/frontend/lowering/lower-node-island.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +53 -7
- package/dist/frontend/lowering/lower-server.js +213 -42
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stdlib.js +50 -7
- package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.d.ts +24 -0
- package/dist/frontend/lowering/lower-stmts.js +463 -220
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +2 -2
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lower-test.js +71 -2
- package/dist/frontend/lowering/lower-test.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +81 -10
- package/dist/frontend/lowering/lowerer.js +319 -72
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/new-target.js +10 -2
- package/dist/frontend/lowering/new-target.js.map +1 -1
- package/dist/frontend/lowering/nullish-empty-pattern.js +3 -3
- package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -1
- package/dist/frontend/lowering/partial-assertions.js +30 -5
- package/dist/frontend/lowering/partial-assertions.js.map +1 -1
- package/dist/frontend/lowering/primitive-throws.js +91 -1
- package/dist/frontend/lowering/primitive-throws.js.map +1 -1
- package/dist/frontend/lowering/primitive-wrappers.d.ts +9 -0
- package/dist/frontend/lowering/primitive-wrappers.js +2 -2
- package/dist/frontend/lowering/primitive-wrappers.js.map +1 -1
- package/dist/frontend/lowering/promise-executor-adapter.js +5 -2
- package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -1
- package/dist/frontend/lowering/record-links.js +7 -2
- package/dist/frontend/lowering/record-links.js.map +1 -1
- package/dist/frontend/lowering/surfaces.d.ts +4 -0
- package/dist/frontend/lowering/surfaces.js +118 -2
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/lowering/surfaces.test.d.ts +1 -0
- package/dist/frontend/lowering/surfaces.test.js +31 -0
- package/dist/frontend/lowering/surfaces.test.js.map +1 -0
- package/dist/frontend/mock-shapes.js +3 -3
- package/dist/frontend/mock-shapes.js.map +1 -1
- package/dist/frontend/npm-static-ladder.d.ts +21 -0
- package/dist/frontend/npm-static-ladder.js +2 -0
- package/dist/frontend/npm-static-ladder.js.map +1 -0
- package/dist/frontend/npm-static-ladder.test.d.ts +1 -0
- package/dist/frontend/npm-static-ladder.test.js +138 -0
- package/dist/frontend/npm-static-ladder.test.js.map +1 -0
- package/dist/frontend/npm-static-status.d.ts +15 -0
- package/dist/frontend/npm-static-status.js +2 -0
- package/dist/frontend/npm-static-status.js.map +1 -0
- package/dist/frontend/package-shims.js +1 -1
- package/dist/frontend/package-shims.js.map +1 -1
- package/dist/frontend/pipeline.d.ts +1 -1
- package/dist/frontend/pipeline.js +222 -25
- package/dist/frontend/pipeline.js.map +1 -1
- package/dist/frontend/program-analysis.d.ts +4 -0
- package/dist/frontend/program-analysis.js +6 -0
- package/dist/frontend/program-analysis.js.map +1 -1
- package/dist/frontend/program.js +258 -32
- package/dist/frontend/program.js.map +1 -1
- package/dist/frontend/program.test.js +30 -0
- package/dist/frontend/program.test.js.map +1 -1
- package/dist/frontend/resolve.js +29 -5
- package/dist/frontend/resolve.js.map +1 -1
- package/dist/frontend/resolve.test.js +40 -0
- package/dist/frontend/resolve.test.js.map +1 -1
- package/dist/frontend/services.d.ts +8 -0
- package/dist/frontend/services.js +7 -0
- package/dist/frontend/services.js.map +1 -1
- package/dist/frontend/ts7/checker.d.ts +7 -0
- package/dist/frontend/ts7/checker.js +12 -0
- package/dist/frontend/ts7/checker.js.map +1 -1
- package/dist/frontend/ts7/checker.test.js +1 -0
- package/dist/frontend/ts7/checker.test.js.map +1 -1
- package/dist/frontend/ts7/program-host.d.ts +39 -2
- package/dist/frontend/ts7/program-host.js +62 -8
- package/dist/frontend/ts7/program-host.js.map +1 -1
- package/dist/frontend/ts7/program-host.test.js +33 -0
- package/dist/frontend/ts7/program-host.test.js.map +1 -1
- package/dist/frontend/ts7/session-cache.d.ts +5 -1
- package/dist/frontend/ts7/session-cache.js +7 -1
- package/dist/frontend/ts7/session-cache.js.map +1 -1
- package/dist/frontend/ts7/session-cache.test.js +37 -0
- package/dist/frontend/ts7/session-cache.test.js.map +1 -1
- package/dist/frontend/ts7/session.js +19 -1
- package/dist/frontend/ts7/session.js.map +1 -1
- package/dist/frontend/ts7/source-parser.d.ts +17 -2
- package/dist/frontend/ts7/source-parser.js +61 -2
- package/dist/frontend/ts7/source-parser.js.map +1 -1
- package/dist/frontend/ts7/source-parser.test.js +55 -2
- package/dist/frontend/ts7/source-parser.test.js.map +1 -1
- package/dist/frontend/tsc-codes.d.ts +3 -2
- package/dist/frontend/tsc-codes.js +129 -22
- package/dist/frontend/tsc-codes.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +5 -11
- package/dist/frontend/type-mapper.js +380 -70
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +67 -7
- package/dist/index.js.map +1 -1
- package/dist/ir/builtin-effects.js +29 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +72 -6
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/codec.generated.d.ts +1 -1
- package/dist/ir/codec.generated.js +321 -263
- package/dist/ir/codec.generated.js.map +1 -1
- package/dist/ir/constant-length-clones.d.ts +26 -0
- package/dist/ir/constant-length-clones.js +589 -0
- package/dist/ir/constant-length-clones.js.map +1 -0
- package/dist/ir/constant-length-clones.test.d.ts +1 -0
- package/dist/ir/constant-length-clones.test.js +292 -0
- package/dist/ir/constant-length-clones.test.js.map +1 -0
- package/dist/ir/constant-tables.d.ts +10 -5
- package/dist/ir/constant-tables.js +83 -17
- package/dist/ir/constant-tables.js.map +1 -1
- package/dist/ir/constant-tables.test.js +58 -1
- package/dist/ir/constant-tables.test.js.map +1 -1
- package/dist/ir/fields.generated.js +5 -2
- package/dist/ir/fields.generated.js.map +1 -1
- package/dist/ir/function-references.js +2 -0
- package/dist/ir/function-references.js.map +1 -1
- package/dist/ir/function-references.test.js +13 -0
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/integer-loops.js +1 -0
- package/dist/ir/integer-loops.js.map +1 -1
- package/dist/ir/integer-loops.test.js +16 -0
- package/dist/ir/integer-loops.test.js.map +1 -1
- package/dist/ir/ir.d.ts +50 -6
- package/dist/ir/ir.js +44 -2
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/ir.test.js +83 -1
- package/dist/ir/ir.test.js.map +1 -1
- package/dist/ir/js-groups.js +5 -1
- package/dist/ir/js-groups.js.map +1 -1
- package/dist/ir/js-ic.d.ts +20 -0
- package/dist/ir/js-ic.js +81 -4
- package/dist/ir/js-ic.js.map +1 -1
- package/dist/ir/js-ic.test.js +8 -1
- package/dist/ir/js-ic.test.js.map +1 -1
- package/dist/ir/lane-plans.d.ts +86 -0
- package/dist/ir/lane-plans.js +589 -0
- package/dist/ir/lane-plans.js.map +1 -0
- package/dist/ir/lane-plans.test.d.ts +1 -0
- package/dist/ir/lane-plans.test.js +549 -0
- package/dist/ir/lane-plans.test.js.map +1 -0
- package/dist/ir/runtime-features.d.ts +68 -10
- package/dist/ir/runtime-features.js +285 -17
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/runtime-features.test.js +190 -1
- package/dist/ir/runtime-features.test.js.map +1 -1
- package/dist/ir/validate.js +61 -24
- package/dist/ir/validate.js.map +1 -1
- package/dist/native/cache.d.ts +5 -0
- package/dist/native/cache.js +23 -1
- package/dist/native/cache.js.map +1 -1
- package/dist/native/cache.test.js +29 -1
- package/dist/native/cache.test.js.map +1 -1
- package/dist/native/cli.js +4 -2
- package/dist/native/cli.js.map +1 -1
- package/dist/native/compiler.d.ts +11 -3
- package/dist/native/compiler.js +102 -16
- package/dist/native/compiler.js.map +1 -1
- package/dist/native/compiler.test.js +244 -2
- package/dist/native/compiler.test.js.map +1 -1
- package/dist/native/prepare.d.ts +14 -1
- package/dist/native/prepare.js +79 -29
- package/dist/native/prepare.js.map +1 -1
- package/dist/native/sanitizer.test.js +3 -0
- package/dist/native/sanitizer.test.js.map +1 -1
- package/dist/native/unchanged.d.ts +80 -0
- package/dist/native/unchanged.js +301 -0
- package/dist/native/unchanged.js.map +1 -0
- package/dist/native/unchanged.test.d.ts +1 -0
- package/dist/native/unchanged.test.js +249 -0
- package/dist/native/unchanged.test.js.map +1 -0
- package/dist/node-islands/boundary.d.ts +16 -0
- package/dist/node-islands/boundary.js +70 -7
- package/dist/node-islands/boundary.js.map +1 -1
- package/dist/node-islands/boundary.test.js +59 -14
- package/dist/node-islands/boundary.test.js.map +1 -1
- package/dist/node-islands/detect.js +203 -47
- package/dist/node-islands/detect.js.map +1 -1
- package/dist/node-islands/detect.test.js +45 -0
- package/dist/node-islands/detect.test.js.map +1 -1
- package/dist/node-islands/growth.js +4 -16
- package/dist/node-islands/growth.js.map +1 -1
- package/dist/node-islands/modules.d.ts +3 -0
- package/dist/node-islands/modules.js +143 -12
- package/dist/node-islands/modules.js.map +1 -1
- package/dist/node-islands/modules.test.js +125 -0
- package/dist/node-islands/modules.test.js.map +1 -1
- package/dist/node-islands/report.d.ts +1 -1
- package/dist/node-islands/report.js +2 -1
- package/dist/node-islands/report.js.map +1 -1
- package/package.json +20 -20
- package/shims/undici/core/request.ts +7 -1
- package/surface-manifest.json +380 -2
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { delimiter, join, resolve } from "node:path";
|
|
3
|
+
import { profileBlocksPath, recordProfileBlocksPath, } from "../backend/native-profile.js";
|
|
4
|
+
import { toolchainEnvironmentCachePolicy, toolchainEnvironmentFingerprint, } from "../backend/toolchain-environment.js";
|
|
5
|
+
import { frontendInputsStillMatch, validFrontendInputSnapshot, } from "../frontend/input-tracker.js";
|
|
6
|
+
import { contentDigest, fileDigest, NATIVE_STRING_BYTES } from "./cache.js";
|
|
7
|
+
import { identity, stillMatches, validIdentity } from "./executable-cache.js";
|
|
8
|
+
import { nativeFileIdentity } from "./file-identity.js";
|
|
9
|
+
import { nativeFrontendCacheKey } from "./prepare.js";
|
|
10
|
+
/** Highest number of input probes a record may list; a larger one is a miss,
|
|
11
|
+
* which only costs a rebuild. */
|
|
12
|
+
const MAX_PROBES = 200_000;
|
|
13
|
+
function validRecord(value) {
|
|
14
|
+
if (value === null || typeof value !== "object")
|
|
15
|
+
return false;
|
|
16
|
+
const record = value;
|
|
17
|
+
return (record.schema === "scriptc.native-unchanged.v1" &&
|
|
18
|
+
validFrontendInputSnapshot(record.probes) &&
|
|
19
|
+
record.probes.probes.length <= MAX_PROBES &&
|
|
20
|
+
record.output !== undefined &&
|
|
21
|
+
validIdentity(record.output) &&
|
|
22
|
+
record.translationUnit !== undefined &&
|
|
23
|
+
validIdentity(record.translationUnit) &&
|
|
24
|
+
(record.ir === null || (record.ir !== undefined && validIdentity(record.ir))) &&
|
|
25
|
+
Array.isArray(record.beside) &&
|
|
26
|
+
record.beside.every(validIdentity) &&
|
|
27
|
+
Array.isArray(record.packInputs) &&
|
|
28
|
+
record.packInputs.every(validIdentity));
|
|
29
|
+
}
|
|
30
|
+
/** The files a record names, for one existence and identity check. */
|
|
31
|
+
function recordedFiles(record) {
|
|
32
|
+
return [
|
|
33
|
+
record.output,
|
|
34
|
+
record.translationUnit,
|
|
35
|
+
...(record.ir === null ? [] : [record.ir]),
|
|
36
|
+
...record.beside,
|
|
37
|
+
...record.packInputs,
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
/** The identity of the program `command` runs: the linker, the dSYM tool.
|
|
41
|
+
* Null when the command cannot be resolved. */
|
|
42
|
+
function commandIdentity(command) {
|
|
43
|
+
try {
|
|
44
|
+
if (command.includes("/") || command.includes("\\"))
|
|
45
|
+
return nativeFileIdentity(resolve(command));
|
|
46
|
+
for (const directory of (process.env["PATH"] ?? "/usr/bin:/bin").split(delimiter)) {
|
|
47
|
+
const candidate = join(directory || process.cwd(), command);
|
|
48
|
+
try {
|
|
49
|
+
if (statSync(candidate).isFile())
|
|
50
|
+
return nativeFileIdentity(candidate);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
/* Try the next PATH entry. */
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** The digest of a file whose bytes are a build input (a profile, an FFI
|
|
63
|
+
* object): these are replaced in place, so an identity alone would let a
|
|
64
|
+
* rewritten input pass as unchanged. Null when the file cannot be read. */
|
|
65
|
+
function inputDigest(path) {
|
|
66
|
+
try {
|
|
67
|
+
return fileDigest(resolve(path));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** The identity of a file the build may not have: null when it does not
|
|
74
|
+
* exist, so that creating it changes the key. */
|
|
75
|
+
function optionalIdentity(path) {
|
|
76
|
+
try {
|
|
77
|
+
return nativeFileIdentity(path);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** The key of an unchanged build: the frontend cache's inputs (the sources
|
|
84
|
+
* and configuration themselves are proved by the recorded probes, not by the
|
|
85
|
+
* key), the backend tools that produced the kept output, and the files whose
|
|
86
|
+
* bytes determine the code generated — a profile the options name only by
|
|
87
|
+
* path, with the block-count file beside it, and the objects an FFI manifest
|
|
88
|
+
* links. Null when an input cannot be read, when provenance rewriting makes
|
|
89
|
+
* the sources a build product, when the build writes a block-count file (that
|
|
90
|
+
* file comes from the helper, and a kept output would leave it unwritten),
|
|
91
|
+
* when the manifest names a system library or a framework whose file the
|
|
92
|
+
* linker resolves, when the toolchain supplies linker arguments (which the
|
|
93
|
+
* linker resolves against its own search paths), when `SCRIPTC_LINKER` or
|
|
94
|
+
* `SCRIPTC_LLVM_HELPER` selects a wrapper that may bring inputs of its own,
|
|
95
|
+
* when a mutable toolchain variable names files the fingerprint hashes only
|
|
96
|
+
* by spelling, or when it is sanitized (its runtime is compiled from sources
|
|
97
|
+
* outside the pack, which the key does not observe). */
|
|
98
|
+
export function unchangedBuildKey(inputs) {
|
|
99
|
+
const { entry, options, ffi, ffiBytes, toolchain, output, translationUnitPath } = inputs;
|
|
100
|
+
if (recordProfileBlocksPath(process.env) !== undefined)
|
|
101
|
+
return null;
|
|
102
|
+
if (options.sanitize === true)
|
|
103
|
+
return null;
|
|
104
|
+
// `-l<name>` and `-framework <name>` resolve through the linker's search
|
|
105
|
+
// paths, and the key names the manifest's names, not the files they resolve
|
|
106
|
+
// to: the file can be replaced in place and a kept executable would still be
|
|
107
|
+
// the earlier link. The complete-artifact cache refuses that link for the
|
|
108
|
+
// same reason.
|
|
109
|
+
if (ffi !== null && (ffi.systemLibraries.length > 0 || (ffi.frameworks?.length ?? 0) > 0))
|
|
110
|
+
return null;
|
|
111
|
+
// The toolchain's linker arguments are opaque here: a `-l` name, a `-L`
|
|
112
|
+
// directory or a driver name such as `cc` makes the linker resolve archives
|
|
113
|
+
// through search paths the key does not observe, so an archive replaced in
|
|
114
|
+
// place would leave a kept executable from the earlier link. The
|
|
115
|
+
// complete-artifact cache refuses a link that supplies them for the same
|
|
116
|
+
// reason.
|
|
117
|
+
if (toolchain.linkerArgs.length > 0)
|
|
118
|
+
return null;
|
|
119
|
+
// A caller-selected linker or code-generation helper may be a wrapper that
|
|
120
|
+
// brings inputs of its own — the key names the wrapper's file, its arguments
|
|
121
|
+
// and the environment's spelling, not the archives, libraries or plugin
|
|
122
|
+
// files the wrapper reads. The complete-artifact cache and the linker job
|
|
123
|
+
// cache refuse a build that names either one, for the same reason.
|
|
124
|
+
if (process.env["SCRIPTC_LINKER"] !== undefined ||
|
|
125
|
+
process.env["SCRIPTC_LLVM_HELPER"] !== undefined)
|
|
126
|
+
return null;
|
|
127
|
+
// The mutable toolchain variables name files and directories that can change
|
|
128
|
+
// behind a stable spelling — search paths, SDKs, config files, include
|
|
129
|
+
// paths — while the fingerprint only hashes the spelling. The
|
|
130
|
+
// complete-artifact cache refuses those too, through this same policy.
|
|
131
|
+
if (!toolchainEnvironmentCachePolicy().completeArtifacts)
|
|
132
|
+
return null;
|
|
133
|
+
const frontend = nativeFrontendCacheKey(entry, options, ffi, toolchain);
|
|
134
|
+
if (frontend === null)
|
|
135
|
+
return null;
|
|
136
|
+
try {
|
|
137
|
+
const debug = options.optimization === "dev" && options.strip !== true;
|
|
138
|
+
return contentDigest(JSON.stringify({
|
|
139
|
+
schema: 1,
|
|
140
|
+
frontend,
|
|
141
|
+
output: resolve(output),
|
|
142
|
+
translationUnit: resolve(translationUnitPath),
|
|
143
|
+
// The tools that produced the kept output. The compiler, checker and
|
|
144
|
+
// evaluator are covered by the frontend key's implementation identity.
|
|
145
|
+
helper: [
|
|
146
|
+
nativeFileIdentity(toolchain.helperExecutable),
|
|
147
|
+
nativeFileIdentity(join(toolchain.helperPackageRoot, "package.json")),
|
|
148
|
+
],
|
|
149
|
+
// The pack's manifest selects the artifacts a link consumes; its
|
|
150
|
+
// package.json names the pack.
|
|
151
|
+
runtimePack: [
|
|
152
|
+
nativeFileIdentity(join(toolchain.runtimePackRoot, "package.json")),
|
|
153
|
+
optionalIdentity(join(toolchain.runtimePackRoot, "runtime-pack.json")),
|
|
154
|
+
],
|
|
155
|
+
linker: [toolchain.linker, toolchain.linkerArgs, commandIdentity(toolchain.linker)],
|
|
156
|
+
dsymutil: debug ? commandIdentity(toolchain.dsymutil) : null,
|
|
157
|
+
environment: toolchainEnvironmentFingerprint(),
|
|
158
|
+
profile: options.profileUse === undefined
|
|
159
|
+
? null
|
|
160
|
+
: [
|
|
161
|
+
inputDigest(options.profileUse),
|
|
162
|
+
inputDigest(profileBlocksPath(resolve(options.profileUse))),
|
|
163
|
+
],
|
|
164
|
+
libraries: ffi === null ? null : ffi.libraries.map((path) => [path, inputDigest(path)]),
|
|
165
|
+
ffi: ffiBytes,
|
|
166
|
+
cwd: process.cwd(),
|
|
167
|
+
path: process.env["PATH"] ?? null,
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** The record of an unchanged build under `key`, when the executable and the
|
|
175
|
+
* files beside it are still the ones that build wrote and every input the
|
|
176
|
+
* frontend observed still matches. */
|
|
177
|
+
export function readUnchangedBuild(cache, key, exclusions) {
|
|
178
|
+
if (cache === null)
|
|
179
|
+
return null;
|
|
180
|
+
try {
|
|
181
|
+
const bytes = cache.read("unchanged", key, NATIVE_STRING_BYTES);
|
|
182
|
+
if (bytes === null)
|
|
183
|
+
return null;
|
|
184
|
+
const record = JSON.parse(bytes.toString("utf8"));
|
|
185
|
+
if (!validRecord(record))
|
|
186
|
+
return null;
|
|
187
|
+
if (!frontendInputsStillMatch(record.probes, exclusions))
|
|
188
|
+
return null;
|
|
189
|
+
return stillMatches(recordedFiles(record)) ? record : null;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** Highest number of files a recorded beside directory may hold; a larger one
|
|
196
|
+
* is not recorded, which only costs a rebuild. */
|
|
197
|
+
const MAX_BESIDE_FILES = 4096;
|
|
198
|
+
/** The identities a beside path contributes: the file itself, or, for a
|
|
199
|
+
* directory — a Darwin `.dSYM` bundle — its identity and the identity of every
|
|
200
|
+
* file in it. Tools that edit a build's debug information rewrite the DWARF
|
|
201
|
+
* file in place, which leaves the bundle directory's own identity unchanged;
|
|
202
|
+
* recording only the directory would let a kept executable stand beside debug
|
|
203
|
+
* information of an older build. */
|
|
204
|
+
function besideIdentities(path) {
|
|
205
|
+
try {
|
|
206
|
+
if (!statSync(path).isDirectory())
|
|
207
|
+
return [identity(path)];
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
const identities = [];
|
|
213
|
+
const walk = (directory) => {
|
|
214
|
+
let names;
|
|
215
|
+
try {
|
|
216
|
+
names = readdirSync(directory);
|
|
217
|
+
identities.push(identity(directory));
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
for (const name of names) {
|
|
223
|
+
if (identities.length >= MAX_BESIDE_FILES)
|
|
224
|
+
return false;
|
|
225
|
+
const child = join(directory, name);
|
|
226
|
+
let isDirectory;
|
|
227
|
+
try {
|
|
228
|
+
isDirectory = statSync(child).isDirectory();
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
if (isDirectory) {
|
|
234
|
+
if (!walk(child))
|
|
235
|
+
return false;
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
identities.push(identity(child));
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return true;
|
|
246
|
+
};
|
|
247
|
+
return walk(path) ? identities : null;
|
|
248
|
+
}
|
|
249
|
+
/** Record a completed build, so the next build of the same key keeps its
|
|
250
|
+
* output. The inputs are checked again first: a source edited while the
|
|
251
|
+
* build ran is not unchanged, and the record must not claim it is. */
|
|
252
|
+
export function recordUnchangedBuild(cache, key, exclusions, build) {
|
|
253
|
+
if (cache === null)
|
|
254
|
+
return;
|
|
255
|
+
try {
|
|
256
|
+
if (!frontendInputsStillMatch(build.probes, exclusions))
|
|
257
|
+
return;
|
|
258
|
+
const file = (path) => {
|
|
259
|
+
try {
|
|
260
|
+
return identity(path);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const output = file(build.output);
|
|
267
|
+
const translationUnit = file(build.translationUnitPath);
|
|
268
|
+
const ir = build.irPath === null ? null : file(build.irPath);
|
|
269
|
+
if (output === null || translationUnit === null || (build.irPath !== null && ir === null))
|
|
270
|
+
return;
|
|
271
|
+
const beside = [];
|
|
272
|
+
for (const path of build.beside) {
|
|
273
|
+
const installed = besideIdentities(path);
|
|
274
|
+
if (installed === null)
|
|
275
|
+
return;
|
|
276
|
+
beside.push(...installed);
|
|
277
|
+
}
|
|
278
|
+
const packInputs = [];
|
|
279
|
+
for (const path of build.packInputs) {
|
|
280
|
+
const input = file(path);
|
|
281
|
+
if (input === null)
|
|
282
|
+
return;
|
|
283
|
+
packInputs.push(input);
|
|
284
|
+
}
|
|
285
|
+
const record = {
|
|
286
|
+
schema: "scriptc.native-unchanged.v1",
|
|
287
|
+
probes: build.probes,
|
|
288
|
+
output,
|
|
289
|
+
translationUnit,
|
|
290
|
+
ir,
|
|
291
|
+
beside,
|
|
292
|
+
packInputs,
|
|
293
|
+
...(build.profileMatch === undefined ? {} : { profileMatch: build.profileMatch }),
|
|
294
|
+
};
|
|
295
|
+
cache.write("unchanged", key, JSON.stringify(record));
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
/* An unavailable cache only prevents reuse. */
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=unchanged.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unchanged.js","sourceRoot":"","sources":["../../src/native/unchanged.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, mkdtempSync, rmSync, statSync, utimesSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { afterEach, expect, test } from "vitest";
|
|
5
|
+
import { RECORD_PROFILE_BLOCKS_ENV, profileBlocksPath } from "../backend/native-profile.js";
|
|
6
|
+
import { LINUX_X64_GNU_TARGET } from "../backend/targets.js";
|
|
7
|
+
import { NativeCache } from "./cache.js";
|
|
8
|
+
import { readUnchangedBuild, recordUnchangedBuild, unchangedBuildKey, } from "./unchanged.js";
|
|
9
|
+
const probes = { version: 1, stable: true, probes: [] };
|
|
10
|
+
const roots = [];
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
for (const root of roots.splice(0))
|
|
13
|
+
rmSync(root, { recursive: true, force: true });
|
|
14
|
+
});
|
|
15
|
+
/** A directory the test removes afterwards. */
|
|
16
|
+
function temporary() {
|
|
17
|
+
const root = mkdtempSync(join(tmpdir(), "scriptc-native-unchanged-"));
|
|
18
|
+
roots.push(root);
|
|
19
|
+
return root;
|
|
20
|
+
}
|
|
21
|
+
/** The records of a build that wrote an executable, its LLVM text and the
|
|
22
|
+
* files beside them. */
|
|
23
|
+
function build(directory, beside, packInputs = []) {
|
|
24
|
+
const output = join(directory, "program");
|
|
25
|
+
writeFileSync(output, "executable");
|
|
26
|
+
const translationUnitPath = join(directory, "entry.ll");
|
|
27
|
+
writeFileSync(translationUnitPath, "; llvm");
|
|
28
|
+
const cache = new NativeCache(join(directory, "cache"));
|
|
29
|
+
recordUnchangedBuild(cache, "key", {}, {
|
|
30
|
+
probes,
|
|
31
|
+
output,
|
|
32
|
+
translationUnitPath,
|
|
33
|
+
irPath: null,
|
|
34
|
+
beside,
|
|
35
|
+
packInputs,
|
|
36
|
+
});
|
|
37
|
+
return { cache, output, translationUnitPath };
|
|
38
|
+
}
|
|
39
|
+
test("a rewritten file inside a .dSYM bundle is not the recorded one", () => {
|
|
40
|
+
const directory = temporary();
|
|
41
|
+
const bundle = join(directory, "program.dSYM");
|
|
42
|
+
const dwarf = join(bundle, "Contents/Resources/DWARF/program");
|
|
43
|
+
mkdirSync(join(bundle, "Contents/Resources/DWARF"), { recursive: true });
|
|
44
|
+
writeFileSync(dwarf, "first symbols");
|
|
45
|
+
const { cache } = build(directory, [bundle]);
|
|
46
|
+
expect(readUnchangedBuild(cache, "key", {})).not.toBeNull();
|
|
47
|
+
// A tool that edits the debug information rewrites the DWARF file in
|
|
48
|
+
// place: the bundle directory's own identity does not change.
|
|
49
|
+
const time = statSync(dwarf).mtime;
|
|
50
|
+
writeFileSync(dwarf, "other symbols");
|
|
51
|
+
utimesSync(dwarf, time, time);
|
|
52
|
+
expect(readUnchangedBuild(cache, "key", {})).toBeNull();
|
|
53
|
+
});
|
|
54
|
+
test("a removed file in a .dSYM bundle is not the recorded one", () => {
|
|
55
|
+
const directory = temporary();
|
|
56
|
+
const bundle = join(directory, "program.dSYM");
|
|
57
|
+
const dwarf = join(bundle, "Contents/Resources/DWARF/program");
|
|
58
|
+
mkdirSync(join(bundle, "Contents/Resources/DWARF"), { recursive: true });
|
|
59
|
+
writeFileSync(dwarf, "symbols");
|
|
60
|
+
const { cache } = build(directory, [bundle]);
|
|
61
|
+
expect(readUnchangedBuild(cache, "key", {})).not.toBeNull();
|
|
62
|
+
rmSync(dwarf);
|
|
63
|
+
expect(readUnchangedBuild(cache, "key", {})).toBeNull();
|
|
64
|
+
});
|
|
65
|
+
test("a runtime pack artifact replaced in place is not the one the build linked", () => {
|
|
66
|
+
const directory = temporary();
|
|
67
|
+
const archive = join(directory, "libruntime.a");
|
|
68
|
+
writeFileSync(archive, "first archive");
|
|
69
|
+
const { cache } = build(directory, [], [archive]);
|
|
70
|
+
expect(readUnchangedBuild(cache, "key", {})).not.toBeNull();
|
|
71
|
+
// Same size, same modification time: only the file's other fields tell it
|
|
72
|
+
// was written again.
|
|
73
|
+
const time = statSync(archive).mtime;
|
|
74
|
+
writeFileSync(archive, "other archive");
|
|
75
|
+
utimesSync(archive, time, time);
|
|
76
|
+
expect(readUnchangedBuild(cache, "key", {})).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
function toolchain(directory) {
|
|
79
|
+
const tool = (name) => {
|
|
80
|
+
const path = join(directory, name);
|
|
81
|
+
writeFileSync(path, "#!/bin/sh\n");
|
|
82
|
+
chmodSync(path, 0o755);
|
|
83
|
+
return path;
|
|
84
|
+
};
|
|
85
|
+
const helperPackageRoot = join(directory, "helper");
|
|
86
|
+
mkdirSync(helperPackageRoot);
|
|
87
|
+
writeFileSync(join(helperPackageRoot, "package.json"), '{"name":"helper","version":"0.0.0"}');
|
|
88
|
+
const runtimePackRoot = join(directory, "pack");
|
|
89
|
+
mkdirSync(runtimePackRoot);
|
|
90
|
+
writeFileSync(join(runtimePackRoot, "package.json"), '{"name":"pack","version":"0.0.0"}');
|
|
91
|
+
return {
|
|
92
|
+
compilerVersion: "0.0.0",
|
|
93
|
+
target: LINUX_X64_GNU_TARGET,
|
|
94
|
+
helper: LINUX_X64_GNU_TARGET.helper,
|
|
95
|
+
ts7Executable: tool("ts7"),
|
|
96
|
+
helperExecutable: tool("codegen"),
|
|
97
|
+
helperPackageRoot,
|
|
98
|
+
runtimePackRoot,
|
|
99
|
+
linker: tool("clang"),
|
|
100
|
+
linkerArgs: [],
|
|
101
|
+
dsymutil: tool("dsymutil"),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** A profile build's inputs, in a directory of their own. */
|
|
105
|
+
function profileBuild() {
|
|
106
|
+
const directory = temporary();
|
|
107
|
+
const entry = join(directory, "entry.ts");
|
|
108
|
+
writeFileSync(entry, "export const value = 1;\n");
|
|
109
|
+
const profileUse = join(directory, "app.profdata");
|
|
110
|
+
writeFileSync(profileUse, "indexed profile");
|
|
111
|
+
return {
|
|
112
|
+
entry,
|
|
113
|
+
options: {
|
|
114
|
+
outDir: directory,
|
|
115
|
+
outPath: join(directory, "program"),
|
|
116
|
+
backend: "llvm",
|
|
117
|
+
optimization: "speed",
|
|
118
|
+
profileUse,
|
|
119
|
+
},
|
|
120
|
+
ffi: null,
|
|
121
|
+
ffiBytes: null,
|
|
122
|
+
toolchain: toolchain(directory),
|
|
123
|
+
output: join(directory, "program"),
|
|
124
|
+
translationUnitPath: join(directory, "entry.ll"),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
test.skipIf(process.platform === "win32")("a changed block-count file beside a profile is another build", () => {
|
|
128
|
+
const inputs = profileBuild();
|
|
129
|
+
const withoutBlocks = unchangedBuildKey(inputs);
|
|
130
|
+
expect(withoutBlocks).not.toBeNull();
|
|
131
|
+
const blocks = profileBlocksPath(inputs.options.profileUse);
|
|
132
|
+
writeFileSync(blocks, "first counts");
|
|
133
|
+
const withBlocks = unchangedBuildKey(inputs);
|
|
134
|
+
expect(withBlocks).not.toBe(withoutBlocks);
|
|
135
|
+
writeFileSync(blocks, "other counts");
|
|
136
|
+
expect(unchangedBuildKey(inputs)).not.toBe(withBlocks);
|
|
137
|
+
});
|
|
138
|
+
test.skipIf(process.platform === "win32")("a build that writes block counts keeps nothing for a later build", () => {
|
|
139
|
+
const inputs = profileBuild();
|
|
140
|
+
expect(unchangedBuildKey(inputs)).not.toBeNull();
|
|
141
|
+
const recorded = process.env[RECORD_PROFILE_BLOCKS_ENV];
|
|
142
|
+
try {
|
|
143
|
+
process.env[RECORD_PROFILE_BLOCKS_ENV] = join(dirname(inputs.output), "counts.txt");
|
|
144
|
+
// A kept output never runs the helper, and the helper is what writes
|
|
145
|
+
// the file the build asked for.
|
|
146
|
+
expect(unchangedBuildKey(inputs)).toBeNull();
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
if (recorded === undefined)
|
|
150
|
+
delete process.env[RECORD_PROFILE_BLOCKS_ENV];
|
|
151
|
+
else
|
|
152
|
+
process.env[RECORD_PROFILE_BLOCKS_ENV] = recorded;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
test.skipIf(process.platform === "win32")("a manifest's system library or framework keeps nothing: the linker resolves the file, and the key names only the name", () => {
|
|
156
|
+
const inputs = profileBuild();
|
|
157
|
+
expect(unchangedBuildKey(inputs)).not.toBeNull();
|
|
158
|
+
const base = { ffiFormat: 1, functions: [], libraries: [] };
|
|
159
|
+
expect(unchangedBuildKey({
|
|
160
|
+
...inputs,
|
|
161
|
+
ffi: { ...base, systemLibraries: ["example"] },
|
|
162
|
+
ffiBytes: "digest",
|
|
163
|
+
})).toBeNull();
|
|
164
|
+
expect(unchangedBuildKey({
|
|
165
|
+
...inputs,
|
|
166
|
+
ffi: { ...base, systemLibraries: [], frameworks: ["Example"] },
|
|
167
|
+
ffiBytes: "digest",
|
|
168
|
+
})).toBeNull();
|
|
169
|
+
// A manifest that names library files only keeps its record: the key
|
|
170
|
+
// digests each file.
|
|
171
|
+
expect(unchangedBuildKey({
|
|
172
|
+
...inputs,
|
|
173
|
+
ffi: { ...base, systemLibraries: [] },
|
|
174
|
+
ffiBytes: "digest",
|
|
175
|
+
})).not.toBeNull();
|
|
176
|
+
});
|
|
177
|
+
test.skipIf(process.platform === "win32")("a toolchain's linker arguments keep nothing: the linker resolves the archives they name", () => {
|
|
178
|
+
const inputs = profileBuild();
|
|
179
|
+
expect(unchangedBuildKey(inputs)).not.toBeNull();
|
|
180
|
+
expect(unchangedBuildKey({
|
|
181
|
+
...inputs,
|
|
182
|
+
toolchain: {
|
|
183
|
+
...inputs.toolchain,
|
|
184
|
+
linkerArgs: ["-L", "/opt/sdk/lib", "-lexample"],
|
|
185
|
+
},
|
|
186
|
+
})).toBeNull();
|
|
187
|
+
});
|
|
188
|
+
test.skipIf(process.platform === "win32")("a caller-selected linker or helper keeps nothing: a wrapper may bring inputs of its own", () => {
|
|
189
|
+
const inputs = profileBuild();
|
|
190
|
+
expect(unchangedBuildKey(inputs)).not.toBeNull();
|
|
191
|
+
const names = ["SCRIPTC_LINKER", "SCRIPTC_LLVM_HELPER"];
|
|
192
|
+
const recorded = {};
|
|
193
|
+
for (const name of names)
|
|
194
|
+
recorded[name] = process.env[name];
|
|
195
|
+
try {
|
|
196
|
+
for (const name of names) {
|
|
197
|
+
process.env[name] = `/tmp/wrapper-${name}`;
|
|
198
|
+
expect(unchangedBuildKey(inputs)).toBeNull();
|
|
199
|
+
delete process.env[name];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
for (const name of names) {
|
|
204
|
+
const value = recorded[name];
|
|
205
|
+
if (value === undefined)
|
|
206
|
+
delete process.env[name];
|
|
207
|
+
else
|
|
208
|
+
process.env[name] = value;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
test.skipIf(process.platform === "win32")("a variable that names mutable link inputs keeps nothing, and a value-hashed one stays keyed", () => {
|
|
213
|
+
const inputs = profileBuild();
|
|
214
|
+
const base = unchangedBuildKey(inputs);
|
|
215
|
+
expect(base).not.toBeNull();
|
|
216
|
+
const names = ["LIBRARY_PATH", "SDKROOT", "LDFLAGS"];
|
|
217
|
+
const recorded = {};
|
|
218
|
+
for (const name of names)
|
|
219
|
+
recorded[name] = process.env[name];
|
|
220
|
+
try {
|
|
221
|
+
process.env["LIBRARY_PATH"] = "/opt/sdk/lib";
|
|
222
|
+
expect(unchangedBuildKey(inputs)).toBeNull();
|
|
223
|
+
delete process.env["LIBRARY_PATH"];
|
|
224
|
+
process.env["SDKROOT"] = "/opt/sdk";
|
|
225
|
+
expect(unchangedBuildKey(inputs)).toBeNull();
|
|
226
|
+
delete process.env["SDKROOT"];
|
|
227
|
+
// The fingerprint hashes this one's value, so the key changes and the
|
|
228
|
+
// record stays available, as it does for the executable cache.
|
|
229
|
+
process.env["LDFLAGS"] = "-L/opt/sdk/lib";
|
|
230
|
+
const withLdflags = unchangedBuildKey(inputs);
|
|
231
|
+
expect(withLdflags).not.toBeNull();
|
|
232
|
+
expect(withLdflags).not.toBe(base);
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
for (const name of names) {
|
|
236
|
+
const value = recorded[name];
|
|
237
|
+
if (value === undefined)
|
|
238
|
+
delete process.env[name];
|
|
239
|
+
else
|
|
240
|
+
process.env[name] = value;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
test.skipIf(process.platform === "win32")("a sanitized build keeps nothing: its runtime is compiled from sources the key does not name", () => {
|
|
245
|
+
const inputs = profileBuild();
|
|
246
|
+
expect(unchangedBuildKey(inputs)).not.toBeNull();
|
|
247
|
+
expect(unchangedBuildKey({ ...inputs, options: { ...inputs.options, sanitize: true } })).toBeNull();
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=unchanged.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unchanged.test.js","sourceRoot":"","sources":["../../src/native/unchanged.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,16 @@ export interface IslandModule {
|
|
|
24
24
|
* detected by the pre-scan under `--node-islands=auto`. */
|
|
25
25
|
decision: "marked" | "auto";
|
|
26
26
|
}
|
|
27
|
+
/** The islands a build installed outside node_modules (a linked or hoisted
|
|
28
|
+
* workspace member), by directory, and the answer already given for each
|
|
29
|
+
* file. The memo lives on the set it describes, and an island set with no
|
|
30
|
+
* linked member never fills it. */
|
|
31
|
+
export interface IslandDirIdentity {
|
|
32
|
+
byDir: Map<string, IslandPackage>;
|
|
33
|
+
answered: Map<string, IslandPackage | null>;
|
|
34
|
+
/** Whether `byDir` has been built from the set's packages. */
|
|
35
|
+
built: boolean;
|
|
36
|
+
}
|
|
27
37
|
/** The program's island packages, by package name, and island modules, by
|
|
28
38
|
* absolute file path. */
|
|
29
39
|
export interface NodeIslandSet {
|
|
@@ -37,7 +47,12 @@ export interface NodeIslandSet {
|
|
|
37
47
|
/** islandModuleOfFile's answers by file spelling (same lifetime as
|
|
38
48
|
* packagesOfFile). */
|
|
39
49
|
modulesOfFile?: Map<string, IslandModule | null>;
|
|
50
|
+
/** The directory index for islands installed outside node_modules, and
|
|
51
|
+
* the answers already given from it (see `IslandDirIdentity`). */
|
|
52
|
+
linked: IslandDirIdentity;
|
|
40
53
|
}
|
|
54
|
+
/** An island set with the boundary's directory index in place. */
|
|
55
|
+
export declare function nodeIslandSet(packages: ReadonlyMap<string, IslandPackage>, modules: ReadonlyMap<string, IslandModule>): NodeIslandSet;
|
|
41
56
|
/** The island module at `file`, or null. */
|
|
42
57
|
export declare function islandModuleOfFile(islands: NodeIslandSet, file: string): IslandModule | null;
|
|
43
58
|
/** Whether `file` (a path as the checker spells it, or its real path) is a
|
|
@@ -70,4 +85,5 @@ export declare function crossingOf(islands: NodeIslandSet, type: ts.Type, checke
|
|
|
70
85
|
export declare function setActiveNodeIslands(islands: NodeIslandSet | null): void;
|
|
71
86
|
export declare function activeNodeIslands(): NodeIslandSet | null;
|
|
72
87
|
export declare function setFrontendIslands(names: ReadonlySet<string>): void;
|
|
88
|
+
export declare function recordFrontendIslandReads(into: Set<string> | null): void;
|
|
73
89
|
export declare function isFrontendIsland(pkg: string): boolean;
|