@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.1
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 +44 -14
- package/package.json +368 -57
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +57 -5
- package/src/adapters/abstract/application-adapter.js +261 -203
- 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 +13 -2
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
- package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
- package/src/adapters/bun/client-bridge.js +51 -50
- package/src/adapters/bun/create-app.d.ts +5 -7
- package/src/adapters/bun/create-app.js +169 -154
- package/src/adapters/bun/hmr-manager.d.ts +2 -3
- 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 +34 -53
- package/src/adapters/bun/server-adapter.js +557 -637
- 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 +1 -12
- package/src/adapters/create-app.js +11 -72
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +4 -3
- package/src/adapters/node/create-app.js +123 -98
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.js +62 -64
- package/src/adapters/node/node-hmr-manager.d.ts +2 -3
- 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 +28 -8
- package/src/adapters/node/server-adapter.js +349 -302
- package/src/adapters/node/static-content-server.js +172 -186
- 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 +48 -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 +260 -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.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 -2
- 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} +26 -31
- 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/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
- 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 +165 -45
- 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-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
- package/src/build/browser/browser-runtime-manifest.js +65 -0
- package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
- package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
- package/src/build/browser/browser-runtime-plugin.js +218 -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 +25 -355
- package/src/build/build-adapter.js +258 -265
- package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
- 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/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
- 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/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
- 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 +472 -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-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
- 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} +7 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +227 -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/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
- 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/README.md +1 -1
- package/src/config/config-builder.d.ts +40 -20
- package/src/config/config-builder.js +645 -610
- 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 +127 -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 +166 -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/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 +4 -2
- 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 +123 -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 +28 -15
- package/src/plugins/integration-plugin.js +212 -195
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +21 -0
- package/src/plugins/package-specifier.d.ts +12 -0
- package/src/plugins/package-specifier.js +33 -0
- package/src/plugins/processor.d.ts +79 -12
- package/src/plugins/processor.js +188 -136
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +1 -1
- package/src/plugins/source-transform.js +109 -79
- package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
- package/src/plugins/tsconfig-import-resolver.js +262 -0
- package/src/route-renderer/GRAPH.md +24 -30
- package/src/route-renderer/README.md +52 -32
- 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 +32 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +52 -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} +20 -7
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -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 +39 -153
- package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
- 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 +248 -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 +44 -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/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
- package/src/route-renderer/orchestration/string-markup-renderer.js +53 -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 -211
- 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 +12 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -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 +1 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
- 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.js +53 -58
- 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 -135
- 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 +27 -31
- package/src/services/assets/browser-bundle.service.js +54 -49
- package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
- package/src/services/assets/browser-runtime-asset-generation.js +28 -0
- 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.d.ts +2 -1
- package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
- package/src/services/invalidation/development-invalidation.service.js +241 -204
- package/src/services/module-loading/README.md +9 -6
- 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 +104 -106
- 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 +7 -12
- package/src/services/module-loading/page-module-import.service.js +232 -206
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
- package/src/services/module-loading/route-module-build-cache.js +3 -38
- package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
- package/src/services/module-loading/route-module-build-cache.store.js +213 -196
- package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
- package/src/services/module-loading/route-module-build-manifest.js +54 -118
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
- package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
- 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 +10 -2
- 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 +2 -2
- package/src/static-site-generator/static-build-invalidation.js +33 -74
- package/src/static-site-generator/static-export-context.d.ts +9 -1
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.d.ts +27 -6
- package/src/static-site-generator/static-site-generator.js +528 -389
- package/src/types/internal-types.d.ts +55 -17
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +236 -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/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.d.ts +1 -0
- package/src/utils/parse-cli-args.js +73 -62
- 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 +21 -6
- package/src/watchers/project-watcher.js +402 -277
- 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/bun-user-websocket-lifecycle.js +0 -102
- package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
- 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/node-http-websocket-upgrades.js +0 -125
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
- 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 -202
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
- package/src/adapters/shared/shared-hmr-manager.js +0 -273
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
- package/src/adapters/shared/websocket-lifecycle.js +0 -19
- 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-input-fingerprint.js +0 -31
- 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/jsx-ownership-plugins.d.ts +0 -10
- package/src/build/jsx-ownership-plugins.js +0 -17
- package/src/build/pages-unified-graph-build.js +0 -208
- package/src/build/parallel-build-executor.js +0 -52
- package/src/build/rolldown-adapter-helpers.js +0 -310
- package/src/build/rolldown-build-adapter.js +0 -67
- package/src/build/rolldown-build-invocation-metrics.js +0 -43
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -182
- package/src/build/rolldown-plugin-bridge.js +0 -211
- package/src/build/rolldown-source-transform-pass.js +0 -58
- package/src/build/runtime-build-executor.d.ts +0 -15
- package/src/build/runtime-build-executor.js +0 -43
- package/src/build/runtime-build-output-normalizer.js +0 -203
- package/src/build/serialized-build-executor.js +0 -63
- package/src/build/server-entry-build-cache.js +0 -169
- 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 -54
- package/src/integrations/ghtml/ghtml-renderer.js +0 -57
- package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
- package/src/integrations/ghtml/ghtml.constants.js +0 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
- package/src/integrations/ghtml/ghtml.plugin.js +0 -20
- 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 -231
- 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 -175
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- package/src/utils/html.d.ts +0 -1
- package/src/utils/html.js +0 -4
- /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
- /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
- /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/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.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,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundler plugin bridge.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Translates an array of `EcoBuildPlugin` instances (the runtime-agnostic
|
|
6
|
+
* plugin contract used by Ecopages processors and integrations) into
|
|
7
|
+
* the bundler's native `Plugin` array. The bridge exposes the same
|
|
8
|
+
* three hooks (`onResolve`, `onLoad`, `module`) the `EcoBuildPlugin`
|
|
9
|
+
* contract uses, but maps them to the bundler's `resolveId`/`load`
|
|
10
|
+
* hooks.
|
|
11
|
+
*
|
|
12
|
+
* The shared `EcoBuildPlugin` contract stays the boundary between
|
|
13
|
+
* integrations and bundler backends.
|
|
14
|
+
*
|
|
15
|
+
* **Namespace handling.**
|
|
16
|
+
*
|
|
17
|
+
* The shared `EcoBuildPlugin` contract scopes `onResolve`/`onLoad`
|
|
18
|
+
* handlers with a `namespace` string. The bundler encodes namespaces
|
|
19
|
+
* into the module id (no separate field). The bridge prepends
|
|
20
|
+
* `<namespace>:` to the resolved id when the result includes a
|
|
21
|
+
* namespace, and matches `onLoad`/`onResolve` filters against that
|
|
22
|
+
* prefix. The bridge strips the prefix before forwarding the id back
|
|
23
|
+
* to the callback so plugin code keeps seeing the same `path` shape
|
|
24
|
+
* it did on the historical contract.
|
|
25
|
+
*
|
|
26
|
+
* **Plugin ordering is semantically significant.**
|
|
27
|
+
*
|
|
28
|
+
* The bundler's `resolveId` and `load` are "first" hooks: the first
|
|
29
|
+
* plugin that returns a non-null value wins. Because the bridge
|
|
30
|
+
* translates each `EcoBuildPlugin` into its own bundler plugin and
|
|
31
|
+
* preserves the array order, the position of each plugin in the
|
|
32
|
+
* `plugins` array determines its priority:
|
|
33
|
+
*
|
|
34
|
+
* - **Index 0** has the highest priority.
|
|
35
|
+
* - **Last index** has the lowest priority.
|
|
36
|
+
*
|
|
37
|
+
* When adding new integrations or processors, ensure security-critical
|
|
38
|
+
* plugins (e.g. `ecopages-client-graph-boundary`) are placed **before**
|
|
39
|
+
* general-purpose loaders in the array so they always get first refusal
|
|
40
|
+
* on every source file.
|
|
41
|
+
*/
|
|
42
|
+
import path from 'node:path';
|
|
43
|
+
import { finalizeLoadResultWithSourceTransforms } from './rolldown-source-transform-pass.js';
|
|
44
|
+
import { escapeRegExp } from '../browser/browser-runtime-plugin-helpers.js';
|
|
45
|
+
const NAMESPACE_SEPARATOR = ':';
|
|
46
|
+
function joinNamespace(namespace, value) {
|
|
47
|
+
return namespace ? `${namespace}${NAMESPACE_SEPARATOR}${value}` : value;
|
|
48
|
+
}
|
|
49
|
+
function splitNamespace(id) {
|
|
50
|
+
const separatorIndex = id.indexOf(NAMESPACE_SEPARATOR);
|
|
51
|
+
if (separatorIndex <= 0) {
|
|
52
|
+
return { namespace: undefined, path: id };
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
namespace: id.slice(0, separatorIndex),
|
|
56
|
+
path: id.slice(separatorIndex + 1),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function inferRolldownModuleTypeFromPath(filePath) {
|
|
60
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
61
|
+
switch (extension) {
|
|
62
|
+
case '.ts':
|
|
63
|
+
return 'ts';
|
|
64
|
+
case '.tsx':
|
|
65
|
+
return 'tsx';
|
|
66
|
+
case '.jsx':
|
|
67
|
+
return 'jsx';
|
|
68
|
+
case '.json':
|
|
69
|
+
return 'json';
|
|
70
|
+
case '.css':
|
|
71
|
+
return 'css';
|
|
72
|
+
default:
|
|
73
|
+
return 'js';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function normalizeRolldownModuleType(loader) {
|
|
77
|
+
switch (loader) {
|
|
78
|
+
case 'js':
|
|
79
|
+
case 'jsx':
|
|
80
|
+
case 'ts':
|
|
81
|
+
case 'tsx':
|
|
82
|
+
case 'json':
|
|
83
|
+
case 'css':
|
|
84
|
+
case 'text':
|
|
85
|
+
case 'base64':
|
|
86
|
+
case 'dataurl':
|
|
87
|
+
case 'binary':
|
|
88
|
+
case 'empty':
|
|
89
|
+
return loader;
|
|
90
|
+
case 'global-css':
|
|
91
|
+
case 'local-css':
|
|
92
|
+
return 'css';
|
|
93
|
+
case 'file':
|
|
94
|
+
case 'copy':
|
|
95
|
+
return 'asset';
|
|
96
|
+
default:
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function convertLoadResultToModuleSource(result) {
|
|
101
|
+
if (result.loader === 'object' && result.exports && typeof result.exports === 'object') {
|
|
102
|
+
return Object.entries(result.exports)
|
|
103
|
+
.map(([key, value]) => key === 'default'
|
|
104
|
+
? `export default ${JSON.stringify(value)};`
|
|
105
|
+
: `export const ${key} = ${JSON.stringify(value)};`)
|
|
106
|
+
.join('\n');
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
function buildIdFilter(filter, namespace) {
|
|
111
|
+
if (!namespace) {
|
|
112
|
+
return filter;
|
|
113
|
+
}
|
|
114
|
+
return new RegExp(`^${escapeRegExp(namespace)}${NAMESPACE_SEPARATOR}${filter.source.slice(1)}`);
|
|
115
|
+
}
|
|
116
|
+
function resolvePluginPath(value, importer, contextRoot) {
|
|
117
|
+
if (path.isAbsolute(value)) {
|
|
118
|
+
return value;
|
|
119
|
+
}
|
|
120
|
+
if (value.startsWith('.') || value.startsWith('..')) {
|
|
121
|
+
const baseDir = importer ? path.dirname(importer) : contextRoot;
|
|
122
|
+
return path.resolve(baseDir, value);
|
|
123
|
+
}
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
function convertPluginOnLoadResult(args, result) {
|
|
127
|
+
if (!result || typeof result !== 'object') {
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
const candidate = result;
|
|
131
|
+
const { path: sourcePath } = splitNamespace(args.id);
|
|
132
|
+
const sourceFromExports = convertLoadResultToModuleSource(candidate);
|
|
133
|
+
if (sourceFromExports) {
|
|
134
|
+
const description = {
|
|
135
|
+
code: sourceFromExports,
|
|
136
|
+
moduleType: 'js',
|
|
137
|
+
};
|
|
138
|
+
return description;
|
|
139
|
+
}
|
|
140
|
+
if (typeof candidate.contents === 'string' || candidate.contents instanceof Uint8Array) {
|
|
141
|
+
const code = typeof candidate.contents === 'string' ? candidate.contents : new TextDecoder().decode(candidate.contents);
|
|
142
|
+
const description = {
|
|
143
|
+
code,
|
|
144
|
+
moduleType: (normalizeRolldownModuleType(candidate.loader) ??
|
|
145
|
+
inferRolldownModuleTypeFromPath(sourcePath)),
|
|
146
|
+
};
|
|
147
|
+
return description;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
function convertPluginOnResolveResult(result, importer, contextRoot) {
|
|
152
|
+
if (!result || typeof result !== 'object') {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const candidate = result;
|
|
156
|
+
if (typeof candidate.path !== 'string' && typeof candidate.namespace !== 'string') {
|
|
157
|
+
if (typeof candidate.external !== 'boolean') {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const partial = { id: '' };
|
|
162
|
+
if (typeof candidate.path === 'string') {
|
|
163
|
+
partial.id = joinNamespace(candidate.namespace, resolvePluginPath(candidate.path, importer, contextRoot));
|
|
164
|
+
}
|
|
165
|
+
else if (typeof candidate.namespace === 'string') {
|
|
166
|
+
partial.id = joinNamespace(candidate.namespace, '');
|
|
167
|
+
}
|
|
168
|
+
if (typeof candidate.external === 'boolean') {
|
|
169
|
+
partial.external = candidate.external;
|
|
170
|
+
}
|
|
171
|
+
return partial;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Creates a Rolldown `Plugin` array that drives the supplied
|
|
175
|
+
* `EcoBuildPlugin` instances.
|
|
176
|
+
*
|
|
177
|
+
* All eco plugins are merged into a single Rolldown plugin to minimize
|
|
178
|
+
* Rust→JS FFI overhead. Rolldown calls every hook for every module when
|
|
179
|
+
* there is no static filter, so N separate plugins would cause N
|
|
180
|
+
* `resolveId` + N `load` calls per module. Consolidating into one
|
|
181
|
+
* plugin reduces that to 1 call each, with JavaScript-side filtering
|
|
182
|
+
* routing to the correct eco plugin callback.
|
|
183
|
+
*
|
|
184
|
+
* Plugin ordering is preserved: registrations from earlier eco plugins
|
|
185
|
+
* are checked before registrations from later ones, matching the
|
|
186
|
+
* original per-plugin priority semantics.
|
|
187
|
+
*
|
|
188
|
+
* @remarks
|
|
189
|
+
* Rolldown re-fires `buildStart` on each build, so registrations and the
|
|
190
|
+
* virtual-module counter are cleared before every `setup` pass — otherwise
|
|
191
|
+
* handlers accumulate when bridge plugins are reused.
|
|
192
|
+
*
|
|
193
|
+
* @param plugins - `EcoBuildPlugin` instances registered for this build.
|
|
194
|
+
* @param contextRoot - Project root used to resolve relative load paths.
|
|
195
|
+
* @param sourceTransforms - Optional app-owned transforms applied after a matching
|
|
196
|
+
* `onLoad` handler returns module contents. Browser builds pass
|
|
197
|
+
* {@link getAppSourceTransforms | app source transforms} here so metadata injection
|
|
198
|
+
* still runs on output rewritten by boundary/runtime plugins. Virtual modules,
|
|
199
|
+
* CSS, and asset loads are skipped.
|
|
200
|
+
*/
|
|
201
|
+
export function createRolldownPluginBridge(plugins, contextRoot, sourceTransforms = []) {
|
|
202
|
+
if (plugins.length === 0) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
const moduleCounter = { value: 0 };
|
|
206
|
+
const resolveRegistrations = [];
|
|
207
|
+
const loadRegistrations = [];
|
|
208
|
+
const registerResolve = (filter, callback) => {
|
|
209
|
+
resolveRegistrations.push({ filter, callback });
|
|
210
|
+
};
|
|
211
|
+
const registerLoad = (filter, callback) => {
|
|
212
|
+
loadRegistrations.push({ filter, callback });
|
|
213
|
+
};
|
|
214
|
+
const resolveIdHandler = async (source, importer, _extraOptions) => {
|
|
215
|
+
for (const { filter, callback } of resolveRegistrations) {
|
|
216
|
+
if (!filter.test(source)) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const { namespace, path: sourcePath } = splitNamespace(source);
|
|
220
|
+
const result = await callback({ path: sourcePath, importer, namespace });
|
|
221
|
+
const converted = convertPluginOnResolveResult(result, importer, contextRoot);
|
|
222
|
+
if (converted !== undefined) {
|
|
223
|
+
return converted;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
};
|
|
228
|
+
const loadHandler = async (id) => {
|
|
229
|
+
let loadResult;
|
|
230
|
+
for (const { filter, callback } of loadRegistrations) {
|
|
231
|
+
if (!filter.test(id)) {
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const { namespace, path: sourcePath } = splitNamespace(id);
|
|
235
|
+
const result = await callback({ path: sourcePath, namespace });
|
|
236
|
+
const converted = convertPluginOnLoadResult({ id }, result);
|
|
237
|
+
if (converted !== undefined) {
|
|
238
|
+
loadResult = converted;
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const { namespace, path: sourcePath } = splitNamespace(id);
|
|
243
|
+
return finalizeLoadResultWithSourceTransforms({
|
|
244
|
+
id,
|
|
245
|
+
namespace,
|
|
246
|
+
sourcePath,
|
|
247
|
+
loadResult,
|
|
248
|
+
sourceTransforms,
|
|
249
|
+
contextRoot,
|
|
250
|
+
inferModuleTypeFromPath: (filePath) => inferRolldownModuleTypeFromPath(filePath),
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
const plugin = {
|
|
254
|
+
name: 'ecopages-plugin-bridge',
|
|
255
|
+
buildStart: async () => {
|
|
256
|
+
resolveRegistrations.length = 0;
|
|
257
|
+
loadRegistrations.length = 0;
|
|
258
|
+
moduleCounter.value = 0;
|
|
259
|
+
for (const ecoPlugin of plugins) {
|
|
260
|
+
const bridge = {
|
|
261
|
+
onResolve: (options, callback) => {
|
|
262
|
+
registerResolve(buildIdFilter(options.filter, options.namespace), callback);
|
|
263
|
+
},
|
|
264
|
+
onLoad: (options, callback) => {
|
|
265
|
+
registerLoad(buildIdFilter(options.filter, options.namespace), callback);
|
|
266
|
+
},
|
|
267
|
+
module: (specifier, callback) => {
|
|
268
|
+
const namespace = `ecopages-module-${moduleCounter.value}`;
|
|
269
|
+
moduleCounter.value += 1;
|
|
270
|
+
const filter = new RegExp(`^${escapeRegExp(specifier)}$`);
|
|
271
|
+
registerResolve(filter, async () => ({
|
|
272
|
+
path: joinNamespace(namespace, specifier),
|
|
273
|
+
}));
|
|
274
|
+
registerLoad(buildIdFilter(/.*/, namespace), async () => callback());
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
await ecoPlugin.setup(bridge);
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
resolveId: resolveIdHandler,
|
|
281
|
+
load: loadHandler,
|
|
282
|
+
};
|
|
283
|
+
return [plugin];
|
|
284
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LoadResult, SourceDescription } from 'rolldown';
|
|
2
|
-
import { type EcoSourceTransform } from '
|
|
2
|
+
import { type EcoSourceTransform } from '../../plugins/source-transform.js';
|
|
3
3
|
/**
|
|
4
4
|
* Runs app-owned source transforms after first-wins `onLoad` plugins produce
|
|
5
5
|
* module contents for one Rolldown load request.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { applySourceTransforms, normalizeTransformId, } from '../../plugins/source-transform.js';
|
|
4
|
+
/**
|
|
5
|
+
* Standard source extensions eligible for the browser post-load transform pass.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Compound integration templates (for example `.kita.tsx`) still match because
|
|
9
|
+
* matching uses the final path suffix. Keep this aligned with integration
|
|
10
|
+
* template extensions registered in app config.
|
|
11
|
+
*/
|
|
12
|
+
const TRANSFORMABLE_SOURCE_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mdx']);
|
|
13
|
+
function shouldApplySourceTransforms(namespace, sourcePath) {
|
|
14
|
+
if (namespace !== undefined) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const normalizedPath = normalizeTransformId(sourcePath);
|
|
18
|
+
return TRANSFORMABLE_SOURCE_EXTENSIONS.has(path.extname(normalizedPath).toLowerCase());
|
|
19
|
+
}
|
|
20
|
+
function shouldTransformLoadedModule(moduleType) {
|
|
21
|
+
return moduleType !== 'css' && moduleType !== 'asset';
|
|
22
|
+
}
|
|
23
|
+
function applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, code) {
|
|
24
|
+
if (sourceTransforms.length === 0) {
|
|
25
|
+
return code;
|
|
26
|
+
}
|
|
27
|
+
return applySourceTransforms(sourceTransforms, code, sourcePath);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Runs app-owned source transforms after first-wins `onLoad` plugins produce
|
|
31
|
+
* module contents for one Rolldown load request.
|
|
32
|
+
*/
|
|
33
|
+
export async function finalizeLoadResultWithSourceTransforms(options) {
|
|
34
|
+
const { id, namespace, sourcePath, loadResult, sourceTransforms, contextRoot, inferModuleTypeFromPath } = options;
|
|
35
|
+
if (!shouldApplySourceTransforms(namespace, sourcePath)) {
|
|
36
|
+
return loadResult;
|
|
37
|
+
}
|
|
38
|
+
if (typeof loadResult === 'object' &&
|
|
39
|
+
loadResult !== null &&
|
|
40
|
+
'code' in loadResult &&
|
|
41
|
+
typeof loadResult.code === 'string') {
|
|
42
|
+
if (!shouldTransformLoadedModule(loadResult.moduleType)) {
|
|
43
|
+
return loadResult;
|
|
44
|
+
}
|
|
45
|
+
const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, loadResult.code);
|
|
46
|
+
if (transformedCode === loadResult.code) {
|
|
47
|
+
return loadResult;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
code: transformedCode,
|
|
51
|
+
moduleType: loadResult.moduleType,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
if (loadResult !== undefined || sourceTransforms.length === 0) {
|
|
55
|
+
return loadResult;
|
|
56
|
+
}
|
|
57
|
+
const normalizedPath = path.isAbsolute(sourcePath) ? sourcePath : path.resolve(contextRoot, sourcePath);
|
|
58
|
+
if (!fileSystem.exists(normalizedPath)) {
|
|
59
|
+
return loadResult;
|
|
60
|
+
}
|
|
61
|
+
const originalCode = fileSystem.readFileSync(normalizedPath);
|
|
62
|
+
const transformedCode = applyTransformsToLoadedSource(sourceTransforms, id, sourcePath, originalCode);
|
|
63
|
+
if (transformedCode === originalCode) {
|
|
64
|
+
return loadResult;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
code: transformedCode,
|
|
68
|
+
moduleType: inferModuleTypeFromPath(normalizedPath),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
import { isBarePackageImportSpecifier } from '../../plugins/tsconfig-import-resolver.js';
|
|
6
|
+
const corePackageRequire = createRequire(new URL('../../../package.json', import.meta.url));
|
|
7
|
+
const appDeclaredPackageCache = new Map();
|
|
8
|
+
const appWorkspacePackageCache = new Map();
|
|
9
|
+
function tryResolveRuntimeImport(specifier, resolver) {
|
|
10
|
+
try {
|
|
11
|
+
return resolver.resolve(specifier);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extracts the package name from a file:// URL pointing to a node_modules path.
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* Given a URL like `file:///path/to/node_modules/@scope/pkg/dist/index.js`,
|
|
22
|
+
* returns `@scope/pkg`. Given `file:///path/to/node_modules/pkg/dist/index.js`,
|
|
23
|
+
* returns `pkg`. Returns `undefined` if the URL doesn't point to node_modules.
|
|
24
|
+
*
|
|
25
|
+
* Handles pnpm's nested node_modules structure by finding the LAST node_modules
|
|
26
|
+
* in the path (e.g., `node_modules/.pnpm/pkg@version/node_modules/@scope/pkg/...`).
|
|
27
|
+
*/
|
|
28
|
+
function extractPackageNameFromFileUrl(specifier) {
|
|
29
|
+
if (!specifier.startsWith('file://')) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
// Find the LAST node_modules in the path to handle pnpm's nested structure
|
|
33
|
+
const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
|
|
34
|
+
if (lastNodeModulesIndex === -1) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
|
|
38
|
+
const parts = afterNodeModules.split('/');
|
|
39
|
+
if (parts.length === 0) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (parts[0]?.startsWith('@') && parts.length > 1) {
|
|
43
|
+
return `${parts[0]}/${parts[1]}`;
|
|
44
|
+
}
|
|
45
|
+
return parts[0];
|
|
46
|
+
}
|
|
47
|
+
function getPackageNameFromSpecifier(specifier) {
|
|
48
|
+
if (specifier.startsWith('@')) {
|
|
49
|
+
return specifier.split('/').slice(0, 2).join('/');
|
|
50
|
+
}
|
|
51
|
+
return specifier.split('/')[0] ?? specifier;
|
|
52
|
+
}
|
|
53
|
+
function getDeclaredAppPackages(rootDir) {
|
|
54
|
+
const cacheKey = path.resolve(rootDir);
|
|
55
|
+
const cached = appDeclaredPackageCache.get(cacheKey);
|
|
56
|
+
if (cached) {
|
|
57
|
+
return cached;
|
|
58
|
+
}
|
|
59
|
+
const packageJsonPath = path.resolve(rootDir, 'package.json');
|
|
60
|
+
const declaredPackages = new Set();
|
|
61
|
+
try {
|
|
62
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
63
|
+
for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
|
|
64
|
+
const entries = packageJson[field];
|
|
65
|
+
if (!entries || typeof entries !== 'object') {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
for (const packageName of Object.keys(entries)) {
|
|
69
|
+
declaredPackages.add(packageName);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
appDeclaredPackageCache.set(cacheKey, declaredPackages);
|
|
75
|
+
return declaredPackages;
|
|
76
|
+
}
|
|
77
|
+
appDeclaredPackageCache.set(cacheKey, declaredPackages);
|
|
78
|
+
return declaredPackages;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Returns the set of workspace packages declared in the app's package.json.
|
|
82
|
+
*
|
|
83
|
+
* Workspace packages are identified by the `workspace:` protocol in their
|
|
84
|
+
* version specifier (e.g., `"workspace:*"`, `"workspace:^1.0.0"`). These
|
|
85
|
+
* packages are typically source-only and must be bundled rather than
|
|
86
|
+
* externalized.
|
|
87
|
+
*/
|
|
88
|
+
function getWorkspacePackages(rootDir) {
|
|
89
|
+
const cacheKey = path.resolve(rootDir);
|
|
90
|
+
const cached = appWorkspacePackageCache.get(cacheKey);
|
|
91
|
+
if (cached) {
|
|
92
|
+
return cached;
|
|
93
|
+
}
|
|
94
|
+
const packageJsonPath = path.resolve(rootDir, 'package.json');
|
|
95
|
+
const workspacePackages = new Set();
|
|
96
|
+
try {
|
|
97
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
98
|
+
for (const field of ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']) {
|
|
99
|
+
const entries = packageJson[field];
|
|
100
|
+
if (!entries || typeof entries !== 'object') {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
for (const [packageName, version] of Object.entries(entries)) {
|
|
104
|
+
if (typeof version === 'string' && version.startsWith('workspace:')) {
|
|
105
|
+
workspacePackages.add(packageName);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
appWorkspacePackageCache.set(cacheKey, workspacePackages);
|
|
112
|
+
return workspacePackages;
|
|
113
|
+
}
|
|
114
|
+
appWorkspacePackageCache.set(cacheKey, workspacePackages);
|
|
115
|
+
return workspacePackages;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns true if the given specifier is a workspace package.
|
|
119
|
+
*
|
|
120
|
+
* Workspace packages are declared with the `workspace:` protocol and are
|
|
121
|
+
* typically source-only, requiring bundling rather than externalization.
|
|
122
|
+
*/
|
|
123
|
+
export function isWorkspacePackageImport(specifier, rootDir) {
|
|
124
|
+
return getWorkspacePackages(rootDir).has(getPackageNameFromSpecifier(specifier));
|
|
125
|
+
}
|
|
126
|
+
export function isDeclaredAppPackageImport(specifier, rootDir) {
|
|
127
|
+
return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Whether the given bare specifier should be left as-is (not rewritten to a
|
|
131
|
+
* file URL) in bundled output.
|
|
132
|
+
*
|
|
133
|
+
* Only app-declared packages qualify: their resolver can find them from a
|
|
134
|
+
* generated server bundle. Core dependencies remain file URLs because a
|
|
135
|
+
* bundle in `dist/.server` is not inside Core's Node.js resolution chain.
|
|
136
|
+
*/
|
|
137
|
+
function isDeclaredInResolutionChain(specifier, rootDir) {
|
|
138
|
+
return isDeclaredAppPackageImport(specifier, rootDir);
|
|
139
|
+
}
|
|
140
|
+
function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
|
|
141
|
+
if (!isBarePackageImportSpecifier(specifier, rootDir)) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
if (isDeclaredInResolutionChain(specifier, rootDir)) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
|
|
148
|
+
if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
|
|
152
|
+
}
|
|
153
|
+
function rewriteRuntimeBuildOutputImports(code, rootDir) {
|
|
154
|
+
const rewriteSpecifier = (prefix, quote, specifier) => {
|
|
155
|
+
const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
|
|
156
|
+
return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Rewrites file:// URLs pointing to node_modules back to bare specifiers,
|
|
160
|
+
* but only when the package is resolvable from the app's resolution chain.
|
|
161
|
+
*
|
|
162
|
+
* @remarks
|
|
163
|
+
* Rolldown resolves external imports to file:// URLs during the build. For
|
|
164
|
+
* packages declared in the app's package.json, rewriting to bare specifiers
|
|
165
|
+
* is safe and preserves CJS named-export interop. For transitive
|
|
166
|
+
* dependencies that aren't directly resolvable, the file:// URL is kept as-is
|
|
167
|
+
* to avoid ERR_MODULE_NOT_FOUND errors at runtime.
|
|
168
|
+
*/
|
|
169
|
+
const rewriteFileUrl = (prefix, quote, specifier) => {
|
|
170
|
+
const packageName = extractPackageNameFromFileUrl(specifier);
|
|
171
|
+
if (!packageName) {
|
|
172
|
+
return `${prefix}${quote}${specifier}${quote}`;
|
|
173
|
+
}
|
|
174
|
+
if (!isDeclaredInResolutionChain(packageName, rootDir)) {
|
|
175
|
+
return `${prefix}${quote}${specifier}${quote}`;
|
|
176
|
+
}
|
|
177
|
+
// Extract the subpath after the package name
|
|
178
|
+
// Use lastIndexOf to handle pnpm's nested node_modules structure
|
|
179
|
+
const lastNodeModulesIndex = specifier.lastIndexOf('/node_modules/');
|
|
180
|
+
if (lastNodeModulesIndex === -1) {
|
|
181
|
+
return `${prefix}${quote}${specifier}${quote}`;
|
|
182
|
+
}
|
|
183
|
+
const afterNodeModules = specifier.slice(lastNodeModulesIndex + '/node_modules/'.length);
|
|
184
|
+
const afterPackage = afterNodeModules.slice(packageName.length);
|
|
185
|
+
// Reconstruct the bare specifier
|
|
186
|
+
const bareSpecifier = packageName + afterPackage;
|
|
187
|
+
return `${prefix}${quote}${bareSpecifier}${quote}`;
|
|
188
|
+
};
|
|
189
|
+
const withResolvedPackages = code
|
|
190
|
+
.replace(/(\bfrom\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
|
|
191
|
+
.replace(/(\bimport\s+)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier))
|
|
192
|
+
.replace(/(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier));
|
|
193
|
+
// Rewrite file:// URLs pointing to node_modules back to bare specifiers
|
|
194
|
+
const withBareSpecifiers = withResolvedPackages
|
|
195
|
+
.replace(/(\bfrom\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
|
|
196
|
+
.replace(/(\bimport\s+)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier))
|
|
197
|
+
.replace(/(\bimport\s*\(\s*)(['"])(file:\/\/[^'"\\]+)\2/g, (_match, prefix, quote, specifier) => rewriteFileUrl(prefix, quote, specifier));
|
|
198
|
+
return withBareSpecifiers.replace(/(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g, (match, quote, specifier) => {
|
|
199
|
+
const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
|
|
200
|
+
return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
export function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
|
|
204
|
+
if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
|
|
205
|
+
console.log(`[normalizeNodeRuntimeBuildOutputFile] Checking ${filePath}`);
|
|
206
|
+
}
|
|
207
|
+
if (!/\.(?:[cm]?js)$/u.test(filePath)) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const fileSystem = corePackageRequire('node:fs');
|
|
211
|
+
if (!fileSystem.existsSync(filePath)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const code = fileSystem.readFileSync(filePath, 'utf-8');
|
|
215
|
+
const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
|
|
216
|
+
if (rewritten !== code) {
|
|
217
|
+
if (process.env.ECOPAGES_LOGGER_DEBUG === 'true') {
|
|
218
|
+
console.log(`[normalizeNodeRuntimeBuildOutputFile] Rewriting ${filePath}`);
|
|
219
|
+
}
|
|
220
|
+
fileSystem.writeFileSync(filePath, rewritten);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
|
|
224
|
+
for (const outputPath of outputPaths) {
|
|
225
|
+
normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side CSS shim plugin for the bundler adapter.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Page modules imported by the server (so the framework can read
|
|
6
|
+
* `getStaticProps` / `staticPaths` / page metadata) commonly have
|
|
7
|
+
* `import './style.css'` at the top. The bundler does not bundle
|
|
8
|
+
* CSS, and the server only needs the JS exports — the CSS itself
|
|
9
|
+
* is delivered to the browser via the page's `dependencies.stylesheets`
|
|
10
|
+
* declarations. This plugin:
|
|
11
|
+
*
|
|
12
|
+
* - Resolves `.css` imports to the absolute on-disk path.
|
|
13
|
+
* - Loads them and returns an empty ESM module with
|
|
14
|
+
* `moduleSideEffects: true` so the bundler keeps the import in
|
|
15
|
+
* the dependency graph without trying to bundle the bytes.
|
|
16
|
+
*
|
|
17
|
+
* The plugin is added by the adapter on every server-side build.
|
|
18
|
+
* Browser-side builds that want real CSS bundling should keep using
|
|
19
|
+
* a dedicated CSS pipeline (e.g. the postcss processor's output)
|
|
20
|
+
* and continue to declare stylesheets in `dependencies.stylesheets`
|
|
21
|
+
* — the shim is intentionally inert for those flows.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
const CSS_PATH = /\.css$/u;
|
|
26
|
+
const CSS_QUERY = '?ecopages-css-shim';
|
|
27
|
+
function stripShimQuery(id) {
|
|
28
|
+
const queryIndex = id.indexOf('?');
|
|
29
|
+
return queryIndex === -1 ? id : id.slice(0, queryIndex);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Builds a Rolldown plugin that turns `.css` imports into no-op ESM
|
|
33
|
+
* modules while preserving the dependency graph.
|
|
34
|
+
*/
|
|
35
|
+
export function createServerSideCssShimPlugin() {
|
|
36
|
+
return {
|
|
37
|
+
name: 'ecopages:server-side-css-shim',
|
|
38
|
+
async resolveId(source, importer) {
|
|
39
|
+
if (!CSS_PATH.test(source)) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
|
|
43
|
+
return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
|
|
44
|
+
},
|
|
45
|
+
async load(id) {
|
|
46
|
+
if (!id.endsWith(CSS_QUERY)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const realPath = stripShimQuery(id);
|
|
50
|
+
readFileSync(realPath, 'utf-8');
|
|
51
|
+
return {
|
|
52
|
+
code: 'export default "";',
|
|
53
|
+
moduleType: 'js',
|
|
54
|
+
moduleSideEffects: true,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BuildOptions } from '../build-adapter.js';
|
|
2
|
+
import type { BuildProfile } from './build-runtime.js';
|
|
3
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves shared Rolldown options for a build profile.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveBuildProfileOptions(profile: BuildProfile, appConfig: EcoPagesAppConfig, overrides?: Partial<BuildOptions>): Partial<BuildOptions>;
|