@ecopages/core 0.2.0-beta.4 → 0.2.0-beta.41
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
|
@@ -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[];
|
|
@@ -21,6 +21,22 @@ type MarkupNodeLikeShape = {
|
|
|
21
21
|
* @typeParam T Expected resolved type of the thenable.
|
|
22
22
|
*/
|
|
23
23
|
export declare function isThenable<T>(value: unknown): value is PromiseLike<T>;
|
|
24
|
+
/** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
|
|
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;
|
|
24
40
|
/**
|
|
25
41
|
* Injects `data-eco-trigger` into the first real HTML element opening tag of
|
|
26
42
|
* a component's rendered output string.
|
|
@@ -57,10 +73,4 @@ export declare function wrapWithScriptsInjector(content: string, lazyGroups: Res
|
|
|
57
73
|
export declare function wrapWithScriptsInjector<T extends TemplateContentShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T | string;
|
|
58
74
|
export declare function wrapWithScriptsInjector<T extends MarkupNodeLikeShape>(content: T, lazyGroups: ResolvedLazyScriptGroups): T;
|
|
59
75
|
export declare function wrapWithScriptsInjector(content: unknown, lazyGroups: ResolvedLazyScriptGroups): string | TemplateContentShape | MarkupNodeLikeShape;
|
|
60
|
-
export declare function decodeHtmlEntities(value: string): string;
|
|
61
|
-
export declare function normalizeUnresolvedMarkerArtifactHtml(html: string): string;
|
|
62
|
-
export declare function inspectUnresolvedMarkerArtifactHtml(html: string): {
|
|
63
|
-
hasUnresolvedMarkerArtifacts: boolean;
|
|
64
|
-
normalizedHtml: string;
|
|
65
|
-
};
|
|
66
76
|
export {};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { buildInjectorMapScript } from '../../../eco/lazy-injector-map.js';
|
|
2
|
+
function cloneTemplateStrings(strings, firstString) {
|
|
3
|
+
const nextStrings = [...strings];
|
|
4
|
+
nextStrings[0] = firstString;
|
|
5
|
+
const rawDescriptor = Object.getOwnPropertyDescriptor(strings, 'raw');
|
|
6
|
+
if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
|
|
7
|
+
const rawStrings = [...rawDescriptor.value];
|
|
8
|
+
rawStrings[0] = firstString;
|
|
9
|
+
Object.defineProperty(nextStrings, 'raw', {
|
|
10
|
+
...rawDescriptor,
|
|
11
|
+
value: rawStrings,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return nextStrings;
|
|
15
|
+
}
|
|
16
|
+
function cloneTemplateContentWithUpdatedFirstString(content, firstString) {
|
|
17
|
+
const descriptors = Object.getOwnPropertyDescriptors(content);
|
|
18
|
+
const clonedContent = Object.create(Object.getPrototypeOf(content));
|
|
19
|
+
const stringsDescriptor = descriptors.strings;
|
|
20
|
+
Object.defineProperties(clonedContent, {
|
|
21
|
+
...descriptors,
|
|
22
|
+
strings: {
|
|
23
|
+
...stringsDescriptor,
|
|
24
|
+
value: cloneTemplateStrings(content.strings, firstString),
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
return clonedContent;
|
|
28
|
+
}
|
|
29
|
+
function cloneMarkupNodeLikeWithUpdatedOuterHtml(content, outerHTML) {
|
|
30
|
+
const descriptors = Object.getOwnPropertyDescriptors(content);
|
|
31
|
+
const clonedContent = Object.create(Object.getPrototypeOf(content));
|
|
32
|
+
const outerHTMLDescriptor = descriptors.outerHTML;
|
|
33
|
+
Object.defineProperties(clonedContent, {
|
|
34
|
+
...descriptors,
|
|
35
|
+
outerHTML: {
|
|
36
|
+
configurable: outerHTMLDescriptor?.configurable ?? true,
|
|
37
|
+
enumerable: outerHTMLDescriptor?.enumerable ?? true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: outerHTML,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
return clonedContent;
|
|
43
|
+
}
|
|
44
|
+
function wrapWithScriptsInjectorMarkup(content, injectorMapScript) {
|
|
45
|
+
return `<scripts-injector><script type="ecopages/injector-map">${injectorMapScript}</script>${content}</scripts-injector>`;
|
|
46
|
+
}
|
|
47
|
+
function cloneTemplateContentWithWrappedInjector(content, injectorMapScript) {
|
|
48
|
+
if (content.strings.length === 0) {
|
|
49
|
+
return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
|
|
50
|
+
}
|
|
51
|
+
const nextStrings = [...content.strings];
|
|
52
|
+
nextStrings[0] = wrapWithScriptsInjectorMarkup(nextStrings[0] ?? '', injectorMapScript);
|
|
53
|
+
nextStrings[nextStrings.length - 1] = `${nextStrings[nextStrings.length - 1] ?? ''}</scripts-injector>`;
|
|
54
|
+
const rawDescriptor = Object.getOwnPropertyDescriptor(content.strings, 'raw');
|
|
55
|
+
if (rawDescriptor && Array.isArray(rawDescriptor.value)) {
|
|
56
|
+
const rawStrings = [...rawDescriptor.value];
|
|
57
|
+
rawStrings[0] = wrapWithScriptsInjectorMarkup(rawStrings[0] ?? '', injectorMapScript);
|
|
58
|
+
rawStrings[rawStrings.length - 1] = `${rawStrings[rawStrings.length - 1] ?? ''}</scripts-injector>`;
|
|
59
|
+
Object.defineProperty(nextStrings, 'raw', {
|
|
60
|
+
...rawDescriptor,
|
|
61
|
+
value: rawStrings,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const descriptors = Object.getOwnPropertyDescriptors(content);
|
|
65
|
+
const clonedContent = Object.create(Object.getPrototypeOf(content));
|
|
66
|
+
const stringsDescriptor = descriptors.strings;
|
|
67
|
+
Object.defineProperties(clonedContent, {
|
|
68
|
+
...descriptors,
|
|
69
|
+
strings: {
|
|
70
|
+
...stringsDescriptor,
|
|
71
|
+
value: nextStrings,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
return clonedContent;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Returns `true` when `value` is a thenable (Promise-like) object.
|
|
78
|
+
*
|
|
79
|
+
* Used to transparently handle both synchronous and asynchronous component
|
|
80
|
+
* render results without requiring every caller to branch on `instanceof Promise`.
|
|
81
|
+
*
|
|
82
|
+
* @typeParam T Expected resolved type of the thenable.
|
|
83
|
+
*/
|
|
84
|
+
export function isThenable(value) {
|
|
85
|
+
return (typeof value === 'object' &&
|
|
86
|
+
value !== null &&
|
|
87
|
+
'then' in value &&
|
|
88
|
+
typeof value.then === 'function');
|
|
89
|
+
}
|
|
90
|
+
function isTemplateContentShape(value) {
|
|
91
|
+
return (typeof value === 'object' &&
|
|
92
|
+
value !== null &&
|
|
93
|
+
Array.isArray(value.strings) &&
|
|
94
|
+
((value.values ?? undefined) === undefined ||
|
|
95
|
+
Array.isArray(value.values)));
|
|
96
|
+
}
|
|
97
|
+
function isMarkupNodeLikeShape(value) {
|
|
98
|
+
return (typeof value === 'object' && value !== null && typeof value.nodeType === 'number');
|
|
99
|
+
}
|
|
100
|
+
/** Returns whether a value looks like a DOM-like markup node from SSR integrations. */
|
|
101
|
+
export function isMarkupNodeLike(value) {
|
|
102
|
+
return isMarkupNodeLikeShape(value);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Returns whether a value is a plain opaque object that string serializers would
|
|
106
|
+
* coerce via `String(value)` rather than render as markup.
|
|
107
|
+
*
|
|
108
|
+
* @remarks
|
|
109
|
+
* Template results (`strings`/`values`), markup nodes, arrays, and framework
|
|
110
|
+
* element markers (`$$typeof`) are not opaque. Cross-integration children that
|
|
111
|
+
* are only plain objects must use EcoEmbed or already-serialized HTML.
|
|
112
|
+
*/
|
|
113
|
+
export function isOpaqueForeignChildValue(children) {
|
|
114
|
+
if (children === null || typeof children !== 'object') {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (Array.isArray(children)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if ('$$typeof' in children) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if ('strings' in children && Array.isArray(children.strings)) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
if (isMarkupNodeLikeShape(children)) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
const prototype = Object.getPrototypeOf(children);
|
|
130
|
+
return prototype === Object.prototype || prototype === null;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Throws when foreign-path children would be coerced from an opaque object.
|
|
134
|
+
*/
|
|
135
|
+
export function assertForeignChildrenNotOpaque(children, context) {
|
|
136
|
+
if (!isOpaqueForeignChildValue(children)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const childTag = Object.prototype.toString.call(children);
|
|
140
|
+
throw new TypeError(`[ecopages] ${context} refused to coerce opaque foreign children (${childTag}). Use EcoEmbed for cross-integration children or pass already-serialized HTML.`);
|
|
141
|
+
}
|
|
142
|
+
function injectTriggerAttributeIntoString(content, triggerId) {
|
|
143
|
+
const str = content;
|
|
144
|
+
let i = 0;
|
|
145
|
+
while (i < str.length) {
|
|
146
|
+
if (str[i] !== '<') {
|
|
147
|
+
i++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const next = str[i + 1];
|
|
151
|
+
if (next === '!' || next === '?') {
|
|
152
|
+
const end = str.indexOf('>', i);
|
|
153
|
+
if (end === -1)
|
|
154
|
+
break;
|
|
155
|
+
i = end + 1;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (next && /[a-zA-Z]/.test(next)) {
|
|
159
|
+
const tagSlice = str.slice(i + 1);
|
|
160
|
+
const nameEnd = tagSlice.search(/[\s/>]/);
|
|
161
|
+
if (nameEnd === -1)
|
|
162
|
+
break;
|
|
163
|
+
const insertAt = i + 1 + nameEnd;
|
|
164
|
+
return `${str.slice(0, insertAt)} data-eco-trigger="${triggerId}"${str.slice(insertAt)}`;
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
return str;
|
|
169
|
+
}
|
|
170
|
+
export function addTriggerAttribute(content, triggerId) {
|
|
171
|
+
if (isTemplateContentShape(content)) {
|
|
172
|
+
if (content.strings.length === 0) {
|
|
173
|
+
return String(content);
|
|
174
|
+
}
|
|
175
|
+
return cloneTemplateContentWithUpdatedFirstString(content, injectTriggerAttributeIntoString(content.strings[0] ?? '', triggerId));
|
|
176
|
+
}
|
|
177
|
+
if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
|
|
178
|
+
return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, injectTriggerAttributeIntoString(content.outerHTML, triggerId));
|
|
179
|
+
}
|
|
180
|
+
return injectTriggerAttributeIntoString(String(content), triggerId);
|
|
181
|
+
}
|
|
182
|
+
export function wrapWithScriptsInjector(content, lazyGroups) {
|
|
183
|
+
const injectorMapScript = buildInjectorMapScript(lazyGroups ?? []);
|
|
184
|
+
if (isTemplateContentShape(content)) {
|
|
185
|
+
return cloneTemplateContentWithWrappedInjector(content, injectorMapScript);
|
|
186
|
+
}
|
|
187
|
+
if (isMarkupNodeLikeShape(content) && typeof content.outerHTML === 'string') {
|
|
188
|
+
return cloneMarkupNodeLikeWithUpdatedOuterHtml(content, wrapWithScriptsInjectorMarkup(content.outerHTML, injectorMapScript));
|
|
189
|
+
}
|
|
190
|
+
return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
|
|
191
|
+
}
|
|
@@ -1,11 +1,36 @@
|
|
|
1
|
-
import type { ProcessedAsset } from '
|
|
2
|
-
import type { BaseIntegrationContext, ComponentRenderInput, ComponentRenderResult, EcoComponent, ForeignSubtreeRenderPayload } from '
|
|
1
|
+
import type { ProcessedAsset } from '../../../services/assets/asset-processing-service/index.js';
|
|
2
|
+
import type { BaseIntegrationContext, ComponentRenderInput, ComponentRenderResult, EcoComponent, ForeignSubtreeRenderPayload } from '../../../types/public-types.js';
|
|
3
3
|
import { type ForeignChildRuntime } from './component-render-context.js';
|
|
4
|
-
|
|
4
|
+
export type QueuedForeignChildDecisionInput = {
|
|
5
|
+
currentIntegration: string;
|
|
6
|
+
targetIntegration?: string;
|
|
7
|
+
component: EcoComponent;
|
|
8
|
+
props: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type QueuedForeignSubtreeResolution = {
|
|
11
|
+
token: string;
|
|
12
|
+
component: EcoComponent;
|
|
13
|
+
props: Record<string, unknown>;
|
|
14
|
+
componentInstanceId: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Shared mutable state for one renderer-owned queued foreign-subtree runtime.
|
|
18
|
+
*/
|
|
19
|
+
export type QueuedForeignSubtreeResolutionContext = {
|
|
20
|
+
rendererCache: Map<string, unknown>;
|
|
21
|
+
componentInstanceScope?: string;
|
|
22
|
+
nextForeignSubtreeId: number;
|
|
23
|
+
queuedResolutions: QueuedForeignSubtreeResolution[];
|
|
24
|
+
};
|
|
25
|
+
type QueuedForeignSubtreeIntegrationContext = BaseIntegrationContext & Record<string, unknown>;
|
|
26
|
+
type QueuedForeignSubtreeChildRenderResult = {
|
|
27
|
+
assets: ProcessedAsset[];
|
|
28
|
+
html?: string;
|
|
29
|
+
children?: unknown;
|
|
30
|
+
};
|
|
5
31
|
export interface ForeignSubtreeExecutionOwningRenderer {
|
|
6
32
|
readonly name: string;
|
|
7
33
|
renderComponentWithForeignChildren(input: ComponentRenderInput): Promise<ComponentRenderResult>;
|
|
8
|
-
renderForeignSubtree(input: ComponentRenderInput): Promise<ForeignSubtreeRenderPayload>;
|
|
9
34
|
}
|
|
10
35
|
export interface ForeignSubtreeExecutionDecisionInput {
|
|
11
36
|
currentIntegration: string;
|
|
@@ -21,7 +46,7 @@ export interface ForeignSubtreeExecutionRenderOptions {
|
|
|
21
46
|
renderInput: ComponentRenderInput;
|
|
22
47
|
rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
|
|
23
48
|
}): ForeignChildRuntime;
|
|
24
|
-
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer
|
|
49
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
|
|
25
50
|
}
|
|
26
51
|
export interface ForeignSubtreeQueuedRuntimeOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
|
|
27
52
|
renderInput: ComponentRenderInput;
|
|
@@ -36,7 +61,7 @@ export interface ForeignSubtreeStringQueuedHtmlOptions {
|
|
|
36
61
|
html: string;
|
|
37
62
|
runtimeContextKey: string;
|
|
38
63
|
queueLabel: string;
|
|
39
|
-
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer
|
|
64
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
|
|
40
65
|
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
41
66
|
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
42
67
|
}
|
|
@@ -50,38 +75,45 @@ export interface ForeignSubtreeQueuedHtmlOptions<TContext extends QueuedForeignS
|
|
|
50
75
|
children?: unknown;
|
|
51
76
|
html?: string;
|
|
52
77
|
}>;
|
|
53
|
-
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer
|
|
78
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): Promise<ForeignSubtreeExecutionOwningRenderer>;
|
|
54
79
|
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
55
80
|
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
56
81
|
}
|
|
82
|
+
export interface ResolveQueuedForeignSubtreeTokensOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
|
|
83
|
+
html: string;
|
|
84
|
+
runtimeContext?: TContext;
|
|
85
|
+
queueLabel: string;
|
|
86
|
+
renderQueuedChildren: (children: unknown, runtimeContext: TContext, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>) => Promise<QueuedForeignSubtreeChildRenderResult>;
|
|
87
|
+
resolveForeignSubtree: (input: ComponentRenderInput, rendererCache: Map<string, unknown>) => Promise<ForeignSubtreeRenderPayload | undefined>;
|
|
88
|
+
applyAttributesToFirstElement: (html: string, attributes: Record<string, string>) => string;
|
|
89
|
+
dedupeProcessedAssets: (assets: ProcessedAsset[]) => ProcessedAsset[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Maps one component render result into the foreign-subtree payload shape used by
|
|
93
|
+
* queue resolution and integration tests.
|
|
94
|
+
*/
|
|
95
|
+
export declare function toForeignSubtreeRenderPayload(result: ComponentRenderResult): ForeignSubtreeRenderPayload;
|
|
57
96
|
/**
|
|
58
97
|
* Executes one component render tree under Foreign Child support.
|
|
59
98
|
*
|
|
60
|
-
* This service owns
|
|
61
|
-
*
|
|
62
|
-
* renderer, how one render-pass renderer cache is reused, and how queued
|
|
63
|
-
* Foreign Subtree tokens resolve back into final HTML.
|
|
99
|
+
* This service owns mixed-integration execution policy and the queued token
|
|
100
|
+
* mechanics renderers use when foreign children cannot resolve inline.
|
|
64
101
|
*/
|
|
65
102
|
export declare class ForeignSubtreeExecutionService {
|
|
66
|
-
private readonly queuedForeignSubtreeResolutionService;
|
|
67
|
-
constructor(queuedForeignSubtreeResolutionService?: QueuedForeignSubtreeResolutionService);
|
|
68
103
|
private requiresForeignChildRuntime;
|
|
69
|
-
/**
|
|
70
|
-
* Returns whether the current render pass must hand the child off to a foreign owner.
|
|
71
|
-
*/
|
|
72
104
|
shouldDelegateForeignChild(input: ForeignSubtreeExecutionDecisionInput): boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Creates the base runtime used when a renderer has not supplied its own queueing runtime.
|
|
75
|
-
*
|
|
76
|
-
* The runtime allows same-integration children to continue inline and fails fast
|
|
77
|
-
* when execution crosses into a foreign owner without a renderer-owned handoff.
|
|
78
|
-
*/
|
|
79
105
|
createFailFastRuntime(rendererName: string): ForeignChildRuntime;
|
|
80
106
|
getQueuedRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
|
|
81
107
|
createQueuedRuntime<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeQueuedRuntimeOptions<TContext>): ForeignChildRuntime;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
108
|
+
createQueueRuntime<TContext extends QueuedForeignSubtreeResolutionContext>(options: {
|
|
109
|
+
renderInput: ComponentRenderInput;
|
|
110
|
+
rendererCache: Map<string, unknown>;
|
|
111
|
+
runtimeContextKey: string;
|
|
112
|
+
tokenPrefix: string;
|
|
113
|
+
shouldQueueForeignChild: (input: QueuedForeignChildDecisionInput) => boolean;
|
|
114
|
+
createRuntimeContext?: (integrationContext: QueuedForeignSubtreeIntegrationContext, rendererCache: Map<string, unknown>) => TContext;
|
|
115
|
+
}): ForeignChildRuntime;
|
|
116
|
+
getRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
|
|
85
117
|
resolveStringQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeStringQueuedHtmlOptions): Promise<{
|
|
86
118
|
assets: ProcessedAsset[];
|
|
87
119
|
html: string;
|
|
@@ -90,21 +122,19 @@ export declare class ForeignSubtreeExecutionService {
|
|
|
90
122
|
assets: ProcessedAsset[];
|
|
91
123
|
html: string;
|
|
92
124
|
}>;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
125
|
+
resolveQueuedForeignSubtreeTokens<TContext extends QueuedForeignSubtreeResolutionContext>(options: ResolveQueuedForeignSubtreeTokensOptions<TContext>): Promise<{
|
|
126
|
+
assets: ProcessedAsset[];
|
|
127
|
+
html: string;
|
|
128
|
+
}>;
|
|
96
129
|
executeComponentRender(options: ForeignSubtreeExecutionRenderOptions): Promise<ComponentRenderResult>;
|
|
97
130
|
private getRendererCache;
|
|
98
131
|
private withRendererCache;
|
|
99
|
-
/**
|
|
100
|
-
* Returns the delegatable owning renderer integration for one component.
|
|
101
|
-
*
|
|
102
|
-
* The pseudo `html` integration marks document-shell ownership only and does
|
|
103
|
-
* not participate in component-level foreign subtree execution.
|
|
104
|
-
*/
|
|
105
132
|
private getForeignOwnerIntegrationName;
|
|
106
133
|
private resolveForeignChildInOwningRenderer;
|
|
107
134
|
private resolveForeignSubtreeInOwningRenderer;
|
|
108
135
|
private runInForeignOwningRenderer;
|
|
109
136
|
resolveQueuedTokens(html: string, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<string>;
|
|
137
|
+
private createForeignSubtreeToken;
|
|
138
|
+
private ensureRuntimeContext;
|
|
110
139
|
}
|
|
140
|
+
export {};
|