@ecopages/core 0.2.0-beta.4 → 0.2.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -9
- package/package.json +371 -33
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +115 -6
- package/src/adapters/abstract/application-adapter.js +261 -120
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +147 -0
- package/src/adapters/abstract/server-adapter.d.ts +16 -2
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
- package/src/adapters/abstract/ws-pattern-matcher.js +28 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
- package/src/adapters/bun/client-bridge.d.ts +1 -0
- package/src/adapters/bun/client-bridge.js +51 -47
- package/src/adapters/bun/create-app.d.ts +9 -6
- package/src/adapters/bun/create-app.js +171 -130
- package/src/adapters/bun/hmr-manager.d.ts +1 -1
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -8
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +91 -41
- package/src/adapters/bun/server-adapter.js +566 -426
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +43 -41
- package/src/adapters/create-app.d.ts +13 -11
- package/src/adapters/create-app.js +11 -63
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +8 -3
- package/src/adapters/node/create-app.js +126 -84
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.d.ts +1 -0
- package/src/adapters/node/node-client-bridge.js +62 -61
- package/src/adapters/node/node-hmr-manager.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -17
- package/src/adapters/node/server-adapter.d.ts +63 -23
- package/src/adapters/node/server-adapter.js +346 -297
- package/src/adapters/node/static-content-server.d.ts +1 -0
- package/src/adapters/node/static-content-server.js +172 -183
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +88 -64
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +132 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/http/api-response.js +79 -0
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +26 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +49 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/http/fs-server-response-matcher.js +258 -0
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/runtime/application-adapter.js +75 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +226 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/runtime/render-context.js +99 -0
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
- package/src/adapters/shared/runtime/server-adapter.js +301 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/runtime/server-route-handler.js +77 -0
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
- package/src/adapters/shared/runtime/server-static-builder.js +172 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
- package/src/build/README.md +191 -31
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +145 -0
- package/src/build/browser/browser-runtime-manifest.js +58 -0
- package/src/build/browser/browser-runtime-plugin-helpers.js +34 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
- package/src/build/browser/browser-runtime-plugin.js +216 -0
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +55 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +4 -0
- package/src/build/build-adapter.d.ts +29 -334
- package/src/build/build-adapter.js +273 -237
- package/src/build/cache/build-input-fingerprint.d.ts +28 -0
- package/src/build/cache/build-input-fingerprint.js +33 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +4 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +71 -0
- package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
- package/src/build/cache/pages-unified-graph-build.js +199 -0
- package/src/build/cache/production-build-cache.d.ts +21 -0
- package/src/build/cache/production-build-cache.js +56 -0
- package/src/build/cache/server-entry-build-cache.d.ts +43 -0
- package/src/build/cache/server-entry-build-cache.js +153 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/contracts/build-manifest.js +64 -0
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/contracts/content-virtual-modules.d.ts +12 -0
- package/src/build/contracts/content-virtual-modules.js +29 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
- package/src/build/rolldown/rolldown-adapter-helpers.js +458 -0
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/rolldown/rolldown-build-adapter.js +57 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
- package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +79 -0
- package/src/build/runtime/build-request-policy.d.ts +58 -0
- package/src/build/runtime/build-request-policy.js +84 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +75 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +40 -0
- package/src/build/runtime/parallel-build-executor.d.ts +21 -0
- package/src/build/runtime/parallel-build-executor.js +60 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/build/runtime/serialized-build-executor.js +79 -0
- package/src/cache/index.d.ts +2 -1
- package/src/cache/index.js +7 -6
- package/src/cache/module-parse-cache.d.ts +5 -0
- package/src/cache/module-parse-cache.js +122 -67
- package/src/cache/module-transform-profiler.d.ts +8 -0
- package/src/cache/module-transform-profiler.js +8 -0
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +49 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +3 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +16 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +90 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +33 -0
- package/src/client/scroll.test.browser.d.ts +1 -0
- package/src/client/scroll.test.browser.js +31 -0
- package/src/client/view-transitions.d.ts +32 -0
- package/src/client/view-transitions.js +120 -0
- package/src/client/view-transitions.test.browser.d.ts +1 -0
- package/src/client/view-transitions.test.browser.js +56 -0
- package/src/config/config-builder.d.ts +40 -10
- package/src/config/config-builder.js +647 -600
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +44 -23
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +10 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +8 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +10 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +25 -23
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +3 -0
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +126 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +158 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +52 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
- package/src/dev-toolbar/dev-toolbar-package.js +78 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +39 -0
- package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
- package/src/diagnostics/request-pipeline-metrics.js +121 -0
- package/src/diagnostics/startup-trace.d.ts +81 -0
- package/src/diagnostics/startup-trace.js +281 -0
- package/src/eco/README.md +17 -0
- package/src/eco/component-identity.d.ts +13 -0
- package/src/eco/component-identity.js +18 -0
- package/src/eco/eco-declared-component.d.ts +15 -0
- package/src/eco/eco-declared-component.js +23 -0
- package/src/eco/eco.browser.js +63 -70
- package/src/eco/eco.js +163 -97
- package/src/eco/eco.types.d.ts +47 -8
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +69 -0
- package/src/env.d.ts +2 -0
- package/src/errors/http-error.d.ts +8 -0
- package/src/errors/http-error.js +66 -49
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -6
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +21 -0
- package/src/hmr/client/hmr-runtime.js +119 -110
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
- package/src/hmr/hmr-entrypoint-output.js +34 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +14 -0
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +9 -0
- package/src/hmr/hmr-strategy.js +113 -42
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
- package/src/hmr/strategies/js-hmr-strategy.js +107 -167
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
- package/src/index.browser.d.ts +1 -0
- package/src/index.browser.js +2 -4
- package/src/index.d.ts +4 -1
- package/src/index.js +7 -21
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
- package/src/integrations/ghtml/ghtml-renderer.js +12 -56
- package/src/integrations/ghtml/ghtml.constants.js +1 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
- package/src/integrations/ghtml/ghtml.plugin.js +10 -20
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/README.md +2 -1
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +35 -62
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +20 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
- package/src/plugins/eco-component-meta-plugin.js +120 -162
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +49 -37
- package/src/plugins/integration-plugin.d.ts +43 -14
- package/src/plugins/integration-plugin.js +212 -190
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +21 -0
- package/src/plugins/processor.d.ts +71 -12
- package/src/plugins/processor.js +168 -130
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +112 -60
- package/src/plugins/tsconfig-import-resolver.d.ts +35 -0
- package/src/plugins/tsconfig-import-resolver.js +235 -0
- package/src/route-renderer/GRAPH.md +26 -32
- package/src/route-renderer/README.md +54 -33
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +191 -0
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +41 -151
- package/src/route-renderer/orchestration/integration-renderer.js +798 -988
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +232 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
- package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
- package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
- package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
- package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
- package/src/route-renderer/page-loading/page-module-loader.js +136 -124
- package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
- package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +31 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +56 -30
- package/src/router/client/link-intent.test.browser.js +50 -39
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +122 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +82 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +235 -201
- package/src/router/client/navigation-lifecycle.d.ts +55 -0
- package/src/router/client/navigation-lifecycle.js +50 -0
- package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
- package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
- package/src/router/server/route-registry.js +237 -242
- package/src/services/README.md +5 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +7 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +308 -268
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -45
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -38
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +8 -6
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -121
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
- package/src/services/assets/browser-bundle.service.d.ts +28 -30
- package/src/services/assets/browser-bundle.service.js +54 -40
- package/src/services/cache/cache.types.d.ts +4 -2
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
- package/src/services/cache/html-page-cache-dependency-index.js +88 -0
- package/src/services/cache/index.d.ts +2 -0
- package/src/services/cache/index.js +8 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.d.ts +31 -1
- package/src/services/cache/page-cache-service.js +237 -150
- package/src/services/cache/page-request-cache-coordinator.service.js +106 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.d.ts +1 -1
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
- package/src/services/invalidation/development-invalidation.service.js +239 -175
- package/src/services/module-loading/README.md +52 -0
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +103 -118
- package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
- package/src/services/module-loading/collection-server-module-build.service.js +83 -0
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.d.ts +11 -13
- package/src/services/module-loading/page-module-import.service.js +222 -184
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +51 -0
- package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
- package/src/services/module-loading/route-module-build-cache.js +3 -0
- package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
- package/src/services/module-loading/route-module-build-cache.store.js +202 -0
- package/src/services/module-loading/route-module-build-manifest.d.ts +57 -0
- package/src/services/module-loading/route-module-build-manifest.js +60 -0
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
- package/src/services/module-loading/route-module-dependency-hasher.js +148 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
- package/src/services/module-loading/server-module-transpiler.service.js +65 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +156 -95
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +41 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +36 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +42 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
- package/src/static-site-generator/static-build-invalidation.js +37 -0
- package/src/static-site-generator/static-export-context.d.ts +30 -0
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.d.ts +43 -25
- package/src/static-site-generator/static-site-generator.js +536 -294
- package/src/types/internal-types.d.ts +59 -13
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +310 -95
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +30 -0
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +22 -5
- package/src/utils/html.js +1 -4
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.d.ts +2 -0
- package/src/utils/parse-cli-args.js +73 -59
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +42 -0
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +60 -53
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +54 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +17 -0
- package/src/watchers/project-watcher.d.ts +29 -6
- package/src/watchers/project-watcher.js +402 -257
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.js +0 -162
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/browser-runtime-plugin-helpers.js +0 -14
- package/src/build/browser-runtime-plugin.js +0 -173
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -49
- package/src/build/build-types.js +0 -0
- package/src/build/rolldown-adapter-helpers.js +0 -265
- package/src/build/rolldown-build-adapter.js +0 -65
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -166
- package/src/build/rolldown-plugin-bridge.js +0 -199
- package/src/build/runtime-build-executor.d.ts +0 -21
- package/src/build/runtime-build-executor.js +0 -19
- package/src/build/runtime-build-output-normalizer.d.ts +0 -3
- package/src/build/runtime-build-output-normalizer.js +0 -111
- package/src/build/serialized-build-executor.js +0 -63
- package/src/build/server-side-css-shim-plugin.js +0 -35
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/render-output.utils.js +0 -171
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
- /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
|
@@ -16,18 +16,34 @@ The route renderer layer is responsible for:
|
|
|
16
16
|
|
|
17
17
|
The architecture is organized around three distinct concepts:
|
|
18
18
|
|
|
19
|
-
- `ownership`:
|
|
19
|
+
- `ownership`: declared component dependency metadata validated before render
|
|
20
20
|
- `foreign child`: a component encountered during render whose owning integration differs from the current integration
|
|
21
21
|
- `foreign subtree`: the resolved HTML, assets, and root-attachment metadata returned by the owning renderer for that foreign child
|
|
22
22
|
|
|
23
23
|
These concepts intentionally live in different places:
|
|
24
24
|
|
|
25
|
-
- `ownership-
|
|
26
|
-
- `ownership-validation.service.ts` validates declared foreign ownership up front
|
|
25
|
+
- `ownership-validation.service.ts` validates declared foreign ownership up front and fails the render on misconfiguration
|
|
27
26
|
- `component-render-context.ts` intercepts foreign children during active component render
|
|
28
|
-
- `
|
|
29
|
-
- `
|
|
30
|
-
- `
|
|
27
|
+
- `foreign-subtree-execution.service.ts` owns mixed-integration execution policy and queued token resolution
|
|
28
|
+
- `document-shell-render.service.ts` composes page, layout, and html template shells with one execution-scoped renderer cache
|
|
29
|
+
- `integration-renderer.ts` owns renderer-to-renderer delegation and integration-specific render hooks
|
|
30
|
+
- `route-render-orchestrator.ts` owns route preparation, final response capture, and unresolved artifact enforcement
|
|
31
|
+
|
|
32
|
+
## Build-Time JSX vs Runtime Foreign Children
|
|
33
|
+
|
|
34
|
+
Mixed-integration apps use two separate mechanisms:
|
|
35
|
+
|
|
36
|
+
| Layer | Mechanism | Purpose |
|
|
37
|
+
| ------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
38
|
+
| Build | `getJsxOwnershipPlugins()` / `getHostScopedJsxOwnershipPlugins()` | Prepend `@jsxImportSource` so bundled `.tsx` files compile with the correct JSX runtime |
|
|
39
|
+
| Build | component identity source transform | After a lexical `eco.` gate, uses Oxc to wrap native factory options with `bindComponentIdentity()` and prepends the owning integration pragma |
|
|
40
|
+
| Runtime | `eco.component()` / `eco.embed()` + foreign-child runtime | Hand off cross-integration children during SSR |
|
|
41
|
+
|
|
42
|
+
See [`../build/README.md`](../build/README.md) for the JSX ownership helper split.
|
|
43
|
+
|
|
44
|
+
## Document shell composition
|
|
45
|
+
|
|
46
|
+
`composeDocumentShell` in core is the single string-shell primitive for wrapping a primary component with optional layout tiers and an Html template. Integrations may supply an optional `composeChildren` hook to replace sequential string wrapping with a unified tree (for example React element children) while still delegating foreign subtrees through `renderComponentWithForeignChildren`.
|
|
31
47
|
|
|
32
48
|
## Main Files
|
|
33
49
|
|
|
@@ -38,13 +54,26 @@ These concepts intentionally live in different places:
|
|
|
38
54
|
|
|
39
55
|
### `orchestration/`
|
|
40
56
|
|
|
41
|
-
|
|
57
|
+
Root renderer classes:
|
|
58
|
+
|
|
42
59
|
- `integration-renderer.ts`: abstract base class for route rendering, explicit view rendering, and foreign-child delegation
|
|
43
|
-
- `
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- `
|
|
60
|
+
- `string-markup-renderer.ts`: shared base for string-markup integrations
|
|
61
|
+
|
|
62
|
+
Domain folders:
|
|
63
|
+
|
|
64
|
+
- `ownership-graph/`: component graph walk/collect and up-front ownership validation
|
|
65
|
+
- `foreign-child/`: active render context, foreign-subtree execution, deferred template serialization
|
|
66
|
+
- `document-shell/`: shared page/layout/html shell composition and attribute stamping helpers
|
|
67
|
+
- `route-pipeline/`: route preparation, final HTML capture, marker-artifact enforcement
|
|
68
|
+
- `page-browser-graph/`: browser asset graph build, session cache, and injector assets
|
|
69
|
+
|
|
70
|
+
**Page Browser Graph session behavior:**
|
|
71
|
+
|
|
72
|
+
- In development, each Page Browser Graph is built on first request, cached in `page-browser-graph-session` with generation-safe commits, and invalidated when a tracked dependency changes. The per-route fast path is disabled while HMR is enabled so prop-dependent `dependencies(props)` cannot reuse the wrong graph. Hosts call `prepareHmrFileChange()` before HMR dispatch and defer client broadcasts when no browser subscribers are connected.
|
|
73
|
+
- Dev SSR prewarm schedules processor-declared pathnames for background rendering. Static pages cache in watch mode when their Cache Strategy allows it; dynamic pages are never retained. The watcher invalidates HTML through `invalidateAppPageCacheBySourcePaths` when a registered source dependency changes, and falls back to global cache clear for categories whose route impact cannot be narrowed.
|
|
74
|
+
- **Measuring dev page load:** set `ECOPAGES_REQUEST_PIPELINE_METRICS=1` and run `pnpm run test:bench:docs`. Compare cold vs warm navigations and phase totals from the benchmark output.
|
|
75
|
+
- Production static export prebuilds browser graphs from the finalized route list into the in-memory `page-browser-graph-session` via `production-page-browser-graph-prebuild.ts`. Failed exports clear staged production session records so retries cannot reuse partial graph output.
|
|
76
|
+
- Integrations activate lazily on first render or graph prebuild via `ensureIntegrationRuntimeReady()`. Processors initialize their small virtual modules during `setupAppRuntimePlugins()`; content collection server artifacts are built lazily when a server build first resolves the collection.
|
|
48
77
|
|
|
49
78
|
### `page-loading/`
|
|
50
79
|
|
|
@@ -56,63 +85,55 @@ These concepts intentionally live in different places:
|
|
|
56
85
|
The route-render contract is:
|
|
57
86
|
|
|
58
87
|
1. `RouteRendererFactory` selects the owning integration renderer.
|
|
59
|
-
2. `IntegrationRenderer.execute()` delegates preparation and finalization to `
|
|
60
|
-
3. `
|
|
88
|
+
2. `IntegrationRenderer.execute()` delegates preparation and finalization to `RouteRenderOrchestrator`.
|
|
89
|
+
3. `RouteRenderOrchestrator.prepareRenderOptions()` loads the page module, validates ownership (fail-fast), resolves final page props, resolves dependencies, and builds the page browser graph. Graph cache identity includes route params and query; contribution collection receives those same final props.
|
|
61
90
|
4. The integration renderer performs page, layout, and document-shell rendering. When it encounters a foreign child, it delegates that child back to the owning renderer.
|
|
62
91
|
5. If a renderer needs queued handoff, it emits internal foreign-subtree tokens and resolves them before returning final HTML.
|
|
63
|
-
6. `
|
|
92
|
+
6. `RouteRenderOrchestrator.executePrepared()` captures the final body, rejects unresolved `<eco-marker>` artifacts, stamps document attributes when needed, and runs the HTML transformer.
|
|
64
93
|
|
|
65
94
|
Important:
|
|
66
95
|
|
|
67
96
|
- route-level fallback resolution is gone; unresolved artifacts are now a hard failure
|
|
68
|
-
- ownership is declared from component
|
|
97
|
+
- ownership is declared from canonical component identity, not inferred from final HTML
|
|
98
|
+
- declared page dependencies are resolved from final render inputs and carried to the owning integration; integrations may use them for renderer-specific lifecycle work such as HMR ownership
|
|
69
99
|
- same-integration children stay renderer-local and do not need to pass through a universal transport
|
|
70
100
|
|
|
71
101
|
## Declared Foreign Child Contract
|
|
72
102
|
|
|
73
103
|
Mixed-integration component configs must declare every possible foreign child in `config.dependencies.components`.
|
|
74
104
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- `OwnershipValidationService` surfaces missing metadata or unknown integrations before render execution
|
|
78
|
-
- `OwnershipPlanningService` records the expected ownership shape in `ownershipPlan`
|
|
105
|
+
`OwnershipValidationService` surfaces missing metadata or unknown integrations during `prepareRenderOptions()` and throws before render execution starts.
|
|
79
106
|
|
|
80
107
|
At runtime, renderers still discover actual foreign children through the active component render context.
|
|
81
108
|
|
|
82
109
|
## Foreign Subtree Contract
|
|
83
110
|
|
|
84
|
-
`
|
|
85
|
-
|
|
86
|
-
- `html`
|
|
87
|
-
- `assets`
|
|
88
|
-
- `rootTag`
|
|
89
|
-
- optional `rootAttributes`
|
|
90
|
-
- `attachmentPolicy`
|
|
91
|
-
- `integrationName`
|
|
92
|
-
|
|
93
|
-
`renderComponentWithForeignChildren()` is the higher-level renderer entrypoint. It is responsible for:
|
|
111
|
+
`renderComponentWithForeignChildren()` is the renderer entrypoint for mixed-integration trees. It is responsible for:
|
|
94
112
|
|
|
95
113
|
- reusing the execution-scoped owning-renderer cache
|
|
96
114
|
- deciding whether the current component can stay local
|
|
97
115
|
- creating a foreign-child runtime when nested foreign ownership must be resolved
|
|
98
116
|
- normalizing unresolved artifact HTML before the render leaves the renderer
|
|
99
117
|
|
|
118
|
+
Queue resolution maps owning-renderer output into the foreign-subtree payload shape via `toForeignSubtreeRenderPayload()` inside `foreign-subtree-execution.service.ts`.
|
|
119
|
+
|
|
100
120
|
## Queue Model
|
|
101
121
|
|
|
102
122
|
Not every integration needs queue-based handoff.
|
|
103
123
|
|
|
104
124
|
- If a renderer can resolve a foreign child inline, it returns resolved output immediately.
|
|
105
125
|
- If it cannot, it may emit internal foreign-subtree tokens and resolve them before returning final HTML.
|
|
106
|
-
-
|
|
126
|
+
- Queue mechanics live inside `ForeignSubtreeExecutionService`; they are renderer-owned transport inside one render pass, not a general route-level fallback mechanism.
|
|
107
127
|
|
|
108
128
|
## React Island Notes
|
|
109
129
|
|
|
110
130
|
- React islands are emitted without synthetic wrapper elements.
|
|
111
|
-
- The React integration attaches `data-eco-component-id` to the SSR root when a single root exists.
|
|
131
|
+
- The React integration attaches island host attributes (`data-eco-island`, `data-eco-component-id`, `data-eco-component-key`, `data-eco-props`) to the SSR root when a single root exists.
|
|
132
|
+
- Other integrations call `finalizeIslandComponentRender()` from core when a component instance ships client scripts. See `packages/core/src/islands/README.md`.
|
|
112
133
|
- The island bootstrap mounts with `createRoot()` into that SSR root.
|
|
113
134
|
- Hydration bootstraps listen for `eco:after-swap` so islands hydrate after client-side navigation.
|
|
114
135
|
|
|
115
136
|
## Current Limits
|
|
116
137
|
|
|
117
|
-
- `ownershipPlan` is still diagnostic and preparatory metadata; it does not yet drive a full route-composer execution model.
|
|
118
138
|
- Different integrations still own different foreign-child runtime strategies, which is intentional where child transport or hydration behavior differs.
|
|
139
|
+
- `integration-renderer.ts` remains the largest integration hook surface even after document-shell extraction.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { BaseIntegrationContext, ComponentRenderInput, ComponentRenderResult, EcoComponent, PageMetadataProps } from '../../../types/public-types.js';
|
|
2
|
+
import type { ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
|
|
3
|
+
import { HtmlTransformerService, type HtmlDocumentContribution } from '../../../services/html/html-transformer.service.js';
|
|
4
|
+
export type DocumentShellLayoutInput = {
|
|
5
|
+
component: EcoComponent;
|
|
6
|
+
props?: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
export type DocumentShellComposeChildrenContext = {
|
|
9
|
+
primaryComponent: EcoComponent;
|
|
10
|
+
primaryProps: Record<string, unknown>;
|
|
11
|
+
primaryRender?: ComponentRenderResult;
|
|
12
|
+
layouts: DocumentShellLayoutInput[];
|
|
13
|
+
rendererCache: BaseIntegrationContext['rendererCache'];
|
|
14
|
+
renderComponentWithForeignChildren: DocumentShellRenderDependencies['renderComponentWithForeignChildren'];
|
|
15
|
+
};
|
|
16
|
+
export type DocumentShellComposeChildrenResult = {
|
|
17
|
+
/** Serialized or element children passed to the HTML template shell. */
|
|
18
|
+
children: unknown;
|
|
19
|
+
layoutRenders: ComponentRenderResult[];
|
|
20
|
+
/**
|
|
21
|
+
* Primary/page render assets when the hook performs unified composition.
|
|
22
|
+
*
|
|
23
|
+
* @remarks
|
|
24
|
+
* Omit only when the default sequential string path runs (core renders primary first).
|
|
25
|
+
*/
|
|
26
|
+
primaryRender?: ComponentRenderResult;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Optional hook that replaces default sequential string layout wrapping.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* When provided, core skips the initial primary render and expects the hook to return
|
|
33
|
+
* `children` for the HTML template. Supply `primaryRender` so dependency assets still merge.
|
|
34
|
+
*/
|
|
35
|
+
export type DocumentShellComposeChildrenHook = (context: DocumentShellComposeChildrenContext) => Promise<DocumentShellComposeChildrenResult>;
|
|
36
|
+
export type DocumentShellComposeInput = {
|
|
37
|
+
primaryComponent: EcoComponent;
|
|
38
|
+
primaryProps: Record<string, unknown>;
|
|
39
|
+
layout?: DocumentShellLayoutInput;
|
|
40
|
+
layouts?: DocumentShellLayoutInput[];
|
|
41
|
+
composeChildren?: DocumentShellComposeChildrenHook;
|
|
42
|
+
htmlTemplate: EcoComponent;
|
|
43
|
+
documentProps: Record<string, unknown>;
|
|
44
|
+
};
|
|
45
|
+
export type DocumentShellPageRenderInput = {
|
|
46
|
+
page: {
|
|
47
|
+
component: EcoComponent;
|
|
48
|
+
props: Record<string, unknown>;
|
|
49
|
+
};
|
|
50
|
+
layout?: DocumentShellLayoutInput;
|
|
51
|
+
layouts?: DocumentShellLayoutInput[];
|
|
52
|
+
composeChildren?: DocumentShellComposeChildrenHook;
|
|
53
|
+
htmlTemplate: EcoComponent;
|
|
54
|
+
metadata: PageMetadataProps;
|
|
55
|
+
pageProps: Record<string, unknown>;
|
|
56
|
+
documentProps?: Record<string, unknown>;
|
|
57
|
+
transformDocumentHtml?: (html: string) => string;
|
|
58
|
+
};
|
|
59
|
+
export type DocumentShellRenderDependencies = {
|
|
60
|
+
renderComponentWithForeignChildren(input: ComponentRenderInput): Promise<ComponentRenderResult>;
|
|
61
|
+
appendProcessedDependencies(...assetGroups: Array<readonly ProcessedAsset[] | undefined>): ProcessedAsset[];
|
|
62
|
+
};
|
|
63
|
+
export type DocumentShellAttributeStamping = {
|
|
64
|
+
applyAttributesToFirstBodyElement(html: string, attributes: Record<string, string>): string;
|
|
65
|
+
applyAttributesToHtmlElement(html: string, attributes: Record<string, string>): string;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Default sequential string-child composition for document shell layers.
|
|
69
|
+
*/
|
|
70
|
+
export declare function composeSequentialLayoutChildren(context: DocumentShellComposeChildrenContext): Promise<DocumentShellComposeChildrenResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Composes page or view content through optional layout and document shells.
|
|
73
|
+
*
|
|
74
|
+
* One execution-scoped renderer cache is threaded through every shell layer so
|
|
75
|
+
* repeated foreign delegation reuses initialized renderers within one render pass.
|
|
76
|
+
*/
|
|
77
|
+
export declare function composeDocumentShell(dependencies: DocumentShellRenderDependencies, input: DocumentShellComposeInput): Promise<{
|
|
78
|
+
documentHtml: string;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Applies optional component-root and document-root attribute stamping before HTML
|
|
82
|
+
* transformation runs on explicit renderer-owned paths.
|
|
83
|
+
*/
|
|
84
|
+
export declare function applyDocumentShellAttributeStamping(html: string, stamping: DocumentShellAttributeStamping, options: {
|
|
85
|
+
componentRootAttributes?: Record<string, string>;
|
|
86
|
+
documentAttributes?: Record<string, string>;
|
|
87
|
+
}): string;
|
|
88
|
+
/**
|
|
89
|
+
* Builds the final serialized document HTML for one route page render.
|
|
90
|
+
*/
|
|
91
|
+
export declare function renderPageDocumentShell(dependencies: DocumentShellRenderDependencies, input: DocumentShellPageRenderInput, docType: string): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Finalizes already-resolved HTML for explicit renderer-owned paths.
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* Callers append renderer bootstrap dependencies before invoking this helper.
|
|
97
|
+
* Stamps document/root attributes and runs HTML transformation after nested
|
|
98
|
+
* foreign-subtree resolution without routing back through shared route execution.
|
|
99
|
+
*/
|
|
100
|
+
export declare function finalizeDocumentShellHtml(htmlTransformer: HtmlTransformerService, options: {
|
|
101
|
+
html: string;
|
|
102
|
+
partial?: boolean;
|
|
103
|
+
componentRootAttributes?: Record<string, string>;
|
|
104
|
+
documentAttributes?: Record<string, string>;
|
|
105
|
+
transformHtml?: boolean;
|
|
106
|
+
htmlContributions?: HtmlDocumentContribution[];
|
|
107
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { HtmlTransformerService, } from '../../../services/html/html-transformer.service.js';
|
|
2
|
+
function resolveDocumentShellLayouts(input) {
|
|
3
|
+
if (input.layouts && input.layouts.length > 0) {
|
|
4
|
+
return input.layouts;
|
|
5
|
+
}
|
|
6
|
+
return input.layout ? [input.layout] : [];
|
|
7
|
+
}
|
|
8
|
+
function resolveComponentIntegrationName(component) {
|
|
9
|
+
return component.config?.integration ?? component.config?.identity?.integration ?? 'ecopages';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Default sequential string-child composition for document shell layers.
|
|
13
|
+
*/
|
|
14
|
+
export async function composeSequentialLayoutChildren(context) {
|
|
15
|
+
if (!context.primaryRender) {
|
|
16
|
+
throw new Error('[ecopages] composeSequentialLayoutChildren requires primaryRender.');
|
|
17
|
+
}
|
|
18
|
+
let children = context.primaryRender.html;
|
|
19
|
+
const layoutRenders = [];
|
|
20
|
+
for (const layout of [...context.layouts].reverse()) {
|
|
21
|
+
const layoutRender = await context.renderComponentWithForeignChildren({
|
|
22
|
+
component: layout.component,
|
|
23
|
+
props: layout.props ?? {},
|
|
24
|
+
children,
|
|
25
|
+
integrationContext: { rendererCache: context.rendererCache },
|
|
26
|
+
});
|
|
27
|
+
layoutRenders.push(layoutRender);
|
|
28
|
+
children = layoutRender.html;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
children,
|
|
32
|
+
layoutRenders,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Composes page or view content through optional layout and document shells.
|
|
37
|
+
*
|
|
38
|
+
* One execution-scoped renderer cache is threaded through every shell layer so
|
|
39
|
+
* repeated foreign delegation reuses initialized renderers within one render pass.
|
|
40
|
+
*/
|
|
41
|
+
export async function composeDocumentShell(dependencies, input) {
|
|
42
|
+
const rendererCache = new Map();
|
|
43
|
+
const layouts = resolveDocumentShellLayouts(input);
|
|
44
|
+
const composeChildren = input.composeChildren ?? composeSequentialLayoutChildren;
|
|
45
|
+
const usesCustomComposeChildren = input.composeChildren !== undefined;
|
|
46
|
+
let primaryRender;
|
|
47
|
+
let children;
|
|
48
|
+
let layoutRenders;
|
|
49
|
+
if (usesCustomComposeChildren) {
|
|
50
|
+
const composed = await composeChildren({
|
|
51
|
+
primaryComponent: input.primaryComponent,
|
|
52
|
+
primaryProps: input.primaryProps,
|
|
53
|
+
layouts,
|
|
54
|
+
rendererCache,
|
|
55
|
+
renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren,
|
|
56
|
+
});
|
|
57
|
+
children = composed.children;
|
|
58
|
+
layoutRenders = composed.layoutRenders;
|
|
59
|
+
primaryRender = composed.primaryRender ?? {
|
|
60
|
+
html: typeof composed.children === 'string' ? composed.children : '',
|
|
61
|
+
assets: [],
|
|
62
|
+
canAttachAttributes: true,
|
|
63
|
+
rootTag: 'main',
|
|
64
|
+
integrationName: resolveComponentIntegrationName(input.primaryComponent),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
primaryRender = await dependencies.renderComponentWithForeignChildren({
|
|
69
|
+
component: input.primaryComponent,
|
|
70
|
+
props: input.primaryProps,
|
|
71
|
+
integrationContext: { rendererCache },
|
|
72
|
+
});
|
|
73
|
+
const composed = await composeChildren({
|
|
74
|
+
primaryComponent: input.primaryComponent,
|
|
75
|
+
primaryProps: input.primaryProps,
|
|
76
|
+
primaryRender,
|
|
77
|
+
layouts,
|
|
78
|
+
rendererCache,
|
|
79
|
+
renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren,
|
|
80
|
+
});
|
|
81
|
+
children = composed.children;
|
|
82
|
+
layoutRenders = composed.layoutRenders;
|
|
83
|
+
}
|
|
84
|
+
const documentRender = await dependencies.renderComponentWithForeignChildren({
|
|
85
|
+
component: input.htmlTemplate,
|
|
86
|
+
props: input.documentProps,
|
|
87
|
+
children,
|
|
88
|
+
integrationContext: { rendererCache },
|
|
89
|
+
});
|
|
90
|
+
dependencies.appendProcessedDependencies(primaryRender.assets, ...layoutRenders.map((layoutRender) => layoutRender.assets), documentRender.assets);
|
|
91
|
+
return {
|
|
92
|
+
documentHtml: documentRender.html,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Applies optional component-root and document-root attribute stamping before HTML
|
|
97
|
+
* transformation runs on explicit renderer-owned paths.
|
|
98
|
+
*/
|
|
99
|
+
export function applyDocumentShellAttributeStamping(html, stamping, options) {
|
|
100
|
+
let nextHtml = html;
|
|
101
|
+
if (options.componentRootAttributes && Object.keys(options.componentRootAttributes).length > 0) {
|
|
102
|
+
nextHtml = stamping.applyAttributesToFirstBodyElement(nextHtml, options.componentRootAttributes);
|
|
103
|
+
}
|
|
104
|
+
if (options.documentAttributes && Object.keys(options.documentAttributes).length > 0) {
|
|
105
|
+
nextHtml = stamping.applyAttributesToHtmlElement(nextHtml, options.documentAttributes);
|
|
106
|
+
}
|
|
107
|
+
return nextHtml;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Builds the final serialized document HTML for one route page render.
|
|
111
|
+
*/
|
|
112
|
+
export async function renderPageDocumentShell(dependencies, input, docType) {
|
|
113
|
+
const { documentHtml: composedDocumentHtml } = await composeDocumentShell(dependencies, {
|
|
114
|
+
primaryComponent: input.page.component,
|
|
115
|
+
primaryProps: input.page.props,
|
|
116
|
+
layout: input.layout,
|
|
117
|
+
layouts: input.layouts,
|
|
118
|
+
composeChildren: input.composeChildren,
|
|
119
|
+
htmlTemplate: input.htmlTemplate,
|
|
120
|
+
documentProps: {
|
|
121
|
+
metadata: input.metadata,
|
|
122
|
+
pageProps: input.pageProps,
|
|
123
|
+
...(input.documentProps ?? {}),
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
const documentHtml = input.transformDocumentHtml
|
|
127
|
+
? input.transformDocumentHtml(composedDocumentHtml)
|
|
128
|
+
: composedDocumentHtml;
|
|
129
|
+
return `${docType}${documentHtml}`;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Finalizes already-resolved HTML for explicit renderer-owned paths.
|
|
133
|
+
*
|
|
134
|
+
* @remarks
|
|
135
|
+
* Callers append renderer bootstrap dependencies before invoking this helper.
|
|
136
|
+
* Stamps document/root attributes and runs HTML transformation after nested
|
|
137
|
+
* foreign-subtree resolution without routing back through shared route execution.
|
|
138
|
+
*/
|
|
139
|
+
export async function finalizeDocumentShellHtml(htmlTransformer, options) {
|
|
140
|
+
const html = applyDocumentShellAttributeStamping(options.html, {
|
|
141
|
+
applyAttributesToFirstBodyElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToFirstBodyElement(nextHtml, attributes),
|
|
142
|
+
applyAttributesToHtmlElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToHtmlElement(nextHtml, attributes),
|
|
143
|
+
}, {
|
|
144
|
+
componentRootAttributes: options.componentRootAttributes,
|
|
145
|
+
documentAttributes: options.documentAttributes,
|
|
146
|
+
});
|
|
147
|
+
const shouldTransform = options.transformHtml ?? !options.partial;
|
|
148
|
+
if (!shouldTransform) {
|
|
149
|
+
return html;
|
|
150
|
+
}
|
|
151
|
+
const transformedResponse = await htmlTransformer.transform(new Response(html, {
|
|
152
|
+
headers: { 'Content-Type': 'text/html' },
|
|
153
|
+
}), options.htmlContributions);
|
|
154
|
+
return await transformedResponse.text();
|
|
155
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EcoPageLayoutEntry, LayoutPropsContext } from '../../../types/public-types.js';
|
|
2
|
+
export type LayoutShellPropsContext = LayoutPropsContext & {
|
|
3
|
+
pageProps?: Record<string, unknown>;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the default shell props passed to a layout tier during route render.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveLayoutShellProps(context: LayoutShellPropsContext): Record<string, unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolves props for one layout entry, merging shell props with an optional factory.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveLayoutEntryProps(entry: EcoPageLayoutEntry, context: LayoutShellPropsContext): Record<string, unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Reads the normalized layout stack from a page component config.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolvePageLayoutComponents(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'][];
|
|
17
|
+
/**
|
|
18
|
+
* Returns the innermost layout component from a normalized page layout stack.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveInnermostPageLayout(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'] | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves the default shell props passed to a layout tier during route render.
|
|
3
|
+
*/
|
|
4
|
+
export function resolveLayoutShellProps(context) {
|
|
5
|
+
return context.locals ? { locals: context.locals } : {};
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolves props for one layout entry, merging shell props with an optional factory.
|
|
9
|
+
*/
|
|
10
|
+
export function resolveLayoutEntryProps(entry, context) {
|
|
11
|
+
const shellProps = resolveLayoutShellProps(context);
|
|
12
|
+
if (!entry.props) {
|
|
13
|
+
return shellProps;
|
|
14
|
+
}
|
|
15
|
+
const layoutPropsContext = {
|
|
16
|
+
params: context.params,
|
|
17
|
+
query: context.query,
|
|
18
|
+
locals: context.locals,
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
...shellProps,
|
|
22
|
+
...entry.props(layoutPropsContext),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Reads the normalized layout stack from a page component config.
|
|
27
|
+
*/
|
|
28
|
+
export function resolvePageLayoutComponents(layouts) {
|
|
29
|
+
return layouts && layouts.length > 0 ? layouts : [];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Returns the innermost layout component from a normalized page layout stack.
|
|
33
|
+
*/
|
|
34
|
+
export function resolveInnermostPageLayout(layouts) {
|
|
35
|
+
const stack = resolvePageLayoutComponents(layouts);
|
|
36
|
+
return stack[stack.length - 1];
|
|
37
|
+
}
|
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
import type { EcoComponent } from '
|
|
1
|
+
import type { EcoComponent } from '../../../types/public-types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Result returned by a renderer-owned foreign-child runtime.
|
|
4
4
|
*
|
|
5
|
-
* `inline` keeps rendering inside the current integration. `resolved`
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* `inline` keeps rendering inside the current integration. `resolved.value` is
|
|
6
|
+
* the queue transport token string allocated by `createQueuedRuntime`; callers
|
|
7
|
+
* must not treat arbitrary objects as resolved output.
|
|
8
8
|
*/
|
|
9
9
|
export type ForeignChildInterceptionResult = {
|
|
10
10
|
kind: 'inline';
|
|
11
11
|
props?: Record<string, unknown>;
|
|
12
12
|
} | {
|
|
13
13
|
kind: 'resolved';
|
|
14
|
-
value:
|
|
15
|
-
};
|
|
16
|
-
export type ForeignChildRenderInterception = {
|
|
17
|
-
kind: 'inline';
|
|
18
|
-
props?: Record<string, unknown>;
|
|
19
|
-
} | {
|
|
20
|
-
kind: 'resolved';
|
|
21
|
-
value: unknown;
|
|
14
|
+
value: string;
|
|
22
15
|
} | undefined;
|
|
23
16
|
/**
|
|
24
17
|
* Foreign-child metadata passed into the active renderer-owned runtime.
|
|
@@ -44,7 +37,7 @@ export interface ForeignChildRuntime {
|
|
|
44
37
|
* which decides whether the child stays inline or leaves the current renderer.
|
|
45
38
|
*/
|
|
46
39
|
interceptForeignChild?(input: ForeignChildInterceptionInput): ForeignChildInterceptionResult | Promise<ForeignChildInterceptionResult>;
|
|
47
|
-
interceptForeignChildSync?(input: ForeignChildInterceptionInput): ForeignChildInterceptionResult
|
|
40
|
+
interceptForeignChildSync?(input: ForeignChildInterceptionInput): Exclude<ForeignChildInterceptionResult, undefined>;
|
|
48
41
|
}
|
|
49
42
|
type ForeignChildRenderInput = {
|
|
50
43
|
component: EcoComponent;
|
|
@@ -58,7 +51,7 @@ type ForeignChildRenderInput = {
|
|
|
58
51
|
export type ComponentRenderContext = {
|
|
59
52
|
currentIntegration: string;
|
|
60
53
|
foreignChildRuntime?: ForeignChildRuntime;
|
|
61
|
-
interceptForeignChild(input: ForeignChildRenderInput): Promise<
|
|
54
|
+
interceptForeignChild(input: ForeignChildRenderInput): Promise<ForeignChildInterceptionResult> | ForeignChildInterceptionResult;
|
|
62
55
|
finalizeComponentRender<T>(component: EcoComponent, content: T): T;
|
|
63
56
|
};
|
|
64
57
|
/**
|
|
@@ -72,7 +65,7 @@ export declare function getComponentRenderContext(): ComponentRenderContext | un
|
|
|
72
65
|
*
|
|
73
66
|
* The active runtime may resolve the foreign child immediately or keep it inline.
|
|
74
67
|
*/
|
|
75
|
-
export declare function interceptForeignChild(input: ForeignChildRenderInput): Promise<
|
|
68
|
+
export declare function interceptForeignChild(input: ForeignChildRenderInput): Promise<ForeignChildInterceptionResult> | ForeignChildInterceptionResult;
|
|
76
69
|
/**
|
|
77
70
|
* Applies lazy trigger or injector wrapping to completed component output.
|
|
78
71
|
*
|