@ecopages/core 0.2.0-beta.3 → 0.2.0-beta.31
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 +38 -9
- package/package.json +241 -30
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +123 -6
- package/src/adapters/abstract/application-adapter.js +151 -1
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +149 -0
- package/src/adapters/abstract/server-adapter.d.ts +16 -2
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
- package/src/adapters/abstract/ws-pattern-matcher.js +30 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +96 -0
- package/src/adapters/bun/client-bridge.d.ts +1 -0
- package/src/adapters/bun/client-bridge.js +3 -0
- package/src/adapters/bun/create-app.d.ts +9 -6
- package/src/adapters/bun/create-app.js +76 -45
- package/src/adapters/bun/hmr-manager.d.ts +1 -1
- package/src/adapters/bun/hmr-manager.js +1 -1
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +25 -2
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +1 -1
- package/src/adapters/bun/server-adapter.d.ts +92 -41
- package/src/adapters/bun/server-adapter.js +256 -117
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +25 -20
- package/src/adapters/create-app.d.ts +13 -11
- package/src/adapters/create-app.js +2 -51
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +26 -4
- package/src/adapters/node/create-app.d.ts +8 -3
- package/src/adapters/node/create-app.js +61 -13
- package/src/adapters/node/node-client-bridge.d.ts +1 -0
- package/src/adapters/node/node-client-bridge.js +3 -0
- package/src/adapters/node/node-hmr-manager.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.js +1 -1
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +1 -1
- package/src/adapters/node/server-adapter-dependencies.js +4 -0
- package/src/adapters/node/server-adapter.d.ts +64 -23
- package/src/adapters/node/server-adapter.js +169 -142
- package/src/adapters/node/static-content-server.d.ts +1 -0
- package/src/adapters/node/static-content-server.js +10 -2
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +27 -12
- package/src/adapters/shared/{hmr-entrypoint-registrar.d.ts → hmr/hmr-entrypoint-registrar.d.ts} +31 -30
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +106 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/{hmr-html-response.js → hmr/hmr-html-response.js} +4 -1
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +101 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +432 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +129 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/{api-response.js → http/api-response.js} +6 -23
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +23 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +63 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/{explicit-static-route-matcher.js → http/explicit-static-route-matcher.js} +3 -38
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/{file-route-middleware-pipeline.js → http/file-route-middleware-pipeline.js} +10 -22
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/{fs-server-response-factory.js → http/fs-server-response-factory.js} +22 -2
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/{fs-server-response-matcher.js → http/fs-server-response-matcher.js} +109 -27
- 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/{application-adapter.js → runtime/application-adapter.js} +1 -1
- package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +24 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +196 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/{render-context.js → runtime/render-context.js} +8 -17
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
- package/src/adapters/shared/{runtime-app-bootstrap.js → runtime/runtime-app-bootstrap.js} +4 -7
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +46 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +57 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +23 -49
- package/src/adapters/shared/runtime/server-adapter.js +226 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/{server-route-handler.js → runtime/server-route-handler.js} +5 -43
- 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 +191 -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 +100 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +55 -0
- package/src/build/README.md +140 -31
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +124 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
- package/src/build/{browser-runtime-plugin.js → browser/browser-runtime-plugin.js} +1 -1
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +41 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +6 -0
- package/src/build/build-adapter.d.ts +29 -334
- package/src/build/build-adapter.js +32 -133
- package/src/build/cache/build-input-fingerprint.d.ts +28 -0
- package/src/build/cache/build-input-fingerprint.js +31 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +6 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +63 -0
- package/src/build/cache/dev-browser-script-cache.d.ts +34 -0
- package/src/build/cache/dev-browser-script-cache.js +90 -0
- package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
- package/src/build/cache/pages-unified-graph-build.js +198 -0
- package/src/build/cache/production-build-cache.d.ts +20 -0
- package/src/build/cache/production-build-cache.js +63 -0
- package/src/build/cache/server-entry-build-cache.d.ts +43 -0
- package/src/build/cache/server-entry-build-cache.js +165 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/{build-manifest.js → contracts/build-manifest.js} +2 -2
- package/src/build/contracts/build-types.js +0 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +23 -9
- package/src/build/{rolldown-adapter-helpers.js → rolldown/rolldown-adapter-helpers.js} +99 -13
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/{rolldown-build-adapter.js → rolldown/rolldown-build-adapter.js} +3 -3
- package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +43 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
- package/src/build/{rolldown-plugin-bridge.js → rolldown/rolldown-plugin-bridge.js} +21 -6
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +61 -0
- package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +201 -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 +54 -0
- package/src/build/runtime/build-request-policy.d.ts +59 -0
- package/src/build/runtime/build-request-policy.js +46 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +65 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +34 -0
- package/src/build/runtime/parallel-build-executor.d.ts +21 -0
- package/src/build/runtime/parallel-build-executor.js +52 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +41 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +23 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +65 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +12 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +73 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +25 -0
- package/src/client/scroll.test.browser.js +37 -0
- package/src/client/view-transitions.d.ts +16 -0
- package/src/client/view-transitions.js +63 -0
- package/src/config/config-builder.d.ts +25 -10
- package/src/config/config-builder.js +53 -11
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +2 -1
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +15 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +6 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +15 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +7 -0
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +6 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +33 -0
- package/src/diagnostics/startup-trace.d.ts +72 -0
- package/src/diagnostics/startup-trace.js +253 -0
- package/src/eco/README.md +11 -0
- package/src/eco/eco-declared-component.d.ts +14 -0
- package/src/eco/eco-declared-component.js +16 -0
- package/src/eco/eco.browser.js +5 -6
- package/src/eco/eco.js +7 -8
- package/src/eco/eco.types.d.ts +14 -3
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -1
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +59 -0
- package/src/env.d.ts +2 -0
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +7 -1
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/hmr/client/hmr-runtime.js +7 -4
- package/src/hmr/hmr-entrypoint-output.d.ts +49 -0
- package/src/hmr/hmr-entrypoint-output.js +60 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +17 -0
- package/src/hmr/hmr-strategy.d.ts +15 -0
- package/src/hmr/hmr-strategy.js +19 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +3 -5
- package/src/hmr/strategies/js-hmr-strategy.js +72 -19
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +29 -0
- package/src/index.d.ts +2 -1
- package/src/index.js +28 -2
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
- package/src/integrations/ghtml/ghtml-renderer.js +2 -51
- package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
- package/src/integrations/ghtml/ghtml.plugin.js +7 -14
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +38 -51
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +19 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +1 -1
- package/src/plugins/eco-component-meta-plugin.js +5 -8
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +4 -6
- package/src/plugins/integration-plugin.d.ts +43 -14
- package/src/plugins/integration-plugin.js +18 -5
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +26 -0
- package/src/plugins/processor.d.ts +61 -12
- package/src/plugins/processor.js +24 -5
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +23 -1
- package/src/plugins/tsconfig-import-resolver.d.ts +18 -0
- package/src/plugins/tsconfig-import-resolver.js +159 -0
- package/src/route-renderer/GRAPH.md +26 -32
- package/src/route-renderer/README.md +38 -31
- 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 +148 -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 +31 -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/{component-render-context.js → foreign-child/component-render-context.js} +4 -2
- 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/{render-output.utils.js → foreign-child/foreign-child-output.utils.js} +35 -26
- 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-subtree-execution.service.js → foreign-child/foreign-subtree-execution.service.js} +170 -37
- 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 +35 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +24 -143
- package/src/route-renderer/orchestration/integration-renderer.js +163 -402
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +177 -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 +143 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +96 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +7 -2
- package/src/route-renderer/orchestration/{ownership-validation.service.js → ownership-graph/ownership-validation.service.js} +30 -3
- 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 +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.d.ts +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +7 -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 +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +106 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +436 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +31 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +229 -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/route-pipeline/integration-route-render-adapter.d.ts +31 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +25 -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 +27 -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 +36 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +20 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +24 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +25 -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 +33 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +13 -53
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +162 -0
- package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
- package/src/route-renderer/orchestration/string-markup-renderer.js +55 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +5 -2
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +6 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +7 -2
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +4 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +10 -0
- package/src/router/client/link-intent.test.browser.js +12 -1
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +101 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +92 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +12 -2
- 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 +3 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +6 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +44 -5
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- 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 +1 -0
- 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 +78 -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 +28 -13
- 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 +7 -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 +38 -12
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +2 -0
- 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 +17 -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 +18 -0
- 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 +2 -15
- 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 +73 -68
- 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 +18 -15
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +17 -3
- 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 +2 -31
- 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 +2 -30
- 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 +43 -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 +17 -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 +5 -10
- package/src/services/assets/browser-bundle.service.d.ts +28 -30
- package/src/services/assets/browser-bundle.service.js +28 -19
- package/src/services/html/html-transformer.service.d.ts +1 -1
- package/src/services/html/html-transformer.service.js +5 -5
- package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
- package/src/services/invalidation/development-invalidation.service.js +64 -11
- package/src/services/module-loading/README.md +49 -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 +3 -21
- package/src/services/module-loading/page-module-import.service.d.ts +6 -2
- package/src/services/module-loading/page-module-import.service.js +110 -47
- 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 +37 -0
- package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
- package/src/services/module-loading/route-module-build-cache.js +38 -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 +207 -0
- package/src/services/module-loading/route-module-build-manifest.d.ts +54 -0
- package/src/services/module-loading/route-module-build-manifest.js +85 -0
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
- package/src/services/module-loading/route-module-dependency-hasher.js +122 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -1
- package/src/services/module-loading/server-module-transpiler.service.js +1 -1
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +12 -13
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- 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 +28 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +22 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +31 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +33 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
- package/src/static-site-generator/static-build-invalidation.js +59 -0
- package/src/static-site-generator/static-export-context.d.ts +30 -0
- package/src/static-site-generator/static-export-context.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +43 -25
- package/src/static-site-generator/static-site-generator.js +381 -106
- package/src/types/internal-types.d.ts +39 -13
- package/src/types/public-types.d.ts +289 -52
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +26 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +5 -1
- package/src/utils/parse-cli-args.d.ts +2 -0
- package/src/utils/parse-cli-args.js +6 -0
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +27 -0
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +5 -6
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +48 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +16 -0
- package/src/watchers/project-watcher.d.ts +29 -6
- package/src/watchers/project-watcher.js +146 -34
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- 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/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/server-adapter.js +0 -436
- 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/build/build-manifest.d.ts +0 -33
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -166
- 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/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -43
- 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/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- 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/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/{explicit-static-render-preparation.js → http/explicit-static-render-preparation.js} +0 -0
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/adapters/shared/{runtime-host.js → runtime/runtime-host.js} +0 -0
- /package/src/adapters/shared/{static-preview-host.js → 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-manifest.js → browser/browser-runtime-manifest.js} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.js → browser/browser-runtime-plugin-helpers.js} +0 -0
- /package/src/build/{build-types.js → contracts/build-contracts.js} +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
- /package/src/build/{server-side-css-shim-plugin.js → rolldown/server-side-css-shim-plugin.js} +0 -0
- /package/src/build/{serialized-build-executor.js → runtime/serialized-build-executor.js} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → client/navigation-scripts/navigation-scripts.test.browser.d.ts} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → client/scroll.test.browser.d.ts} +0 -0
- /package/src/route-renderer/orchestration/{processed-asset-dedupe.js → page-browser-graph/processed-asset-dedupe.js} +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import {
|
|
2
|
+
HtmlTransformerService
|
|
3
|
+
} from "../../../services/html/html-transformer.service.js";
|
|
4
|
+
function resolveDocumentShellLayouts(input) {
|
|
5
|
+
if (input.layouts && input.layouts.length > 0) {
|
|
6
|
+
return input.layouts;
|
|
7
|
+
}
|
|
8
|
+
return input.layout ? [input.layout] : [];
|
|
9
|
+
}
|
|
10
|
+
function resolveComponentIntegrationName(component) {
|
|
11
|
+
return component.config?.integration ?? component.config?.__eco?.integration ?? "ecopages";
|
|
12
|
+
}
|
|
13
|
+
async function composeSequentialLayoutChildren(context) {
|
|
14
|
+
if (!context.primaryRender) {
|
|
15
|
+
throw new Error("[ecopages] composeSequentialLayoutChildren requires primaryRender.");
|
|
16
|
+
}
|
|
17
|
+
let children = context.primaryRender.html;
|
|
18
|
+
const layoutRenders = [];
|
|
19
|
+
for (const layout of [...context.layouts].reverse()) {
|
|
20
|
+
const layoutRender = await context.renderComponentWithForeignChildren({
|
|
21
|
+
component: layout.component,
|
|
22
|
+
props: layout.props ?? {},
|
|
23
|
+
children,
|
|
24
|
+
integrationContext: { rendererCache: context.rendererCache }
|
|
25
|
+
});
|
|
26
|
+
layoutRenders.push(layoutRender);
|
|
27
|
+
children = layoutRender.html;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
children,
|
|
31
|
+
layoutRenders
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async function composeDocumentShell(dependencies, input) {
|
|
35
|
+
const rendererCache = /* @__PURE__ */ new Map();
|
|
36
|
+
const layouts = resolveDocumentShellLayouts(input);
|
|
37
|
+
const composeChildren = input.composeChildren ?? composeSequentialLayoutChildren;
|
|
38
|
+
const usesCustomComposeChildren = input.composeChildren !== void 0;
|
|
39
|
+
let primaryRender;
|
|
40
|
+
let children;
|
|
41
|
+
let layoutRenders;
|
|
42
|
+
if (usesCustomComposeChildren) {
|
|
43
|
+
const composed = await composeChildren({
|
|
44
|
+
primaryComponent: input.primaryComponent,
|
|
45
|
+
primaryProps: input.primaryProps,
|
|
46
|
+
layouts,
|
|
47
|
+
rendererCache,
|
|
48
|
+
renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren
|
|
49
|
+
});
|
|
50
|
+
children = composed.children;
|
|
51
|
+
layoutRenders = composed.layoutRenders;
|
|
52
|
+
primaryRender = composed.primaryRender ?? {
|
|
53
|
+
html: typeof composed.children === "string" ? composed.children : "",
|
|
54
|
+
assets: [],
|
|
55
|
+
canAttachAttributes: true,
|
|
56
|
+
rootTag: "main",
|
|
57
|
+
integrationName: resolveComponentIntegrationName(input.primaryComponent)
|
|
58
|
+
};
|
|
59
|
+
} else {
|
|
60
|
+
primaryRender = await dependencies.renderComponentWithForeignChildren({
|
|
61
|
+
component: input.primaryComponent,
|
|
62
|
+
props: input.primaryProps,
|
|
63
|
+
integrationContext: { rendererCache }
|
|
64
|
+
});
|
|
65
|
+
const composed = await composeChildren({
|
|
66
|
+
primaryComponent: input.primaryComponent,
|
|
67
|
+
primaryProps: input.primaryProps,
|
|
68
|
+
primaryRender,
|
|
69
|
+
layouts,
|
|
70
|
+
rendererCache,
|
|
71
|
+
renderComponentWithForeignChildren: dependencies.renderComponentWithForeignChildren
|
|
72
|
+
});
|
|
73
|
+
children = composed.children;
|
|
74
|
+
layoutRenders = composed.layoutRenders;
|
|
75
|
+
}
|
|
76
|
+
const documentRender = await dependencies.renderComponentWithForeignChildren({
|
|
77
|
+
component: input.htmlTemplate,
|
|
78
|
+
props: input.documentProps,
|
|
79
|
+
children,
|
|
80
|
+
integrationContext: { rendererCache }
|
|
81
|
+
});
|
|
82
|
+
dependencies.appendProcessedDependencies(
|
|
83
|
+
primaryRender.assets,
|
|
84
|
+
...layoutRenders.map((layoutRender) => layoutRender.assets),
|
|
85
|
+
documentRender.assets
|
|
86
|
+
);
|
|
87
|
+
return {
|
|
88
|
+
documentHtml: documentRender.html
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function applyDocumentShellAttributeStamping(html, stamping, options) {
|
|
92
|
+
let nextHtml = html;
|
|
93
|
+
if (options.componentRootAttributes && Object.keys(options.componentRootAttributes).length > 0) {
|
|
94
|
+
nextHtml = stamping.applyAttributesToFirstBodyElement(nextHtml, options.componentRootAttributes);
|
|
95
|
+
}
|
|
96
|
+
if (options.documentAttributes && Object.keys(options.documentAttributes).length > 0) {
|
|
97
|
+
nextHtml = stamping.applyAttributesToHtmlElement(nextHtml, options.documentAttributes);
|
|
98
|
+
}
|
|
99
|
+
return nextHtml;
|
|
100
|
+
}
|
|
101
|
+
async function renderPageDocumentShell(dependencies, input, docType) {
|
|
102
|
+
const { documentHtml: composedDocumentHtml } = await composeDocumentShell(dependencies, {
|
|
103
|
+
primaryComponent: input.page.component,
|
|
104
|
+
primaryProps: input.page.props,
|
|
105
|
+
layout: input.layout,
|
|
106
|
+
layouts: input.layouts,
|
|
107
|
+
composeChildren: input.composeChildren,
|
|
108
|
+
htmlTemplate: input.htmlTemplate,
|
|
109
|
+
documentProps: {
|
|
110
|
+
metadata: input.metadata,
|
|
111
|
+
pageProps: input.pageProps,
|
|
112
|
+
...input.documentProps ?? {}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
const documentHtml = input.transformDocumentHtml ? input.transformDocumentHtml(composedDocumentHtml) : composedDocumentHtml;
|
|
116
|
+
return `${docType}${documentHtml}`;
|
|
117
|
+
}
|
|
118
|
+
async function finalizeDocumentShellHtml(htmlTransformer, options) {
|
|
119
|
+
const html = applyDocumentShellAttributeStamping(
|
|
120
|
+
options.html,
|
|
121
|
+
{
|
|
122
|
+
applyAttributesToFirstBodyElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToFirstBodyElement(nextHtml, attributes),
|
|
123
|
+
applyAttributesToHtmlElement: (nextHtml, attributes) => htmlTransformer.applyAttributesToHtmlElement(nextHtml, attributes)
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
componentRootAttributes: options.componentRootAttributes,
|
|
127
|
+
documentAttributes: options.documentAttributes
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
const shouldTransform = options.transformHtml ?? !options.partial;
|
|
131
|
+
if (!shouldTransform) {
|
|
132
|
+
return html;
|
|
133
|
+
}
|
|
134
|
+
const transformedResponse = await htmlTransformer.transform(
|
|
135
|
+
new Response(html, {
|
|
136
|
+
headers: { "Content-Type": "text/html" }
|
|
137
|
+
}),
|
|
138
|
+
options.htmlContributions
|
|
139
|
+
);
|
|
140
|
+
return await transformedResponse.text();
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
applyDocumentShellAttributeStamping,
|
|
144
|
+
composeDocumentShell,
|
|
145
|
+
composeSequentialLayoutChildren,
|
|
146
|
+
finalizeDocumentShellHtml,
|
|
147
|
+
renderPageDocumentShell
|
|
148
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { EcoPageLayoutEntry, LayoutPropsContext } from '../../../types/public-types.js';
|
|
2
|
+
export type LayoutShellPropsContext = LayoutPropsContext & {
|
|
3
|
+
pageProps?: Record<string, unknown>;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the default shell props passed to a layout tier during route render.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveLayoutShellProps(context: LayoutShellPropsContext): Record<string, unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolves props for one layout entry, merging shell props with an optional factory.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveLayoutEntryProps(entry: EcoPageLayoutEntry, context: LayoutShellPropsContext): Record<string, unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* Reads the normalized layout stack from a page component config.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolvePageLayoutComponents(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'][];
|
|
17
|
+
/**
|
|
18
|
+
* Returns the innermost layout component from a normalized page layout stack.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveInnermostPageLayout(layouts?: EcoPageLayoutEntry['component'][]): EcoPageLayoutEntry['component'] | undefined;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
function resolveLayoutShellProps(context) {
|
|
2
|
+
return context.locals ? { locals: context.locals } : {};
|
|
3
|
+
}
|
|
4
|
+
function resolveLayoutEntryProps(entry, context) {
|
|
5
|
+
const shellProps = resolveLayoutShellProps(context);
|
|
6
|
+
if (!entry.props) {
|
|
7
|
+
return shellProps;
|
|
8
|
+
}
|
|
9
|
+
const layoutPropsContext = {
|
|
10
|
+
params: context.params,
|
|
11
|
+
query: context.query,
|
|
12
|
+
locals: context.locals
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
...shellProps,
|
|
16
|
+
...entry.props(layoutPropsContext)
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function resolvePageLayoutComponents(layouts) {
|
|
20
|
+
return layouts && layouts.length > 0 ? layouts : [];
|
|
21
|
+
}
|
|
22
|
+
function resolveInnermostPageLayout(layouts) {
|
|
23
|
+
const stack = resolvePageLayoutComponents(layouts);
|
|
24
|
+
return stack[stack.length - 1];
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
resolveInnermostPageLayout,
|
|
28
|
+
resolveLayoutEntryProps,
|
|
29
|
+
resolveLayoutShellProps,
|
|
30
|
+
resolvePageLayoutComponents
|
|
31
|
+
};
|
|
@@ -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
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./
|
|
1
|
+
import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./foreign-child-output.utils.js";
|
|
2
2
|
class ComponentRenderOutputRuntime {
|
|
3
3
|
finalizeComponentRender(component, content) {
|
|
4
4
|
const lazyTriggers = component.config?._resolvedLazyTriggers;
|
|
@@ -51,7 +51,9 @@ class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
|
|
|
51
51
|
const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
|
|
52
52
|
if (asyncInterception !== void 0) {
|
|
53
53
|
if (isThenable(asyncInterception)) {
|
|
54
|
-
return asyncInterception.then(
|
|
54
|
+
return asyncInterception.then(
|
|
55
|
+
(result) => result === void 0 ? void 0 : this.applyForeignChildInterceptionResult(result)
|
|
56
|
+
);
|
|
55
57
|
}
|
|
56
58
|
return this.applyForeignChildInterceptionResult(asyncInterception);
|
|
57
59
|
}
|
|
@@ -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 {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildInjectorMapScript } from "
|
|
1
|
+
import { buildInjectorMapScript } from "../../../eco/lazy-injector-map.js";
|
|
2
2
|
function cloneTemplateStrings(strings, firstString) {
|
|
3
3
|
const nextStrings = [...strings];
|
|
4
4
|
nextStrings[0] = firstString;
|
|
@@ -82,6 +82,37 @@ function isTemplateContentShape(value) {
|
|
|
82
82
|
function isMarkupNodeLikeShape(value) {
|
|
83
83
|
return typeof value === "object" && value !== null && typeof value.nodeType === "number";
|
|
84
84
|
}
|
|
85
|
+
function isMarkupNodeLike(value) {
|
|
86
|
+
return isMarkupNodeLikeShape(value);
|
|
87
|
+
}
|
|
88
|
+
function isOpaqueForeignChildValue(children) {
|
|
89
|
+
if (children === null || typeof children !== "object") {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (Array.isArray(children)) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if ("$$typeof" in children) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
if ("strings" in children && Array.isArray(children.strings)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (isMarkupNodeLikeShape(children)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
const prototype = Object.getPrototypeOf(children);
|
|
105
|
+
return prototype === Object.prototype || prototype === null;
|
|
106
|
+
}
|
|
107
|
+
function assertForeignChildrenNotOpaque(children, context) {
|
|
108
|
+
if (!isOpaqueForeignChildValue(children)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const childTag = Object.prototype.toString.call(children);
|
|
112
|
+
throw new TypeError(
|
|
113
|
+
`[ecopages] ${context} refused to coerce opaque foreign children (${childTag}). Use EcoEmbed for cross-integration children or pass already-serialized HTML.`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
85
116
|
function injectTriggerAttributeIntoString(content, triggerId) {
|
|
86
117
|
const str = content;
|
|
87
118
|
let i = 0;
|
|
@@ -139,33 +170,11 @@ function wrapWithScriptsInjector(content, lazyGroups) {
|
|
|
139
170
|
}
|
|
140
171
|
return wrapWithScriptsInjectorMarkup(String(content), injectorMapScript);
|
|
141
172
|
}
|
|
142
|
-
function decodeHtmlEntities(value) {
|
|
143
|
-
let decoded = value;
|
|
144
|
-
let previous;
|
|
145
|
-
do {
|
|
146
|
-
previous = decoded;
|
|
147
|
-
decoded = decoded.replaceAll(""", '"').replaceAll("'", "'").replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&");
|
|
148
|
-
} while (decoded !== previous);
|
|
149
|
-
return decoded;
|
|
150
|
-
}
|
|
151
|
-
function normalizeUnresolvedMarkerArtifactHtml(html) {
|
|
152
|
-
return html.replace(
|
|
153
|
-
/&(?:amp;)?lt;eco-marker\b[\s\S]*?&(?:amp;)?gt;&(?:amp;)?lt;\/eco-marker&(?:amp;)?gt;/g,
|
|
154
|
-
(marker) => decodeHtmlEntities(marker)
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
function inspectUnresolvedMarkerArtifactHtml(html) {
|
|
158
|
-
const normalizedHtml = normalizeUnresolvedMarkerArtifactHtml(html);
|
|
159
|
-
return {
|
|
160
|
-
normalizedHtml,
|
|
161
|
-
hasUnresolvedMarkerArtifacts: normalizedHtml.includes("<eco-marker")
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
173
|
export {
|
|
165
174
|
addTriggerAttribute,
|
|
166
|
-
|
|
167
|
-
|
|
175
|
+
assertForeignChildrenNotOpaque,
|
|
176
|
+
isMarkupNodeLike,
|
|
177
|
+
isOpaqueForeignChildValue,
|
|
168
178
|
isThenable,
|
|
169
|
-
normalizeUnresolvedMarkerArtifactHtml,
|
|
170
179
|
wrapWithScriptsInjector
|
|
171
180
|
};
|
|
@@ -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 {};
|