@ecopages/core 0.2.0-beta.4 → 0.2.0-beta.41
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/README.md +40 -9
- package/package.json +371 -33
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +115 -6
- package/src/adapters/abstract/application-adapter.js +261 -120
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +147 -0
- package/src/adapters/abstract/server-adapter.d.ts +16 -2
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
- package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
- package/src/adapters/bun/client-bridge.d.ts +1 -0
- package/src/adapters/bun/client-bridge.js +51 -47
- package/src/adapters/bun/create-app.d.ts +9 -6
- package/src/adapters/bun/create-app.js +171 -130
- package/src/adapters/bun/hmr-manager.d.ts +1 -1
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -8
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +91 -41
- package/src/adapters/bun/server-adapter.js +566 -426
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +43 -41
- package/src/adapters/create-app.d.ts +13 -11
- package/src/adapters/create-app.js +11 -63
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +8 -3
- package/src/adapters/node/create-app.js +126 -84
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.d.ts +1 -0
- package/src/adapters/node/node-client-bridge.js +62 -61
- package/src/adapters/node/node-hmr-manager.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -17
- package/src/adapters/node/server-adapter.d.ts +63 -23
- package/src/adapters/node/server-adapter.js +346 -297
- package/src/adapters/node/static-content-server.d.ts +1 -0
- package/src/adapters/node/static-content-server.js +172 -183
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +88 -64
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +132 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/http/api-response.js +79 -0
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +26 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +49 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/runtime/application-adapter.js +75 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +226 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/runtime/render-context.js +99 -0
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
- package/src/adapters/shared/runtime/server-adapter.js +301 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/runtime/server-route-handler.js +77 -0
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
- package/src/adapters/shared/runtime/server-static-builder.js +172 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
- package/src/build/README.md +191 -31
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +145 -0
- package/src/build/browser/browser-runtime-manifest.js +58 -0
- package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
- package/src/build/browser/browser-runtime-plugin.js +216 -0
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +55 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +4 -0
- package/src/build/build-adapter.d.ts +29 -334
- package/src/build/build-adapter.js +273 -237
- package/src/build/cache/build-input-fingerprint.d.ts +28 -0
- package/src/build/cache/build-input-fingerprint.js +33 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +4 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +71 -0
- package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
- package/src/build/cache/pages-unified-graph-build.js +199 -0
- package/src/build/cache/production-build-cache.d.ts +21 -0
- package/src/build/cache/production-build-cache.js +56 -0
- package/src/build/cache/server-entry-build-cache.d.ts +43 -0
- package/src/build/cache/server-entry-build-cache.js +153 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/contracts/build-manifest.js +64 -0
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/contracts/content-virtual-modules.d.ts +12 -0
- package/src/build/contracts/content-virtual-modules.js +29 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
- package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/rolldown/rolldown-build-adapter.js +57 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
- package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +79 -0
- package/src/build/runtime/build-request-policy.d.ts +58 -0
- package/src/build/runtime/build-request-policy.js +84 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +75 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +40 -0
- package/src/build/runtime/parallel-build-executor.d.ts +21 -0
- package/src/build/runtime/parallel-build-executor.js +60 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/build/runtime/serialized-build-executor.js +79 -0
- package/src/cache/index.d.ts +2 -1
- package/src/cache/index.js +7 -6
- package/src/cache/module-parse-cache.d.ts +5 -0
- package/src/cache/module-parse-cache.js +122 -67
- package/src/cache/module-transform-profiler.d.ts +8 -0
- package/src/cache/module-transform-profiler.js +8 -0
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +49 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +3 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +16 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +90 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +33 -0
- package/src/client/scroll.test.browser.d.ts +1 -0
- package/src/client/scroll.test.browser.js +31 -0
- package/src/client/view-transitions.d.ts +32 -0
- package/src/client/view-transitions.js +120 -0
- package/src/client/view-transitions.test.browser.d.ts +1 -0
- package/src/client/view-transitions.test.browser.js +56 -0
- package/src/config/config-builder.d.ts +40 -10
- package/src/config/config-builder.js +647 -600
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +44 -23
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +10 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +8 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +10 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +25 -23
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +3 -0
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +52 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
- package/src/dev-toolbar/dev-toolbar-package.js +78 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +39 -0
- package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
- package/src/diagnostics/request-pipeline-metrics.js +121 -0
- package/src/diagnostics/startup-trace.d.ts +81 -0
- package/src/diagnostics/startup-trace.js +281 -0
- package/src/eco/README.md +17 -0
- package/src/eco/component-identity.d.ts +13 -0
- package/src/eco/component-identity.js +18 -0
- package/src/eco/eco-declared-component.d.ts +15 -0
- package/src/eco/eco-declared-component.js +23 -0
- package/src/eco/eco.browser.js +63 -70
- package/src/eco/eco.js +163 -97
- package/src/eco/eco.types.d.ts +47 -8
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +69 -0
- package/src/env.d.ts +2 -0
- package/src/errors/http-error.d.ts +8 -0
- package/src/errors/http-error.js +66 -49
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -6
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +21 -0
- package/src/hmr/client/hmr-runtime.js +119 -110
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
- package/src/hmr/hmr-entrypoint-output.js +34 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +14 -0
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +9 -0
- package/src/hmr/hmr-strategy.js +113 -42
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
- package/src/hmr/strategies/js-hmr-strategy.js +107 -167
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
- package/src/index.browser.d.ts +1 -0
- package/src/index.browser.js +2 -4
- package/src/index.d.ts +4 -1
- package/src/index.js +7 -21
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
- package/src/integrations/ghtml/ghtml-renderer.js +12 -56
- package/src/integrations/ghtml/ghtml.constants.js +1 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
- package/src/integrations/ghtml/ghtml.plugin.js +10 -20
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/README.md +2 -1
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +35 -62
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +20 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
- package/src/plugins/eco-component-meta-plugin.js +120 -162
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +49 -37
- package/src/plugins/integration-plugin.d.ts +43 -14
- package/src/plugins/integration-plugin.js +212 -190
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +21 -0
- package/src/plugins/processor.d.ts +71 -12
- package/src/plugins/processor.js +168 -130
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +112 -60
- package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
- package/src/plugins/tsconfig-import-resolver.js +235 -0
- package/src/route-renderer/GRAPH.md +26 -32
- package/src/route-renderer/README.md +54 -33
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
- package/src/route-renderer/orchestration/integration-renderer.js +798 -988
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
- package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
- package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
- package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
- package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
- package/src/route-renderer/page-loading/page-module-loader.js +136 -124
- package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
- package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +31 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +56 -30
- package/src/router/client/link-intent.test.browser.js +50 -39
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +122 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +82 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +235 -201
- package/src/router/client/navigation-lifecycle.d.ts +55 -0
- package/src/router/client/navigation-lifecycle.js +50 -0
- package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
- package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
- package/src/router/server/route-registry.js +237 -242
- package/src/services/README.md +5 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +8 -6
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
- package/src/services/assets/browser-bundle.service.d.ts +28 -30
- package/src/services/assets/browser-bundle.service.js +54 -40
- package/src/services/cache/cache.types.d.ts +4 -2
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
- package/src/services/cache/html-page-cache-dependency-index.js +88 -0
- package/src/services/cache/index.d.ts +2 -0
- package/src/services/cache/index.js +8 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.d.ts +31 -1
- package/src/services/cache/page-cache-service.js +237 -150
- package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.d.ts +1 -1
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
- package/src/services/invalidation/development-invalidation.service.js +239 -175
- package/src/services/module-loading/README.md +52 -0
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
- package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
- package/src/services/module-loading/collection-server-module-build.service.js +83 -0
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.d.ts +11 -13
- package/src/services/module-loading/page-module-import.service.js +222 -184
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
- package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
- package/src/services/module-loading/route-module-build-cache.js +3 -0
- package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
- package/src/services/module-loading/route-module-build-cache.store.js +202 -0
- package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
- package/src/services/module-loading/route-module-build-manifest.js +60 -0
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
- package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
- package/src/services/module-loading/server-module-transpiler.service.js +65 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +156 -95
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +41 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +36 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +42 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
- package/src/static-site-generator/static-build-invalidation.js +37 -0
- package/src/static-site-generator/static-export-context.d.ts +30 -0
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.d.ts +43 -25
- package/src/static-site-generator/static-site-generator.js +536 -294
- package/src/types/internal-types.d.ts +59 -13
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +310 -95
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +30 -0
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +22 -5
- package/src/utils/html.js +1 -4
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.d.ts +2 -0
- package/src/utils/parse-cli-args.js +73 -59
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +42 -0
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +60 -53
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +54 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +17 -0
- package/src/watchers/project-watcher.d.ts +29 -6
- package/src/watchers/project-watcher.js +402 -257
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.js +0 -162
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/browser-runtime-plugin-helpers.js +0 -14
- package/src/build/browser-runtime-plugin.js +0 -173
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -49
- package/src/build/build-types.js +0 -0
- package/src/build/rolldown-adapter-helpers.js +0 -265
- package/src/build/rolldown-build-adapter.js +0 -65
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -166
- package/src/build/rolldown-plugin-bridge.js +0 -199
- package/src/build/runtime-build-executor.d.ts +0 -21
- package/src/build/runtime-build-executor.js +0 -19
- package/src/build/runtime-build-output-normalizer.d.ts +0 -3
- package/src/build/runtime-build-output-normalizer.js +0 -111
- package/src/build/serialized-build-executor.js +0 -63
- package/src/build/server-side-css-shim-plugin.js +0 -35
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/render-output.utils.js +0 -171
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
- /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for the Rolldown-backed build adapters.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* The standard {@link RolldownBuildAdapter} uses these helpers for
|
|
6
|
+
* BuildOptions → Rolldown mapping, dependency-graph extraction, and the
|
|
7
|
+
* post-build rewriting pipeline.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
import { builtinModules, createRequire } from 'node:module';
|
|
12
|
+
import { readFileSync } from 'node:fs';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import { isBarePackageImportSpecifier } from '../../plugins/tsconfig-import-resolver.js';
|
|
15
|
+
import { collectBrowserRuntimeImportRewriteMap, rewriteBrowserRuntimeImports, } from '../browser/browser-runtime-plugin.js';
|
|
16
|
+
import { createServerSideCssShimPlugin } from './server-side-css-shim-plugin.js';
|
|
17
|
+
import { createRolldownPluginBridge } from './rolldown-plugin-bridge.js';
|
|
18
|
+
import { isDeclaredAppPackageImport, isWorkspacePackageImport, normalizeNodeRuntimeBuildOutputs, } from './runtime-build-output-normalizer.js';
|
|
19
|
+
const corePackageRequire = createRequire(new URL('../../../package.json', import.meta.url));
|
|
20
|
+
const nodeBuiltinSpecifiers = new Set(builtinModules);
|
|
21
|
+
let corePackageNames;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the set of packages declared as direct dependencies in core's own
|
|
24
|
+
* `package.json` (all dependency fields combined).
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* Result is cached for the lifetime of the process. This is safe because
|
|
28
|
+
* core's own package.json does not change at runtime.
|
|
29
|
+
*/
|
|
30
|
+
function getCorePackageNames() {
|
|
31
|
+
if (corePackageNames) {
|
|
32
|
+
return corePackageNames;
|
|
33
|
+
}
|
|
34
|
+
const packageJsonPath = new URL('../../../package.json', import.meta.url);
|
|
35
|
+
corePackageNames = new Set();
|
|
36
|
+
try {
|
|
37
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
38
|
+
for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
|
|
39
|
+
const entries = packageJson[field];
|
|
40
|
+
if (!entries || typeof entries !== 'object') {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
for (const name of Object.keys(entries)) {
|
|
44
|
+
corePackageNames.add(name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Return empty set on read/parse failure; packages will be bundled.
|
|
50
|
+
}
|
|
51
|
+
return corePackageNames;
|
|
52
|
+
}
|
|
53
|
+
function isCoreDeclaredPackageImport(specifier) {
|
|
54
|
+
const name = specifier.startsWith('@')
|
|
55
|
+
? specifier.split('/').slice(0, 2).join('/')
|
|
56
|
+
: (specifier.split('/')[0] ?? specifier);
|
|
57
|
+
return getCorePackageNames().has(name);
|
|
58
|
+
}
|
|
59
|
+
export function transpileProfileToOptions(profile) {
|
|
60
|
+
switch (profile) {
|
|
61
|
+
case 'browser-script':
|
|
62
|
+
case 'hmr-runtime':
|
|
63
|
+
case 'hmr-entrypoint':
|
|
64
|
+
return {
|
|
65
|
+
target: 'browser',
|
|
66
|
+
format: 'esm',
|
|
67
|
+
sourcemap: 'none',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function isPackageImport(id, contextRoot) {
|
|
72
|
+
return isBarePackageImportSpecifier(id, contextRoot);
|
|
73
|
+
}
|
|
74
|
+
function tryResolveModule(id, resolver) {
|
|
75
|
+
try {
|
|
76
|
+
return resolver.resolve(id);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function getAppRootRequire(cache, contextRoot) {
|
|
83
|
+
const cacheKey = path.resolve(contextRoot);
|
|
84
|
+
let req = cache.get(cacheKey);
|
|
85
|
+
if (!req) {
|
|
86
|
+
req = createRequire(path.join(cacheKey, 'package.json'));
|
|
87
|
+
cache.set(cacheKey, req);
|
|
88
|
+
}
|
|
89
|
+
return req;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determines whether a package import should be bundled into the output
|
|
93
|
+
* rather than left as an external bare specifier.
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* Resolution is evaluated in three tiers:
|
|
97
|
+
*
|
|
98
|
+
* 1. **Workspace packages** (`workspace:` protocol) — always bundled; they
|
|
99
|
+
* are source-only and cannot be resolved by Node.js at runtime.
|
|
100
|
+
* 2. **App-declared packages** — bundled only when their resolved entry is a
|
|
101
|
+
* TypeScript or JSX file (source packages); pre-compiled packages are left
|
|
102
|
+
* external so the app's own resolver handles them at runtime.
|
|
103
|
+
* 3. **Everything else** (undeclared transitives) — split into two sub-cases:
|
|
104
|
+
* - A **direct dependency of core** that resolves to a compiled JS file
|
|
105
|
+
* (e.g. `oxc-parser`, `rolldown`, `ws`): externalized so the
|
|
106
|
+
* `runtime-build-output-normalizer` can rewrite the import to an
|
|
107
|
+
* absolute `file://` URL after the build. "Direct" means declared in
|
|
108
|
+
* core's own `package.json`; transitives that merely *resolve through*
|
|
109
|
+
* core's `require` are excluded.
|
|
110
|
+
* - **Everything else** (true transitives like `lexical`, `@lexical/react`):
|
|
111
|
+
* bundled unconditionally. pnpm strict hoisting means these packages
|
|
112
|
+
* are unreachable as bare specifiers from output directories such as
|
|
113
|
+
* `.eco/`, `.server-route-modules/`, or `dist/.server/`.
|
|
114
|
+
*
|
|
115
|
+
* @param id - The package specifier (e.g., `@scope/pkg/subpath`).
|
|
116
|
+
* @param contextRoot - The root directory of the app being built.
|
|
117
|
+
* @param appRootRequireCache - Cache of `require` instances per context root.
|
|
118
|
+
* @returns `true` if the import should be bundled, `false` to externalize.
|
|
119
|
+
*/
|
|
120
|
+
function shouldBundlePackageImport(id, contextRoot, appRootRequireCache) {
|
|
121
|
+
if (isWorkspacePackageImport(id, contextRoot)) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
if (isDeclaredAppPackageImport(id, contextRoot)) {
|
|
125
|
+
const appRootRequire = getAppRootRequire(appRootRequireCache, contextRoot);
|
|
126
|
+
const appResolvedPath = tryResolveModule(id, appRootRequire);
|
|
127
|
+
return Boolean(appResolvedPath && /\.(?:[cm]?ts|tsx|jsx)$/u.test(appResolvedPath));
|
|
128
|
+
}
|
|
129
|
+
if (isCoreDeclaredPackageImport(id)) {
|
|
130
|
+
const coreResolvedPath = tryResolveModule(id, corePackageRequire);
|
|
131
|
+
if (coreResolvedPath && !/\.(?:[cm]?ts|tsx|jsx)$/u.test(coreResolvedPath)) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
function createExternalMatcher(options, appRootRequireCache) {
|
|
138
|
+
const explicitExternals = new Set(options.external ?? []);
|
|
139
|
+
const externalPackages = options.externalPackages === true;
|
|
140
|
+
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
141
|
+
return (id) => {
|
|
142
|
+
if (explicitExternals.has(id)) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
if (!externalPackages || !isPackageImport(id, contextRoot)) {
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return !shouldBundlePackageImport(id, contextRoot, appRootRequireCache);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function isNodeBuiltinSpecifier(id) {
|
|
152
|
+
return id.startsWith('node:') || nodeBuiltinSpecifiers.has(id);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Resolves Node builtins as external before Rolldown falls back to file resolution.
|
|
156
|
+
*
|
|
157
|
+
* @remarks
|
|
158
|
+
* Rolldown documents two first-class externalization points: its `external`
|
|
159
|
+
* option is checked before resolution, and a plugin `resolveId` hook can return
|
|
160
|
+
* `{ id, external: true }`. Core uses the latter to keep Node-builtin ownership
|
|
161
|
+
* explicit in the Node-target plugin pipeline.
|
|
162
|
+
*
|
|
163
|
+
* The hook runs before Rolldown's internal filesystem resolver, leaving imports
|
|
164
|
+
* such as `node:fs` intact for the Node runtime. It is installed only for
|
|
165
|
+
* Node-target builds, so browser bundles still surface accidental Node builtin
|
|
166
|
+
* imports as resolver failures.
|
|
167
|
+
*
|
|
168
|
+
* See {@link https://rolldown.rs/in-depth/external-modules | Rolldown external modules}.
|
|
169
|
+
*/
|
|
170
|
+
export function createNodeBuiltinExternalPlugin() {
|
|
171
|
+
return {
|
|
172
|
+
name: 'ecopages-node-builtin-external',
|
|
173
|
+
resolveId(id) {
|
|
174
|
+
return isNodeBuiltinSpecifier(id) ? { id, external: true } : null;
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Rejects Node builtins in browser-target builds before Rolldown externalizes them.
|
|
180
|
+
*
|
|
181
|
+
* @remarks
|
|
182
|
+
* With `platform: 'browser'`, Rolldown leaves `node:*` imports in the output as
|
|
183
|
+
* bare specifiers. This plugin fails the build instead so server-only graphs
|
|
184
|
+
* cannot reach the browser as silent CORS errors.
|
|
185
|
+
*/
|
|
186
|
+
export function createBrowserNodeBuiltinGuardPlugin() {
|
|
187
|
+
return {
|
|
188
|
+
name: 'ecopages-browser-node-builtin-guard',
|
|
189
|
+
resolveId(id, importer) {
|
|
190
|
+
if (!isNodeBuiltinSpecifier(id)) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
const from = importer ? ` (imported from ${importer})` : '';
|
|
194
|
+
throw new Error(`[browser-build] Node builtin "${id}" cannot be bundled for the browser${from}. ` +
|
|
195
|
+
`Check package "browser" exports and the client-graph boundary for the importer.`);
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function mapRolldownFormat(value) {
|
|
200
|
+
switch (value) {
|
|
201
|
+
case 'cjs':
|
|
202
|
+
return 'cjs';
|
|
203
|
+
case 'iife':
|
|
204
|
+
return 'iife';
|
|
205
|
+
default:
|
|
206
|
+
return 'esm';
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function mapRolldownPlatform(value) {
|
|
210
|
+
if (value === 'browser')
|
|
211
|
+
return 'browser';
|
|
212
|
+
if (value === 'node')
|
|
213
|
+
return 'node';
|
|
214
|
+
if (value && /^(?:es\d+|chrome\d+|edge\d+|firefox\d+|safari\d+|hermes|deno\d+|ios\d+)$/.test(value)) {
|
|
215
|
+
return 'node';
|
|
216
|
+
}
|
|
217
|
+
return 'neutral';
|
|
218
|
+
}
|
|
219
|
+
function mapRolldownSourcemap(value) {
|
|
220
|
+
switch (value) {
|
|
221
|
+
case 'none':
|
|
222
|
+
return false;
|
|
223
|
+
case 'inline':
|
|
224
|
+
return 'inline';
|
|
225
|
+
case 'external':
|
|
226
|
+
case 'linked':
|
|
227
|
+
return 'hidden';
|
|
228
|
+
default:
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function mapRolldownJsx(jsx) {
|
|
233
|
+
const { factory, fragment, ...rest } = jsx;
|
|
234
|
+
const out = { ...rest };
|
|
235
|
+
if (factory !== undefined) {
|
|
236
|
+
out.pragma = factory;
|
|
237
|
+
}
|
|
238
|
+
if (fragment !== undefined) {
|
|
239
|
+
out.pragmaFrag = fragment;
|
|
240
|
+
}
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
function toEntryFileNamesPattern(value) {
|
|
244
|
+
if (!value) {
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
const literal = !/\[[^\]]+\]/u.test(value);
|
|
248
|
+
const stripped = value.replaceAll(/\.?\[ext\]/g, '');
|
|
249
|
+
if (stripped.length === 0) {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
return { pattern: stripped, literal };
|
|
253
|
+
}
|
|
254
|
+
function getJavaScriptOutExtension(options, literal) {
|
|
255
|
+
if (literal) {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
if (options.target === 'browser') {
|
|
259
|
+
return '.js';
|
|
260
|
+
}
|
|
261
|
+
if (options.format === 'cjs') {
|
|
262
|
+
return '.cjs';
|
|
263
|
+
}
|
|
264
|
+
return '.mjs';
|
|
265
|
+
}
|
|
266
|
+
function normalizeOutputPath(outputPath, outdir) {
|
|
267
|
+
return path.isAbsolute(outputPath) ? path.normalize(outputPath) : path.normalize(path.join(outdir, outputPath));
|
|
268
|
+
}
|
|
269
|
+
function normalizeModulePath(modulePath, contextRoot) {
|
|
270
|
+
return path.isAbsolute(modulePath)
|
|
271
|
+
? path.normalize(modulePath)
|
|
272
|
+
: path.normalize(path.resolve(contextRoot, modulePath));
|
|
273
|
+
}
|
|
274
|
+
export function extractDependencyGraph(chunks, contextRoot) {
|
|
275
|
+
const entrypoints = {};
|
|
276
|
+
for (const chunk of chunks) {
|
|
277
|
+
if (!chunk.facadeModuleId) {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
const entrypointPath = normalizeModulePath(chunk.facadeModuleId, contextRoot);
|
|
281
|
+
entrypoints[entrypointPath] = Array.from(new Set([entrypointPath, ...chunk.moduleIds.map((id) => normalizeModulePath(id, contextRoot))]));
|
|
282
|
+
}
|
|
283
|
+
return { entrypoints };
|
|
284
|
+
}
|
|
285
|
+
export function toBuildLogs(error) {
|
|
286
|
+
if (error instanceof Error) {
|
|
287
|
+
return [{ message: error.message }];
|
|
288
|
+
}
|
|
289
|
+
return [{ message: 'Unknown build error' }];
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Translates a {@link BuildOptions} into Rolldown's `InputOptions` and
|
|
293
|
+
* `OutputOptions`. Always sets `experimental.nativeMagicString: true`
|
|
294
|
+
* and always consolidates eco plugins via the bridge.
|
|
295
|
+
*/
|
|
296
|
+
export function resolveRolldownOptions(options, contextRoot, outdir, appRootRequireCache) {
|
|
297
|
+
const rolldownPlatform = mapRolldownPlatform(options.target);
|
|
298
|
+
const external = createExternalMatcher(options, appRootRequireCache);
|
|
299
|
+
const transformOptions = {};
|
|
300
|
+
if (options.define) {
|
|
301
|
+
transformOptions.define = options.define;
|
|
302
|
+
}
|
|
303
|
+
if (options.jsx) {
|
|
304
|
+
transformOptions.jsx = mapRolldownJsx(options.jsx);
|
|
305
|
+
}
|
|
306
|
+
if (options.target && /^(?:es|chrome|edge|firefox|safari|hermes|deno|ios)/.test(options.target)) {
|
|
307
|
+
transformOptions.target = options.target;
|
|
308
|
+
}
|
|
309
|
+
const bundlePlugins = options.plugins ?? [];
|
|
310
|
+
const sourceTransforms = options.sourceTransforms ?? [];
|
|
311
|
+
const appPlugins = createRolldownPluginBridge(bundlePlugins, contextRoot, sourceTransforms);
|
|
312
|
+
const allPlugins = [
|
|
313
|
+
...(rolldownPlatform === 'node' ? [createNodeBuiltinExternalPlugin()] : []),
|
|
314
|
+
...(rolldownPlatform === 'browser' ? [createBrowserNodeBuiltinGuardPlugin()] : []),
|
|
315
|
+
...(options.target !== 'browser' ? [createServerSideCssShimPlugin()] : []),
|
|
316
|
+
...appPlugins,
|
|
317
|
+
];
|
|
318
|
+
const inputOptions = {
|
|
319
|
+
input: options.entrypoints,
|
|
320
|
+
cwd: contextRoot,
|
|
321
|
+
external,
|
|
322
|
+
platform: mapRolldownPlatform(options.target),
|
|
323
|
+
transform: Object.keys(transformOptions).length > 0 ? transformOptions : undefined,
|
|
324
|
+
resolve: options.conditions ? { conditionNames: options.conditions } : undefined,
|
|
325
|
+
treeshake: typeof options.treeshaking === 'boolean' ? options.treeshaking : true,
|
|
326
|
+
...(process.env.ECOPAGES_PROFILE_BUILD === '1'
|
|
327
|
+
? {}
|
|
328
|
+
: {
|
|
329
|
+
checks: {
|
|
330
|
+
pluginTimings: false,
|
|
331
|
+
},
|
|
332
|
+
}),
|
|
333
|
+
experimental: {
|
|
334
|
+
nativeMagicString: true,
|
|
335
|
+
},
|
|
336
|
+
plugins: allPlugins,
|
|
337
|
+
};
|
|
338
|
+
const entryFileNames = toEntryFileNamesPattern(options.naming);
|
|
339
|
+
const jsExtension = getJavaScriptOutExtension(options, entryFileNames?.literal ?? false);
|
|
340
|
+
const finalEntryFileNames = entryFileNames
|
|
341
|
+
? jsExtension
|
|
342
|
+
? `${entryFileNames.pattern}${jsExtension}`
|
|
343
|
+
: entryFileNames.pattern
|
|
344
|
+
: jsExtension
|
|
345
|
+
? `[name]${jsExtension}`
|
|
346
|
+
: '[name]';
|
|
347
|
+
const entrypointCount = Array.isArray(options.entrypoints)
|
|
348
|
+
? options.entrypoints.length
|
|
349
|
+
: Object.keys(options.entrypoints).length;
|
|
350
|
+
const disableCodeSplitting = options.splitting === false && entrypointCount === 1;
|
|
351
|
+
const outputOptions = {
|
|
352
|
+
dir: outdir,
|
|
353
|
+
format: mapRolldownFormat(options.format),
|
|
354
|
+
minify: !!options.minify,
|
|
355
|
+
entryFileNames: finalEntryFileNames,
|
|
356
|
+
chunkFileNames: '[name]-[hash].js',
|
|
357
|
+
assetFileNames: '[name]-[hash][extname]',
|
|
358
|
+
sourcemap: mapRolldownSourcemap(options.sourcemap),
|
|
359
|
+
...(disableCodeSplitting ? { codeSplitting: false } : {}),
|
|
360
|
+
};
|
|
361
|
+
return { inputOptions, outputOptions };
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Rewrites manifest-owned runtime specifiers in emitted JS output
|
|
365
|
+
* files. Skips work when the specifier map is empty or when a
|
|
366
|
+
* `(specifierMap, path, content)` tuple was already seen.
|
|
367
|
+
*
|
|
368
|
+
* The content cache is module-level and is keyed on a djb2 hash of
|
|
369
|
+
* the input bytes plus a sorted fingerprint of the specifier map. A
|
|
370
|
+
* manifest change correctly invalidates prior entries; different
|
|
371
|
+
* content of the same length does not collide.
|
|
372
|
+
*/
|
|
373
|
+
export function rewriteBrowserRuntimeImportsInOutputs(result, contextRoot, plugins) {
|
|
374
|
+
if (!result.success || result.outputs.length === 0) {
|
|
375
|
+
return result;
|
|
376
|
+
}
|
|
377
|
+
const specifierMap = collectBrowserRuntimeImportRewriteMap(plugins);
|
|
378
|
+
if (specifierMap.size === 0) {
|
|
379
|
+
return result;
|
|
380
|
+
}
|
|
381
|
+
const moduleRequireFromContext = createRequire(path.join(contextRoot, 'package.json'));
|
|
382
|
+
const fs = moduleRequireFromContext('node:fs');
|
|
383
|
+
const cacheFingerprint = `${Array.from(specifierMap.entries()).sort().join('|')}`;
|
|
384
|
+
for (const output of result.outputs) {
|
|
385
|
+
if (!/\.(?:[cm]?js)$/u.test(output.path)) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
const code = fs.readFileSync(output.path, 'utf-8');
|
|
389
|
+
const contentKey = `${cacheFingerprint}::${output.path}::${djb2(code)}`;
|
|
390
|
+
if (rewriteCache.has(contentKey)) {
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
const rewritten = rewriteBrowserRuntimeImports(code, specifierMap, output.path);
|
|
394
|
+
if (rewritten !== code) {
|
|
395
|
+
fs.writeFileSync(output.path, rewritten);
|
|
396
|
+
}
|
|
397
|
+
rememberRewrite(contentKey);
|
|
398
|
+
}
|
|
399
|
+
return result;
|
|
400
|
+
}
|
|
401
|
+
const REWRITE_CACHE_MAX_ENTRIES = 2048;
|
|
402
|
+
const rewriteCache = new Set();
|
|
403
|
+
/**
|
|
404
|
+
* @remarks
|
|
405
|
+
* Dev rebuilds hit the same output paths with stable specifier maps; memoizing
|
|
406
|
+
* skips re-reading and re-writing unchanged files. The cache is capped because
|
|
407
|
+
* a process-global set would otherwise grow for the lifetime of a watch session.
|
|
408
|
+
* Eviction uses insertion order as an approximate LRU.
|
|
409
|
+
*/
|
|
410
|
+
function rememberRewrite(contentKey) {
|
|
411
|
+
rewriteCache.add(contentKey);
|
|
412
|
+
if (rewriteCache.size > REWRITE_CACHE_MAX_ENTRIES) {
|
|
413
|
+
const oldest = rewriteCache.values().next().value;
|
|
414
|
+
if (oldest !== undefined) {
|
|
415
|
+
rewriteCache.delete(oldest);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
function djb2(input) {
|
|
420
|
+
let hash = 5381;
|
|
421
|
+
for (let i = 0; i < input.length; i++) {
|
|
422
|
+
hash = ((hash << 5) + hash + input.charCodeAt(i)) | 0;
|
|
423
|
+
}
|
|
424
|
+
return hash.toString(36);
|
|
425
|
+
}
|
|
426
|
+
/** Test-only: clears the rewriter content cache. */
|
|
427
|
+
export function clearRewriteCacheForTests() {
|
|
428
|
+
rewriteCache.clear();
|
|
429
|
+
}
|
|
430
|
+
/** Normalizes node-runtime import paths in emitted outputs. */
|
|
431
|
+
export function rewriteNodeRuntimeImportsInOutputs(result, contextRoot) {
|
|
432
|
+
if (!result.success || result.outputs.length === 0) {
|
|
433
|
+
return result;
|
|
434
|
+
}
|
|
435
|
+
normalizeNodeRuntimeBuildOutputs(result.outputs.map((output) => output.path), contextRoot);
|
|
436
|
+
return result;
|
|
437
|
+
}
|
|
438
|
+
/** Maps a Rolldown `output` to a normalized {@link BuildResult}. */
|
|
439
|
+
export function buildResultFromRolldownOutput(output, outdir, contextRoot) {
|
|
440
|
+
const outputs = output.output.map((entry) => ({
|
|
441
|
+
path: normalizeOutputPath(entry.fileName, outdir),
|
|
442
|
+
}));
|
|
443
|
+
const entryChunks = output.output.filter((entry) => entry.type === 'chunk' && entry.isEntry);
|
|
444
|
+
const dependencyGraph = entryChunks.length > 0 ? extractDependencyGraph(entryChunks, contextRoot) : undefined;
|
|
445
|
+
const entryOutputs = {};
|
|
446
|
+
for (const chunk of entryChunks) {
|
|
447
|
+
if (chunk.facadeModuleId) {
|
|
448
|
+
entryOutputs[normalizeModulePath(chunk.facadeModuleId, contextRoot)] = normalizeOutputPath(chunk.fileName, outdir);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
return {
|
|
452
|
+
success: true,
|
|
453
|
+
logs: [],
|
|
454
|
+
outputs,
|
|
455
|
+
dependencyGraph,
|
|
456
|
+
entryOutputs: entryChunks.length > 0 ? entryOutputs : undefined,
|
|
457
|
+
};
|
|
458
|
+
}
|
|
@@ -6,19 +6,15 @@
|
|
|
6
6
|
* default adapter installed by `ConfigBuilder` and the adapter that
|
|
7
7
|
* issues real builds in production.
|
|
8
8
|
*
|
|
9
|
-
* Each `build()` creates a fresh `rolldown()` bundler
|
|
10
|
-
* module-graph reuse across calls. For HMR/watch mode where the same
|
|
11
|
-
* entrypoints are rebuilt repeatedly, see {@link RolldownDevBuildAdapter}.
|
|
9
|
+
* Each `build()` creates a fresh `rolldown()` bundler.
|
|
12
10
|
*/
|
|
13
|
-
import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from '
|
|
11
|
+
import type { BuildAdapter, BuildOptions, BuildResult, BuildTranspileOptions, BuildTranspileProfile } from '../build-adapter.js';
|
|
14
12
|
export declare class RolldownBuildAdapter implements BuildAdapter {
|
|
15
13
|
readonly ownership: "rolldown";
|
|
16
14
|
/** Per-adapter require cache, keyed on resolved context root. */
|
|
17
15
|
private readonly appRootRequireCache;
|
|
18
16
|
/**
|
|
19
|
-
* Issues one build. Creates a fresh `rolldown()` bundler per call
|
|
20
|
-
* so no module-graph reuse. For repeated rebuilds on the same
|
|
21
|
-
* entrypoints, use {@link RolldownDevBuildAdapter}.
|
|
17
|
+
* Issues one build. Creates a fresh `rolldown()` bundler per call.
|
|
22
18
|
*/
|
|
23
19
|
buildOrThrow(options: BuildOptions): Promise<BuildResult>;
|
|
24
20
|
build(options: BuildOptions): Promise<BuildResult>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundler-backed build adapter.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Implements {@link BuildAdapter} on top of Rolldown. This is the
|
|
6
|
+
* default adapter installed by `ConfigBuilder` and the adapter that
|
|
7
|
+
* issues real builds in production.
|
|
8
|
+
*
|
|
9
|
+
* Each `build()` creates a fresh `rolldown()` bundler.
|
|
10
|
+
*/
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { rolldown } from 'rolldown';
|
|
14
|
+
import { buildResultFromRolldownOutput, resolveRolldownOptions, rewriteBrowserRuntimeImportsInOutputs, rewriteNodeRuntimeImportsInOutputs, toBuildLogs, transpileProfileToOptions, } from './rolldown-adapter-helpers.js';
|
|
15
|
+
import { recordRolldownBuildInvocation } from './rolldown-build-invocation-metrics.js';
|
|
16
|
+
const moduleRequire = createRequire(import.meta.url);
|
|
17
|
+
export class RolldownBuildAdapter {
|
|
18
|
+
ownership = 'rolldown';
|
|
19
|
+
/** Per-adapter require cache, keyed on resolved context root. */
|
|
20
|
+
appRootRequireCache = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Issues one build. Creates a fresh `rolldown()` bundler per call.
|
|
23
|
+
*/
|
|
24
|
+
async buildOrThrow(options) {
|
|
25
|
+
recordRolldownBuildInvocation('rolldown');
|
|
26
|
+
const contextRoot = options.root ? path.resolve(options.root) : process.cwd();
|
|
27
|
+
const outdir = path.resolve(options.outdir ?? 'dist/assets');
|
|
28
|
+
const plugins = options.plugins ?? [];
|
|
29
|
+
const { inputOptions, outputOptions } = resolveRolldownOptions(options, contextRoot, outdir, this.appRootRequireCache);
|
|
30
|
+
const bundle = await rolldown(inputOptions);
|
|
31
|
+
const output = await bundle.write(outputOptions);
|
|
32
|
+
await bundle.close();
|
|
33
|
+
const baseResult = buildResultFromRolldownOutput(output, outdir, contextRoot);
|
|
34
|
+
return rewriteNodeRuntimeImportsInOutputs(rewriteBrowserRuntimeImportsInOutputs(baseResult, contextRoot, plugins), contextRoot);
|
|
35
|
+
}
|
|
36
|
+
async build(options) {
|
|
37
|
+
try {
|
|
38
|
+
return await this.buildOrThrow(options);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
logs: toBuildLogs(error),
|
|
44
|
+
outputs: [],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
resolve(importPath, rootDir) {
|
|
49
|
+
return moduleRequire.resolve(importPath, { paths: [rootDir] });
|
|
50
|
+
}
|
|
51
|
+
getTranspileOptions(profile) {
|
|
52
|
+
return transpileProfileToOptions(profile);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function createRolldownBuildAdapter() {
|
|
56
|
+
return new RolldownBuildAdapter();
|
|
57
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide Rolldown build invocation counters for benchmarks and spikes.
|
|
3
|
+
*
|
|
4
|
+
* Gated behind {@link isRolldownBuildMetricsEnabled} so production paths stay quiet.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isRolldownBuildMetricsEnabled(): boolean;
|
|
7
|
+
export declare function recordRolldownBuildInvocation(adapter?: 'rolldown'): void;
|
|
8
|
+
export declare function getRolldownBuildInvocationCounts(): Readonly<Record<string, number>>;
|
|
9
|
+
export declare function resetRolldownBuildInvocationCounts(): void;
|
|
10
|
+
export declare function recordPageModuleBuildInvocation(): void;
|
|
11
|
+
export declare function getPageModuleRolldownBuildInvocations(): number;
|
|
12
|
+
export declare function getTotalRolldownBuildInvocations(): number;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide Rolldown build invocation counters for benchmarks and spikes.
|
|
3
|
+
*
|
|
4
|
+
* Gated behind {@link isRolldownBuildMetricsEnabled} so production paths stay quiet.
|
|
5
|
+
*/
|
|
6
|
+
const invocationCounts = new Map();
|
|
7
|
+
let pageModuleBuildInvocations = 0;
|
|
8
|
+
export function isRolldownBuildMetricsEnabled() {
|
|
9
|
+
return process.env.ECOPAGES_ROLLDOWN_BUILD_METRICS === '1' || process.env.ECOPAGES_LOGGER_DEBUG === 'true';
|
|
10
|
+
}
|
|
11
|
+
export function recordRolldownBuildInvocation(adapter = 'rolldown') {
|
|
12
|
+
if (!isRolldownBuildMetricsEnabled()) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
invocationCounts.set(adapter, (invocationCounts.get(adapter) ?? 0) + 1);
|
|
16
|
+
}
|
|
17
|
+
export function getRolldownBuildInvocationCounts() {
|
|
18
|
+
return Object.fromEntries(invocationCounts);
|
|
19
|
+
}
|
|
20
|
+
export function resetRolldownBuildInvocationCounts() {
|
|
21
|
+
invocationCounts.clear();
|
|
22
|
+
pageModuleBuildInvocations = 0;
|
|
23
|
+
}
|
|
24
|
+
export function recordPageModuleBuildInvocation() {
|
|
25
|
+
if (!isRolldownBuildMetricsEnabled()) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
pageModuleBuildInvocations += 1;
|
|
29
|
+
}
|
|
30
|
+
export function getPageModuleRolldownBuildInvocations() {
|
|
31
|
+
return pageModuleBuildInvocations;
|
|
32
|
+
}
|
|
33
|
+
export function getTotalRolldownBuildInvocations() {
|
|
34
|
+
let total = 0;
|
|
35
|
+
for (const count of invocationCounts.values()) {
|
|
36
|
+
total += count;
|
|
37
|
+
}
|
|
38
|
+
return total;
|
|
39
|
+
}
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
* on every source file.
|
|
41
41
|
*/
|
|
42
42
|
import type { Plugin } from 'rolldown';
|
|
43
|
-
import type {
|
|
43
|
+
import type { EcoSourceTransform } from '../../plugins/source-transform.js';
|
|
44
|
+
import type { EcoBuildPlugin } from '../contracts/build-types.js';
|
|
44
45
|
/**
|
|
45
46
|
* Creates a Rolldown `Plugin` array that drives the supplied
|
|
46
47
|
* `EcoBuildPlugin` instances.
|
|
@@ -55,5 +56,18 @@ import type { EcoBuildPlugin } from './build-types.js';
|
|
|
55
56
|
* Plugin ordering is preserved: registrations from earlier eco plugins
|
|
56
57
|
* are checked before registrations from later ones, matching the
|
|
57
58
|
* original per-plugin priority semantics.
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* Rolldown re-fires `buildStart` on each build, so registrations and the
|
|
62
|
+
* virtual-module counter are cleared before every `setup` pass — otherwise
|
|
63
|
+
* handlers accumulate when bridge plugins are reused.
|
|
64
|
+
*
|
|
65
|
+
* @param plugins - `EcoBuildPlugin` instances registered for this build.
|
|
66
|
+
* @param contextRoot - Project root used to resolve relative load paths.
|
|
67
|
+
* @param sourceTransforms - Optional app-owned transforms applied after a matching
|
|
68
|
+
* `onLoad` handler returns module contents. Browser builds pass
|
|
69
|
+
* {@link getAppSourceTransforms | app source transforms} here so metadata injection
|
|
70
|
+
* still runs on output rewritten by boundary/runtime plugins. Virtual modules,
|
|
71
|
+
* CSS, and asset loads are skipped.
|
|
58
72
|
*/
|
|
59
|
-
export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string): Plugin[];
|
|
73
|
+
export declare function createRolldownPluginBridge(plugins: EcoBuildPlugin[], contextRoot: string, sourceTransforms?: readonly EcoSourceTransform[]): Plugin[];
|