@hyperfrontend/builder 0.1.0
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/CHANGELOG.md +63 -0
- package/FUNDING.md +141 -0
- package/LICENSE.md +21 -0
- package/README.md +162 -0
- package/SECURITY.md +82 -0
- package/THIRD_PARTY_LICENSES.md +13 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.cjs.js +13 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/console/index.esm.js +8 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.cjs.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.esm.js +4 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/encoding/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/encoding/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/function/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/function/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/map/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.cjs.js +7 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/math/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/messaging/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/messaging/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/number/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.cjs.js +13 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/object/index.esm.js +8 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/reflect/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/regexp/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/regexp/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/string/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/string/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/symbol/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/symbol/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.cjs.js +13 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.esm.js +10 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/typed-arrays/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/url/index.cjs.js +6 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/url/index.esm.js +5 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/weak-map/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/weak-map/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/weak-set/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/weak-set/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/websocket/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/websocket/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked-prop-descriptors/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked-prop-descriptors/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked-props/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/immutable-api-utils/locked-props/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/logging/index.cjs.js +191 -0
- package/_dependencies/@hyperfrontend/logging/index.esm.js +186 -0
- package/_dependencies/@hyperfrontend/project-scope/cli/index.cjs.js +196 -0
- package/_dependencies/@hyperfrontend/project-scope/cli/index.esm.js +196 -0
- package/_dependencies/@hyperfrontend/project-scope/core/encoding/index.cjs.js +82 -0
- package/_dependencies/@hyperfrontend/project-scope/core/encoding/index.esm.js +82 -0
- package/_dependencies/@hyperfrontend/project-scope/core/fs/index.cjs.js +154 -0
- package/_dependencies/@hyperfrontend/project-scope/core/fs/index.esm.js +149 -0
- package/_dependencies/@hyperfrontend/project-scope/core/index.cjs.js +459 -0
- package/_dependencies/@hyperfrontend/project-scope/core/index.esm.js +440 -0
- package/_dependencies/@hyperfrontend/project-scope/core/logger/index.cjs.js +84 -0
- package/_dependencies/@hyperfrontend/project-scope/core/logger/index.esm.js +80 -0
- package/_dependencies/@hyperfrontend/project-scope/core/path/index.cjs.js +26 -0
- package/_dependencies/@hyperfrontend/project-scope/core/path/index.esm.js +22 -0
- package/_dependencies/@hyperfrontend/project-scope/core/platform/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/project-scope/core/platform/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/dependencies/index.cjs.js +90 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/dependencies/index.esm.js +90 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/entry-points/index.cjs.js +174 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/entry-points/index.esm.js +174 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/framework/index.cjs.js +174 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/framework/index.esm.js +172 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/index.cjs.js +184 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/index.esm.js +184 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/project-type/index.cjs.js +172 -0
- package/_dependencies/@hyperfrontend/project-scope/heuristics/project-type/index.esm.js +172 -0
- package/_dependencies/@hyperfrontend/project-scope/index.cjs.js +222 -0
- package/_dependencies/@hyperfrontend/project-scope/index.esm.js +219 -0
- package/_dependencies/@hyperfrontend/project-scope/models/index.cjs.js +2 -0
- package/_dependencies/@hyperfrontend/project-scope/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/project-scope/nx/index.cjs.js +94 -0
- package/_dependencies/@hyperfrontend/project-scope/nx/index.esm.js +94 -0
- package/_dependencies/@hyperfrontend/project-scope/project/config/index.cjs.js +172 -0
- package/_dependencies/@hyperfrontend/project-scope/project/config/index.esm.js +172 -0
- package/_dependencies/@hyperfrontend/project-scope/project/index.cjs.js +176 -0
- package/_dependencies/@hyperfrontend/project-scope/project/index.esm.js +176 -0
- package/_dependencies/@hyperfrontend/project-scope/project/package/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/project/package/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/project/root/index.cjs.js +154 -0
- package/_dependencies/@hyperfrontend/project-scope/project/root/index.esm.js +153 -0
- package/_dependencies/@hyperfrontend/project-scope/project/traversal/index.cjs.js +91 -0
- package/_dependencies/@hyperfrontend/project-scope/project/traversal/index.esm.js +89 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/backend/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/backend/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/build/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/build/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/frontend/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/frontend/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/index.cjs.js +171 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/index.esm.js +169 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/legacy/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/legacy/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/linting/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/linting/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/monorepo/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/monorepo/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/testing/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/testing/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/types/index.cjs.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/tech/types/index.esm.js +88 -0
- package/_dependencies/@hyperfrontend/project-scope/vfs/index.cjs.js +102 -0
- package/_dependencies/@hyperfrontend/project-scope/vfs/index.esm.js +102 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/compare/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/compare/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/operations/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/operations/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/parse/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/parse/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/serialize/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/changelog/serialize/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/author/index.cjs.js +2403 -0
- package/_dependencies/@hyperfrontend/versioning/commits/author/index.esm.js +2381 -0
- package/_dependencies/@hyperfrontend/versioning/commits/classify/index.cjs.js +38 -0
- package/_dependencies/@hyperfrontend/versioning/commits/classify/index.esm.js +30 -0
- package/_dependencies/@hyperfrontend/versioning/commits/format/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/format/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/index.cjs.js +2457 -0
- package/_dependencies/@hyperfrontend/versioning/commits/index.esm.js +2407 -0
- package/_dependencies/@hyperfrontend/versioning/commits/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/parse/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/parse/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/commits/validate/index.cjs.js +27 -0
- package/_dependencies/@hyperfrontend/versioning/commits/validate/index.esm.js +25 -0
- package/_dependencies/@hyperfrontend/versioning/flow/executor/index.cjs.js +36 -0
- package/_dependencies/@hyperfrontend/versioning/flow/executor/index.esm.js +36 -0
- package/_dependencies/@hyperfrontend/versioning/flow/index.cjs.js +51 -0
- package/_dependencies/@hyperfrontend/versioning/flow/index.esm.js +51 -0
- package/_dependencies/@hyperfrontend/versioning/flow/models/index.cjs.js +30 -0
- package/_dependencies/@hyperfrontend/versioning/flow/models/index.esm.js +28 -0
- package/_dependencies/@hyperfrontend/versioning/flow/presets/index.cjs.js +47 -0
- package/_dependencies/@hyperfrontend/versioning/flow/presets/index.esm.js +45 -0
- package/_dependencies/@hyperfrontend/versioning/flow/steps/index.cjs.js +47 -0
- package/_dependencies/@hyperfrontend/versioning/flow/steps/index.esm.js +45 -0
- package/_dependencies/@hyperfrontend/versioning/git/index.cjs.js +8 -0
- package/_dependencies/@hyperfrontend/versioning/git/index.esm.js +9 -0
- package/_dependencies/@hyperfrontend/versioning/git/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/git/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/git/operations/index.cjs.js +3 -0
- package/_dependencies/@hyperfrontend/versioning/git/operations/index.esm.js +3 -0
- package/_dependencies/@hyperfrontend/versioning/index.cjs.js +2481 -0
- package/_dependencies/@hyperfrontend/versioning/index.esm.js +2423 -0
- package/_dependencies/@hyperfrontend/versioning/registry/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/registry/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/registry/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/registry/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/registry/npm/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/registry/npm/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/repository/index.cjs.js +18 -0
- package/_dependencies/@hyperfrontend/versioning/repository/index.esm.js +17 -0
- package/_dependencies/@hyperfrontend/versioning/repository/models/index.cjs.js +11 -0
- package/_dependencies/@hyperfrontend/versioning/repository/models/index.esm.js +10 -0
- package/_dependencies/@hyperfrontend/versioning/repository/parse/index.cjs.js +184 -0
- package/_dependencies/@hyperfrontend/versioning/repository/parse/index.esm.js +185 -0
- package/_dependencies/@hyperfrontend/versioning/repository/url/index.cjs.js +10 -0
- package/_dependencies/@hyperfrontend/versioning/repository/url/index.esm.js +8 -0
- package/_dependencies/@hyperfrontend/versioning/semver/compare/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/compare/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/format/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/format/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/increment/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/increment/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/parse/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/semver/parse/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/discovery/index.cjs.js +29 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/discovery/index.esm.js +29 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/index.cjs.js +29 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/index.esm.js +29 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/models/index.cjs.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/models/index.esm.js +1 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/operations/index.cjs.js +2 -0
- package/_dependencies/@hyperfrontend/versioning/workspace/operations/index.esm.js +2 -0
- package/_dependencies/@rollup/plugin-commonjs/index.cjs.js +6629 -0
- package/_dependencies/@rollup/plugin-commonjs/index.esm.js +6608 -0
- package/_dependencies/@rollup/plugin-json/index.cjs.js +2324 -0
- package/_dependencies/@rollup/plugin-json/index.esm.js +2322 -0
- package/_dependencies/@rollup/plugin-node-resolve/index.cjs.js +5430 -0
- package/_dependencies/@rollup/plugin-node-resolve/index.esm.js +5424 -0
- package/_dependencies/@rollup/plugin-terser/index.cjs.js +33220 -0
- package/_dependencies/@rollup/plugin-terser/index.esm.js +33217 -0
- package/_dependencies/@rollup/plugin-typescript/index.cjs.js +4840 -0
- package/_dependencies/@rollup/plugin-typescript/index.esm.js +4819 -0
- package/_dependencies/postject/index.cjs.js +5140 -0
- package/_dependencies/postject/index.esm.js +5131 -0
- package/_dependencies/rollup/index.cjs.js +24668 -0
- package/_dependencies/rollup/index.d.ts +1921 -0
- package/_dependencies/rollup/index.esm.js +24652 -0
- package/_dependencies/rollup-plugin-dts/index.cjs.js +6547 -0
- package/_dependencies/rollup-plugin-dts/index.esm.js +6537 -0
- package/_shared/bin/format/index.cjs.js +7 -0
- package/_shared/bin/format/index.esm.js +5 -0
- package/_shared/bin/native/codesign/index.cjs.js +30 -0
- package/_shared/bin/native/codesign/index.esm.js +26 -0
- package/_shared/bin/native/host-binary/index.cjs.js +13 -0
- package/_shared/bin/native/host-binary/index.esm.js +11 -0
- package/_shared/bin/native/inject/index.cjs.js +25 -0
- package/_shared/bin/native/inject/index.esm.js +18 -0
- package/_shared/bin/native/platform-check/index.cjs.js +13 -0
- package/_shared/bin/native/platform-check/index.esm.js +10 -0
- package/_shared/bin/native/sea-blob/index.cjs.js +21 -0
- package/_shared/bin/native/sea-blob/index.esm.js +19 -0
- package/_shared/bin/native/sea-config/index.cjs.js +9 -0
- package/_shared/bin/native/sea-config/index.esm.js +7 -0
- package/_shared/bin/script/bootstrap-footer/index.cjs.js +22 -0
- package/_shared/bin/script/bootstrap-footer/index.esm.js +19 -0
- package/_shared/bundle/declarations/flatten-paths/index.cjs.js +34 -0
- package/_shared/bundle/declarations/flatten-paths/index.esm.js +29 -0
- package/_shared/bundle/dependencies/collect-workspace-deps/index.cjs.js +24 -0
- package/_shared/bundle/dependencies/collect-workspace-deps/index.esm.js +21 -0
- package/_shared/bundle/dependencies/externalize-plugin/index.cjs.js +93 -0
- package/_shared/bundle/dependencies/externalize-plugin/index.esm.js +86 -0
- package/_shared/bundle/dependencies/prune/ast-utils/index.esm.js +31 -0
- package/_shared/bundle/dependencies/prune/namespace-usage/index.esm.js +208 -0
- package/_shared/bundle/dependencies/prune/specifiers/index.cjs.js +62 -0
- package/_shared/bundle/dependencies/prune/specifiers/index.esm.js +53 -0
- package/_shared/bundle/entries/discover-entries/index.cjs.js +87 -0
- package/_shared/bundle/entries/discover-entries/index.esm.js +80 -0
- package/_shared/bundle/entries/resolve-entries/index.cjs.js +38 -0
- package/_shared/bundle/entries/resolve-entries/index.esm.js +34 -0
- package/_shared/bundle/externals/validate-globals/index.cjs.js +14 -0
- package/_shared/bundle/externals/validate-globals/index.esm.js +12 -0
- package/_shared/bundle/fs/deps-root/index.cjs.js +7 -0
- package/_shared/bundle/fs/deps-root/index.esm.js +5 -0
- package/_shared/bundle/fs/empty-dirs/index.cjs.js +23 -0
- package/_shared/bundle/fs/empty-dirs/index.esm.js +21 -0
- package/_shared/bundle/fs/entry-dir/index.cjs.js +7 -0
- package/_shared/bundle/fs/entry-dir/index.esm.js +5 -0
- package/_shared/bundle/fs/posix-path/index.cjs.js +9 -0
- package/_shared/bundle/fs/posix-path/index.esm.js +4 -0
- package/_shared/bundle/fs/under-dir/index.cjs.js +5 -0
- package/_shared/bundle/fs/under-dir/index.esm.js +3 -0
- package/_shared/memory/recover/index.cjs.js +15 -0
- package/_shared/memory/recover/index.esm.js +14 -0
- package/_shared/package/finalize-files/index.cjs.js +16 -0
- package/_shared/package/finalize-files/index.esm.js +15 -0
- package/_shared/package/json/cdn-paths/index.cjs.js +13 -0
- package/_shared/package/json/cdn-paths/index.esm.js +11 -0
- package/_shared/package/json/filter-deps/index.cjs.js +37 -0
- package/_shared/package/json/filter-deps/index.esm.js +34 -0
- package/_shared/package/json/generate-exports/index.cjs.js +56 -0
- package/_shared/package/json/generate-exports/index.esm.js +52 -0
- package/_shared/package/json/inherit-fields/index.cjs.js +19 -0
- package/_shared/package/json/inherit-fields/index.esm.js +17 -0
- package/_shared/package/json/read-package-json/index.cjs.js +7 -0
- package/_shared/package/json/read-package-json/index.esm.js +6 -0
- package/_shared/package/json/reflect-files-allowlist/index.cjs.js +39 -0
- package/_shared/package/json/reflect-files-allowlist/index.esm.js +33 -0
- package/_shared/package/json/synthesize/index.cjs.js +72 -0
- package/_shared/package/json/synthesize/index.esm.js +68 -0
- package/_shared/package/json/write/index.cjs.js +9 -0
- package/_shared/package/json/write/index.esm.js +8 -0
- package/_shared/package/licenses/generate-content/index.cjs.js +17 -0
- package/_shared/package/licenses/generate-content/index.esm.js +17 -0
- package/_shared/package/licenses/license-url/index.esm.js +29 -0
- package/_shared/package/licenses/write/index.cjs.js +9 -0
- package/_shared/package/licenses/write/index.esm.js +8 -0
- package/_shared/presets/by-names/index.cjs.js +10 -0
- package/_shared/presets/by-names/index.esm.js +8 -0
- package/_shared/presets/by-prefix/index.cjs.js +7 -0
- package/_shared/presets/by-prefix/index.esm.js +5 -0
- package/bin/format.d.ts +18 -0
- package/bin/format.d.ts.map +1 -0
- package/bin/hf-build.d.ts +81 -0
- package/bin/hf-build.d.ts.map +1 -0
- package/bin/hf-build.js +208533 -0
- package/bin/hf-build.linux-x64 +0 -0
- package/bin/index.cjs.js +548 -0
- package/bin/index.d.ts +26 -0
- package/bin/index.d.ts.map +1 -0
- package/bin/index.esm.js +546 -0
- package/bin/native/build-native.d.ts +44 -0
- package/bin/native/build-native.d.ts.map +1 -0
- package/bin/native/codesign.d.ts +65 -0
- package/bin/native/codesign.d.ts.map +1 -0
- package/bin/native/dispatch.d.ts +75 -0
- package/bin/native/dispatch.d.ts.map +1 -0
- package/bin/native/host-binary.d.ts +36 -0
- package/bin/native/host-binary.d.ts.map +1 -0
- package/bin/native/index.cjs.js +264 -0
- package/bin/native/index.d.ts +407 -0
- package/bin/native/index.d.ts.map +1 -0
- package/bin/native/index.esm.js +249 -0
- package/bin/native/inject.d.ts +61 -0
- package/bin/native/inject.d.ts.map +1 -0
- package/bin/native/platform-check.d.ts +39 -0
- package/bin/native/platform-check.d.ts.map +1 -0
- package/bin/native/sea-blob.d.ts +40 -0
- package/bin/native/sea-blob.d.ts.map +1 -0
- package/bin/native/sea-config.d.ts +45 -0
- package/bin/native/sea-config.d.ts.map +1 -0
- package/bin/native/worker/index.cjs.js +88 -0
- package/bin/native/worker/index.d.ts +68 -0
- package/bin/native/worker/index.d.ts.map +1 -0
- package/bin/native/worker/index.esm.js +86 -0
- package/bin/native/worker/job-runner.d.ts +29 -0
- package/bin/native/worker/job-runner.d.ts.map +1 -0
- package/bin/native/worker/types.d.ts +38 -0
- package/bin/native/worker/types.d.ts.map +1 -0
- package/bin/run-bin-phase.d.ts +24 -0
- package/bin/run-bin-phase.d.ts.map +1 -0
- package/bin/script/bootstrap-footer.d.ts +41 -0
- package/bin/script/bootstrap-footer.d.ts.map +1 -0
- package/bin/script/build-bin.d.ts +36 -0
- package/bin/script/build-bin.d.ts.map +1 -0
- package/bin/script/index.cjs.js +265 -0
- package/bin/script/index.d.ts +79 -0
- package/bin/script/index.d.ts.map +1 -0
- package/bin/script/index.esm.js +262 -0
- package/build.d.ts +56 -0
- package/build.d.ts.map +1 -0
- package/bundle/declarations/dts-per-entry.d.ts +27 -0
- package/bundle/declarations/dts-per-entry.d.ts.map +1 -0
- package/bundle/declarations/dts-pre-pass.d.ts +18 -0
- package/bundle/declarations/dts-pre-pass.d.ts.map +1 -0
- package/bundle/declarations/flatten-paths.d.ts +28 -0
- package/bundle/declarations/flatten-paths.d.ts.map +1 -0
- package/bundle/declarations/generate-declarations.d.ts +33 -0
- package/bundle/declarations/generate-declarations.d.ts.map +1 -0
- package/bundle/declarations/index.cjs.js +868 -0
- package/bundle/declarations/index.d.ts +262 -0
- package/bundle/declarations/index.d.ts.map +1 -0
- package/bundle/declarations/index.esm.js +857 -0
- package/bundle/declarations/prune-orphan-dts.d.ts +33 -0
- package/bundle/declarations/prune-orphan-dts.d.ts.map +1 -0
- package/bundle/declarations/sibling-resolver.d.ts +125 -0
- package/bundle/declarations/sibling-resolver.d.ts.map +1 -0
- package/bundle/dedupe/attribute-modules.d.ts +178 -0
- package/bundle/dedupe/attribute-modules.d.ts.map +1 -0
- package/bundle/dedupe/extract-chunk.d.ts +103 -0
- package/bundle/dedupe/extract-chunk.d.ts.map +1 -0
- package/bundle/dedupe/hoist-shared.d.ts +37 -0
- package/bundle/dedupe/hoist-shared.d.ts.map +1 -0
- package/bundle/dedupe/index.cjs.js +818 -0
- package/bundle/dedupe/index.d.ts +400 -0
- package/bundle/dedupe/index.d.ts.map +1 -0
- package/bundle/dedupe/index.esm.js +766 -0
- package/bundle/dedupe/plan-hoists.d.ts +46 -0
- package/bundle/dedupe/plan-hoists.d.ts.map +1 -0
- package/bundle/dedupe/rewrite-entry.d.ts +39 -0
- package/bundle/dedupe/rewrite-entry.d.ts.map +1 -0
- package/bundle/dependencies/collect-workspace-deps.d.ts +34 -0
- package/bundle/dependencies/collect-workspace-deps.d.ts.map +1 -0
- package/bundle/dependencies/externalize-plugin.d.ts +100 -0
- package/bundle/dependencies/externalize-plugin.d.ts.map +1 -0
- package/bundle/dependencies/index.cjs.js +964 -0
- package/bundle/dependencies/index.d.ts +388 -0
- package/bundle/dependencies/index.d.ts.map +1 -0
- package/bundle/dependencies/index.esm.js +947 -0
- package/bundle/dependencies/pre-pass.d.ts +154 -0
- package/bundle/dependencies/pre-pass.d.ts.map +1 -0
- package/bundle/dependencies/prune/ast-utils.d.ts +121 -0
- package/bundle/dependencies/prune/ast-utils.d.ts.map +1 -0
- package/bundle/dependencies/prune/chunk-graph.d.ts +175 -0
- package/bundle/dependencies/prune/chunk-graph.d.ts.map +1 -0
- package/bundle/dependencies/prune/dead-export-pass.d.ts +32 -0
- package/bundle/dependencies/prune/dead-export-pass.d.ts.map +1 -0
- package/bundle/dependencies/prune/dead-exports.d.ts +36 -0
- package/bundle/dependencies/prune/dead-exports.d.ts.map +1 -0
- package/bundle/dependencies/prune/destructure-requires-pass.d.ts +31 -0
- package/bundle/dependencies/prune/destructure-requires-pass.d.ts.map +1 -0
- package/bundle/dependencies/prune/destructure-requires.d.ts +42 -0
- package/bundle/dependencies/prune/destructure-requires.d.ts.map +1 -0
- package/bundle/dependencies/prune/edits.d.ts +30 -0
- package/bundle/dependencies/prune/edits.d.ts.map +1 -0
- package/bundle/dependencies/prune/namespace-usage.d.ts +104 -0
- package/bundle/dependencies/prune/namespace-usage.d.ts.map +1 -0
- package/bundle/dependencies/prune/orphan-chunks.d.ts +69 -0
- package/bundle/dependencies/prune/orphan-chunks.d.ts.map +1 -0
- package/bundle/dependencies/prune/property-strip-pass.d.ts +38 -0
- package/bundle/dependencies/prune/property-strip-pass.d.ts.map +1 -0
- package/bundle/dependencies/prune/property-strip.d.ts +69 -0
- package/bundle/dependencies/prune/property-strip.d.ts.map +1 -0
- package/bundle/dependencies/prune/prune-dependencies.d.ts +52 -0
- package/bundle/dependencies/prune/prune-dependencies.d.ts.map +1 -0
- package/bundle/dependencies/prune/reachability.d.ts +36 -0
- package/bundle/dependencies/prune/reachability.d.ts.map +1 -0
- package/bundle/dependencies/prune/specifiers.d.ts +39 -0
- package/bundle/dependencies/prune/specifiers.d.ts.map +1 -0
- package/bundle/dependencies/prune/strip-comments.d.ts +47 -0
- package/bundle/dependencies/prune/strip-comments.d.ts.map +1 -0
- package/bundle/dependencies/prune/used-exports.d.ts +32 -0
- package/bundle/dependencies/prune/used-exports.d.ts.map +1 -0
- package/bundle/dependencies/resolve-bundled-deps.d.ts +37 -0
- package/bundle/dependencies/resolve-bundled-deps.d.ts.map +1 -0
- package/bundle/dependencies/resolve-dep-entry.d.ts +38 -0
- package/bundle/dependencies/resolve-dep-entry.d.ts.map +1 -0
- package/bundle/dependencies/resolve-workspace-bundled-deps.d.ts +96 -0
- package/bundle/dependencies/resolve-workspace-bundled-deps.d.ts.map +1 -0
- package/bundle/dependencies/worker/index.cjs.js +524 -0
- package/bundle/dependencies/worker/index.d.ts +102 -0
- package/bundle/dependencies/worker/index.d.ts.map +1 -0
- package/bundle/dependencies/worker/index.esm.js +515 -0
- package/bundle/dependencies/worker/job-runner.d.ts +115 -0
- package/bundle/dependencies/worker/job-runner.d.ts.map +1 -0
- package/bundle/entries/by-platform.d.ts +27 -0
- package/bundle/entries/by-platform.d.ts.map +1 -0
- package/bundle/entries/discover-entries.d.ts +24 -0
- package/bundle/entries/discover-entries.d.ts.map +1 -0
- package/bundle/entries/index.cjs.js +38 -0
- package/bundle/entries/index.d.ts +70 -0
- package/bundle/entries/index.d.ts.map +1 -0
- package/bundle/entries/index.esm.js +33 -0
- package/bundle/entries/resolve-entries.d.ts +19 -0
- package/bundle/entries/resolve-entries.d.ts.map +1 -0
- package/bundle/externals/index.cjs.js +54 -0
- package/bundle/externals/index.d.ts +74 -0
- package/bundle/externals/index.d.ts.map +1 -0
- package/bundle/externals/index.esm.js +51 -0
- package/bundle/externals/resolve-externals.d.ts +52 -0
- package/bundle/externals/resolve-externals.d.ts.map +1 -0
- package/bundle/externals/validate-globals.d.ts +19 -0
- package/bundle/externals/validate-globals.d.ts.map +1 -0
- package/bundle/fs/deps-root.d.ts +17 -0
- package/bundle/fs/deps-root.d.ts.map +1 -0
- package/bundle/fs/empty-dirs.d.ts +18 -0
- package/bundle/fs/empty-dirs.d.ts.map +1 -0
- package/bundle/fs/entry-dir.d.ts +21 -0
- package/bundle/fs/entry-dir.d.ts.map +1 -0
- package/bundle/fs/posix-path.d.ts +30 -0
- package/bundle/fs/posix-path.d.ts.map +1 -0
- package/bundle/fs/under-dir.d.ts +19 -0
- package/bundle/fs/under-dir.d.ts.map +1 -0
- package/bundle/index.cjs.js +4046 -0
- package/bundle/index.d.ts +25 -0
- package/bundle/index.d.ts.map +1 -0
- package/bundle/index.esm.js +3689 -0
- package/bundle/rollup/descriptor.d.ts +99 -0
- package/bundle/rollup/descriptor.d.ts.map +1 -0
- package/bundle/rollup/dispatch.d.ts +72 -0
- package/bundle/rollup/dispatch.d.ts.map +1 -0
- package/bundle/rollup/index.cjs.js +715 -0
- package/bundle/rollup/index.d.ts +174 -0
- package/bundle/rollup/index.d.ts.map +1 -0
- package/bundle/rollup/index.esm.js +698 -0
- package/bundle/rollup/worker/index.cjs.js +290 -0
- package/bundle/rollup/worker/index.d.ts +131 -0
- package/bundle/rollup/worker/index.d.ts.map +1 -0
- package/bundle/rollup/worker/index.esm.js +280 -0
- package/bundle/rollup/worker/job-runner.d.ts +18 -0
- package/bundle/rollup/worker/job-runner.d.ts.map +1 -0
- package/bundle/rollup/worker/types.d.ts +111 -0
- package/bundle/rollup/worker/types.d.ts.map +1 -0
- package/bundle/run-bundle-phase.d.ts +23 -0
- package/bundle/run-bundle-phase.d.ts.map +1 -0
- package/clean-output.d.ts +26 -0
- package/clean-output.d.ts.map +1 -0
- package/index.cjs.js +5317 -0
- package/index.d.ts +64 -0
- package/index.d.ts.map +1 -0
- package/index.esm.js +4910 -0
- package/memory/index.cjs.js +101 -0
- package/memory/index.d.ts +81 -0
- package/memory/index.d.ts.map +1 -0
- package/memory/index.esm.js +98 -0
- package/memory/monitor.d.ts +59 -0
- package/memory/monitor.d.ts.map +1 -0
- package/memory/recover.d.ts +19 -0
- package/memory/recover.d.ts.map +1 -0
- package/models/build-config.d.ts +266 -0
- package/models/build-config.d.ts.map +1 -0
- package/models/build-context.d.ts +68 -0
- package/models/build-context.d.ts.map +1 -0
- package/models/build-result.d.ts +43 -0
- package/models/build-result.d.ts.map +1 -0
- package/models/entry-point.d.ts +45 -0
- package/models/entry-point.d.ts.map +1 -0
- package/models/format-output.d.ts +34 -0
- package/models/format-output.d.ts.map +1 -0
- package/models/index.cjs.js +2 -0
- package/models/index.d.ts +581 -0
- package/models/index.d.ts.map +1 -0
- package/models/index.esm.js +1 -0
- package/models/package-json.d.ts +130 -0
- package/models/package-json.d.ts.map +1 -0
- package/package/assets/copy-assets.d.ts +31 -0
- package/package/assets/copy-assets.d.ts.map +1 -0
- package/package/assets/index.cjs.js +84 -0
- package/package/assets/index.d.ts +33 -0
- package/package/assets/index.d.ts.map +1 -0
- package/package/assets/index.esm.js +82 -0
- package/package/finalize-files.d.ts +25 -0
- package/package/finalize-files.d.ts.map +1 -0
- package/package/index.cjs.js +276 -0
- package/package/index.d.ts +56 -0
- package/package/index.d.ts.map +1 -0
- package/package/index.esm.js +231 -0
- package/package/json/cdn-paths.d.ts +41 -0
- package/package/json/cdn-paths.d.ts.map +1 -0
- package/package/json/filter-deps.d.ts +39 -0
- package/package/json/filter-deps.d.ts.map +1 -0
- package/package/json/generate-exports.d.ts +29 -0
- package/package/json/generate-exports.d.ts.map +1 -0
- package/package/json/index.cjs.js +24 -0
- package/package/json/index.d.ts +252 -0
- package/package/json/index.d.ts.map +1 -0
- package/package/json/index.esm.js +14 -0
- package/package/json/inherit-fields.d.ts +25 -0
- package/package/json/inherit-fields.d.ts.map +1 -0
- package/package/json/read-package-json.d.ts +18 -0
- package/package/json/read-package-json.d.ts.map +1 -0
- package/package/json/reflect-files-allowlist.d.ts +32 -0
- package/package/json/reflect-files-allowlist.d.ts.map +1 -0
- package/package/json/synthesize.d.ts +53 -0
- package/package/json/synthesize.d.ts.map +1 -0
- package/package/json/write.d.ts +18 -0
- package/package/json/write.d.ts.map +1 -0
- package/package/licenses/collect.d.ts +25 -0
- package/package/licenses/collect.d.ts.map +1 -0
- package/package/licenses/generate-content.d.ts +20 -0
- package/package/licenses/generate-content.d.ts.map +1 -0
- package/package/licenses/index.cjs.js +135 -0
- package/package/licenses/index.d.ts +73 -0
- package/package/licenses/index.d.ts.map +1 -0
- package/package/licenses/index.esm.js +89 -0
- package/package/licenses/license-url.d.ts +20 -0
- package/package/licenses/license-url.d.ts.map +1 -0
- package/package/licenses/types.d.ts +12 -0
- package/package/licenses/types.d.ts.map +1 -0
- package/package/licenses/write.d.ts +16 -0
- package/package/licenses/write.d.ts.map +1 -0
- package/package/run-package-phase.d.ts +30 -0
- package/package/run-package-phase.d.ts.map +1 -0
- package/package.json +347 -0
- package/presets/by-names.d.ts +20 -0
- package/presets/by-names.d.ts.map +1 -0
- package/presets/by-prefix.d.ts +22 -0
- package/presets/by-prefix.d.ts.map +1 -0
- package/presets/index.cjs.js +8 -0
- package/presets/index.d.ts +43 -0
- package/presets/index.d.ts.map +1 -0
- package/presets/index.esm.js +5 -0
|
@@ -0,0 +1,857 @@
|
|
|
1
|
+
import { createError } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/error/index.esm.js';
|
|
2
|
+
import { logger } from '../../_dependencies/@hyperfrontend/logging/index.esm.js';
|
|
3
|
+
import { join as join$2, exists, relativePath, removeDirectory, readFileContent, getDirname, readDirectory } from '../../_dependencies/@hyperfrontend/project-scope/core/index.esm.js';
|
|
4
|
+
import { from } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/array/index.esm.js';
|
|
5
|
+
import { createSet } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/set/index.esm.js';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import { join as join$1, isAbsolute, resolve, dirname } from 'node:path';
|
|
8
|
+
import { spawn } from 'node:child_process';
|
|
9
|
+
import { existsSync, rmSync, mkdtempSync, readFileSync, cpSync, statSync, unlinkSync } from 'node:fs';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
import { stringify, parse } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/json/index.esm.js';
|
|
12
|
+
import { createPromise } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/promise/index.esm.js';
|
|
13
|
+
import { readJsonFileIfExists, exists as exists$1 } from '../../_dependencies/@hyperfrontend/project-scope/core/fs/index.esm.js';
|
|
14
|
+
import { join as join$3, normalizeToForwardSlashes as normalizeToForwardSlashes$1 } from '../../_dependencies/@hyperfrontend/project-scope/core/path/index.esm.js';
|
|
15
|
+
import { dateNow } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/date/index.esm.js';
|
|
16
|
+
import { clearInterval, setInterval } from '../../_dependencies/@hyperfrontend/immutable-api-utils/built-in-copy/timers/index.esm.js';
|
|
17
|
+
import { normalizeToForwardSlashes, join } from '../../_shared/bundle/fs/posix-path/index.esm.js';
|
|
18
|
+
import { buildWorkspaceRoutes } from '../../_shared/bundle/dependencies/externalize-plugin/index.esm.js';
|
|
19
|
+
import { depsRootOf } from '../../_shared/bundle/fs/deps-root/index.esm.js';
|
|
20
|
+
import { collectWorkspacePrefixDeps, collectWorkspaceExactSpecifiers } from '../../_shared/bundle/dependencies/collect-workspace-deps/index.esm.js';
|
|
21
|
+
import { flattenDeclarationPaths } from '../../_shared/bundle/declarations/flatten-paths/index.esm.js';
|
|
22
|
+
import { collectChunkSpecifiers, hasDynamicSpecifier } from '../../_shared/bundle/dependencies/prune/specifiers/index.esm.js';
|
|
23
|
+
import { entryDirOf } from '../../_shared/bundle/fs/entry-dir/index.esm.js';
|
|
24
|
+
import { isUnderDir } from '../../_shared/bundle/fs/under-dir/index.esm.js';
|
|
25
|
+
|
|
26
|
+
const log$4 = logger.channel('builder:bundle:dependencies:pre-pass');
|
|
27
|
+
const REPORT_DIR_PREFIX = 'hf-builder-prepass-';
|
|
28
|
+
const createReportDir = () => mkdtempSync(join$2(tmpdir(), REPORT_DIR_PREFIX));
|
|
29
|
+
const reportPathFor = (reportDir, job, index) => join$2(reportDir, `${index}-${job.dep.replace(/\//g, '__')}-${job.kind}-${job.format}.json`);
|
|
30
|
+
const runOne = (job, reportPath, options) => createPromise((resolve, reject) => {
|
|
31
|
+
const execPath = options.execPath ?? process.execPath;
|
|
32
|
+
const argv = [...(options.execArgv ?? []), options.workerPath, stringify({ ...job, reportPath })];
|
|
33
|
+
const child = spawn(execPath, argv, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
34
|
+
let capturedStderr = '';
|
|
35
|
+
child.stdout?.on('data', (chunk) => {
|
|
36
|
+
process.stdout.write(chunk);
|
|
37
|
+
});
|
|
38
|
+
child.stderr?.on('data', (chunk) => {
|
|
39
|
+
const text = typeof chunk === 'string' ? chunk : chunk.toString();
|
|
40
|
+
capturedStderr += text;
|
|
41
|
+
process.stderr.write(text);
|
|
42
|
+
});
|
|
43
|
+
child.on('error', (error) => {
|
|
44
|
+
reject(createError(`pre-pass worker for ${job.dep} (${job.kind}/${job.format}) failed to spawn: ${error.message}`));
|
|
45
|
+
});
|
|
46
|
+
child.on('exit', (code) => {
|
|
47
|
+
if (code !== 0) {
|
|
48
|
+
const tail = capturedStderr.trim().split('\n').slice(-10).join('\n');
|
|
49
|
+
reject(createError(`pre-pass worker for ${job.dep} (${job.kind}/${job.format}) exited with code ${code}\n${tail}`));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
resolve();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
const readReport = (reportPath, job) => {
|
|
56
|
+
if (!existsSync(reportPath)) {
|
|
57
|
+
throw createError(`pre-pass worker for ${job.dep} (${job.kind}/${job.format}) did not write a report at ${reportPath}`);
|
|
58
|
+
}
|
|
59
|
+
const data = parse(readFileSync(reportPath, 'utf8'));
|
|
60
|
+
return { job, outputSize: data.outputSize, endHeapMB: data.endHeapMB, endRssMB: data.endRssMB, durationMs: data.durationMs };
|
|
61
|
+
};
|
|
62
|
+
const SWC_NODE_REGISTER = '@swc-node/register';
|
|
63
|
+
const swcNodeAvailable = (workspaceRoot) => existsSync(join$2(workspaceRoot, 'node_modules', '@swc-node', 'register', 'index.js'));
|
|
64
|
+
/**
|
|
65
|
+
* Default worker-path resolution: prefers the built-and-published artifact, falls
|
|
66
|
+
* back to the workspace dist path, and finally to the in-source TypeScript file
|
|
67
|
+
* via `@swc-node/register` (bootstrap case where builder is building itself for
|
|
68
|
+
* the first time and the dist worker doesn't exist yet).
|
|
69
|
+
*
|
|
70
|
+
* Looks at, in order:
|
|
71
|
+
* 1. `<workspaceRoot>/dist/libs/builder/bundle/dependencies/worker/index.cjs.js`
|
|
72
|
+
* 2. `<workspaceRoot>/node_modules/@hyperfrontend/builder/bundle/dependencies/worker/index.cjs.js`
|
|
73
|
+
* 3. `<workspaceRoot>/libs/builder/src/bundle/dependencies/worker/index.ts` (with `--require \@swc-node/register`)
|
|
74
|
+
*
|
|
75
|
+
* @param workspaceRoot - Absolute workspace root.
|
|
76
|
+
* @returns Worker invocation descriptor, or `undefined` if no candidate exists.
|
|
77
|
+
*
|
|
78
|
+
* @example Locating the worker for an in-workspace consumer
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const invocation = resolveDefaultWorkerPath('/abs/repo')
|
|
81
|
+
* if (!invocation) throw new Error('builder worker artifact not found')
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
const resolveDefaultWorkerPath = (workspaceRoot) => {
|
|
85
|
+
const distCandidates = [
|
|
86
|
+
join$2(workspaceRoot, 'dist', 'libs', 'builder', 'bundle', 'dependencies', 'worker', 'index.cjs.js'),
|
|
87
|
+
join$2(workspaceRoot, 'node_modules', '@hyperfrontend', 'builder', 'bundle', 'dependencies', 'worker', 'index.cjs.js'),
|
|
88
|
+
];
|
|
89
|
+
for (const path of distCandidates) {
|
|
90
|
+
if (existsSync(path))
|
|
91
|
+
return { path, execArgv: [] };
|
|
92
|
+
}
|
|
93
|
+
const sourcePath = join$2(workspaceRoot, 'libs', 'builder', 'src', 'bundle', 'dependencies', 'worker', 'index.ts');
|
|
94
|
+
if (existsSync(sourcePath) && swcNodeAvailable(workspaceRoot)) {
|
|
95
|
+
return { path: sourcePath, execArgv: ['--require', SWC_NODE_REGISTER] };
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Sequentially runs the supplied pre-pass jobs by forking a fresh Node child
|
|
101
|
+
* per invocation. Strict sequential execution is mandatory — concurrent
|
|
102
|
+
* children would simultaneously pressure RAM and OOM the container.
|
|
103
|
+
*
|
|
104
|
+
* Each child writes a JSON report to a parent-supplied path; this function
|
|
105
|
+
* reads the report after the child exits and accumulates per-job statistics.
|
|
106
|
+
* If any worker exits non-zero or fails to produce a report, the function
|
|
107
|
+
* throws with the failed job's context.
|
|
108
|
+
*
|
|
109
|
+
* The report directory is created in the OS temp dir and removed before
|
|
110
|
+
* returning, regardless of success or failure.
|
|
111
|
+
*
|
|
112
|
+
* @param jobs - Pre-pass jobs to run.
|
|
113
|
+
* @param options - Worker path + optional memory monitor.
|
|
114
|
+
* @returns One result per supplied job, in the order the jobs were given.
|
|
115
|
+
*
|
|
116
|
+
* @example Pre-passing rollup and one of its plugins
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const results = await runPrePass(jobs, { workerPath: '/abs/dist/libs/builder/bundle/dependencies/worker.cjs.js' })
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
const runPrePass = async (jobs, options) => {
|
|
122
|
+
if (jobs.length === 0)
|
|
123
|
+
return [];
|
|
124
|
+
const reportDir = createReportDir();
|
|
125
|
+
const results = [];
|
|
126
|
+
try {
|
|
127
|
+
for (const [index, job] of jobs.entries()) {
|
|
128
|
+
const reportPath = reportPathFor(reportDir, job, index);
|
|
129
|
+
log$4.info(`pre-pass ${index + 1}/${jobs.length}: ${job.dep} (${job.kind}/${job.format})`);
|
|
130
|
+
options.monitor?.check(`bundle:dependencies:prepass:${index + 1}/${jobs.length}:${job.dep}:${job.kind}:${job.format}:start`);
|
|
131
|
+
await runOne(job, reportPath, options);
|
|
132
|
+
const result = readReport(reportPath, job);
|
|
133
|
+
log$4.debug(`pre-pass ${index + 1}/${jobs.length} done: ${job.dep} size=${result.outputSize}B heap=${result.endHeapMB.toFixed(1)}MB rss=${result.endRssMB.toFixed(1)}MB t=${result.durationMs}ms`);
|
|
134
|
+
options.monitor?.check(`bundle:dependencies:prepass:${index + 1}/${jobs.length}:${job.dep}:${job.kind}:${job.format}:end`);
|
|
135
|
+
results.push(result);
|
|
136
|
+
}
|
|
137
|
+
return results;
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
rmSync(reportDir, { recursive: true, force: true });
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const stripTrailingIndexDts = (filePath) => {
|
|
145
|
+
const normalized = normalizeToForwardSlashes(filePath);
|
|
146
|
+
const trimmed = normalized.replace(/\/index\.d\.ts$/, '');
|
|
147
|
+
return trimmed === normalized ? normalized.replace(/\.d\.ts$/, '') : trimmed;
|
|
148
|
+
};
|
|
149
|
+
const stripTrailingSlash = (value) => (value.endsWith('/') ? value.slice(0, -1) : value);
|
|
150
|
+
const dirnameOf = (filePath) => {
|
|
151
|
+
const normalized = normalizeToForwardSlashes(filePath);
|
|
152
|
+
const idx = normalized.lastIndexOf('/');
|
|
153
|
+
return idx <= 0 ? normalized : normalized.slice(0, idx);
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Computes the directory (without trailing slash) that owns a sibling's
|
|
157
|
+
* `index.d.ts`. Used to test whether an absolute resolved id falls inside the
|
|
158
|
+
* sibling's directory tree.
|
|
159
|
+
*
|
|
160
|
+
* @param sibling - Sibling-entry record.
|
|
161
|
+
* @returns Sibling's directory with no trailing slash.
|
|
162
|
+
*/
|
|
163
|
+
const siblingDir = (sibling) => stripTrailingSlash(dirnameOf(sibling.indexDtsPath));
|
|
164
|
+
const startsWithDir = (resolved, dir) => {
|
|
165
|
+
const normalizedResolved = normalizeToForwardSlashes(resolved);
|
|
166
|
+
if (normalizedResolved === dir)
|
|
167
|
+
return true;
|
|
168
|
+
return normalizedResolved.startsWith(`${dir}/`);
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* Returns the sibling entry whose directory contains `absolutePath`, or `undefined`
|
|
172
|
+
* when no sibling owns the path.
|
|
173
|
+
*
|
|
174
|
+
* @param absolutePath - Resolved absolute path of an import.
|
|
175
|
+
* @param siblings - Sibling-entry records.
|
|
176
|
+
* @returns Owning sibling entry, or `undefined`.
|
|
177
|
+
*
|
|
178
|
+
* @example Identifying a sibling for a resolved type import
|
|
179
|
+
* ```typescript
|
|
180
|
+
* const owner = findOwningSibling('/abs/dist/libs/foo/models/index.d.ts', siblings)
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
const findOwningSibling = (absolutePath, siblings) => {
|
|
184
|
+
const normalized = normalizeToForwardSlashes(absolutePath);
|
|
185
|
+
let best;
|
|
186
|
+
let bestDirLength = -1;
|
|
187
|
+
for (const sibling of siblings) {
|
|
188
|
+
const dir = siblingDir(sibling);
|
|
189
|
+
if (!startsWithDir(normalized, dir))
|
|
190
|
+
continue;
|
|
191
|
+
if (dir.length > bestDirLength) {
|
|
192
|
+
best = sibling;
|
|
193
|
+
bestDirLength = dir.length;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return best;
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Computes the bare-specifier form of a sibling import as emitted in the
|
|
200
|
+
* rewritten `.d.ts` (e.g., `../models`, `../../models`, `./bundle/declarations`).
|
|
201
|
+
*
|
|
202
|
+
* Always omits the trailing `index.d.ts` so both `moduleResolution: 'bundler'`
|
|
203
|
+
* and `node` accept it.
|
|
204
|
+
*
|
|
205
|
+
* @param selfDtsPath - Absolute path to the current entry's `index.d.ts`.
|
|
206
|
+
* @param sibling - The sibling entry being targeted.
|
|
207
|
+
* @returns POSIX-style relative specifier ready for `id` in a rollup external resolution.
|
|
208
|
+
*
|
|
209
|
+
* @example Computing a sibling import from `bundle/index.d.ts` to `models/`
|
|
210
|
+
* ```typescript
|
|
211
|
+
* computeSiblingSpecifier(
|
|
212
|
+
* '/abs/dist/libs/foo/bundle/index.d.ts',
|
|
213
|
+
* { srcPath: 'models', indexDtsPath: '/abs/dist/libs/foo/models/index.d.ts' }
|
|
214
|
+
* ) // => '../models'
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
const computeSiblingSpecifier = (selfDtsPath, sibling) => {
|
|
218
|
+
const fromDir = dirnameOf(selfDtsPath);
|
|
219
|
+
const toDir = siblingDir(sibling);
|
|
220
|
+
const fromSegments = fromDir.split('/').filter((s) => s.length > 0);
|
|
221
|
+
const toSegments = toDir.split('/').filter((s) => s.length > 0);
|
|
222
|
+
let common = 0;
|
|
223
|
+
while (common < fromSegments.length && common < toSegments.length && fromSegments[common] === toSegments[common]) {
|
|
224
|
+
common += 1;
|
|
225
|
+
}
|
|
226
|
+
const upSegments = fromSegments.length - common;
|
|
227
|
+
const downSegments = toSegments.slice(common);
|
|
228
|
+
if (upSegments === 0 && downSegments.length === 0)
|
|
229
|
+
return '.';
|
|
230
|
+
const ups = '../'.repeat(upSegments);
|
|
231
|
+
const downs = downSegments.join('/');
|
|
232
|
+
if (upSegments === 0)
|
|
233
|
+
return `./${downs}`;
|
|
234
|
+
return downs.length > 0 ? `${ups}${downs}` : ups.replace(/\/$/, '');
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Resolves a relative or absolute `source` against `importer` (or `selfDtsPath`
|
|
238
|
+
* when no importer is given) and returns the absolute filesystem candidate
|
|
239
|
+
* suitable for matching against sibling entries.
|
|
240
|
+
*
|
|
241
|
+
* Mirrors TypeScript's lookup rules at the level we need: when the candidate
|
|
242
|
+
* exists as `<candidate>/index.d.ts` we treat that as the resolved file,
|
|
243
|
+
* otherwise the candidate path itself.
|
|
244
|
+
*
|
|
245
|
+
* @param source - The import specifier as it appears in source.
|
|
246
|
+
* @param importer - Absolute path of the importing module, when known.
|
|
247
|
+
* @param selfDtsPath - Absolute path to the entry currently being rewritten (fallback importer).
|
|
248
|
+
* @returns Absolute candidate path for sibling matching.
|
|
249
|
+
*/
|
|
250
|
+
const resolveCandidate = (source, importer, selfDtsPath) => {
|
|
251
|
+
if (isAbsolute(source))
|
|
252
|
+
return normalizeToForwardSlashes(source);
|
|
253
|
+
if (source.startsWith('.')) {
|
|
254
|
+
const fromDir = dirnameOf(importer ?? selfDtsPath);
|
|
255
|
+
return normalizeToForwardSlashes(resolve(fromDir, source));
|
|
256
|
+
}
|
|
257
|
+
return source;
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Returns a rollup plugin that externalizes any import resolving inside a
|
|
261
|
+
* sibling entry's directory tree, rewriting the emitted specifier to a POSIX
|
|
262
|
+
* relative path stripped of `/index` and `.d.ts` suffixes.
|
|
263
|
+
*
|
|
264
|
+
* The plugin's `resolveId` hook returns `null` for everything that does not
|
|
265
|
+
* resolve into a sibling — that lets the rest of the rollup-plugin-dts chain
|
|
266
|
+
* inline third-party type imports as before.
|
|
267
|
+
*
|
|
268
|
+
* Self-ownership is enforced by adding the current entry into the ownership
|
|
269
|
+
* pool: when the deepest-matching entry directory is the entry being rewritten
|
|
270
|
+
* (and not a sibling), the resolver returns `null` so rollup keeps the path
|
|
271
|
+
* internal. This matters for the package root entry whose directory prefix-
|
|
272
|
+
* matches every other entry's path — without including self, root would
|
|
273
|
+
* spuriously claim its own subtree's files.
|
|
274
|
+
*
|
|
275
|
+
* @param input - Self + sibling entry descriptors.
|
|
276
|
+
* @returns Rollup plugin.
|
|
277
|
+
*
|
|
278
|
+
* @example Plugin instance for the bundle entry pass
|
|
279
|
+
* ```typescript
|
|
280
|
+
* const plugin = createSiblingExternalizePlugin({
|
|
281
|
+
* selfSrcPath: 'bundle',
|
|
282
|
+
* selfDtsPath: '/abs/dist/libs/foo/bundle/index.d.ts',
|
|
283
|
+
* siblings: [{ srcPath: 'models', indexDtsPath: '/abs/dist/libs/foo/models/index.d.ts' }],
|
|
284
|
+
* })
|
|
285
|
+
* ```
|
|
286
|
+
*/
|
|
287
|
+
const createSiblingExternalizePlugin = (input) => {
|
|
288
|
+
const { selfSrcPath, selfDtsPath, siblings } = input;
|
|
289
|
+
const selfEntry = { srcPath: selfSrcPath, indexDtsPath: selfDtsPath };
|
|
290
|
+
const ownershipPool = [selfEntry, ...siblings];
|
|
291
|
+
const selfDtsResolved = normalizeToForwardSlashes(selfDtsPath);
|
|
292
|
+
return {
|
|
293
|
+
name: 'externalize-sibling-subpaths',
|
|
294
|
+
resolveId(source, importer) {
|
|
295
|
+
if (siblings.length === 0)
|
|
296
|
+
return null;
|
|
297
|
+
const candidate = resolveCandidate(source, importer, selfDtsPath);
|
|
298
|
+
const indexCandidate = candidate.endsWith('.d.ts') ? candidate : `${stripTrailingIndexDts(candidate)}/index.d.ts`;
|
|
299
|
+
const owner = findOwningSibling(candidate, ownershipPool) ?? findOwningSibling(indexCandidate, ownershipPool);
|
|
300
|
+
if (!owner)
|
|
301
|
+
return null;
|
|
302
|
+
if (normalizeToForwardSlashes(owner.indexDtsPath) === selfDtsResolved)
|
|
303
|
+
return null;
|
|
304
|
+
return { id: computeSiblingSpecifier(selfDtsPath, owner), external: true };
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* Convenience: filters an entry list to siblings of the supplied `srcPath`.
|
|
310
|
+
*
|
|
311
|
+
* @param srcPath - The entry's `srcPath` to exclude.
|
|
312
|
+
* @param entries - All discovered entries.
|
|
313
|
+
* @returns Entries whose `srcPath` differs from the supplied one.
|
|
314
|
+
*
|
|
315
|
+
* @example Building the sibling list for `bundle/`
|
|
316
|
+
* ```typescript
|
|
317
|
+
* const siblings = filterSiblings('bundle', allEntries)
|
|
318
|
+
* ```
|
|
319
|
+
*/
|
|
320
|
+
const filterSiblings = (srcPath, entries) => entries.filter((entry) => entry.srcPath !== srcPath);
|
|
321
|
+
/**
|
|
322
|
+
* Joins an output base directory with an entry's `srcPath` to produce the
|
|
323
|
+
* absolute path of the entry's bundled `index.d.ts`.
|
|
324
|
+
*
|
|
325
|
+
* @param outputPath - Absolute output directory.
|
|
326
|
+
* @param srcPath - Entry's `srcPath`. `''` for root.
|
|
327
|
+
* @returns Absolute path to `<outputPath>/<srcPath>/index.d.ts`.
|
|
328
|
+
*
|
|
329
|
+
* @example Computing the d.ts path for a sub-entry
|
|
330
|
+
* ```typescript
|
|
331
|
+
* dtsPathFor('/abs/dist/libs/foo', 'models') // => '/abs/dist/libs/foo/models/index.d.ts'
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
const dtsPathFor = (outputPath, srcPath) => srcPath ? join(outputPath, srcPath, 'index.d.ts') : join(outputPath, 'index.d.ts');
|
|
335
|
+
|
|
336
|
+
const log$3 = logger.channel('builder:bundle:declarations:dts-per-entry');
|
|
337
|
+
const buildSiblingDescriptors = (entries, context, currentSrcPath) => {
|
|
338
|
+
const descriptors = [];
|
|
339
|
+
for (const entry of entries) {
|
|
340
|
+
if (entry.srcPath === currentSrcPath)
|
|
341
|
+
continue;
|
|
342
|
+
const indexDtsPath = dtsPathFor(context.outputPath, entry.srcPath);
|
|
343
|
+
if (!exists(indexDtsPath))
|
|
344
|
+
continue;
|
|
345
|
+
descriptors.push({ srcPath: entry.srcPath, indexDtsPath });
|
|
346
|
+
}
|
|
347
|
+
return descriptors;
|
|
348
|
+
};
|
|
349
|
+
const buildJobs$1 = (entries, context) => {
|
|
350
|
+
const jobs = [];
|
|
351
|
+
const workspacePrefixDeps = collectWorkspacePrefixDeps(context);
|
|
352
|
+
const workspaceExactSpecifiers = collectWorkspaceExactSpecifiers(context);
|
|
353
|
+
const workspaceRoutes = buildWorkspaceRoutes(context.workspaceBundledDeps);
|
|
354
|
+
const depsRoot = depsRootOf(context);
|
|
355
|
+
for (const entry of entries) {
|
|
356
|
+
const inputPath = dtsPathFor(context.outputPath, entry.srcPath);
|
|
357
|
+
if (!exists(inputPath))
|
|
358
|
+
continue;
|
|
359
|
+
const siblingEntries = buildSiblingDescriptors(entries, context, entry.srcPath);
|
|
360
|
+
jobs.push({
|
|
361
|
+
kind: 'dts',
|
|
362
|
+
dep: entry.exportPath,
|
|
363
|
+
inputPath,
|
|
364
|
+
format: 'esm',
|
|
365
|
+
outputPath: inputPath,
|
|
366
|
+
otherDeps: [...context.bundledDeps, ...workspacePrefixDeps],
|
|
367
|
+
otherWorkspaceSpecifiers: workspaceExactSpecifiers,
|
|
368
|
+
siblingEntries,
|
|
369
|
+
selfDtsPath: inputPath,
|
|
370
|
+
selfSrcPath: entry.srcPath,
|
|
371
|
+
npmDeps: context.bundledDeps,
|
|
372
|
+
workspaceRoutes,
|
|
373
|
+
depsRoot,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
return jobs;
|
|
377
|
+
};
|
|
378
|
+
/**
|
|
379
|
+
* Runs the per-entry d.ts inlining pass: re-runs `rollup-plugin-dts` over every
|
|
380
|
+
* tsc-emitted entry `.d.ts` so (a) local per-source sibling re-exports
|
|
381
|
+
* (`export … from './create-logger'`) are flattened into the entry's
|
|
382
|
+
* `index.d.ts`, and (b) bundled-dep type imports are routed through
|
|
383
|
+
* `_dependencies/<dep>/index.d.ts` rather than left as bare specifiers. This
|
|
384
|
+
* self-containment is what lets `pruneOrphanDeclarations` delete the orphaned
|
|
385
|
+
* per-source `.d.ts` afterwards without orphaning a still-referenced sibling.
|
|
386
|
+
*
|
|
387
|
+
* Runs whenever the build bundles any dep — npm (`bundledDeps`) **or** workspace
|
|
388
|
+
* (`workspaceBundledDeps`); a package whose deps are all `@hyperfrontend/*` still
|
|
389
|
+
* needs the flatten. Entries whose tsc output is missing are skipped silently —
|
|
390
|
+
* the bundle phase may have skipped them deliberately (e.g., empty bundles).
|
|
391
|
+
*
|
|
392
|
+
* @param context - Resolved build context.
|
|
393
|
+
* @param monitor - Optional memory monitor invoked between jobs.
|
|
394
|
+
* @throws {Error} When the worker artifact cannot be located, or when any per-entry job fails.
|
|
395
|
+
*
|
|
396
|
+
* @example Inlining bundled-dep types into every entry's .d.ts after tsc emission
|
|
397
|
+
* ```typescript
|
|
398
|
+
* await runDtsPerEntry(context)
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
const runDtsPerEntry = async (context, monitor) => {
|
|
402
|
+
if (context.bundledDeps.length === 0 && context.workspaceBundledDeps.length === 0)
|
|
403
|
+
return;
|
|
404
|
+
const invocation = resolveDefaultWorkerPath(context.workspaceRoot);
|
|
405
|
+
if (!invocation) {
|
|
406
|
+
throw createError('bundleAllDeps is enabled but the pre-pass worker artifact was not found for the per-entry d.ts pass.');
|
|
407
|
+
}
|
|
408
|
+
const jobs = buildJobs$1(context.entryPointDiscovery.entryPoints, context);
|
|
409
|
+
if (jobs.length === 0) {
|
|
410
|
+
log$3.debug('per-entry d.ts pass: no entries with tsc-emitted .d.ts files');
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
log$3.info(`per-entry d.ts pass: ${jobs.length} entries`);
|
|
414
|
+
monitor?.check('bundle:declarations:dts-perentry:start');
|
|
415
|
+
await runPrePass(jobs, { workerPath: invocation.path, execArgv: invocation.execArgv, monitor });
|
|
416
|
+
monitor?.check('bundle:declarations:dts-perentry:end');
|
|
417
|
+
};
|
|
418
|
+
|
|
419
|
+
const ROOTS = (projectRoot, workspaceRoot) => [projectRoot, workspaceRoot];
|
|
420
|
+
const findPackageJsonByWalkingUp = (entryPath, dep) => {
|
|
421
|
+
const segments = entryPath.split('/');
|
|
422
|
+
for (let i = segments.length - 1; i > 0; i--) {
|
|
423
|
+
const prefix = segments.slice(0, i).join('/');
|
|
424
|
+
const candidate = `${prefix}/package.json`;
|
|
425
|
+
if (!exists$1(candidate))
|
|
426
|
+
continue;
|
|
427
|
+
try {
|
|
428
|
+
const meta = readJsonFileIfExists(candidate);
|
|
429
|
+
if (meta?.name === dep)
|
|
430
|
+
return candidate;
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
// fall through
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return undefined;
|
|
437
|
+
};
|
|
438
|
+
const findPackageJsonViaRequire = (dep, fromRoots) => {
|
|
439
|
+
for (const root of fromRoots) {
|
|
440
|
+
try {
|
|
441
|
+
const anchor = join$3(root, 'package.json');
|
|
442
|
+
if (!exists$1(anchor))
|
|
443
|
+
continue;
|
|
444
|
+
const req = createRequire(anchor);
|
|
445
|
+
const direct = `${dep}/package.json`;
|
|
446
|
+
try {
|
|
447
|
+
const path = req.resolve(direct);
|
|
448
|
+
if (exists$1(path))
|
|
449
|
+
return path;
|
|
450
|
+
}
|
|
451
|
+
catch {
|
|
452
|
+
// package may restrict ./package.json via exports — fall through to entry-anchored walk
|
|
453
|
+
}
|
|
454
|
+
try {
|
|
455
|
+
const entryPath = req.resolve(dep);
|
|
456
|
+
const found = findPackageJsonByWalkingUp(entryPath, dep);
|
|
457
|
+
if (found)
|
|
458
|
+
return found;
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
// entry resolution may also fail (e.g., type-only package); try the next root
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
catch {
|
|
465
|
+
// try next root
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return undefined;
|
|
469
|
+
};
|
|
470
|
+
const ensureDtsEntry = (pkg) => pkg.types ?? pkg.typings;
|
|
471
|
+
const absolutize = (relativeTo, rel) => {
|
|
472
|
+
if (isAbsolute(rel))
|
|
473
|
+
return normalizeToForwardSlashes$1(rel);
|
|
474
|
+
return normalizeToForwardSlashes$1(resolve(relativeTo, rel));
|
|
475
|
+
};
|
|
476
|
+
/**
|
|
477
|
+
* Resolves the absolute path to a bundled dep's entry file (JS or `.d.ts`) for a
|
|
478
|
+
* pre-pass invocation.
|
|
479
|
+
*
|
|
480
|
+
* For JS jobs the resolution prefers the dep's `module` field (ESM) over `main`
|
|
481
|
+
* (CJS). For dts jobs it prefers `types` over `typings`. Lookup walks the project
|
|
482
|
+
* root first, then the workspace root, using `createRequire` so node's standard
|
|
483
|
+
* resolution semantics apply (including support for hoisted `node_modules`).
|
|
484
|
+
*
|
|
485
|
+
* @param options - Dep name, root paths, and kind.
|
|
486
|
+
* @returns Absolute path to the dep's entry file.
|
|
487
|
+
* @throws {Error} When the dep's `package.json` cannot be located or it lacks the
|
|
488
|
+
* required entry field.
|
|
489
|
+
*
|
|
490
|
+
* @example Resolving the runtime entry for `rollup`
|
|
491
|
+
* ```typescript
|
|
492
|
+
* const entry = resolveDepEntry({ dep: 'rollup', projectRoot, workspaceRoot, kind: 'js' })
|
|
493
|
+
* ```
|
|
494
|
+
*/
|
|
495
|
+
const resolveDepEntry = (options) => {
|
|
496
|
+
const { dep, projectRoot, workspaceRoot} = options;
|
|
497
|
+
const pkgPath = findPackageJsonViaRequire(dep, ROOTS(projectRoot, workspaceRoot));
|
|
498
|
+
if (!pkgPath)
|
|
499
|
+
throw createError(`pre-pass: cannot locate package.json for dep "${dep}"`);
|
|
500
|
+
const pkg = readJsonFileIfExists(pkgPath);
|
|
501
|
+
if (!pkg)
|
|
502
|
+
throw createError(`pre-pass: package.json for dep "${dep}" could not be read at ${pkgPath}`);
|
|
503
|
+
const relative = ensureDtsEntry(pkg);
|
|
504
|
+
if (!relative)
|
|
505
|
+
throw createError(`pre-pass: dep "${dep}" has no ${'types/typings'} entry`);
|
|
506
|
+
return absolutize(dirname(pkgPath), relative);
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
const log$2 = logger.channel('builder:bundle:declarations:dts-pre-pass');
|
|
510
|
+
const workspaceDtsOutputFile = (entry) => entry.subPath ? `${entry.specifier}/index.d.ts` : `${entry.packageName}/index.d.ts`;
|
|
511
|
+
const filterRouteEntries = (entry, all) => all.filter((other) => (entry.policy === 'sub-path' ? other.specifier !== entry.specifier : other.packageName !== entry.packageName));
|
|
512
|
+
const buildJobs = (deps, context) => {
|
|
513
|
+
const depsRoot = depsRootOf(context);
|
|
514
|
+
const jobs = [];
|
|
515
|
+
const workspacePrefixDeps = collectWorkspacePrefixDeps(context);
|
|
516
|
+
const workspaceExactSpecifiers = collectWorkspaceExactSpecifiers(context);
|
|
517
|
+
const workspaceRoutes = buildWorkspaceRoutes(context.workspaceBundledDeps);
|
|
518
|
+
for (const dep of deps) {
|
|
519
|
+
let inputPath;
|
|
520
|
+
try {
|
|
521
|
+
inputPath = resolveDepEntry({ dep, projectRoot: context.projectRoot, workspaceRoot: context.workspaceRoot, kind: 'dts' });
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
log$2.warn(`skipping d.ts pre-pass for ${dep}: ${error instanceof Error ? error.message : String(error)}`);
|
|
525
|
+
continue;
|
|
526
|
+
}
|
|
527
|
+
const otherNpmDeps = deps.filter((d) => d !== dep);
|
|
528
|
+
jobs.push({
|
|
529
|
+
kind: 'dts',
|
|
530
|
+
dep,
|
|
531
|
+
inputPath,
|
|
532
|
+
format: 'esm',
|
|
533
|
+
outputPath: join$2(depsRoot, dep, 'index.d.ts'),
|
|
534
|
+
otherDeps: [...otherNpmDeps, ...workspacePrefixDeps],
|
|
535
|
+
otherWorkspaceSpecifiers: workspaceExactSpecifiers,
|
|
536
|
+
npmDeps: otherNpmDeps,
|
|
537
|
+
workspaceRoutes,
|
|
538
|
+
depsRoot,
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
return jobs;
|
|
542
|
+
};
|
|
543
|
+
const buildWorkspaceJobs = (context, npmDeps) => {
|
|
544
|
+
if (context.workspaceBundledDeps.length === 0)
|
|
545
|
+
return [];
|
|
546
|
+
const depsRoot = depsRootOf(context);
|
|
547
|
+
const wholeSurface = collectWorkspacePrefixDeps(context);
|
|
548
|
+
const subPathSpecifiers = collectWorkspaceExactSpecifiers(context);
|
|
549
|
+
const jobs = [];
|
|
550
|
+
for (const entry of context.workspaceBundledDeps) {
|
|
551
|
+
const otherWorkspacePackages = wholeSurface.filter((name) => name !== entry.packageName || entry.policy === 'sub-path');
|
|
552
|
+
const otherSubPathSpecifiers = subPathSpecifiers.filter((spec) => spec !== entry.specifier);
|
|
553
|
+
const workspaceRoutes = buildWorkspaceRoutes(filterRouteEntries(entry, context.workspaceBundledDeps));
|
|
554
|
+
jobs.push({
|
|
555
|
+
kind: 'workspace-dts',
|
|
556
|
+
dep: entry.specifier,
|
|
557
|
+
inputPath: entry.inputPath,
|
|
558
|
+
format: 'esm',
|
|
559
|
+
outputPath: join$2(depsRoot, workspaceDtsOutputFile(entry)),
|
|
560
|
+
otherDeps: [...npmDeps, ...otherWorkspacePackages],
|
|
561
|
+
otherWorkspaceSpecifiers: otherSubPathSpecifiers,
|
|
562
|
+
tsConfigPath: entry.tsConfigPath,
|
|
563
|
+
workspaceRoot: context.workspaceRoot,
|
|
564
|
+
npmDeps,
|
|
565
|
+
workspaceRoutes,
|
|
566
|
+
depsRoot,
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
return jobs;
|
|
570
|
+
};
|
|
571
|
+
/**
|
|
572
|
+
* Runs the d.ts pre-pass: for each bundled dep, produces `_dependencies/<dep>/index.d.ts`
|
|
573
|
+
* by running `rollup-plugin-dts` over the dep's types entry. Cross-dep type imports are
|
|
574
|
+
* marked external so the per-entry d.ts pass can route them through `_dependencies/`.
|
|
575
|
+
*
|
|
576
|
+
* @param context - Resolved build context.
|
|
577
|
+
* @param monitor - Optional memory monitor invoked between jobs.
|
|
578
|
+
* @throws {Error} When the worker artifact cannot be located, or when any d.ts job fails.
|
|
579
|
+
*
|
|
580
|
+
* @example Producing _dependencies/<dep>/index.d.ts for a self-contained build
|
|
581
|
+
* ```typescript
|
|
582
|
+
* await runDtsPrePass(context)
|
|
583
|
+
* ```
|
|
584
|
+
*/
|
|
585
|
+
const runDtsPrePass = async (context, monitor) => {
|
|
586
|
+
if (context.bundledDeps.length === 0 && context.workspaceBundledDeps.length === 0)
|
|
587
|
+
return;
|
|
588
|
+
const invocation = resolveDefaultWorkerPath(context.workspaceRoot);
|
|
589
|
+
if (!invocation) {
|
|
590
|
+
throw createError('bundleAllDeps is enabled but the pre-pass worker artifact was not found for the d.ts pre-pass.');
|
|
591
|
+
}
|
|
592
|
+
const npmJobs = buildJobs(context.bundledDeps, context);
|
|
593
|
+
const workspaceJobs = buildWorkspaceJobs(context, context.bundledDeps);
|
|
594
|
+
const jobs = [...npmJobs, ...workspaceJobs];
|
|
595
|
+
if (jobs.length === 0) {
|
|
596
|
+
log$2.debug('d.ts pre-pass: no eligible deps (all skipped due to missing types)');
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
log$2.info(`d.ts pre-pass: ${npmJobs.length} npm + ${workspaceJobs.length} workspace = ${jobs.length} job(s)`);
|
|
600
|
+
monitor?.check('bundle:declarations:dts-prepass:start');
|
|
601
|
+
await runPrePass(jobs, { workerPath: invocation.path, execArgv: invocation.execArgv, monitor });
|
|
602
|
+
monitor?.check('bundle:declarations:dts-prepass:end');
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
const log$1 = logger.channel('builder:bundle:declarations');
|
|
606
|
+
const HEARTBEAT_INTERVAL_MS = 5000;
|
|
607
|
+
const BYTES_PER_MB = 1024 * 1024;
|
|
608
|
+
const formatMB = (bytes) => (bytes / BYTES_PER_MB).toFixed(1);
|
|
609
|
+
const startHeartbeat = (label, startedAt) => setInterval(() => {
|
|
610
|
+
const usage = process.memoryUsage();
|
|
611
|
+
const elapsedSec = ((dateNow() - startedAt) / 1000).toFixed(1);
|
|
612
|
+
log$1.info(`${label} still running: elapsed=${elapsedSec}s parent heap=${formatMB(usage.heapUsed)}MB rss=${formatMB(usage.rss)}MB`);
|
|
613
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
614
|
+
const runTsc = (tscPath, args, cwd) => createPromise((resolve, reject) => {
|
|
615
|
+
const startedAt = dateNow();
|
|
616
|
+
const child = spawn(tscPath, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
|
|
617
|
+
log$1.info(`tsc spawned: pid=${child.pid ?? 'unknown'}`);
|
|
618
|
+
log$1.debug(`tsc args: ${args.join(' ')}`);
|
|
619
|
+
const heartbeat = startHeartbeat('tsc', startedAt);
|
|
620
|
+
let stdout = '';
|
|
621
|
+
let stderr = '';
|
|
622
|
+
child.stdout.on('data', (chunk) => {
|
|
623
|
+
const text = chunk.toString();
|
|
624
|
+
stdout += text;
|
|
625
|
+
log$1.debug(text.trimEnd());
|
|
626
|
+
});
|
|
627
|
+
child.stderr.on('data', (chunk) => {
|
|
628
|
+
const text = chunk.toString();
|
|
629
|
+
stderr += text;
|
|
630
|
+
log$1.warn(text.trimEnd());
|
|
631
|
+
});
|
|
632
|
+
child.on('error', (error) => {
|
|
633
|
+
clearInterval(heartbeat);
|
|
634
|
+
log$1.error(`tsc spawn error: ${error.message}`);
|
|
635
|
+
reject(error);
|
|
636
|
+
});
|
|
637
|
+
child.on('close', (code) => {
|
|
638
|
+
clearInterval(heartbeat);
|
|
639
|
+
const durationMs = dateNow() - startedAt;
|
|
640
|
+
if (code !== 0) {
|
|
641
|
+
log$1.error(`tsc failed with exit code ${code} after ${durationMs}ms`);
|
|
642
|
+
reject(createError(`tsc failed with exit code ${code}`));
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
log$1.info(`tsc exited 0 in ${durationMs}ms`);
|
|
646
|
+
resolve({ success: true, stdout, stderr });
|
|
647
|
+
});
|
|
648
|
+
});
|
|
649
|
+
/**
|
|
650
|
+
* Generates `.d.ts` and `.d.ts.map` files for every entry point in the project
|
|
651
|
+
* by spawning the workspace-local TypeScript compiler.
|
|
652
|
+
*
|
|
653
|
+
* After tsc finishes, calls `flattenDeclarationPaths` to relocate the nested
|
|
654
|
+
* `dist/<lib>/libs/<lib>/src/...` structure that tsc emits with `baseUrl=workspaceRoot`
|
|
655
|
+
* back into the flat per-library shape consumers expect.
|
|
656
|
+
*
|
|
657
|
+
* @param context - Resolved build context. Provides project root, output path, tsconfig path,
|
|
658
|
+
* workspace root, and entry point discovery for the flatten step.
|
|
659
|
+
* @returns Promise resolving with tsc's exit status, captured stdout, and captured stderr.
|
|
660
|
+
* @throws {Error} When tsc exits with a non-zero status or fails to spawn.
|
|
661
|
+
*
|
|
662
|
+
* @example Generating declarations as part of a custom build
|
|
663
|
+
* ```typescript
|
|
664
|
+
* const result = await generateDeclarations(context)
|
|
665
|
+
* console.log(result.stdout)
|
|
666
|
+
* ```
|
|
667
|
+
*/
|
|
668
|
+
const generateDeclarations = async (context) => {
|
|
669
|
+
log$1.info('generating typescript declarations');
|
|
670
|
+
const usage = process.memoryUsage();
|
|
671
|
+
log$1.info(`pre-tsc memory: parent heap=${formatMB(usage.heapUsed)}MB rss=${formatMB(usage.rss)}MB`);
|
|
672
|
+
const tscPath = join$3(context.workspaceRoot, 'node_modules', '.bin', 'tsc');
|
|
673
|
+
const args = [
|
|
674
|
+
'--project',
|
|
675
|
+
context.tsConfigPath,
|
|
676
|
+
'--noEmit',
|
|
677
|
+
'false',
|
|
678
|
+
'--emitDeclarationOnly',
|
|
679
|
+
'--declaration',
|
|
680
|
+
'--declarationMap',
|
|
681
|
+
'--outDir',
|
|
682
|
+
context.outputPath,
|
|
683
|
+
];
|
|
684
|
+
const result = await runTsc(tscPath, args, context.projectRoot);
|
|
685
|
+
log$1.info('flattening declaration paths');
|
|
686
|
+
const flattenStart = dateNow();
|
|
687
|
+
flattenDeclarationPaths(context);
|
|
688
|
+
log$1.info(`flatten complete in ${dateNow() - flattenStart}ms`);
|
|
689
|
+
return result;
|
|
690
|
+
};
|
|
691
|
+
|
|
692
|
+
const log = logger.channel('builder:bundle:declarations:prune-orphans');
|
|
693
|
+
const ORPHAN_DTS_RE = /\.d\.ts$|\.d\.ts\.map$/;
|
|
694
|
+
const INDEX_DTS_NAME = 'index.d.ts';
|
|
695
|
+
/**
|
|
696
|
+
* Resolves a relative specifier found in a `.d.ts` to the absolute `.d.ts` file
|
|
697
|
+
* it points at, or `null` when it resolves to nothing on disk or into
|
|
698
|
+
* `_dependencies/`.
|
|
699
|
+
*
|
|
700
|
+
* Declaration specifiers are extensionless (`./create-logger`, `./shared/consts`)
|
|
701
|
+
* or directory imports (`./shared` → `shared/index.d.ts`); the canonical
|
|
702
|
+
* `_dependencies` routing uses an explicit runtime extension (`.../index.js`),
|
|
703
|
+
* which is rewritten to its declaration sibling. Targets under `depsRoot` are
|
|
704
|
+
* never edges for this pass — bundled-dep declarations are managed by the
|
|
705
|
+
* dependency Type Prune, and this pass must never touch them.
|
|
706
|
+
*
|
|
707
|
+
* @param dir - Absolute directory of the referencing `.d.ts`.
|
|
708
|
+
* @param spec - Relative specifier text (already known to start with `.`).
|
|
709
|
+
* @param depsRoot - Absolute path to the `_dependencies/` directory.
|
|
710
|
+
* @returns Absolute `.d.ts` path of the referenced sibling, or `null`.
|
|
711
|
+
*/
|
|
712
|
+
const toDtsTarget = (dir, spec, depsRoot) => {
|
|
713
|
+
const abs = join$2(dir, spec);
|
|
714
|
+
// why: a `.js` specifier is the bundled-dep routing shape; map it onto its declaration sibling.
|
|
715
|
+
const candidates = spec.endsWith('.js') ? [`${abs.slice(0, -3)}.d.ts`] : [`${abs}.d.ts`, join$2(abs, INDEX_DTS_NAME)];
|
|
716
|
+
for (const candidate of candidates) {
|
|
717
|
+
if (isUnderDir(candidate, depsRoot))
|
|
718
|
+
return null;
|
|
719
|
+
if (exists(candidate))
|
|
720
|
+
return candidate;
|
|
721
|
+
}
|
|
722
|
+
return null;
|
|
723
|
+
};
|
|
724
|
+
/**
|
|
725
|
+
* Computes the set of `.d.ts` files reachable from the entry-point `index.d.ts`
|
|
726
|
+
* roots by transitively following their relative specifiers.
|
|
727
|
+
*
|
|
728
|
+
* Breadth-first: each visited file's text is read, scanned once, then released
|
|
729
|
+
* before the next, so only one declaration source is resident at a time and the
|
|
730
|
+
* memory profile stays flat. Edges into `_dependencies/` and to non-existent
|
|
731
|
+
* targets are dropped. The specifier scan over-approximates (a spurious match
|
|
732
|
+
* over-keeps harmless bytes) so it never under-keeps a referenced sibling.
|
|
733
|
+
*
|
|
734
|
+
* If any reached `.d.ts` contains a dynamic (non-literal) `import(`/`require(`,
|
|
735
|
+
* the graph cannot be fully resolved, so the function returns `null` — the
|
|
736
|
+
* safe sentinel that makes the caller keep every declaration.
|
|
737
|
+
*
|
|
738
|
+
* @param roots - Absolute paths to the entry-point `index.d.ts` roots.
|
|
739
|
+
* @param depsRoot - Absolute path to the `_dependencies/` directory.
|
|
740
|
+
* @returns The set of reachable absolute `.d.ts` paths, or `null` on a dynamic
|
|
741
|
+
* specifier bail.
|
|
742
|
+
*/
|
|
743
|
+
const computeReachableDeclarations = (roots, depsRoot) => {
|
|
744
|
+
const reachable = createSet([]);
|
|
745
|
+
const queue = [];
|
|
746
|
+
for (const root of roots) {
|
|
747
|
+
if (exists(root) && !reachable.has(root)) {
|
|
748
|
+
reachable.add(root);
|
|
749
|
+
queue.push(root);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
let head = 0;
|
|
753
|
+
while (head < queue.length) {
|
|
754
|
+
const file = queue[head];
|
|
755
|
+
head += 1;
|
|
756
|
+
// why: every queued path was `exists`-checked before enqueue (roots and `toDtsTarget` targets), so a direct read is safe.
|
|
757
|
+
const source = readFileContent(file);
|
|
758
|
+
if (hasDynamicSpecifier(source)) {
|
|
759
|
+
log.warn(`dynamic import/require in ${file}; keeping all orphan declarations for safety`);
|
|
760
|
+
return null;
|
|
761
|
+
}
|
|
762
|
+
const dir = getDirname(file);
|
|
763
|
+
for (const spec of collectChunkSpecifiers(source)) {
|
|
764
|
+
const target = toDtsTarget(dir, spec, depsRoot);
|
|
765
|
+
if (target !== null && !reachable.has(target)) {
|
|
766
|
+
reachable.add(target);
|
|
767
|
+
queue.push(target);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
return reachable;
|
|
772
|
+
};
|
|
773
|
+
/**
|
|
774
|
+
* Collects every `.d.ts` / `.d.ts.map` file under `root`, recursing the whole
|
|
775
|
+
* package tree but skipping the `_dependencies/` subtree (managed by the
|
|
776
|
+
* dependency Type Prune, never touched here).
|
|
777
|
+
*
|
|
778
|
+
* @param root - Absolute path to the package output root.
|
|
779
|
+
* @param depsRoot - Absolute path to the `_dependencies/` directory.
|
|
780
|
+
* @returns Absolute paths of all declaration files outside `_dependencies/`.
|
|
781
|
+
*/
|
|
782
|
+
const collectDeclarationFiles = (root, depsRoot) => {
|
|
783
|
+
const files = [];
|
|
784
|
+
if (!exists(root))
|
|
785
|
+
return files;
|
|
786
|
+
const visit = (dir) => {
|
|
787
|
+
for (const entry of readDirectory(dir)) {
|
|
788
|
+
if (entry.isDirectory) {
|
|
789
|
+
if (isUnderDir(entry.path, depsRoot))
|
|
790
|
+
continue;
|
|
791
|
+
visit(entry.path);
|
|
792
|
+
}
|
|
793
|
+
else if (entry.isFile && ORPHAN_DTS_RE.test(entry.name)) {
|
|
794
|
+
files.push(entry.path);
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
};
|
|
798
|
+
visit(root);
|
|
799
|
+
return files;
|
|
800
|
+
};
|
|
801
|
+
/**
|
|
802
|
+
* Removes redundant per-source `.d.ts` / `.d.ts.map` files left behind once the
|
|
803
|
+
* per-entry flatten has inlined each entry's declarations into a self-contained
|
|
804
|
+
* `index.d.ts`.
|
|
805
|
+
*
|
|
806
|
+
* Walks the whole package tree (excluding `_dependencies/`) and deletes every
|
|
807
|
+
* declaration file **not reachable** from an entry-point `index.d.ts` via its
|
|
808
|
+
* transitive relative specifiers. Reachability — rather than a per-directory
|
|
809
|
+
* sweep — guarantees the invariant that after this runs no surviving `.d.ts`
|
|
810
|
+
* references a removed one: when the flatten made `index.d.ts` self-contained
|
|
811
|
+
* the reachable set collapses to the roots and every per-source sibling is
|
|
812
|
+
* pruned; when the flatten was skipped the siblings the public entry still
|
|
813
|
+
* re-exports (and anything they transitively re-export) stay live so the shipped
|
|
814
|
+
* types resolve. This removes the redundancy at the source so `dist` == the
|
|
815
|
+
* shipped tarball, demoting `package.json#files` to a backstop.
|
|
816
|
+
*
|
|
817
|
+
* Safety rails:
|
|
818
|
+
* - Never touches anything inside `_dependencies/`.
|
|
819
|
+
* - A `.d.ts.map` is kept iff its sibling `.d.ts` is reachable.
|
|
820
|
+
* - A dynamic (non-literal) `import(`/`require(` in any reached declaration
|
|
821
|
+
* aborts the prune and keeps every declaration file.
|
|
822
|
+
*
|
|
823
|
+
* @param context - Resolved build context.
|
|
824
|
+
* @returns The total number of `.d.ts` / `.d.ts.map` files removed.
|
|
825
|
+
*
|
|
826
|
+
* @example Pruning orphans after generateDeclarations
|
|
827
|
+
* ```typescript
|
|
828
|
+
* const removed = pruneOrphanDeclarations(context)
|
|
829
|
+
* ```
|
|
830
|
+
*/
|
|
831
|
+
const pruneOrphanDeclarations = (context) => {
|
|
832
|
+
const depsRoot = depsRootOf(context);
|
|
833
|
+
const roots = [];
|
|
834
|
+
for (const entry of context.entryPointDiscovery.entryPoints) {
|
|
835
|
+
const dir = entryDirOf(entry, context);
|
|
836
|
+
if (isUnderDir(dir, depsRoot))
|
|
837
|
+
continue;
|
|
838
|
+
roots.push(join$2(dir, INDEX_DTS_NAME));
|
|
839
|
+
}
|
|
840
|
+
const reachable = computeReachableDeclarations(roots, depsRoot);
|
|
841
|
+
if (reachable === null)
|
|
842
|
+
return 0;
|
|
843
|
+
let total = 0;
|
|
844
|
+
for (const file of collectDeclarationFiles(context.outputPath, depsRoot)) {
|
|
845
|
+
// why: a `.d.ts.map` shares the liveness of its `.d.ts` sibling, keyed by stripping the trailing `.map`.
|
|
846
|
+
const dtsKey = file.endsWith('.d.ts.map') ? file.slice(0, -4) : file;
|
|
847
|
+
if (reachable.has(dtsKey))
|
|
848
|
+
continue;
|
|
849
|
+
unlinkSync(file);
|
|
850
|
+
total += 1;
|
|
851
|
+
}
|
|
852
|
+
if (total > 0)
|
|
853
|
+
log.info(`pruned ${total} orphan declaration file(s)`);
|
|
854
|
+
return total;
|
|
855
|
+
};
|
|
856
|
+
|
|
857
|
+
export { computeSiblingSpecifier, createSiblingExternalizePlugin, dtsPathFor, filterSiblings, findOwningSibling, flattenDeclarationPaths, generateDeclarations, pruneOrphanDeclarations, runDtsPerEntry, runDtsPrePass };
|