@ecopages/core 0.2.0-beta.8 → 0.2.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -13
- package/package.json +361 -58
- 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 +4 -6
- 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 +90 -0
- package/src/adapters/shared/http/define-api-handler.js +49 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/http/fs-server-response-matcher.js +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 +29 -340
- package/src/build/build-adapter.js +258 -260
- 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 +463 -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} +16 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
- package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +79 -0
- package/src/build/runtime/build-request-policy.d.ts +58 -0
- package/src/build/runtime/build-request-policy.js +84 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +75 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +40 -0
- package/src/build/{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 +42 -12
- package/src/config/config-builder.js +645 -600
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +44 -23
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +10 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +8 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +10 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +25 -23
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +3 -0
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +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 +2 -1
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +35 -62
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +20 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
- package/src/plugins/eco-component-meta-plugin.js +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 +24 -6
- 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 +66 -12
- package/src/plugins/processor.js +168 -137
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +112 -60
- package/src/plugins/tsconfig-import-resolver.d.ts +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 +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +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 +37 -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 +52 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
- package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
- package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
- package/src/route-renderer/page-loading/page-module-loader.js +136 -124
- package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
- package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +31 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +56 -30
- package/src/router/client/link-intent.test.browser.js +50 -39
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +122 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +82 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +235 -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 -30
- package/src/services/assets/browser-bundle.service.js +54 -46
- 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 -309
- 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 -199
- 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
package/src/build/README.md
CHANGED
|
@@ -2,51 +2,113 @@
|
|
|
2
2
|
|
|
3
3
|
The build layer is the bundler contract for Ecopages. One bundled adapter is the default; one host-owned boundary marker covers the Vite-host path.
|
|
4
4
|
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [Mental Model](#mental-model)
|
|
8
|
+
- [Files](#files)
|
|
9
|
+
- [Default Flow](#default-flow)
|
|
10
|
+
- [App build manifest](#app-build-manifest)
|
|
11
|
+
- [Vite-Host Boundary](#vite-host-boundary)
|
|
12
|
+
- [Plugin Authoring](#plugin-authoring)
|
|
13
|
+
- [BuildOptions Caveats](#buildoptions-caveats)
|
|
14
|
+
- [Dev / watch path](#dev--watch-path)
|
|
15
|
+
- [Metrics](#metrics)
|
|
16
|
+
- [Production build caches](#production-build-caches)
|
|
17
|
+
- [Unified pages graph](#unified-pages-graph)
|
|
18
|
+
- [JSX Ownership Plugins](#jsx-ownership-plugins)
|
|
19
|
+
- [Rolldown operator notes](#rolldown-operator-notes)
|
|
20
|
+
- [Testing Strategy](#testing-strategy)
|
|
21
|
+
|
|
5
22
|
## Mental Model
|
|
6
23
|
|
|
7
|
-
Three concentric shapes, plus
|
|
24
|
+
Three concentric shapes, plus profile executors and request policy:
|
|
8
25
|
|
|
9
|
-
| Shape
|
|
10
|
-
|
|
|
11
|
-
| `BuildAdapter`
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
26
|
+
| Shape | Lives in | Purpose |
|
|
27
|
+
| --------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `BuildAdapter` | `build-adapter.ts` | Low-level backend. Two implementations: the bundled adapter (the real bundler) and `ViteHostBuildAdapter` (a host-owned boundary marker that throws on direct use). |
|
|
29
|
+
| `BuildRuntime` | `runtime/build-runtime.ts` | Profile-based executor registry. Scheduling, concurrency, and dedupe only. |
|
|
30
|
+
| `BuildExecutor` | `contracts/build-contracts.ts` | Narrower runtime facade. Only `build` is exposed. Retrieved via `buildRuntime.getProfile(...)`. |
|
|
31
|
+
| `build-request-policy.ts` | `runtime/build-request-policy.ts` | Assembles complete `BuildOptions` before scheduling. Server: plugins + JSX ownership. Browser: plugins + source transforms + transpile overlay. |
|
|
32
|
+
| `build-request-identity.ts` | `runtime/build-request-identity.ts` | Canonical request identity for in-flight and request-scope dedupe. |
|
|
33
|
+
| `SerializedBuildExecutor` | `runtime/serialized-build-executor.ts` | FIFO queue around any `BuildExecutor`. Used for server-entry single-flight ordering. |
|
|
34
|
+
| `ParallelBuildExecutor` | `runtime/parallel-build-executor.ts` | Concurrency-limited wrapper for independent route-module and HMR browser builds. |
|
|
16
35
|
|
|
17
36
|
Plus one translation bridge:
|
|
18
37
|
|
|
19
|
-
- `rolldown-plugin-bridge.ts` — converts the runtime-agnostic `EcoBuildPlugin[]` array (the contract integrations and processors register) into the bundler's native `Plugin` array. Each `EcoBuildPlugin` becomes its own plugin entry to preserve plugin-priority order.
|
|
38
|
+
- `rolldown/rolldown-plugin-bridge.ts` — converts the runtime-agnostic `EcoBuildPlugin[]` array (the contract integrations and processors register) into the bundler's native `Plugin` array. Each `EcoBuildPlugin` becomes its own plugin entry to preserve plugin-priority order.
|
|
20
39
|
|
|
21
40
|
## Files
|
|
22
41
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
```
|
|
43
|
+
build/
|
|
44
|
+
build-adapter.ts app-owned adapter/manifest wiring
|
|
45
|
+
app-build-manifest-runtime.ts contributor collection at startup
|
|
46
|
+
contracts/ EcoBuildPlugin, BuildOptions, AppBuildManifest
|
|
47
|
+
runtime/ profiles, executors, request policy/identity
|
|
48
|
+
rolldown/ bundler adapter, plugin bridge, output normalization
|
|
49
|
+
cache/ persisted caches, fingerprints, unified pages graph
|
|
50
|
+
browser/ client runtime rewrites, JSX ownership, Lit worker guard
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- `contracts/build-manifest.ts` + `app-build-manifest-runtime.ts`: sealed `AppBuildManifest` buckets and contributor collection.
|
|
54
|
+
- `build-adapter.ts`: types, factories, and app-owned adapter/manifest helpers.
|
|
55
|
+
- `runtime/build-runtime.ts`: profile-based executor installation (`server-entry`, `route-module`, `browser-hmr`).
|
|
56
|
+
- `runtime/build-request-policy.ts`: server/browser request constructors and plugin collision rules.
|
|
57
|
+
- `runtime/build-request-identity.ts` / `cache/cache-keys.ts`: canonical request identity and shared cache fingerprints.
|
|
58
|
+
- `contracts/build-types.ts`: the `EcoBuildPlugin` contract used by integrations and processors.
|
|
59
|
+
- `rolldown/rolldown-build-adapter.ts`: the production `BuildAdapter`. Wraps the bundler, normalizes Node output imports, and exposes a normalized `BuildResult`.
|
|
60
|
+
- `rolldown/rolldown-plugin-bridge.ts`: `EcoBuildPlugin[]` → bundler-plugin translation.
|
|
61
|
+
- `runtime/serialized-build-executor.ts`: FIFO queue primitive.
|
|
62
|
+
- `cache/server-entry-build-cache.ts`: production server-entry bundle cache (`.eco/.server-entry/.build-cache.json` + `dist/.server/manifest.json`).
|
|
63
|
+
- `cache/cache-constants.ts`: shared `.build-cache.json` filename for persisted production caches.
|
|
64
|
+
- `*.test.ts`: regression coverage colocated with each module.
|
|
31
65
|
|
|
32
66
|
## Default Flow
|
|
33
67
|
|
|
34
|
-
`ConfigBuilder.build()` creates one app-owned adapter
|
|
68
|
+
`ConfigBuilder.build()` creates one app-owned adapter and manifest. When a server adapter initializes, it calls `installBuildRuntime(appConfig)`:
|
|
69
|
+
|
|
70
|
+
## App build manifest
|
|
71
|
+
|
|
72
|
+
`AppBuildManifest` is the sealed registry of build plugins and browser runtime assets on `appConfig.runtime.buildManifest`. Integrations and processors declare contributions through getters; core maps them into manifest buckets during `ConfigBuilder.build()`.
|
|
73
|
+
|
|
74
|
+
| Integration getter | Processor getter | Manifest bucket | Used in |
|
|
75
|
+
| ------------------------ | ---------------- | ------------------------ | ---------------------------------------------------------------- |
|
|
76
|
+
| — (loaders on config) | — | `loaderPlugins` | Server and browser |
|
|
77
|
+
| `plugins` | `plugins` | `runtimePlugins` | Server and browser |
|
|
78
|
+
| `browserBuildPlugins` | `buildPlugins` | `browserBundlePlugins` | Browser only |
|
|
79
|
+
| `browserRuntimeManifest` | — | `browserRuntimeManifest` | Browser (rewrite map; core synthesizes `browser-runtime-plugin`) |
|
|
80
|
+
|
|
81
|
+
**Sealing flow**
|
|
82
|
+
|
|
83
|
+
1. `collectConfiguredAppBuildManifestContributions(config)` walks processors and integrations (after `prepareBuildContributions()`).
|
|
84
|
+
2. `updateAppBuildManifest(config, contributions)` merges loader plugins from `config.loaders` with the collected buckets.
|
|
85
|
+
3. `createServerBuildRequest` / `createBrowserBuildRequest` read the sealed manifest through `getAppServerBuildPlugins` / `getAppBrowserBuildPlugins`.
|
|
35
86
|
|
|
36
|
-
|
|
87
|
+
**Rule of thumb**
|
|
88
|
+
|
|
89
|
+
- Shared transforms (MDX loaders, virtual modules, route-module hooks) → `plugins` / `runtimePlugins`.
|
|
90
|
+
- Client-bundle-only work (vendor aliasing, async production CSS) → `browserBuildPlugins` or `buildPlugins` / `browserBundlePlugins`.
|
|
91
|
+
- Vendor specifier → public URL rewrites → `browserRuntimeManifest` (not a plugin list).
|
|
92
|
+
|
|
93
|
+
Direct `setAppBuildManifest` is for tests and full manifest replacement. Production code should rely on `updateAppBuildManifest` during config build.
|
|
37
94
|
|
|
38
95
|
```
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
96
|
+
Caller intent
|
|
97
|
+
→ createServerBuildRequest / createBrowserBuildRequest (plugins + transforms assembled once)
|
|
98
|
+
→ BuildRuntime.getProfile(...)
|
|
99
|
+
├─ server-entry → SerializedBuildExecutor → RolldownBuildAdapter
|
|
100
|
+
├─ route-module → DedupingBuildExecutor → ParallelBuildExecutor → RolldownBuildAdapter
|
|
101
|
+
└─ browser-hmr → DedupingBuildExecutor → ParallelBuildExecutor → RolldownBuildAdapter
|
|
102
|
+
→ RolldownBuildAdapter rewrites Node/browser runtime imports in emitted outputs
|
|
45
103
|
```
|
|
46
104
|
|
|
47
|
-
|
|
105
|
+
For `rolldown` ownership, profiles use one-shot Rolldown in both dev and production. Route-module and browser-HMR builds run in parallel; server-entry stays serialized single-flight. With `vite-host` ownership, the same scheduling wrappers delegate to a boundary marker that rejects framework-owned builds.
|
|
106
|
+
|
|
107
|
+
Runtime code should call `requireBuildRuntime(appConfig).getProfile('route-module' | 'browser-hmr' | 'server-entry')` with a complete `BuildOptions` object from the request-policy helpers. Profiles are scheduling-only: bare `getProfile(...).build()` does **not** inject app plugins.
|
|
48
108
|
|
|
49
|
-
The exported `defaultBuildAdapter` and the top-level `build()` / `getTranspileOptions()` helpers are non-app-aware escape hatches. New runtime code should prefer `getAppBuildAdapter()`, `
|
|
109
|
+
The exported `defaultBuildAdapter` and the top-level `build()` / `getTranspileOptions()` helpers are non-app-aware escape hatches. New runtime code should prefer `getAppBuildAdapter()`, `requireBuildRuntime()`, `createServerBuildRequest()`, `createBrowserBuildRequest()`, and `getAppTranspileOptions()`.
|
|
110
|
+
|
|
111
|
+
`BuildTranspileProfile` (`browser-script` | `hmr-runtime` | `hmr-entrypoint`) selects transpile settings only. `BuildProfile` (`server-entry` | `route-module` | `browser-hmr`) selects the concurrency/dedupe wrapper. `BrowserBundleService` maps `hmr` + (`hmr-entrypoint` | `hmr-runtime`) to the `browser-hmr` profile; all other browser work (including `browser-script`) uses `route-module`.
|
|
50
112
|
|
|
51
113
|
## Vite-Host Boundary
|
|
52
114
|
|
|
@@ -71,15 +133,13 @@ Vite-based apps (or any future host runtime) should:
|
|
|
71
133
|
- `onLoad({ filter, namespace? }, callback)` — the bundler's `load` mapped the same way.
|
|
72
134
|
- `module(specifier, callback)` — declares a virtual module by name, with bundler-side namespace encoding.
|
|
73
135
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Plugin ordering: the bundler's `resolveId` and `load` are "first" hooks. The bridge translates each `EcoBuildPlugin` into its own plugin and preserves the array order, so position determines priority: index 0 wins first, the last index is the lowest priority. Security-critical plugins (e.g. `ecopages-client-graph-boundary`) should be placed before general-purpose loaders in the array.
|
|
136
|
+
App-manifest plugins keep canonical registration order and cannot be silently replaced by caller plugins. Use `excludeAppBuildPlugins` on browser requests to omit app-owned plugins explicitly.
|
|
77
137
|
|
|
78
138
|
## BuildOptions Caveats
|
|
79
139
|
|
|
80
140
|
`BuildOptions` is modeled on the bundler's options shape. Most fields map cleanly. The exceptions:
|
|
81
141
|
|
|
82
|
-
- `splitting` —
|
|
142
|
+
- `splitting` — when `false` with a single entrypoint, maps to Rolldown `codeSplitting: false` so dynamic imports stay in one file. Multi-entrypoint builds ignore `splitting: false` because Rolldown cannot inline across multiple inputs.
|
|
83
143
|
- `bundle` — accepted but ignored. The bundler always bundles.
|
|
84
144
|
- `outbase` — accepted but ignored. The adapter derives the base from `options.root` directly.
|
|
85
145
|
|
|
@@ -87,22 +147,34 @@ These fields are kept in the type so existing call-sites compile. The proper fix
|
|
|
87
147
|
|
|
88
148
|
## Dev / watch path
|
|
89
149
|
|
|
90
|
-
`
|
|
150
|
+
`installBuildRuntime` installs profile-based executors:
|
|
91
151
|
|
|
92
|
-
|
|
152
|
+
| Profile | Backend | Concurrency |
|
|
153
|
+
| -------------- | ----------------- | -------------------- |
|
|
154
|
+
| `server-entry` | Rolldown one-shot | Serialized |
|
|
155
|
+
| `route-module` | Rolldown one-shot | Parallel |
|
|
156
|
+
| `browser-hmr` | Rolldown one-shot | Parallel (limit ≤ 3) |
|
|
157
|
+
|
|
158
|
+
`hmr-entrypoint` and `hmr-runtime` rebuilds with `executor: 'hmr'` use the `browser-hmr` profile. Other browser builds (`browser-script`, and any build with `executor: 'build'`) use `route-module`.
|
|
159
|
+
|
|
160
|
+
The table describes `rolldown` ownership. With `vite-host` ownership, profiles wrap `ViteHostBuildAdapter`, which rejects framework-owned builds so the host must run its own pipeline.
|
|
93
161
|
|
|
94
162
|
`ProjectWatcher` deduplicates watch roots, ignores `.eco/` and `dist/`, and coalesces duplicate chokidar events within 150ms.
|
|
95
163
|
|
|
164
|
+
## Metrics
|
|
165
|
+
|
|
166
|
+
Set `ECOPAGES_ROLLDOWN_BUILD_METRICS=1` to log Rolldown invocation counts during dev and production builds. Compare kitchen-sink dev navigation and `static-build-bench` before/after runtime changes.
|
|
167
|
+
|
|
96
168
|
## Production build caches
|
|
97
169
|
|
|
98
170
|
Two persisted cache layers accelerate production builds. Both use `.build-cache.json` manifests keyed by dependency hashes and a build-inputs fingerprint.
|
|
99
171
|
|
|
100
|
-
| Cache | On-disk location | Module
|
|
101
|
-
| -------------------------------------- | --------------------------------------------------- |
|
|
102
|
-
| Server-entry bundle | `.eco/.server-entry/.build-cache.json` | `server-entry-build-cache.ts`
|
|
103
|
-
| Route-module transpile + static render | `<server-outdir>/.server-modules/.build-cache.json` | `route-module-build-cache.store.ts` |
|
|
172
|
+
| Cache | On-disk location | Module |
|
|
173
|
+
| -------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- |
|
|
174
|
+
| Server-entry bundle | `.eco/.server-entry/.build-cache.json` | `cache/server-entry-build-cache.ts` |
|
|
175
|
+
| Route-module transpile + static render | `<server-outdir>/.server-modules/.build-cache.json` | `route-module-build-cache.store.ts` (module-loading) |
|
|
104
176
|
|
|
105
|
-
`
|
|
177
|
+
`requireBuildRuntime(appConfig).getProfile('server-entry')` serves server-entry bundling. `clearProductionBuildCaches()` wipes both manifest trees, resets in-memory route-module state, and clears `buildRuntime`.
|
|
106
178
|
|
|
107
179
|
The route-module registry (`route-module-build-cache-registry.ts`) shares one `RouteModuleBuildCache` per `(app, outdir)` pair. Legacy `.server-route-modules` outdirs are still read for migration but new writes go to `.server-modules`.
|
|
108
180
|
|
|
@@ -115,17 +187,65 @@ Production static exports compile all template pages in one Rolldown invocation
|
|
|
115
187
|
| Graph manifest | `.eco/.server-pages-graph/.build-cache.json` |
|
|
116
188
|
| Chunk outputs | `.eco/.server-modules/` (shared with per-route cache) |
|
|
117
189
|
|
|
118
|
-
`StaticSiteGenerator` calls `ensurePagesUnifiedGraphBuilt()` before the export loop. `PageModuleImportService` imports prebuilt chunks via `importPagesUnifiedGraphModule()` and falls back to per-page Rolldown on miss.
|
|
190
|
+
`StaticSiteGenerator` calls `ensurePagesUnifiedGraphBuilt()` before the export loop. `PageModuleImportService` imports prebuilt chunks via `importPagesUnifiedGraphModule()` and falls back to per-page Rolldown on miss. This is separate from production Page Browser Graph prebuild (`production-page-browser-graph-prebuild.ts`), which warms browser assets in `page-browser-graph-session`.
|
|
191
|
+
|
|
192
|
+
`ECOPAGES_ROLLDOWN_BUILD_METRICS=1` enables `rolldown/rolldown-build-invocation-metrics.ts` counters used by bench and parity tests.
|
|
193
|
+
|
|
194
|
+
Build-input fingerprinting lives in `cache/build-input-fingerprint.ts` and is shared with server-entry cache, unified pages graph, and static-render invalidation.
|
|
195
|
+
|
|
196
|
+
## JSX Ownership Plugins
|
|
197
|
+
|
|
198
|
+
Mixed-integration apps need explicit `@jsxImportSource` handling in two different shapes:
|
|
199
|
+
|
|
200
|
+
| Helper | Use when | Behavior |
|
|
201
|
+
| ------------------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
202
|
+
| `getJsxOwnershipPlugins()` | App-wide server/transpile builds | Each JSX integration extension gets its **own** `jsxImportSource` so native files keep their owning runtime. |
|
|
203
|
+
| `getHostScopedJsxOwnershipPlugins()` | One integration's **client** bundle graph | Foreign `.tsx`/`.jsx` files compile with the **host** integration JSX runtime (for example React bundling `.kita.tsx`). |
|
|
204
|
+
| component identity source transform | Component identity attribution | Prepends the **owning** integration pragma when injecting `identity` into native files. |
|
|
205
|
+
|
|
206
|
+
`foreign-jsx-override-plugin.ts` is the shared implementation. Prefer the helpers above instead of calling it directly from integrations.
|
|
207
|
+
|
|
208
|
+
## Rolldown operator notes
|
|
209
|
+
|
|
210
|
+
Ecopages bundles with Rolldown across Node, Bun, and browser targets. Vite-hosted apps use `ViteHostBuildAdapter` as a boundary marker; the host runs its own pipeline.
|
|
211
|
+
|
|
212
|
+
### Plugin hook filters
|
|
213
|
+
|
|
214
|
+
Rolldown evaluates plugin hooks on the Rust side and only calls JavaScript when the filter matches. Hooks without filters run for every module through Rust→JS FFI, causing **3–4× slowdown** with multiple plugins.
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
// BAD — called for every module
|
|
218
|
+
resolveId(source, importer) { /* ... */ }
|
|
219
|
+
|
|
220
|
+
// GOOD — skipped unless the filter matches
|
|
221
|
+
resolveId: {
|
|
222
|
+
filter: { id: /\.tsx?$/ },
|
|
223
|
+
handler(source, importer) { /* ... */ },
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
If patterns are dynamic (populated during `buildStart`), Rolldown cannot use filters because they are read at registration time. Consolidate dynamic plugins into a **single** Rolldown plugin to minimize FFI calls. See [rolldown.rs/reference/plugin-hooks](https://rolldown.rs/reference/plugin-hooks).
|
|
228
|
+
|
|
229
|
+
### Consolidate plugins
|
|
230
|
+
|
|
231
|
+
Each Rolldown plugin adds FFI overhead per module per hook. Ecopages merges all `EcoBuildPlugin` instances into one Rolldown plugin in `rolldown-plugin-bridge.ts` with JavaScript-side routing.
|
|
232
|
+
|
|
233
|
+
### Benchmarks
|
|
234
|
+
|
|
235
|
+
Kitchen-sink benchmarks (`ECOPAGES_BENCH=1 pnpm vitest bench`) show Rolldown winning 15/18 scenarios versus esbuild, with a **1.21×** geometric mean speedup. Largest wins: React page rebuilds (1.56×), production single page (1.49×), Lit (1.52×), Ecopages-JSX (1.47×). Three scenarios regressed (KitaJS postcss, dynamic route, no-op rebuild); route-module disk cache and fingerprinted production caches reduce repeated work on warm paths.
|
|
119
236
|
|
|
120
|
-
|
|
237
|
+
### Native MagicString and CSS shim
|
|
121
238
|
|
|
122
|
-
|
|
239
|
+
- `experimental.nativeMagicString: true` enables Rust-native string manipulation for faster transforms.
|
|
240
|
+
- Server-side builds use `createServerSideCssShimPlugin()` to turn `.css` imports into empty ESM modules. Skipped for browser builds.
|
|
123
241
|
|
|
124
242
|
## Testing Strategy
|
|
125
243
|
|
|
126
|
-
- `rolldown-build-adapter.test.ts` covers the adapter's `build`, `resolve`, `getTranspileOptions`, and dependency-graph extraction end-to-end.
|
|
127
|
-
- `rolldown-plugin-bridge.test.ts` covers the `EcoBuildPlugin[]` → plugin translation in isolation.
|
|
128
|
-
- `build-adapter.test.ts` covers the app-owned helpers, the `BuildOwnership` routing,
|
|
129
|
-
- `runtime
|
|
244
|
+
- `rolldown/rolldown-build-adapter.test.ts` covers the adapter's `build`, `resolve`, `getTranspileOptions`, and dependency-graph extraction end-to-end.
|
|
245
|
+
- `rolldown/rolldown-plugin-bridge.test.ts` covers the `EcoBuildPlugin[]` → plugin translation in isolation.
|
|
246
|
+
- `build-adapter.test.ts` covers the app-owned helpers, the `BuildOwnership` routing, and the default-fallback behaviour.
|
|
247
|
+
- `runtime/build-runtime.test.ts` covers profile executor installation and parallelism.
|
|
248
|
+
- `runtime/build-request-policy.test.ts` and `runtime/build-request-identity.test.ts` cover request assembly and dedupe identity.
|
|
249
|
+
- `rolldown/runtime-build-output-normalizer.test.ts` covers Node output finalization.
|
|
130
250
|
|
|
131
251
|
If you change option mapping or plugin-bridge semantics, update the adapter and bridge tests first. If you change the app-owned helper contracts, update `build-adapter.test.ts` first.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from './contracts/build-types.js';
|
|
2
|
+
import type { AppBuildManifest } from './contracts/build-manifest.js';
|
|
3
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Collects integration and processor contributions before the app build manifest is sealed.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* Called from {@link ConfigBuilder.build} via {@link updateAppBuildManifest}. Walks
|
|
9
|
+
* processors first, then integrations, invoking {@link Processor.prepareBuildContributions}
|
|
10
|
+
* and {@link IntegrationPlugin.prepareBuildContributions} so dynamic plugin lists can be
|
|
11
|
+
* materialized before sealing.
|
|
12
|
+
*
|
|
13
|
+
* Maps contributor getters to manifest buckets:
|
|
14
|
+
* - `processor.plugins` / `integration.plugins` → `runtimePlugins`
|
|
15
|
+
* - `processor.buildPlugins` / `integration.browserBuildPlugins` → `browserBundlePlugins`
|
|
16
|
+
* - `integration.browserRuntimeManifest` → merged `browserRuntimeManifest`
|
|
17
|
+
*
|
|
18
|
+
* Loaders are not collected here; {@link createConfiguredAppBuildManifest} always takes
|
|
19
|
+
* them from `appConfig.loaders`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function collectConfiguredAppBuildManifestContributions(appConfig: EcoPagesAppConfig): Promise<Pick<AppBuildManifest, 'runtimePlugins' | 'browserBundlePlugins' | 'browserRuntimeManifest'>>;
|
|
22
|
+
export declare function setupAppRuntimePlugins(options: {
|
|
23
|
+
appConfig: EcoPagesAppConfig;
|
|
24
|
+
runtimeOrigin: string;
|
|
25
|
+
onRuntimePlugin?: (plugin: EcoBuildPlugin) => void;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Activates one integration's runtime setup on first use.
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* Concurrent callers share a single in-flight promise per integration name.
|
|
32
|
+
* Failed activations are evicted so a later caller can retry.
|
|
33
|
+
*/
|
|
34
|
+
export declare function ensureIntegrationRuntimeReady(options: {
|
|
35
|
+
appConfig: EcoPagesAppConfig;
|
|
36
|
+
integrationName: string;
|
|
37
|
+
runtimeOrigin: string;
|
|
38
|
+
onRuntimePlugin?: (plugin: EcoBuildPlugin) => void;
|
|
39
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { mergeBrowserRuntimeManifests } from './browser/browser-runtime-manifest.js';
|
|
2
|
+
import { appLogger } from '../global/app-logger.js';
|
|
3
|
+
import { startupTrace } from '../diagnostics/startup-trace.js';
|
|
4
|
+
import { isLitStaticRenderWorkerThread } from './browser/lit-static-render-worker-context.js';
|
|
5
|
+
function patchAppRuntime(appConfig, patch) {
|
|
6
|
+
appConfig.runtime = {
|
|
7
|
+
...(appConfig.runtime ?? {}),
|
|
8
|
+
...patch,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function registerRuntimePlugins(appConfig, onRuntimePlugin) {
|
|
12
|
+
for (const loader of appConfig.loaders.values()) {
|
|
13
|
+
onRuntimePlugin?.(loader);
|
|
14
|
+
}
|
|
15
|
+
for (const processor of appConfig.processors.values()) {
|
|
16
|
+
if (processor.plugins) {
|
|
17
|
+
for (const plugin of processor.plugins) {
|
|
18
|
+
onRuntimePlugin?.(plugin);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
for (const integration of appConfig.integrations) {
|
|
23
|
+
for (const plugin of integration.plugins) {
|
|
24
|
+
onRuntimePlugin?.(plugin);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Collects integration and processor contributions before the app build manifest is sealed.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* Called from {@link ConfigBuilder.build} via {@link updateAppBuildManifest}. Walks
|
|
33
|
+
* processors first, then integrations, invoking {@link Processor.prepareBuildContributions}
|
|
34
|
+
* and {@link IntegrationPlugin.prepareBuildContributions} so dynamic plugin lists can be
|
|
35
|
+
* materialized before sealing.
|
|
36
|
+
*
|
|
37
|
+
* Maps contributor getters to manifest buckets:
|
|
38
|
+
* - `processor.plugins` / `integration.plugins` → `runtimePlugins`
|
|
39
|
+
* - `processor.buildPlugins` / `integration.browserBuildPlugins` → `browserBundlePlugins`
|
|
40
|
+
* - `integration.browserRuntimeManifest` → merged `browserRuntimeManifest`
|
|
41
|
+
*
|
|
42
|
+
* Loaders are not collected here; {@link createConfiguredAppBuildManifest} always takes
|
|
43
|
+
* them from `appConfig.loaders`.
|
|
44
|
+
*/
|
|
45
|
+
export async function collectConfiguredAppBuildManifestContributions(appConfig) {
|
|
46
|
+
const runtimePlugins = [];
|
|
47
|
+
const browserBundlePlugins = [];
|
|
48
|
+
const browserRuntimeManifests = [];
|
|
49
|
+
for (const processor of appConfig.processors.values()) {
|
|
50
|
+
await processor.prepareBuildContributions();
|
|
51
|
+
if (processor.plugins) {
|
|
52
|
+
runtimePlugins.push(...processor.plugins);
|
|
53
|
+
}
|
|
54
|
+
if (processor.buildPlugins) {
|
|
55
|
+
browserBundlePlugins.push(...processor.buildPlugins);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const integration of appConfig.integrations) {
|
|
59
|
+
integration.setConfig(appConfig);
|
|
60
|
+
await integration.prepareBuildContributions();
|
|
61
|
+
runtimePlugins.push(...(integration.plugins ?? []));
|
|
62
|
+
browserBundlePlugins.push(...(integration.browserBuildPlugins ?? []));
|
|
63
|
+
browserRuntimeManifests.push(integration.browserRuntimeManifest);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
runtimePlugins,
|
|
67
|
+
browserBundlePlugins,
|
|
68
|
+
browserRuntimeManifest: mergeBrowserRuntimeManifests(...browserRuntimeManifests),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export async function setupAppRuntimePlugins(options) {
|
|
72
|
+
startupTrace.markPhaseStart('setupAppRuntimePlugins');
|
|
73
|
+
if (options.appConfig.runtime?.runtimeAssetsPrepared) {
|
|
74
|
+
appLogger.debug('Skipped setupAppRuntimePlugins: runtime assets already prepared');
|
|
75
|
+
registerRuntimePlugins(options.appConfig, options.onRuntimePlugin);
|
|
76
|
+
startupTrace.markPhaseEnd('setupAppRuntimePlugins');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (isLitStaticRenderWorkerThread()) {
|
|
80
|
+
appLogger.debug('Lit static-render worker: skipping processor setup (main thread already prepared artifacts)');
|
|
81
|
+
}
|
|
82
|
+
appLogger.debugTime('setupAppRuntimePlugins');
|
|
83
|
+
try {
|
|
84
|
+
if (options.onRuntimePlugin) {
|
|
85
|
+
patchAppRuntime(options.appConfig, { onRuntimePlugin: options.onRuntimePlugin });
|
|
86
|
+
}
|
|
87
|
+
for (const loader of options.appConfig.loaders.values()) {
|
|
88
|
+
options.onRuntimePlugin?.(loader);
|
|
89
|
+
}
|
|
90
|
+
const skipProcessorSetup = isLitStaticRenderWorkerThread();
|
|
91
|
+
for (const processor of options.appConfig.processors.values()) {
|
|
92
|
+
if (!skipProcessorSetup) {
|
|
93
|
+
await processor.setup();
|
|
94
|
+
}
|
|
95
|
+
if (processor.plugins) {
|
|
96
|
+
for (const plugin of processor.plugins) {
|
|
97
|
+
options.onRuntimePlugin?.(plugin);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
patchAppRuntime(options.appConfig, { runtimeAssetsPrepared: true });
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
appLogger.debugTimeEnd('setupAppRuntimePlugins');
|
|
105
|
+
startupTrace.markPhaseEnd('setupAppRuntimePlugins');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Activates one integration's runtime setup on first use.
|
|
110
|
+
*
|
|
111
|
+
* @remarks
|
|
112
|
+
* Concurrent callers share a single in-flight promise per integration name.
|
|
113
|
+
* Failed activations are evicted so a later caller can retry.
|
|
114
|
+
*/
|
|
115
|
+
export async function ensureIntegrationRuntimeReady(options) {
|
|
116
|
+
const runtime = options.appConfig.runtime ?? {};
|
|
117
|
+
options.appConfig.runtime = runtime;
|
|
118
|
+
runtime.integrationActivations ??= new Map();
|
|
119
|
+
const existing = runtime.integrationActivations.get(options.integrationName);
|
|
120
|
+
if (existing) {
|
|
121
|
+
await existing;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const integration = options.appConfig.integrations.find((plugin) => plugin.name === options.integrationName);
|
|
125
|
+
if (!integration) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const activation = (async () => {
|
|
129
|
+
integration.setConfig(options.appConfig);
|
|
130
|
+
integration.setRuntimeOrigin(options.runtimeOrigin);
|
|
131
|
+
await integration.setup();
|
|
132
|
+
const onRuntimePlugin = options.onRuntimePlugin ?? options.appConfig.runtime?.onRuntimePlugin;
|
|
133
|
+
for (const plugin of integration.plugins ?? []) {
|
|
134
|
+
onRuntimePlugin?.(plugin);
|
|
135
|
+
}
|
|
136
|
+
})();
|
|
137
|
+
runtime.integrationActivations.set(options.integrationName, activation);
|
|
138
|
+
try {
|
|
139
|
+
await activation;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
runtime.integrationActivations.delete(options.integrationName);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -29,3 +29,7 @@ export declare class BrowserRuntimeManifestConflictError extends Error {
|
|
|
29
29
|
export declare function createBrowserRuntimeManifest(declarations?: readonly BrowserRuntimeAssetDeclaration[]): BrowserRuntimeManifest;
|
|
30
30
|
export declare function mergeBrowserRuntimeManifests(...manifests: Array<BrowserRuntimeManifest | undefined>): BrowserRuntimeManifest;
|
|
31
31
|
export declare function getBrowserRuntimeSpecifierMap(manifest: BrowserRuntimeManifest): ReadonlyMap<string, string>;
|
|
32
|
+
/** Resolves a runtime public URL for an exact specifier. */
|
|
33
|
+
export declare function resolveRuntimeSpecifierPublicPath(specifier: string, publicPathsBySpecifier: ReadonlyMap<string, string>): string | undefined;
|
|
34
|
+
/** Resolves a manifest-owned runtime public URL for an exact specifier. */
|
|
35
|
+
export declare function resolveBrowserRuntimePublicPath(specifier: string, manifest: BrowserRuntimeManifest): string | undefined;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export class BrowserRuntimeManifestConflictError extends Error {
|
|
2
|
+
specifier;
|
|
3
|
+
existing;
|
|
4
|
+
incoming;
|
|
5
|
+
constructor(specifier, existing, incoming) {
|
|
6
|
+
super(`Browser runtime asset conflict for ${specifier}: ${existing.owner} maps to ${existing.publicPath}, ` +
|
|
7
|
+
`${incoming.owner} maps to ${incoming.publicPath}`);
|
|
8
|
+
this.name = 'BrowserRuntimeManifestConflictError';
|
|
9
|
+
this.specifier = specifier;
|
|
10
|
+
this.existing = existing;
|
|
11
|
+
this.incoming = incoming;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function normalizeDeclaration(declaration) {
|
|
15
|
+
return {
|
|
16
|
+
...declaration,
|
|
17
|
+
externals: declaration.externals ?? [],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function hasCompatibleRuntimeAsset(existing, incoming) {
|
|
21
|
+
return (existing.importPath === incoming.importPath &&
|
|
22
|
+
existing.publicPath === incoming.publicPath &&
|
|
23
|
+
existing.mode === incoming.mode &&
|
|
24
|
+
arrayEquals(existing.externals, incoming.externals));
|
|
25
|
+
}
|
|
26
|
+
function arrayEquals(left, right) {
|
|
27
|
+
if (left.length !== right.length) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return left.every((value, index) => value === right[index]);
|
|
31
|
+
}
|
|
32
|
+
export function createBrowserRuntimeManifest(declarations = []) {
|
|
33
|
+
const assets = [];
|
|
34
|
+
const bySpecifier = new Map();
|
|
35
|
+
for (const declaration of declarations) {
|
|
36
|
+
const asset = normalizeDeclaration(declaration);
|
|
37
|
+
const existing = bySpecifier.get(asset.specifier);
|
|
38
|
+
if (existing) {
|
|
39
|
+
if (!hasCompatibleRuntimeAsset(existing, asset)) {
|
|
40
|
+
throw new BrowserRuntimeManifestConflictError(asset.specifier, existing, asset);
|
|
41
|
+
}
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
assets.push(asset);
|
|
45
|
+
bySpecifier.set(asset.specifier, asset);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
assets,
|
|
49
|
+
bySpecifier,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function mergeBrowserRuntimeManifests(...manifests) {
|
|
53
|
+
return createBrowserRuntimeManifest(manifests.flatMap((manifest) => manifest?.assets ?? []));
|
|
54
|
+
}
|
|
55
|
+
export function getBrowserRuntimeSpecifierMap(manifest) {
|
|
56
|
+
return new Map(manifest.assets.map((asset) => [asset.specifier, asset.publicPath]));
|
|
57
|
+
}
|
|
58
|
+
/** Resolves a runtime public URL for an exact specifier. */
|
|
59
|
+
export function resolveRuntimeSpecifierPublicPath(specifier, publicPathsBySpecifier) {
|
|
60
|
+
return publicPathsBySpecifier.get(specifier);
|
|
61
|
+
}
|
|
62
|
+
/** Resolves a manifest-owned runtime public URL for an exact specifier. */
|
|
63
|
+
export function resolveBrowserRuntimePublicPath(specifier, manifest) {
|
|
64
|
+
return manifest.bySpecifier.get(specifier)?.publicPath;
|
|
65
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `createBrowserRuntimePlugin` needs to:
|
|
6
6
|
*
|
|
7
7
|
* 1. Escape each specifier for inclusion in a regex filter.
|
|
8
|
-
* 2. Build a `RegExp` whose alternation matches
|
|
8
|
+
* 2. Build a `RegExp` whose alternation matches registered specifiers.
|
|
9
9
|
*
|
|
10
10
|
* These utilities are extracted here so the plugin does not duplicate
|
|
11
11
|
* the same code path.
|
|
@@ -17,10 +17,8 @@
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function escapeRegExp(value: string): string;
|
|
19
19
|
/**
|
|
20
|
-
* Builds a `RegExp`
|
|
21
|
-
* `specifierMap`.
|
|
20
|
+
* Builds a `RegExp` that matches registered specifiers exactly.
|
|
22
21
|
*
|
|
23
|
-
* Returns `null` for an empty map so callers can short-circuit
|
|
24
|
-
* avoid registering a no-op `onResolve` / `onLoad` filter.
|
|
22
|
+
* Returns `null` for an empty map so callers can short-circuit registration.
|
|
25
23
|
*/
|
|
26
24
|
export declare function buildSpecifierFilter(specifierMap: ReadonlyMap<string, string>): RegExp | null;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for the browser-runtime plugin.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* `createBrowserRuntimePlugin` needs to:
|
|
6
|
+
*
|
|
7
|
+
* 1. Escape each specifier for inclusion in a regex filter.
|
|
8
|
+
* 2. Build a `RegExp` whose alternation matches registered specifiers.
|
|
9
|
+
*
|
|
10
|
+
* These utilities are extracted here so the plugin does not duplicate
|
|
11
|
+
* the same code path.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Escapes a literal specifier for inclusion in a regular expression.
|
|
15
|
+
*
|
|
16
|
+
* Only the regex metacharacters are escaped: `. * + ? ^ $ { } ( ) | [ ] \`
|
|
17
|
+
*/
|
|
18
|
+
export function escapeRegExp(value) {
|
|
19
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Builds a `RegExp` that matches registered specifiers exactly.
|
|
23
|
+
*
|
|
24
|
+
* Returns `null` for an empty map so callers can short-circuit registration.
|
|
25
|
+
*/
|
|
26
|
+
export function buildSpecifierFilter(specifierMap) {
|
|
27
|
+
if (specifierMap.size === 0) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const alternation = Array.from(specifierMap.keys()).map(escapeRegExp).join('|');
|
|
31
|
+
return new RegExp(`^(?:${alternation})$`);
|
|
32
|
+
}
|