@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,71 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
let cachedCorePackageVersion;
|
|
3
|
+
/**
|
|
4
|
+
* Returns the installed `@ecopages/core` package version for cache invalidation.
|
|
5
|
+
*/
|
|
6
|
+
export function getCorePackageVersion() {
|
|
7
|
+
if (cachedCorePackageVersion) {
|
|
8
|
+
return cachedCorePackageVersion;
|
|
9
|
+
}
|
|
10
|
+
const packageJsonPath = new URL('../../../package.json', import.meta.url);
|
|
11
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
12
|
+
cachedCorePackageVersion = packageJson.version ?? '0.0.0';
|
|
13
|
+
return cachedCorePackageVersion;
|
|
14
|
+
}
|
|
15
|
+
/** Stable fingerprint for JSX options used in build and disk cache keys. */
|
|
16
|
+
export function createJsxCacheKey(jsx) {
|
|
17
|
+
if (!jsx) {
|
|
18
|
+
return 'jsx:default';
|
|
19
|
+
}
|
|
20
|
+
return JSON.stringify({
|
|
21
|
+
development: jsx.development ?? false,
|
|
22
|
+
factory: jsx.factory ?? null,
|
|
23
|
+
fragment: jsx.fragment ?? null,
|
|
24
|
+
importSource: jsx.importSource ?? null,
|
|
25
|
+
runtime: jsx.runtime ?? null,
|
|
26
|
+
sideEffects: jsx.sideEffects ?? null,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Stable fingerprint for ordered build plugins. */
|
|
30
|
+
export function createPluginCacheKey(plugins) {
|
|
31
|
+
if (!plugins || plugins.length === 0) {
|
|
32
|
+
return 'plugins:default';
|
|
33
|
+
}
|
|
34
|
+
return `plugins:${plugins.map((plugin) => `${plugin.name}:${hashFunctionIdentity(plugin.setup)}`).join(',')}`;
|
|
35
|
+
}
|
|
36
|
+
/** Stable fingerprint for ordered source transforms. */
|
|
37
|
+
export function createSourceTransformCacheKey(sourceTransforms) {
|
|
38
|
+
if (!sourceTransforms || sourceTransforms.length === 0) {
|
|
39
|
+
return 'sourceTransforms:default';
|
|
40
|
+
}
|
|
41
|
+
return `sourceTransforms:${sourceTransforms
|
|
42
|
+
.map((transform) => {
|
|
43
|
+
const filterSource = transform.filter.source;
|
|
44
|
+
const filterFlags = transform.filter.flags;
|
|
45
|
+
return [
|
|
46
|
+
transform.name,
|
|
47
|
+
transform.enforce ?? 'default',
|
|
48
|
+
filterSource,
|
|
49
|
+
filterFlags,
|
|
50
|
+
hashFunctionIdentity(transform.transform),
|
|
51
|
+
].join(':');
|
|
52
|
+
})
|
|
53
|
+
.join(',')}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Stable fingerprint of a function body for cache and request identity keys.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* Hashes `fn.toString()`. Suitable for in-process and persisted keys that must
|
|
60
|
+
* agree within one install; not stable across minifiers or renames.
|
|
61
|
+
*/
|
|
62
|
+
export function hashFunctionIdentity(fn) {
|
|
63
|
+
let hash = 0;
|
|
64
|
+
const source = fn.toString();
|
|
65
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
66
|
+
hash = (hash * 31 + source.charCodeAt(index)) | 0;
|
|
67
|
+
}
|
|
68
|
+
return (hash >>> 0).toString(36);
|
|
69
|
+
}
|
|
70
|
+
/** @deprecated Use {@link hashFunctionIdentity}. */
|
|
71
|
+
export const hashPluginSetup = hashFunctionIdentity;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
|
|
6
6
|
* registered on the app config.
|
|
7
7
|
*/
|
|
8
|
-
import type { EcoPagesAppConfig } from '
|
|
8
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
9
9
|
export declare const PAGES_UNIFIED_GRAPH_CACHE_DIR = ".server-pages-graph";
|
|
10
10
|
export declare const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = ".build-cache.json";
|
|
11
11
|
export interface PagesUnifiedGraphCacheManifest {
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified pages Rolldown graph (Phase A build + Phase C import).
|
|
3
|
+
*
|
|
4
|
+
* Enabled by default in production builds. Opt out with
|
|
5
|
+
* `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
|
|
6
|
+
* registered on the app config.
|
|
7
|
+
*/
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { pathToFileURL } from 'node:url';
|
|
10
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
11
|
+
import { appLogger } from '../../global/app-logger.js';
|
|
12
|
+
import { build } from '../build-adapter.js';
|
|
13
|
+
import { requireBuildRuntime } from '../runtime/build-runtime.js';
|
|
14
|
+
import { createServerBuildRequest, resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
|
|
15
|
+
import { createBuildInputsFingerprint, hashAppConfigFile } from './build-input-fingerprint.js';
|
|
16
|
+
import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
|
|
17
|
+
import { getCorePackageVersion } from './cache-keys.js';
|
|
18
|
+
import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
|
|
19
|
+
import { getSharedRouteModuleBuildCache } from '../../services/module-loading/route-module-build-cache-registry.js';
|
|
20
|
+
import { resolveRouteModuleDependencyPaths } from '../../services/module-loading/route-module-dependency-hasher.js';
|
|
21
|
+
export const PAGES_UNIFIED_GRAPH_CACHE_DIR = '.server-pages-graph';
|
|
22
|
+
export const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = '.build-cache.json';
|
|
23
|
+
export function isPagesUnifiedGraphEnabled() {
|
|
24
|
+
if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '0') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '1') {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return process.env.NODE_ENV === 'production';
|
|
31
|
+
}
|
|
32
|
+
/** True when the unified graph should build or serve prebuilt page modules. */
|
|
33
|
+
export function shouldBuildPagesUnifiedGraph() {
|
|
34
|
+
return isPagesUnifiedGraphEnabled() && process.env.NODE_ENV === 'production';
|
|
35
|
+
}
|
|
36
|
+
export function isPagesUnifiedGraphPage(filePath, appConfig) {
|
|
37
|
+
const normalizedPath = path.normalize(filePath);
|
|
38
|
+
return appConfig.templatesExt.some((extension) => normalizedPath.endsWith(extension));
|
|
39
|
+
}
|
|
40
|
+
function getPagesUnifiedGraphCachePath(appConfig) {
|
|
41
|
+
return path.join(resolveInternalExecutionDir(appConfig), PAGES_UNIFIED_GRAPH_CACHE_DIR, PAGES_UNIFIED_GRAPH_CACHE_FILENAME);
|
|
42
|
+
}
|
|
43
|
+
function createPagesUnifiedGraphBuildKey(appConfig, outdir) {
|
|
44
|
+
const pluginNames = resolveServerAppBuildPlugins(appConfig)
|
|
45
|
+
.map((plugin) => plugin.name)
|
|
46
|
+
.sort()
|
|
47
|
+
.join('|');
|
|
48
|
+
const templateExtensions = [...appConfig.templatesExt].sort().join('|');
|
|
49
|
+
return [
|
|
50
|
+
path.resolve(outdir),
|
|
51
|
+
hashAppConfigFile(appConfig),
|
|
52
|
+
templateExtensions,
|
|
53
|
+
pluginNames,
|
|
54
|
+
'es2022',
|
|
55
|
+
'esm',
|
|
56
|
+
'external-packages',
|
|
57
|
+
].join('::');
|
|
58
|
+
}
|
|
59
|
+
function readPagesUnifiedGraphManifest(appConfig) {
|
|
60
|
+
const manifest = readProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig));
|
|
61
|
+
if (!manifest?.outputs) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return manifest;
|
|
65
|
+
}
|
|
66
|
+
function writePagesUnifiedGraphManifest(appConfig, manifest) {
|
|
67
|
+
writeProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig), manifest);
|
|
68
|
+
}
|
|
69
|
+
function createSafeGraphEntryKey(entryPath, rootDir) {
|
|
70
|
+
const relativePath = path.relative(rootDir, entryPath).replace(/\.[^.]+$/u, '');
|
|
71
|
+
const safeKey = relativePath.replace(/[^a-zA-Z0-9]+/gu, '-').replace(/^-+|-+$/gu, '');
|
|
72
|
+
return safeKey.length > 0 ? safeKey : 'page';
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @remarks
|
|
76
|
+
* Uses {@link BuildResult.entryOutputs} when present so resolution follows the
|
|
77
|
+
* bundler's `facadeModuleId` instead of guessing from sanitized entry keys.
|
|
78
|
+
* Basename prefix matching remains only as a fallback for backends that omit
|
|
79
|
+
* `entryOutputs`; it can mis-associate keys such as `pages-blog` and
|
|
80
|
+
* `pages-blog-index`.
|
|
81
|
+
*/
|
|
82
|
+
function resolveOutputForEntrypoint(entryPath, entryKey, buildResult) {
|
|
83
|
+
const exactOutput = buildResult.entryOutputs?.[path.resolve(entryPath)];
|
|
84
|
+
if (exactOutput) {
|
|
85
|
+
return exactOutput;
|
|
86
|
+
}
|
|
87
|
+
for (const { path: outputPath } of buildResult.outputs) {
|
|
88
|
+
const outputBaseName = path.basename(outputPath);
|
|
89
|
+
if (outputBaseName.startsWith(`${entryKey}-`) && /\.(?:m?js)$/u.test(outputBaseName)) {
|
|
90
|
+
return outputPath;
|
|
91
|
+
}
|
|
92
|
+
if (outputBaseName === `${entryKey}.js` || outputBaseName === `${entryKey}.mjs`) {
|
|
93
|
+
return outputPath;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
function isManifestValidForEntries(manifest, appConfig, outdir, entryPaths) {
|
|
99
|
+
if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (!matchesProductionCacheFingerprint(manifest, createBuildInputsFingerprint(appConfig))) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (!matchesProductionCacheBuildKey(manifest, createPagesUnifiedGraphBuildKey(appConfig, outdir))) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return entryPaths.every((entryPath) => {
|
|
109
|
+
const resolvedEntryPath = path.resolve(entryPath);
|
|
110
|
+
const outputPath = manifest.outputs[resolvedEntryPath];
|
|
111
|
+
return outputPath ? fileSystem.exists(outputPath) : false;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Builds eligible static pages in one Rolldown invocation and seeds route-module disk cache.
|
|
116
|
+
*/
|
|
117
|
+
export async function ensurePagesUnifiedGraphBuilt(options) {
|
|
118
|
+
if (!shouldBuildPagesUnifiedGraph()) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const eligibleEntryPaths = options.entryPaths
|
|
122
|
+
.map((entryPath) => path.resolve(entryPath))
|
|
123
|
+
.filter((entryPath) => isPagesUnifiedGraphPage(entryPath, options.appConfig));
|
|
124
|
+
if (eligibleEntryPaths.length === 0) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const outdir = path.resolve(options.outdir);
|
|
128
|
+
const existingManifest = options.force ? undefined : readPagesUnifiedGraphManifest(options.appConfig);
|
|
129
|
+
if (existingManifest &&
|
|
130
|
+
isManifestValidForEntries(existingManifest, options.appConfig, outdir, eligibleEntryPaths)) {
|
|
131
|
+
appLogger.debug('Reusing pages unified graph cache');
|
|
132
|
+
return existingManifest;
|
|
133
|
+
}
|
|
134
|
+
const routeModuleBuildCache = getSharedRouteModuleBuildCache(outdir, options.appConfig);
|
|
135
|
+
const entryRecord = {};
|
|
136
|
+
const entryKeysByPath = new Map();
|
|
137
|
+
for (const entryPath of eligibleEntryPaths) {
|
|
138
|
+
const entryKey = createSafeGraphEntryKey(entryPath, options.appConfig.rootDir);
|
|
139
|
+
entryRecord[entryKey] = entryPath;
|
|
140
|
+
entryKeysByPath.set(entryPath, entryKey);
|
|
141
|
+
}
|
|
142
|
+
appLogger.debugTime('pagesUnifiedGraphBuild');
|
|
143
|
+
const buildOptions = createServerBuildRequest(options.appConfig, {
|
|
144
|
+
profile: 'route-module',
|
|
145
|
+
entrypoints: entryRecord,
|
|
146
|
+
outdir,
|
|
147
|
+
splitting: true,
|
|
148
|
+
naming: '[name]-[hash].[ext]',
|
|
149
|
+
});
|
|
150
|
+
const plugins = buildOptions.plugins ?? [];
|
|
151
|
+
const buildResult = await build(buildOptions, requireBuildRuntime(options.appConfig).getProfile('route-module'));
|
|
152
|
+
appLogger.debugTimeEnd('pagesUnifiedGraphBuild');
|
|
153
|
+
if (!buildResult.success) {
|
|
154
|
+
const details = buildResult.logs.map((log) => log.message).join(' | ');
|
|
155
|
+
throw new Error(`Pages unified graph build failed: ${details}`);
|
|
156
|
+
}
|
|
157
|
+
const outputs = {};
|
|
158
|
+
for (const entryPath of eligibleEntryPaths) {
|
|
159
|
+
const fileHash = fileSystem.hash(entryPath);
|
|
160
|
+
const entryKey = entryKeysByPath.get(entryPath);
|
|
161
|
+
const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : undefined;
|
|
162
|
+
if (!compiledOutput) {
|
|
163
|
+
throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
|
|
164
|
+
}
|
|
165
|
+
outputs[entryPath] = compiledOutput;
|
|
166
|
+
routeModuleBuildCache.recordBuild({
|
|
167
|
+
filePath: entryPath,
|
|
168
|
+
rootDir: options.appConfig.rootDir,
|
|
169
|
+
outdir,
|
|
170
|
+
fileHash,
|
|
171
|
+
outputPath: compiledOutput,
|
|
172
|
+
dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
|
|
173
|
+
externalPackages: true,
|
|
174
|
+
plugins,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
const manifest = {
|
|
178
|
+
invalidationVersion: getCorePackageVersion(),
|
|
179
|
+
buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
|
|
180
|
+
buildKey: createPagesUnifiedGraphBuildKey(options.appConfig, outdir),
|
|
181
|
+
builtAt: Date.now(),
|
|
182
|
+
outputs,
|
|
183
|
+
};
|
|
184
|
+
writePagesUnifiedGraphManifest(options.appConfig, manifest);
|
|
185
|
+
appLogger.debug(`Built pages unified graph for ${eligibleEntryPaths.length} entries`);
|
|
186
|
+
return manifest;
|
|
187
|
+
}
|
|
188
|
+
export async function importPagesUnifiedGraphModule(appConfig, filePath) {
|
|
189
|
+
const manifest = readPagesUnifiedGraphManifest(appConfig);
|
|
190
|
+
if (!manifest) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
const resolvedFilePath = path.resolve(filePath);
|
|
194
|
+
const outputPath = manifest.outputs[resolvedFilePath];
|
|
195
|
+
if (!outputPath || !fileSystem.exists(outputPath)) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return (await import(/* @vite-ignore */ pathToFileURL(outputPath).href));
|
|
199
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared manifest fields for persisted production build caches.
|
|
4
|
+
*/
|
|
5
|
+
export interface ProductionCacheManifestBase {
|
|
6
|
+
invalidationVersion?: string;
|
|
7
|
+
corePackageVersion?: string;
|
|
8
|
+
buildInputsFingerprint?: string;
|
|
9
|
+
buildKey?: string;
|
|
10
|
+
builtAt?: number;
|
|
11
|
+
}
|
|
12
|
+
export type ProductionBuildCacheKind = 'server-entry' | 'route-module' | 'pages-graph';
|
|
13
|
+
/** Returns every persisted production cache manifest path for one app. */
|
|
14
|
+
export declare function getProductionBuildCacheManifestPaths(appConfig: EcoPagesAppConfig): string[];
|
|
15
|
+
/** Removes all persisted production cache manifests for one app. */
|
|
16
|
+
export declare function clearPersistedProductionBuildCacheManifests(appConfig: EcoPagesAppConfig): void;
|
|
17
|
+
export declare function readProductionCacheManifest<T extends ProductionCacheManifestBase>(manifestPath: string): T | undefined;
|
|
18
|
+
export declare function writeProductionCacheManifest(manifestPath: string, manifest: unknown): void;
|
|
19
|
+
export declare function isProductionCacheManifestCurrent(manifest: ProductionCacheManifestBase | undefined, packageVersion: string): boolean;
|
|
20
|
+
export declare function matchesProductionCacheFingerprint(manifest: ProductionCacheManifestBase | undefined, buildInputsFingerprint: string): boolean;
|
|
21
|
+
export declare function matchesProductionCacheBuildKey(manifest: ProductionCacheManifestBase | undefined, buildKey: string): boolean;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from './cache-constants.js';
|
|
4
|
+
import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
|
|
5
|
+
const ROUTE_MODULE_CACHE_OUTDIRS = ['.server-modules', '.server-route-modules'];
|
|
6
|
+
const PAGES_GRAPH_CACHE_DIR = '.server-pages-graph';
|
|
7
|
+
/** Returns every persisted production cache manifest path for one app. */
|
|
8
|
+
export function getProductionBuildCacheManifestPaths(appConfig) {
|
|
9
|
+
const executionDir = resolveInternalExecutionDir(appConfig);
|
|
10
|
+
const paths = [];
|
|
11
|
+
for (const subdir of ROUTE_MODULE_CACHE_OUTDIRS) {
|
|
12
|
+
paths.push(path.join(executionDir, subdir, ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
13
|
+
}
|
|
14
|
+
paths.push(path.join(executionDir, '.server-entry', ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
15
|
+
paths.push(path.join(executionDir, PAGES_GRAPH_CACHE_DIR, ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
16
|
+
return paths;
|
|
17
|
+
}
|
|
18
|
+
/** Removes all persisted production cache manifests for one app. */
|
|
19
|
+
export function clearPersistedProductionBuildCacheManifests(appConfig) {
|
|
20
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const manifestPath of getProductionBuildCacheManifestPaths(appConfig)) {
|
|
24
|
+
if (fileSystem.exists(manifestPath)) {
|
|
25
|
+
fileSystem.remove(manifestPath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function readProductionCacheManifest(manifestPath) {
|
|
30
|
+
if (!fileSystem.exists(manifestPath)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
|
|
35
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function writeProductionCacheManifest(manifestPath, manifest) {
|
|
45
|
+
fileSystem.ensureDir(path.dirname(manifestPath));
|
|
46
|
+
fileSystem.write(manifestPath, `${JSON.stringify(manifest, null, '\t')}\n`);
|
|
47
|
+
}
|
|
48
|
+
export function isProductionCacheManifestCurrent(manifest, packageVersion) {
|
|
49
|
+
return (manifest?.corePackageVersion ?? manifest?.invalidationVersion) === packageVersion;
|
|
50
|
+
}
|
|
51
|
+
export function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
|
|
52
|
+
return manifest?.buildInputsFingerprint === buildInputsFingerprint;
|
|
53
|
+
}
|
|
54
|
+
export function matchesProductionCacheBuildKey(manifest, buildKey) {
|
|
55
|
+
return manifest?.buildKey === buildKey;
|
|
56
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { BuildResult } from '
|
|
2
|
-
import type { EcoPagesAppConfig } from '
|
|
3
|
-
|
|
4
|
-
export declare const SERVER_ENTRY_BUILD_CACHE_FILENAME = ".build-cache.json";
|
|
1
|
+
import type { BuildResult } from '../build-adapter.js';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
+
export { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
|
|
5
4
|
export declare const SERVER_BUNDLE_MANIFEST_FILENAME = "manifest.json";
|
|
6
5
|
export interface ServerBundleDeployManifest {
|
|
7
6
|
serverEntry: string;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
|
|
4
|
+
import { createBuildInputsFingerprint } from './build-input-fingerprint.js';
|
|
5
|
+
import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
|
|
6
|
+
import { createPluginCacheKey, getCorePackageVersion } from './cache-keys.js';
|
|
7
|
+
import { RouteModuleDependencyHasher, createRouteModuleDependencyHashes, } from '../../services/module-loading/route-module-dependency-hasher.js';
|
|
8
|
+
import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
|
|
9
|
+
import { SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME } from '../../utils/resolve-entry-file.js';
|
|
10
|
+
import { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
|
|
11
|
+
export { SERVER_ENTRY_BUILD_CACHE_FILENAME } from './cache-constants.js';
|
|
12
|
+
export const SERVER_BUNDLE_MANIFEST_FILENAME = 'manifest.json';
|
|
13
|
+
function getServerEntryCacheDir(appConfig) {
|
|
14
|
+
return path.join(resolveInternalExecutionDir(appConfig), '.server-entry');
|
|
15
|
+
}
|
|
16
|
+
function getServerEntryCacheManifestPath(appConfig) {
|
|
17
|
+
return path.join(getServerEntryCacheDir(appConfig), SERVER_ENTRY_BUILD_CACHE_FILENAME);
|
|
18
|
+
}
|
|
19
|
+
function hashDependencyGraph(entryPath, dependencyGraph, hasher, rootDir) {
|
|
20
|
+
if (!dependencyGraph) {
|
|
21
|
+
return { [path.resolve(entryPath)]: fileSystem.hash(entryPath) };
|
|
22
|
+
}
|
|
23
|
+
return createRouteModuleDependencyHashes(hasher, { dependencyGraph }, entryPath, rootDir);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fingerprints the app-owned output-affecting server request policy.
|
|
27
|
+
*
|
|
28
|
+
* @remarks
|
|
29
|
+
* Includes ordered server plugins and JSX ownership plugins via
|
|
30
|
+
* {@link resolveServerAppBuildPlugins}. The versioned prefix intentionally
|
|
31
|
+
* invalidates manifests written before server requests included JSX ownership.
|
|
32
|
+
*/
|
|
33
|
+
function createServerEntryBuildKey(appConfig) {
|
|
34
|
+
try {
|
|
35
|
+
return [
|
|
36
|
+
'server-entry-request-v2',
|
|
37
|
+
'node',
|
|
38
|
+
'esm',
|
|
39
|
+
'external-packages',
|
|
40
|
+
createPluginCacheKey(resolveServerAppBuildPlugins(appConfig)),
|
|
41
|
+
].join('::');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return 'server-entry-request-v2::node::esm::external-packages';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function getServerBundleOutputPaths(appConfig) {
|
|
48
|
+
const distDir = appConfig.absolutePaths?.distDir ?? path.join(appConfig.rootDir, appConfig.distDir);
|
|
49
|
+
const serverOutdir = path.join(distDir, SERVER_BUNDLE_DIR);
|
|
50
|
+
const serverEntryPath = path.join(serverOutdir, SERVER_BUNDLE_FILENAME);
|
|
51
|
+
const manifestPath = path.join(serverOutdir, SERVER_BUNDLE_MANIFEST_FILENAME);
|
|
52
|
+
return { distDir, serverOutdir, serverEntryPath, manifestPath };
|
|
53
|
+
}
|
|
54
|
+
export function readServerEntryBuildCacheManifest(appConfig) {
|
|
55
|
+
return readProductionCacheManifest(getServerEntryCacheManifestPath(appConfig));
|
|
56
|
+
}
|
|
57
|
+
function writeServerEntryBuildCacheManifest(appConfig, manifest) {
|
|
58
|
+
writeProductionCacheManifest(path.join(getServerEntryCacheDir(appConfig), SERVER_ENTRY_BUILD_CACHE_FILENAME), manifest);
|
|
59
|
+
}
|
|
60
|
+
export function writeServerBundleDeployManifest(appConfig, serverEntryPath) {
|
|
61
|
+
const { distDir, manifestPath } = getServerBundleOutputPaths(appConfig);
|
|
62
|
+
fileSystem.ensureDir(path.dirname(manifestPath));
|
|
63
|
+
const payload = {
|
|
64
|
+
serverEntry: path.relative(path.dirname(manifestPath), serverEntryPath) || SERVER_BUNDLE_FILENAME,
|
|
65
|
+
distDir,
|
|
66
|
+
builtAt: Date.now(),
|
|
67
|
+
};
|
|
68
|
+
fileSystem.write(manifestPath, `${JSON.stringify(payload, null, '\t')}\n`);
|
|
69
|
+
}
|
|
70
|
+
export function lookupServerEntryBuildCache(options) {
|
|
71
|
+
if (options.force) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const entryPath = path.resolve(options.entryPath);
|
|
78
|
+
const entryHash = fileSystem.hash(entryPath);
|
|
79
|
+
const buildInputsFingerprint = createBuildInputsFingerprint(options.appConfig);
|
|
80
|
+
const buildKey = createServerEntryBuildKey(options.appConfig);
|
|
81
|
+
const manifest = readServerEntryBuildCacheManifest(options.appConfig);
|
|
82
|
+
if (!manifest) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
if (manifest.entryPath !== entryPath ||
|
|
89
|
+
manifest.entryHash !== entryHash ||
|
|
90
|
+
!matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) ||
|
|
91
|
+
!matchesProductionCacheBuildKey(manifest, buildKey)) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
const hasher = new RouteModuleDependencyHasher();
|
|
95
|
+
if (!hasher.matchesStoredHashes(manifest.dependencyHashes, entryPath, entryHash)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const existingOutputs = manifest.outputPaths.filter((outputPath) => fileSystem.exists(outputPath));
|
|
99
|
+
if (existingOutputs.length === 0) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
manifest,
|
|
104
|
+
outputPaths: existingOutputs,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
export function recordServerEntryBuildCache(options) {
|
|
108
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const entryPath = path.resolve(options.entryPath);
|
|
112
|
+
const entryHash = fileSystem.hash(entryPath);
|
|
113
|
+
const hasher = new RouteModuleDependencyHasher();
|
|
114
|
+
const dependencyHashes = hashDependencyGraph(entryPath, options.buildResult.dependencyGraph, hasher, options.appConfig.rootDir);
|
|
115
|
+
const manifest = {
|
|
116
|
+
invalidationVersion: getCorePackageVersion(),
|
|
117
|
+
entryPath,
|
|
118
|
+
entryHash,
|
|
119
|
+
buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
|
|
120
|
+
buildKey: createServerEntryBuildKey(options.appConfig),
|
|
121
|
+
outputPaths: options.outputPaths,
|
|
122
|
+
dependencyHashes,
|
|
123
|
+
builtAt: Date.now(),
|
|
124
|
+
};
|
|
125
|
+
writeServerEntryBuildCacheManifest(options.appConfig, manifest);
|
|
126
|
+
}
|
|
127
|
+
export function resolveProductionServerEntry(cwd = process.cwd()) {
|
|
128
|
+
const manifestPath = path.join(cwd, 'dist', SERVER_BUNDLE_DIR, SERVER_BUNDLE_MANIFEST_FILENAME);
|
|
129
|
+
if (fileSystem.exists(manifestPath)) {
|
|
130
|
+
try {
|
|
131
|
+
const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
|
|
132
|
+
if (parsed?.serverEntry) {
|
|
133
|
+
const fromManifest = path.isAbsolute(parsed.serverEntry)
|
|
134
|
+
? parsed.serverEntry
|
|
135
|
+
: path.join(path.dirname(manifestPath), parsed.serverEntry);
|
|
136
|
+
if (fileSystem.exists(fromManifest)) {
|
|
137
|
+
return fromManifest;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (parsed?.distDir) {
|
|
141
|
+
const fromDistDir = path.join(parsed.distDir, SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME);
|
|
142
|
+
if (fileSystem.exists(fromDistDir)) {
|
|
143
|
+
return fromDistDir;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// fall through to legacy path
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const legacyPath = path.join(cwd, 'dist', SERVER_BUNDLE_DIR, SERVER_BUNDLE_FILENAME);
|
|
152
|
+
return fileSystem.exists(legacyPath) ? legacyPath : undefined;
|
|
153
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { EcoSourceTransform } from '../../plugins/source-transform.js';
|
|
2
|
+
import type { EcoBuildPlugin } from './build-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which backend owns the app's build pipeline.
|
|
5
|
+
*
|
|
6
|
+
* - `'rolldown'`: the default. Ecopages runs the build directly through
|
|
7
|
+
* its bundler-backed adapter.
|
|
8
|
+
* - `'vite-host'`: a host runtime owns the build. {@link ViteHostBuildAdapter}
|
|
9
|
+
* is exposed as a boundary marker; any direct call into it throws.
|
|
10
|
+
*/
|
|
11
|
+
export type BuildOwnership = 'vite-host' | 'rolldown';
|
|
12
|
+
/** A single message emitted by the build backend. */
|
|
13
|
+
export interface BuildLog {
|
|
14
|
+
message: string;
|
|
15
|
+
}
|
|
16
|
+
/** A single artifact emitted by the build backend. */
|
|
17
|
+
export interface BuildOutput {
|
|
18
|
+
path: string;
|
|
19
|
+
}
|
|
20
|
+
/** Per-entrypoint dependency metadata surfaced alongside a build. */
|
|
21
|
+
export interface BuildDependencyGraph {
|
|
22
|
+
entrypoints: Record<string, string[]>;
|
|
23
|
+
}
|
|
24
|
+
/** The full result of one `BuildAdapter.build` call. */
|
|
25
|
+
export interface BuildResult {
|
|
26
|
+
success: boolean;
|
|
27
|
+
logs: BuildLog[];
|
|
28
|
+
outputs: BuildOutput[];
|
|
29
|
+
dependencyGraph?: BuildDependencyGraph;
|
|
30
|
+
entryOutputs?: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Options accepted by every `BuildAdapter.build` call.
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Fields that the adapter can forward are honored. `splitting: false` disables
|
|
37
|
+
* Rolldown code splitting for single-entrypoint builds. `bundle` and `outbase`
|
|
38
|
+
* are accepted for call-site compatibility but ignored.
|
|
39
|
+
*/
|
|
40
|
+
export interface BuildOptions {
|
|
41
|
+
entrypoints: string[] | Record<string, string>;
|
|
42
|
+
outdir?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Base directory for `[dir]` placeholders in `naming`. Currently
|
|
45
|
+
* the bundled adapter derives the base from `root` directly and
|
|
46
|
+
* ignores this field.
|
|
47
|
+
*
|
|
48
|
+
* @deprecated Accepted for call-site compatibility only. Use record-form
|
|
49
|
+
* `entrypoints` keys to preserve directory structure.
|
|
50
|
+
*/
|
|
51
|
+
outbase?: string;
|
|
52
|
+
naming?: string;
|
|
53
|
+
conditions?: string[];
|
|
54
|
+
define?: Record<string, string>;
|
|
55
|
+
minify?: boolean;
|
|
56
|
+
treeshaking?: boolean;
|
|
57
|
+
target?: string;
|
|
58
|
+
format?: string;
|
|
59
|
+
sourcemap?: string;
|
|
60
|
+
/** When `false` with a single entrypoint, inlines dynamic imports into one output file. */
|
|
61
|
+
splitting?: boolean;
|
|
62
|
+
root?: string;
|
|
63
|
+
/** @deprecated Accepted for call-site compatibility only. */
|
|
64
|
+
bundle?: boolean;
|
|
65
|
+
externalPackages?: boolean;
|
|
66
|
+
external?: string[];
|
|
67
|
+
jsx?: {
|
|
68
|
+
development?: boolean;
|
|
69
|
+
factory?: string;
|
|
70
|
+
fragment?: string;
|
|
71
|
+
importSource?: string;
|
|
72
|
+
runtime?: 'classic' | 'automatic';
|
|
73
|
+
sideEffects?: boolean;
|
|
74
|
+
};
|
|
75
|
+
plugins?: EcoBuildPlugin[];
|
|
76
|
+
sourceTransforms?: EcoSourceTransform[];
|
|
77
|
+
}
|
|
78
|
+
/** Stable profile identifiers for `BuildAdapter.getTranspileOptions`. */
|
|
79
|
+
export type BuildTranspileProfile = 'browser-script' | 'hmr-runtime' | 'hmr-entrypoint';
|
|
80
|
+
/** Resolved transpile settings for a given profile. */
|
|
81
|
+
export interface BuildTranspileOptions {
|
|
82
|
+
target: string;
|
|
83
|
+
format: string;
|
|
84
|
+
sourcemap: string;
|
|
85
|
+
}
|
|
86
|
+
/** Low-level build backend contract. */
|
|
87
|
+
export interface BuildAdapter {
|
|
88
|
+
readonly ownership?: BuildOwnership;
|
|
89
|
+
build(options: BuildOptions): Promise<BuildResult>;
|
|
90
|
+
resolve(importPath: string, rootDir: string): string;
|
|
91
|
+
getTranspileOptions(profile: BuildTranspileProfile): BuildTranspileOptions;
|
|
92
|
+
}
|
|
93
|
+
/** Runtime-facing facade for issuing builds. */
|
|
94
|
+
export interface BuildExecutor {
|
|
95
|
+
build(options: BuildOptions): Promise<BuildResult>;
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|