@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -14
- package/package.json +368 -57
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +57 -5
- package/src/adapters/abstract/application-adapter.js +261 -203
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +147 -0
- package/src/adapters/abstract/server-adapter.d.ts +13 -2
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
- package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
- package/src/adapters/bun/client-bridge.js +51 -50
- package/src/adapters/bun/create-app.d.ts +5 -7
- package/src/adapters/bun/create-app.js +169 -154
- package/src/adapters/bun/hmr-manager.d.ts +2 -3
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -8
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +34 -53
- package/src/adapters/bun/server-adapter.js +557 -637
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +43 -41
- package/src/adapters/create-app.d.ts +1 -12
- package/src/adapters/create-app.js +11 -72
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +4 -3
- package/src/adapters/node/create-app.js +123 -98
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.js +62 -64
- package/src/adapters/node/node-hmr-manager.d.ts +2 -3
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -17
- package/src/adapters/node/server-adapter.d.ts +28 -8
- package/src/adapters/node/server-adapter.js +349 -302
- package/src/adapters/node/static-content-server.js +172 -186
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +88 -64
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +132 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/http/api-response.js +79 -0
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +26 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +48 -0
- package/src/adapters/shared/http/define-api-handler.js +49 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/runtime/application-adapter.js +75 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +226 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/runtime/render-context.js +99 -0
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
- package/src/adapters/shared/runtime/server-adapter.js +301 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/runtime/server-route-handler.js +77 -0
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
- package/src/adapters/shared/runtime/server-static-builder.js +172 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
- package/src/build/README.md +165 -45
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +145 -0
- package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
- package/src/build/browser/browser-runtime-manifest.js +65 -0
- package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
- package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
- package/src/build/browser/browser-runtime-plugin.js +218 -0
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +55 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +4 -0
- package/src/build/build-adapter.d.ts +25 -355
- package/src/build/build-adapter.js +258 -265
- package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
- package/src/build/cache/build-input-fingerprint.js +33 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +4 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +71 -0
- package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
- package/src/build/cache/pages-unified-graph-build.js +199 -0
- package/src/build/cache/production-build-cache.d.ts +21 -0
- package/src/build/cache/production-build-cache.js +56 -0
- package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
- package/src/build/cache/server-entry-build-cache.js +153 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/contracts/build-manifest.js +64 -0
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/contracts/content-virtual-modules.d.ts +12 -0
- package/src/build/contracts/content-virtual-modules.js +29 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
- package/src/build/rolldown/rolldown-adapter-helpers.js +472 -0
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/rolldown/rolldown-build-adapter.js +57 -0
- package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +227 -0
- package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +79 -0
- package/src/build/runtime/build-request-policy.d.ts +58 -0
- package/src/build/runtime/build-request-policy.js +84 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +75 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +40 -0
- package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
- package/src/build/runtime/parallel-build-executor.js +60 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/build/runtime/serialized-build-executor.js +79 -0
- package/src/cache/index.d.ts +2 -1
- package/src/cache/index.js +7 -6
- package/src/cache/module-parse-cache.d.ts +5 -0
- package/src/cache/module-parse-cache.js +122 -67
- package/src/cache/module-transform-profiler.d.ts +8 -0
- package/src/cache/module-transform-profiler.js +8 -0
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +49 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +3 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +16 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +90 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +33 -0
- package/src/client/scroll.test.browser.d.ts +1 -0
- package/src/client/scroll.test.browser.js +31 -0
- package/src/client/view-transitions.d.ts +32 -0
- package/src/client/view-transitions.js +120 -0
- package/src/client/view-transitions.test.browser.d.ts +1 -0
- package/src/client/view-transitions.test.browser.js +56 -0
- package/src/config/README.md +1 -1
- package/src/config/config-builder.d.ts +40 -20
- package/src/config/config-builder.js +645 -610
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +44 -23
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +10 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +8 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +10 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +25 -23
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +3 -0
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +52 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
- package/src/dev-toolbar/dev-toolbar-package.js +78 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +39 -0
- package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
- package/src/diagnostics/request-pipeline-metrics.js +121 -0
- package/src/diagnostics/startup-trace.d.ts +81 -0
- package/src/diagnostics/startup-trace.js +281 -0
- package/src/eco/README.md +17 -0
- package/src/eco/component-identity.d.ts +13 -0
- package/src/eco/component-identity.js +18 -0
- package/src/eco/eco-declared-component.d.ts +15 -0
- package/src/eco/eco-declared-component.js +23 -0
- package/src/eco/eco.browser.js +63 -70
- package/src/eco/eco.js +163 -97
- package/src/eco/eco.types.d.ts +47 -8
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +69 -0
- package/src/env.d.ts +2 -0
- package/src/errors/http-error.d.ts +8 -0
- package/src/errors/http-error.js +66 -49
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -6
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +21 -0
- package/src/hmr/client/hmr-runtime.js +119 -110
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
- package/src/hmr/hmr-entrypoint-output.js +34 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +14 -0
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +9 -0
- package/src/hmr/hmr-strategy.js +113 -42
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
- package/src/hmr/strategies/js-hmr-strategy.js +107 -167
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
- package/src/index.browser.d.ts +1 -0
- package/src/index.browser.js +2 -4
- package/src/index.d.ts +4 -1
- package/src/index.js +7 -21
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/README.md +4 -2
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +35 -62
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +20 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
- package/src/plugins/eco-component-meta-plugin.js +123 -162
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +49 -37
- package/src/plugins/integration-plugin.d.ts +28 -15
- package/src/plugins/integration-plugin.js +212 -195
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +21 -0
- package/src/plugins/package-specifier.d.ts +12 -0
- package/src/plugins/package-specifier.js +33 -0
- package/src/plugins/processor.d.ts +79 -12
- package/src/plugins/processor.js +188 -136
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +1 -1
- package/src/plugins/source-transform.js +109 -79
- package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
- package/src/plugins/tsconfig-import-resolver.js +262 -0
- package/src/route-renderer/GRAPH.md +24 -30
- package/src/route-renderer/README.md +52 -32
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +32 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +52 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +39 -153
- package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
- package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
- package/src/route-renderer/orchestration/string-markup-renderer.js +53 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
- package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
- package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
- package/src/route-renderer/page-loading/page-module-loader.js +136 -124
- package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
- package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +31 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +56 -30
- package/src/router/client/link-intent.test.browser.js +50 -39
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +122 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +82 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +235 -211
- package/src/router/client/navigation-lifecycle.d.ts +55 -0
- package/src/router/client/navigation-lifecycle.js +50 -0
- package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
- package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
- package/src/router/server/route-registry.js +237 -242
- package/src/services/README.md +5 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +8 -6
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
- package/src/services/assets/browser-bundle.service.d.ts +27 -31
- package/src/services/assets/browser-bundle.service.js +54 -49
- package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
- package/src/services/assets/browser-runtime-asset-generation.js +28 -0
- package/src/services/cache/cache.types.d.ts +4 -2
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
- package/src/services/cache/html-page-cache-dependency-index.js +88 -0
- package/src/services/cache/index.d.ts +2 -0
- package/src/services/cache/index.js +8 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.d.ts +31 -1
- package/src/services/cache/page-cache-service.js +237 -150
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
- package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
- package/src/services/invalidation/development-invalidation.service.js +241 -204
- package/src/services/module-loading/README.md +9 -6
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
- package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
- package/src/services/module-loading/collection-server-module-build.service.js +83 -0
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.d.ts +7 -12
- package/src/services/module-loading/page-module-import.service.js +232 -206
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
- package/src/services/module-loading/route-module-build-cache.js +3 -38
- package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
- package/src/services/module-loading/route-module-build-cache.store.js +213 -196
- package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
- package/src/services/module-loading/route-module-build-manifest.js +54 -118
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
- package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
- package/src/services/module-loading/server-module-transpiler.service.js +65 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +156 -95
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +10 -2
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +36 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +42 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
- package/src/static-site-generator/static-build-invalidation.js +33 -74
- package/src/static-site-generator/static-export-context.d.ts +9 -1
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.d.ts +27 -6
- package/src/static-site-generator/static-site-generator.js +528 -389
- package/src/types/internal-types.d.ts +55 -17
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +236 -95
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +30 -0
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +22 -5
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.d.ts +1 -0
- package/src/utils/parse-cli-args.js +73 -62
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +42 -0
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +60 -53
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +54 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +17 -0
- package/src/watchers/project-watcher.d.ts +21 -6
- package/src/watchers/project-watcher.js +402 -277
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
- package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.js +0 -202
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
- package/src/adapters/shared/shared-hmr-manager.js +0 -273
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
- package/src/adapters/shared/websocket-lifecycle.js +0 -19
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/browser-runtime-plugin-helpers.js +0 -14
- package/src/build/browser-runtime-plugin.js +0 -173
- package/src/build/build-input-fingerprint.js +0 -31
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -49
- package/src/build/build-types.js +0 -0
- package/src/build/jsx-ownership-plugins.d.ts +0 -10
- package/src/build/jsx-ownership-plugins.js +0 -17
- package/src/build/pages-unified-graph-build.js +0 -208
- package/src/build/parallel-build-executor.js +0 -52
- package/src/build/rolldown-adapter-helpers.js +0 -310
- package/src/build/rolldown-build-adapter.js +0 -67
- package/src/build/rolldown-build-invocation-metrics.js +0 -43
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -182
- package/src/build/rolldown-plugin-bridge.js +0 -211
- package/src/build/rolldown-source-transform-pass.js +0 -58
- package/src/build/runtime-build-executor.d.ts +0 -15
- package/src/build/runtime-build-executor.js +0 -43
- package/src/build/runtime-build-output-normalizer.js +0 -203
- package/src/build/serialized-build-executor.js +0 -63
- package/src/build/server-entry-build-cache.js +0 -169
- package/src/build/server-side-css-shim-plugin.js +0 -35
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -54
- package/src/integrations/ghtml/ghtml-renderer.js +0 -57
- package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
- package/src/integrations/ghtml/ghtml.constants.js +0 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
- package/src/integrations/ghtml/ghtml.plugin.js +0 -20
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/render-output.utils.js +0 -175
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- package/src/utils/html.d.ts +0 -1
- package/src/utils/html.js +0 -4
- /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
- /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
|
@@ -0,0 +1,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,32 @@
|
|
|
1
|
+
import type { EcoComponent, EcoPageLayoutEntry, LayoutPropsContext } from '../../../types/public-types.js';
|
|
2
|
+
import type { DocumentShellLayoutInput } from './document-shell-render.service.js';
|
|
3
|
+
export type LayoutShellPropsContext = LayoutPropsContext & {
|
|
4
|
+
pageProps?: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
export type DocumentShellLayoutResolutionInput = LayoutShellPropsContext & {
|
|
7
|
+
layout?: EcoComponent;
|
|
8
|
+
layoutEntries?: EcoPageLayoutEntry[];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the default shell props passed to a layout tier during route render.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveLayoutShellProps(context: LayoutShellPropsContext): Record<string, unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* Resolves props for one layout entry, merging shell props with an optional factory.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveLayoutEntryProps(entry: EcoPageLayoutEntry, context: LayoutShellPropsContext): Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Resolves declarative layout entries into the document-shell inputs used during route render.
|
|
20
|
+
*
|
|
21
|
+
* @remarks Layout prop factories must be evaluated here so integrations do not
|
|
22
|
+
* silently fall back to the innermost layout and discard route-specific props.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveDocumentShellLayouts(input: DocumentShellLayoutResolutionInput): DocumentShellLayoutInput[];
|
|
25
|
+
/**
|
|
26
|
+
* Reads the normalized layout stack from a page component config.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolvePageLayoutComponents(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'][];
|
|
29
|
+
/**
|
|
30
|
+
* Returns the innermost layout component from a normalized page layout stack.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveInnermostPageLayout(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'] | undefined;
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
* Resolves declarative layout entries into the document-shell inputs used during route render.
|
|
27
|
+
*
|
|
28
|
+
* @remarks Layout prop factories must be evaluated here so integrations do not
|
|
29
|
+
* silently fall back to the innermost layout and discard route-specific props.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveDocumentShellLayouts(input) {
|
|
32
|
+
if (input.layoutEntries && input.layoutEntries.length > 0) {
|
|
33
|
+
return input.layoutEntries.map((entry) => ({
|
|
34
|
+
component: entry.component,
|
|
35
|
+
props: resolveLayoutEntryProps(entry, input),
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
return input.layout ? [{ component: input.layout, props: resolveLayoutShellProps(input) }] : [];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Reads the normalized layout stack from a page component config.
|
|
42
|
+
*/
|
|
43
|
+
export function resolvePageLayoutComponents(layouts) {
|
|
44
|
+
return layouts && layouts.length > 0 ? layouts : [];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns the innermost layout component from a normalized page layout stack.
|
|
48
|
+
*/
|
|
49
|
+
export function resolveInnermostPageLayout(layouts) {
|
|
50
|
+
const stack = resolvePageLayoutComponents(layouts);
|
|
51
|
+
return stack[stack.length - 1];
|
|
52
|
+
}
|
|
@@ -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
|
*
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from './foreign-child-output.utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared output finalization behavior used both inside and outside active render contexts.
|
|
4
|
+
*
|
|
5
|
+
* This stage is responsible only for lazy trigger or injector wrapping. Foreign-child
|
|
6
|
+
* interception stays in `ContextualComponentRenderRuntime`.
|
|
7
|
+
*/
|
|
8
|
+
class ComponentRenderOutputRuntime {
|
|
9
|
+
finalizeComponentRender(component, content) {
|
|
10
|
+
const lazyTriggers = component.config?._resolvedLazyTriggers;
|
|
11
|
+
if (lazyTriggers && lazyTriggers.length > 0) {
|
|
12
|
+
return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
|
|
13
|
+
}
|
|
14
|
+
const lazyGroups = component.config?._resolvedLazyScripts;
|
|
15
|
+
if (lazyGroups && lazyGroups.length > 0) {
|
|
16
|
+
return this.wrapContentWithScriptsInjector(content, lazyGroups);
|
|
17
|
+
}
|
|
18
|
+
return content;
|
|
19
|
+
}
|
|
20
|
+
addTriggerToContent(content, triggerId) {
|
|
21
|
+
if (isThenable(content)) {
|
|
22
|
+
return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
|
|
23
|
+
}
|
|
24
|
+
return addTriggerAttribute(content, triggerId);
|
|
25
|
+
}
|
|
26
|
+
wrapContentWithScriptsInjector(content, lazyGroups) {
|
|
27
|
+
if (isThenable(content)) {
|
|
28
|
+
return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
|
|
29
|
+
}
|
|
30
|
+
return wrapWithScriptsInjector(content, lazyGroups);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Render-context-aware runtime that delegates foreign-child interception.
|
|
35
|
+
*/
|
|
36
|
+
class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
|
|
37
|
+
context;
|
|
38
|
+
constructor(context) {
|
|
39
|
+
super();
|
|
40
|
+
this.context = context;
|
|
41
|
+
}
|
|
42
|
+
applyForeignChildInterceptionResult(result) {
|
|
43
|
+
if (result.kind === 'resolved') {
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
return result.props ? result : undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolves one foreign-child interception through the active runtime.
|
|
50
|
+
*
|
|
51
|
+
* The runtime may choose inline rendering or immediate resolved output.
|
|
52
|
+
*/
|
|
53
|
+
interceptForeignChild(input) {
|
|
54
|
+
const foreignChildRuntimeInput = {
|
|
55
|
+
currentIntegration: this.context.currentIntegration,
|
|
56
|
+
targetIntegration: input.targetIntegration,
|
|
57
|
+
component: input.component,
|
|
58
|
+
props: input.props,
|
|
59
|
+
};
|
|
60
|
+
const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
|
|
61
|
+
if (asyncInterception !== undefined) {
|
|
62
|
+
if (isThenable(asyncInterception)) {
|
|
63
|
+
return asyncInterception.then((result) => result === undefined ? undefined : this.applyForeignChildInterceptionResult(result));
|
|
64
|
+
}
|
|
65
|
+
return this.applyForeignChildInterceptionResult(asyncInterception);
|
|
66
|
+
}
|
|
67
|
+
const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
|
|
68
|
+
if (syncInterception === undefined) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return this.applyForeignChildInterceptionResult(syncInterception);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = '__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__';
|
|
75
|
+
/**
|
|
76
|
+
* Chooses the widest shared global scope available for process-wide state.
|
|
77
|
+
*
|
|
78
|
+
* `process` is preferred when present so duplicate bundles or module instances in
|
|
79
|
+
* the same runtime still converge on one shared context registry.
|
|
80
|
+
*/
|
|
81
|
+
function getSharedContextScope() {
|
|
82
|
+
const globalProcess = globalThis.process;
|
|
83
|
+
if (globalProcess && typeof globalProcess === 'object') {
|
|
84
|
+
return globalProcess;
|
|
85
|
+
}
|
|
86
|
+
return globalThis;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns the singleton mutable state used by component render contexts.
|
|
90
|
+
*/
|
|
91
|
+
function getComponentRenderContextState() {
|
|
92
|
+
const sharedScope = getSharedContextScope();
|
|
93
|
+
sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
|
|
94
|
+
contextStack: [],
|
|
95
|
+
nodeContextStorage: null,
|
|
96
|
+
nodeContextStorageLoader: null,
|
|
97
|
+
};
|
|
98
|
+
return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Lazily initializes async context storage for Node runtimes.
|
|
102
|
+
*
|
|
103
|
+
* Falls back to in-memory stack mode when async_hooks is unavailable.
|
|
104
|
+
*
|
|
105
|
+
* @returns Async context storage when available; otherwise `null`.
|
|
106
|
+
*/
|
|
107
|
+
async function getContextStorage() {
|
|
108
|
+
const state = getComponentRenderContextState();
|
|
109
|
+
if (state.nodeContextStorage) {
|
|
110
|
+
return state.nodeContextStorage;
|
|
111
|
+
}
|
|
112
|
+
if (state.nodeContextStorageLoader) {
|
|
113
|
+
return state.nodeContextStorageLoader;
|
|
114
|
+
}
|
|
115
|
+
state.nodeContextStorageLoader = import('node:async_hooks')
|
|
116
|
+
.then((module) => {
|
|
117
|
+
const storage = new module.AsyncLocalStorage();
|
|
118
|
+
state.nodeContextStorage = {
|
|
119
|
+
getStore: () => storage.getStore(),
|
|
120
|
+
run: (store, callback) => storage.run(store, callback),
|
|
121
|
+
};
|
|
122
|
+
return state.nodeContextStorage;
|
|
123
|
+
})
|
|
124
|
+
.catch(() => {
|
|
125
|
+
state.nodeContextStorage = null;
|
|
126
|
+
return null;
|
|
127
|
+
})
|
|
128
|
+
.finally(() => {
|
|
129
|
+
state.nodeContextStorageLoader = null;
|
|
130
|
+
});
|
|
131
|
+
return state.nodeContextStorageLoader;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns the current component render context, if one is active.
|
|
135
|
+
*
|
|
136
|
+
* @returns Active render context or `undefined` outside render execution.
|
|
137
|
+
*/
|
|
138
|
+
export function getComponentRenderContext() {
|
|
139
|
+
const state = getComponentRenderContextState();
|
|
140
|
+
return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
|
|
141
|
+
}
|
|
142
|
+
const componentRenderOutputRuntime = new ComponentRenderOutputRuntime();
|
|
143
|
+
/**
|
|
144
|
+
* Runs foreign-child interception for one component render step.
|
|
145
|
+
*
|
|
146
|
+
* The active runtime may resolve the foreign child immediately or keep it inline.
|
|
147
|
+
*/
|
|
148
|
+
export function interceptForeignChild(input) {
|
|
149
|
+
return getComponentRenderContext()?.interceptForeignChild(input);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Applies lazy trigger or injector wrapping to completed component output.
|
|
153
|
+
*
|
|
154
|
+
* This helper works both inside render-context execution and in fallback flows
|
|
155
|
+
* where no active context exists.
|
|
156
|
+
*/
|
|
157
|
+
export function finalizeComponentRender(component, content) {
|
|
158
|
+
const renderContext = getComponentRenderContext();
|
|
159
|
+
return (renderContext?.finalizeComponentRender(component, content) ??
|
|
160
|
+
componentRenderOutputRuntime.finalizeComponentRender(component, content));
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Runs render work under a fresh component render context and returns the
|
|
164
|
+
* resulting value.
|
|
165
|
+
*
|
|
166
|
+
* @param input Execution metadata for current integration and foreign-child policy.
|
|
167
|
+
* @param render Async render function to execute inside the context.
|
|
168
|
+
* @returns Render result value.
|
|
169
|
+
*/
|
|
170
|
+
export async function runWithComponentRenderContext(input, render) {
|
|
171
|
+
const context = {
|
|
172
|
+
currentIntegration: input.currentIntegration,
|
|
173
|
+
foreignChildRuntime: input.foreignChildRuntime,
|
|
174
|
+
};
|
|
175
|
+
const runtime = new ContextualComponentRenderRuntime(context);
|
|
176
|
+
context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
|
|
177
|
+
context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
|
|
178
|
+
const storage = await getContextStorage();
|
|
179
|
+
let value;
|
|
180
|
+
if (storage) {
|
|
181
|
+
value = await storage.run(context, render);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const state = getComponentRenderContextState();
|
|
185
|
+
state.contextStack.push(context);
|
|
186
|
+
try {
|
|
187
|
+
value = await render();
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
state.contextStack.pop();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
value,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EcoComponent } from '
|
|
1
|
+
import type { EcoComponent } from '../../../types/public-types.js';
|
|
2
2
|
type ResolvedLazyScriptGroups = Readonly<NonNullable<EcoComponent['config']>['_resolvedLazyScripts']>;
|
|
3
3
|
type TemplateContentShape = {
|
|
4
4
|
strings: readonly string[];
|
|
@@ -23,6 +23,20 @@ type MarkupNodeLikeShape = {
|
|
|
23
23
|
export declare function isThenable<T>(value: unknown): value is PromiseLike<T>;
|
|
24
24
|
/** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
|
|
25
25
|
export declare function isMarkupNodeLike(value: unknown): value is MarkupNodeLikeShape;
|
|
26
|
+
/**
|
|
27
|
+
* Returns whether a value is a plain opaque object that string serializers would
|
|
28
|
+
* coerce via `String(value)` rather than render as markup.
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* Template results (`strings`/`values`), markup nodes, arrays, and framework
|
|
32
|
+
* element markers (`$$typeof`) are not opaque. Cross-integration children that
|
|
33
|
+
* are only plain objects must use EcoEmbed or already-serialized HTML.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isOpaqueForeignChildValue(children: unknown): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Throws when foreign-path children would be coerced from an opaque object.
|
|
38
|
+
*/
|
|
39
|
+
export declare function assertForeignChildrenNotOpaque(children: unknown, context: string): void;
|
|
26
40
|
/**
|
|
27
41
|
* Injects `data-eco-trigger` into the first real HTML element opening tag of
|
|
28
42
|
* a component's rendered output string.
|
|
@@ -41,6 +55,11 @@ export declare function isMarkupNodeLike(value: unknown): value is MarkupNodeLik
|
|
|
41
55
|
* When no eligible opening tag is found the original string is returned
|
|
42
56
|
* unchanged so callers never receive a broken fragment.
|
|
43
57
|
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* `@ecopages/jsx` beta.8+ keeps attribute names in `parts`, so template
|
|
60
|
+
* `strings[0]` is often just the opening tag name (`<html`) with no trailing
|
|
61
|
+
* delimiter. In that shape the attribute is appended at the end of that string.
|
|
62
|
+
*
|
|
44
63
|
* @param content Rendered HTML string (or any value coercible to string).
|
|
45
64
|
* @param triggerId Stable trigger identifier produced by `buildResolvedLazyTriggers`.
|
|
46
65
|
*/
|
|
@@ -59,10 +78,4 @@ export declare function wrapWithScriptsInjector(content: string, lazyGroups: Res
|
|
|
59
78
|
export declare function wrapWithScriptsInjector<T extends TemplateContentShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T | string;
|
|
60
79
|
export declare function wrapWithScriptsInjector<T extends MarkupNodeLikeShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T;
|
|
61
80
|
export declare function wrapWithScriptsInjector(content: unknown, lazyGroups: ResolvedLazyScriptGroups): string | TemplateContentShape | MarkupNodeLikeShape;
|
|
62
|
-
export declare function decodeHtmlEntities(value: string): string;
|
|
63
|
-
export declare function normalizeUnresolvedMarkerArtifactHtml(html: string): string;
|
|
64
|
-
export declare function inspectUnresolvedMarkerArtifactHtml(html: string): {
|
|
65
|
-
hasUnresolvedMarkerArtifacts: boolean;
|
|
66
|
-
normalizedHtml: string;
|
|
67
|
-
};
|
|
68
81
|
export {};
|