@ecopages/core 0.2.0-alpha.27 → 0.2.0-alpha.28
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/CHANGELOG.md +91 -0
- package/package.json +162 -72
- package/src/adapters/abstract/application-adapter.d.ts +194 -0
- package/src/adapters/abstract/application-adapter.js +121 -0
- package/src/adapters/abstract/router-adapter.d.ts +26 -0
- package/src/adapters/abstract/router-adapter.js +5 -0
- package/src/adapters/abstract/server-adapter.d.ts +69 -0
- package/src/adapters/abstract/server-adapter.js +15 -0
- package/src/adapters/bun/client-bridge.d.ts +34 -0
- package/src/adapters/bun/client-bridge.js +48 -0
- package/src/adapters/bun/create-app.d.ts +53 -0
- package/src/adapters/bun/create-app.js +153 -0
- package/src/adapters/bun/hmr-manager.d.ts +131 -0
- package/src/adapters/bun/hmr-manager.js +312 -0
- package/src/adapters/bun/index.d.ts +2 -0
- package/src/adapters/bun/index.js +8 -0
- package/src/adapters/bun/server-adapter.d.ts +155 -0
- package/src/adapters/bun/server-adapter.js +393 -0
- package/src/adapters/bun/server-lifecycle.d.ts +63 -0
- package/src/adapters/bun/server-lifecycle.js +92 -0
- package/src/adapters/create-app.d.ts +20 -0
- package/src/adapters/create-app.js +66 -0
- package/src/adapters/index.d.ts +2 -0
- package/src/adapters/index.js +8 -0
- package/src/adapters/node/create-app.d.ts +18 -0
- package/src/adapters/node/create-app.js +149 -0
- package/src/adapters/node/node-client-bridge.d.ts +26 -0
- package/src/adapters/node/node-client-bridge.js +66 -0
- package/src/adapters/node/node-hmr-manager.d.ts +121 -0
- package/src/adapters/node/node-hmr-manager.js +290 -0
- package/src/adapters/node/server-adapter.d.ts +162 -0
- package/src/adapters/node/server-adapter.js +368 -0
- package/src/adapters/node/static-content-server.d.ts +60 -0
- package/src/adapters/node/static-content-server.js +194 -0
- package/src/adapters/shared/api-response.d.ts +52 -0
- package/src/adapters/shared/api-response.js +96 -0
- package/src/adapters/shared/application-adapter.d.ts +18 -0
- package/src/adapters/shared/application-adapter.js +90 -0
- package/src/adapters/shared/define-api-handler.d.ts +25 -0
- package/src/adapters/shared/define-api-handler.js +15 -0
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
- package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
- package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
- package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
- package/src/adapters/shared/fs-server-response-factory.js +81 -0
- package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
- package/src/adapters/shared/fs-server-response-matcher.js +186 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +32 -0
- package/src/adapters/shared/render-context.d.ts +15 -0
- package/src/adapters/shared/render-context.js +72 -0
- package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
- package/src/adapters/shared/runtime-bootstrap.js +43 -0
- package/src/adapters/shared/server-adapter.d.ts +108 -0
- package/src/adapters/shared/server-adapter.js +429 -0
- package/src/adapters/shared/server-route-handler.d.ts +89 -0
- package/src/adapters/shared/server-route-handler.js +111 -0
- package/src/adapters/shared/server-static-builder.d.ts +71 -0
- package/src/adapters/shared/server-static-builder.js +100 -0
- package/src/build/build-adapter.d.ts +239 -0
- package/src/build/build-adapter.js +642 -0
- package/src/build/build-manifest.d.ts +27 -0
- package/src/build/build-manifest.js +30 -0
- package/src/build/build-types.d.ts +57 -0
- package/src/build/build-types.js +0 -0
- package/src/build/dev-build-coordinator.d.ts +72 -0
- package/src/build/dev-build-coordinator.js +154 -0
- package/src/build/esbuild-build-adapter.d.ts +78 -0
- package/src/build/esbuild-build-adapter.js +505 -0
- package/src/build/runtime-build-executor.d.ts +14 -0
- package/src/build/runtime-build-executor.js +22 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +35 -0
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/config-builder.d.ts +252 -0
- package/src/config/config-builder.js +598 -0
- package/src/config/{constants.ts → constants.d.ts} +13 -22
- package/src/config/constants.js +25 -0
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +30 -0
- package/src/dev/sc-server.js +111 -0
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.d.ts +9 -0
- package/src/eco/eco.js +85 -0
- package/src/eco/eco.types.d.ts +178 -0
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +1 -0
- package/src/eco/eco.utils.js +10 -0
- package/src/eco/global-injector-map.d.ts +16 -0
- package/src/eco/global-injector-map.js +80 -0
- package/src/eco/lazy-injector-map.d.ts +8 -0
- package/src/eco/lazy-injector-map.js +70 -0
- package/src/eco/module-dependencies.d.ts +18 -0
- package/src/eco/module-dependencies.js +49 -0
- package/src/errors/http-error.d.ts +31 -0
- package/src/errors/http-error.js +50 -0
- package/src/errors/index.d.ts +3 -0
- package/src/errors/index.js +6 -0
- package/src/errors/locals-access-error.d.ts +4 -0
- package/src/errors/locals-access-error.js +9 -0
- package/src/global/app-logger.d.ts +2 -0
- package/src/global/app-logger.js +6 -0
- package/src/hmr/client/hmr-runtime.d.ts +5 -0
- package/src/hmr/client/hmr-runtime.js +117 -0
- package/src/hmr/hmr-strategy.d.ts +162 -0
- package/src/hmr/hmr-strategy.js +44 -0
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.test.e2e.js +43 -0
- package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
- package/src/hmr/strategies/default-hmr-strategy.js +34 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
- package/src/hmr/strategies/js-hmr-strategy.js +178 -0
- package/src/index.browser.d.ts +3 -0
- package/src/index.browser.js +4 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +21 -0
- package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
- package/src/integrations/ghtml/ghtml-renderer.js +57 -0
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
- package/src/integrations/ghtml/ghtml.plugin.js +20 -0
- package/src/plugins/alias-resolver-plugin.d.ts +2 -0
- package/src/plugins/alias-resolver-plugin.js +53 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
- package/src/plugins/eco-component-meta-plugin.js +162 -0
- package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
- package/src/plugins/foreign-jsx-override-plugin.js +35 -0
- package/src/plugins/integration-plugin.d.ts +215 -0
- package/src/plugins/integration-plugin.js +189 -0
- package/src/plugins/processor.d.ts +97 -0
- package/src/plugins/processor.js +141 -0
- package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
- package/src/plugins/runtime-capability.js +0 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
- package/src/route-renderer/orchestration/integration-renderer.js +909 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/page-loading/page-module-loader.js +127 -0
- package/src/route-renderer/route-renderer.d.ts +69 -0
- package/src/route-renderer/route-renderer.js +80 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
- package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
- package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
- package/src/services/assets/asset-processing-service/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
- package/src/services/assets/asset-processing-service/page-package.js +74 -0
- package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
- package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +7 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +79 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/cache/cache.types.d.ts +107 -0
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +7 -0
- package/src/services/cache/index.js +7 -0
- package/src/services/cache/memory-cache-store.d.ts +42 -0
- package/src/services/cache/memory-cache-store.js +98 -0
- package/src/services/cache/page-cache-service.d.ts +70 -0
- package/src/services/cache/page-cache-service.js +152 -0
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
- package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
- package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +87 -0
- package/src/services/html/html-transformer.service.js +216 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
- package/src/services/module-loading/page-module-import.service.d.ts +76 -0
- package/src/services/module-loading/page-module-import.service.js +170 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/validation/schema-validation-service.d.ts +122 -0
- package/src/services/validation/schema-validation-service.js +101 -0
- package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +104 -0
- package/src/static-site-generator/static-site-generator.js +316 -0
- package/src/types/internal-types.d.ts +232 -0
- package/src/types/internal-types.js +0 -0
- package/src/types/public-types.d.ts +1267 -0
- package/src/types/public-types.js +0 -0
- package/src/utils/deep-merge.d.ts +14 -0
- package/src/utils/deep-merge.js +32 -0
- package/src/utils/hash.d.ts +1 -0
- package/src/utils/hash.js +7 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/html.js +4 -0
- package/src/utils/invariant.d.ts +5 -0
- package/src/utils/invariant.js +11 -0
- package/src/utils/locals-utils.d.ts +15 -0
- package/src/utils/locals-utils.js +24 -0
- package/src/utils/parse-cli-args.d.ts +27 -0
- package/src/utils/parse-cli-args.js +62 -0
- package/src/utils/path-utils.module.d.ts +5 -0
- package/src/utils/path-utils.module.js +14 -0
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/utils/runtime.d.ts +11 -0
- package/src/utils/runtime.js +40 -0
- package/src/utils/server-utils.module.d.ts +19 -0
- package/src/utils/server-utils.module.js +56 -0
- package/src/watchers/project-watcher.d.ts +136 -0
- package/src/watchers/project-watcher.js +275 -0
- package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
- package/src/watchers/project-watcher.test-helpers.js +52 -0
- package/src/adapters/abstract/application-adapter.test.ts +0 -172
- package/src/adapters/abstract/application-adapter.ts +0 -379
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -232
- package/src/adapters/bun/hmr-manager.test.ts +0 -265
- package/src/adapters/bun/hmr-manager.ts +0 -383
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -526
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/create-app.test.ts +0 -10
- package/src/adapters/create-app.ts +0 -91
- package/src/adapters/index.ts +0 -2
- package/src/adapters/node/create-app.test.ts +0 -53
- package/src/adapters/node/create-app.ts +0 -183
- package/src/adapters/node/node-client-bridge.test.ts +0 -198
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.test.ts +0 -320
- package/src/adapters/node/node-hmr-manager.ts +0 -355
- package/src/adapters/node/server-adapter.ts +0 -502
- package/src/adapters/node/static-content-server.test.ts +0 -60
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/shared/api-response.test.ts +0 -97
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
- package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
- package/src/adapters/shared/fs-server-response-factory.ts +0 -96
- package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -220
- package/src/adapters/shared/render-context.test.ts +0 -150
- package/src/adapters/shared/render-context.ts +0 -123
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.test.ts +0 -130
- package/src/adapters/shared/server-adapter.ts +0 -562
- package/src/adapters/shared/server-route-handler.test.ts +0 -111
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.test.ts +0 -338
- package/src/adapters/shared/server-static-builder.ts +0 -170
- package/src/build/build-adapter-serialization.test.ts +0 -281
- package/src/build/build-adapter.test.ts +0 -1240
- package/src/build/build-adapter.ts +0 -1012
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.ts +0 -220
- package/src/build/esbuild-build-adapter.ts +0 -660
- package/src/build/runtime-build-executor.test.ts +0 -81
- package/src/build/runtime-build-executor.ts +0 -40
- package/src/build/runtime-specifier-alias-plugin.test.ts +0 -67
- package/src/build/runtime-specifier-alias-plugin.ts +0 -62
- package/src/build/runtime-specifier-aliases.ts +0 -135
- package/src/config/config-builder.test.ts +0 -442
- package/src/config/config-builder.ts +0 -737
- package/src/config/config-builder.typecheck.test.ts +0 -96
- package/src/dev/host-runtime.ts +0 -34
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/eco.browser.test.ts +0 -43
- package/src/eco/eco.browser.ts +0 -118
- package/src/eco/eco.test.ts +0 -654
- package/src/eco/eco.ts +0 -205
- package/src/eco/eco.types.ts +0 -221
- package/src/eco/eco.utils.test.ts +0 -219
- package/src/eco/eco.utils.ts +0 -5
- package/src/eco/global-injector-map.test.ts +0 -42
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.test.ts +0 -66
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.test.ts +0 -30
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.test.ts +0 -134
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -3
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/global/utils.test.ts +0 -12
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +0 -162
- package/src/hmr/hmr-strategy.test.ts +0 -124
- package/src/hmr/hmr-strategy.ts +0 -177
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -334
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -314
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -15
- package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
- package/src/integrations/ghtml/ghtml.constants.ts +0 -1
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
- package/src/plugins/alias-resolver-plugin.test.ts +0 -41
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.test.ts +0 -406
- package/src/plugins/eco-component-meta-plugin.ts +0 -494
- package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
- package/src/plugins/foreign-jsx-override-plugin.ts +0 -67
- package/src/plugins/integration-plugin.test.ts +0 -151
- package/src/plugins/integration-plugin.ts +0 -323
- package/src/plugins/processor.test.ts +0 -148
- package/src/plugins/processor.ts +0 -257
- package/src/plugins/source-transform.test.ts +0 -82
- package/src/plugins/source-transform.ts +0 -123
- package/src/route-renderer/orchestration/component-render-context.ts +0 -325
- package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -383
- package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2085
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -1244
- package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
- package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
- package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -25
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -324
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -294
- package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
- package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -644
- package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -265
- package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -592
- package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
- package/src/route-renderer/orchestration/template-serialization.ts +0 -117
- package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
- package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
- package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
- package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
- package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
- package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
- package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
- package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
- package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
- package/src/route-renderer/route-renderer.ts +0 -133
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.test.ts +0 -237
- package/src/router/client/navigation-coordinator.ts +0 -453
- package/src/router/server/route-registry.test.ts +0 -176
- package/src/router/server/route-registry.ts +0 -382
- package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -96
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
- package/src/services/assets/asset-processing-service/index.ts +0 -6
- package/src/services/assets/asset-processing-service/page-package.test.ts +0 -100
- package/src/services/assets/asset-processing-service/page-package.ts +0 -93
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -195
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -137
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -227
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -89
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
- package/src/services/assets/browser-bundle.service.test.ts +0 -66
- package/src/services/assets/browser-bundle.service.ts +0 -109
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.test.ts +0 -225
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.test.ts +0 -175
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
- package/src/services/html/html-rewriter-provider.service.ts +0 -104
- package/src/services/html/html-transformer.service.test.ts +0 -476
- package/src/services/html/html-transformer.service.ts +0 -275
- package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
- package/src/services/invalidation/development-invalidation.service.ts +0 -262
- package/src/services/module-loading/app-module-loader.service.ts +0 -9
- package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -130
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -141
- package/src/services/module-loading/host-module-loader-registry.ts +0 -15
- package/src/services/module-loading/node-bootstrap-plugin.test.ts +0 -335
- package/src/services/module-loading/node-bootstrap-plugin.ts +0 -311
- package/src/services/module-loading/page-module-import.service.test.ts +0 -504
- package/src/services/module-loading/page-module-import.service.ts +0 -251
- package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -243
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
- package/src/services/module-loading/source-module-support.ts +0 -19
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.test.ts +0 -223
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/static-site-generator/static-site-generator.test.ts +0 -408
- package/src/static-site-generator/static-site-generator.ts +0 -445
- package/src/types/internal-types.ts +0 -243
- package/src/types/public-types.ts +0 -1459
- package/src/utils/deep-merge.test.ts +0 -114
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html-escaping.ts +0 -9
- package/src/utils/invariant.test.ts +0 -22
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.test.ts +0 -69
- package/src/utils/parse-cli-args.ts +0 -105
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/path-utils.test.ts +0 -15
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/utils/server-utils.test.ts +0 -38
- package/src/watchers/project-watcher.integration.test.ts +0 -337
- package/src/watchers/project-watcher.test-helpers.ts +0 -42
- package/src/watchers/project-watcher.test.ts +0 -768
- package/src/watchers/project-watcher.ts +0 -357
- /package/src/utils/{html.ts → html.d.ts} +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./render-output.utils.js";
|
|
2
|
+
class ComponentRenderOutputRuntime {
|
|
3
|
+
finalizeComponentRender(component, content) {
|
|
4
|
+
const lazyTriggers = component.config?._resolvedLazyTriggers;
|
|
5
|
+
if (lazyTriggers && lazyTriggers.length > 0) {
|
|
6
|
+
return this.addTriggerToContent(content, lazyTriggers[0].triggerId);
|
|
7
|
+
}
|
|
8
|
+
const lazyGroups = component.config?._resolvedLazyScripts;
|
|
9
|
+
if (lazyGroups && lazyGroups.length > 0) {
|
|
10
|
+
return this.wrapContentWithScriptsInjector(content, lazyGroups);
|
|
11
|
+
}
|
|
12
|
+
return content;
|
|
13
|
+
}
|
|
14
|
+
addTriggerToContent(content, triggerId) {
|
|
15
|
+
if (isThenable(content)) {
|
|
16
|
+
return content.then((resolvedContent) => addTriggerAttribute(resolvedContent, triggerId));
|
|
17
|
+
}
|
|
18
|
+
return addTriggerAttribute(content, triggerId);
|
|
19
|
+
}
|
|
20
|
+
wrapContentWithScriptsInjector(content, lazyGroups) {
|
|
21
|
+
if (isThenable(content)) {
|
|
22
|
+
return content.then((resolvedContent) => wrapWithScriptsInjector(resolvedContent, lazyGroups));
|
|
23
|
+
}
|
|
24
|
+
return wrapWithScriptsInjector(content, lazyGroups);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
class ContextualComponentRenderRuntime extends ComponentRenderOutputRuntime {
|
|
28
|
+
context;
|
|
29
|
+
constructor(context) {
|
|
30
|
+
super();
|
|
31
|
+
this.context = context;
|
|
32
|
+
}
|
|
33
|
+
applyForeignChildInterceptionResult(result) {
|
|
34
|
+
if (result.kind === "resolved") {
|
|
35
|
+
return result.value;
|
|
36
|
+
}
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resolves one foreign-child interception through the active runtime.
|
|
41
|
+
*
|
|
42
|
+
* The runtime may choose inline rendering or immediate resolved output.
|
|
43
|
+
*/
|
|
44
|
+
interceptForeignChild(input) {
|
|
45
|
+
const foreignChildRuntimeInput = {
|
|
46
|
+
currentIntegration: this.context.currentIntegration,
|
|
47
|
+
targetIntegration: input.targetIntegration,
|
|
48
|
+
component: input.component,
|
|
49
|
+
props: input.props
|
|
50
|
+
};
|
|
51
|
+
const asyncInterception = this.context.foreignChildRuntime?.interceptForeignChild?.(foreignChildRuntimeInput);
|
|
52
|
+
if (asyncInterception !== void 0) {
|
|
53
|
+
if (isThenable(asyncInterception)) {
|
|
54
|
+
return asyncInterception.then((result) => this.applyForeignChildInterceptionResult(result));
|
|
55
|
+
}
|
|
56
|
+
return this.applyForeignChildInterceptionResult(asyncInterception);
|
|
57
|
+
}
|
|
58
|
+
const syncInterception = this.context.foreignChildRuntime?.interceptForeignChildSync?.(foreignChildRuntimeInput);
|
|
59
|
+
if (syncInterception === void 0) {
|
|
60
|
+
return void 0;
|
|
61
|
+
}
|
|
62
|
+
return this.applyForeignChildInterceptionResult(syncInterception);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY = "__ECOPAGES_COMPONENT_RENDER_CONTEXT_STATE__";
|
|
66
|
+
function getSharedContextScope() {
|
|
67
|
+
const globalProcess = globalThis.process;
|
|
68
|
+
if (globalProcess && typeof globalProcess === "object") {
|
|
69
|
+
return globalProcess;
|
|
70
|
+
}
|
|
71
|
+
return globalThis;
|
|
72
|
+
}
|
|
73
|
+
function getComponentRenderContextState() {
|
|
74
|
+
const sharedScope = getSharedContextScope();
|
|
75
|
+
sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY] ??= {
|
|
76
|
+
contextStack: [],
|
|
77
|
+
nodeContextStorage: null,
|
|
78
|
+
nodeContextStorageLoader: null
|
|
79
|
+
};
|
|
80
|
+
return sharedScope[GLOBAL_COMPONENT_RENDER_CONTEXT_STATE_KEY];
|
|
81
|
+
}
|
|
82
|
+
async function getContextStorage() {
|
|
83
|
+
const state = getComponentRenderContextState();
|
|
84
|
+
if (state.nodeContextStorage) {
|
|
85
|
+
return state.nodeContextStorage;
|
|
86
|
+
}
|
|
87
|
+
if (state.nodeContextStorageLoader) {
|
|
88
|
+
return state.nodeContextStorageLoader;
|
|
89
|
+
}
|
|
90
|
+
state.nodeContextStorageLoader = import("node:async_hooks").then((module) => {
|
|
91
|
+
const storage = new module.AsyncLocalStorage();
|
|
92
|
+
state.nodeContextStorage = {
|
|
93
|
+
getStore: () => storage.getStore(),
|
|
94
|
+
run: (store, callback) => storage.run(store, callback)
|
|
95
|
+
};
|
|
96
|
+
return state.nodeContextStorage;
|
|
97
|
+
}).catch(() => {
|
|
98
|
+
state.nodeContextStorage = null;
|
|
99
|
+
return null;
|
|
100
|
+
}).finally(() => {
|
|
101
|
+
state.nodeContextStorageLoader = null;
|
|
102
|
+
});
|
|
103
|
+
return state.nodeContextStorageLoader;
|
|
104
|
+
}
|
|
105
|
+
function getComponentRenderContext() {
|
|
106
|
+
const state = getComponentRenderContextState();
|
|
107
|
+
return state.nodeContextStorage?.getStore() ?? state.contextStack[state.contextStack.length - 1];
|
|
108
|
+
}
|
|
109
|
+
const componentRenderOutputRuntime = new ComponentRenderOutputRuntime();
|
|
110
|
+
function interceptForeignChild(input) {
|
|
111
|
+
return getComponentRenderContext()?.interceptForeignChild(input);
|
|
112
|
+
}
|
|
113
|
+
function finalizeComponentRender(component, content) {
|
|
114
|
+
const renderContext = getComponentRenderContext();
|
|
115
|
+
return renderContext?.finalizeComponentRender(component, content) ?? componentRenderOutputRuntime.finalizeComponentRender(component, content);
|
|
116
|
+
}
|
|
117
|
+
async function runWithComponentRenderContext(input, render) {
|
|
118
|
+
const context = {
|
|
119
|
+
currentIntegration: input.currentIntegration,
|
|
120
|
+
foreignChildRuntime: input.foreignChildRuntime
|
|
121
|
+
};
|
|
122
|
+
const runtime = new ContextualComponentRenderRuntime(context);
|
|
123
|
+
context.interceptForeignChild = (deferredInput) => runtime.interceptForeignChild(deferredInput);
|
|
124
|
+
context.finalizeComponentRender = (component, content) => runtime.finalizeComponentRender(component, content);
|
|
125
|
+
const storage = await getContextStorage();
|
|
126
|
+
let value;
|
|
127
|
+
if (storage) {
|
|
128
|
+
value = await storage.run(context, render);
|
|
129
|
+
} else {
|
|
130
|
+
const state = getComponentRenderContextState();
|
|
131
|
+
state.contextStack.push(context);
|
|
132
|
+
try {
|
|
133
|
+
value = await render();
|
|
134
|
+
} finally {
|
|
135
|
+
state.contextStack.pop();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
value
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
finalizeComponentRender,
|
|
144
|
+
getComponentRenderContext,
|
|
145
|
+
interceptForeignChild,
|
|
146
|
+
runWithComponentRenderContext
|
|
147
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EcoComponent, OwnershipPlanNodeSource } from '../../types/public-types.js';
|
|
2
|
+
export type DeclaredOwnershipRoot = {
|
|
3
|
+
component: EcoComponent;
|
|
4
|
+
source: Extract<OwnershipPlanNodeSource, 'page' | 'layout' | 'html-template'>;
|
|
5
|
+
};
|
|
6
|
+
export type DeclaredOwnershipNodeInput = {
|
|
7
|
+
component: EcoComponent;
|
|
8
|
+
source: Exclude<OwnershipPlanNodeSource, 'route'>;
|
|
9
|
+
parentIntegrationName: string;
|
|
10
|
+
integrationName: string;
|
|
11
|
+
componentId: string;
|
|
12
|
+
isForeignToParent: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function mapDeclaredOwnershipGraph<T>(input: {
|
|
15
|
+
roots: DeclaredOwnershipRoot[];
|
|
16
|
+
currentIntegrationName: string;
|
|
17
|
+
mapNode: (node: DeclaredOwnershipNodeInput, children: T[]) => T;
|
|
18
|
+
}): T[];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
function mapDeclaredOwnershipGraph(input) {
|
|
2
|
+
let nextSyntheticId = 0;
|
|
3
|
+
const mapComponent = (component, source, parentIntegrationName, lineage) => {
|
|
4
|
+
const integrationName = component.config?.integration ?? component.config?.__eco?.integration ?? parentIntegrationName;
|
|
5
|
+
const componentMeta = component.config?.__eco;
|
|
6
|
+
const isForeignToParent = integrationName !== parentIntegrationName;
|
|
7
|
+
const componentId = componentMeta?.id ?? componentMeta?.file ?? `${source}:${nextSyntheticId += 1}`;
|
|
8
|
+
const nextLineage = new Set(lineage);
|
|
9
|
+
nextLineage.add(component);
|
|
10
|
+
const children = (component.config?.dependencies?.components ?? []).flatMap((child) => {
|
|
11
|
+
if (!child || nextLineage.has(child)) {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return [mapComponent(child, "dependency", integrationName, nextLineage)];
|
|
15
|
+
});
|
|
16
|
+
return input.mapNode(
|
|
17
|
+
{
|
|
18
|
+
component,
|
|
19
|
+
source,
|
|
20
|
+
parentIntegrationName,
|
|
21
|
+
integrationName,
|
|
22
|
+
componentId,
|
|
23
|
+
isForeignToParent
|
|
24
|
+
},
|
|
25
|
+
children
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
return input.roots.map(
|
|
29
|
+
({ component, source }) => mapComponent(component, source, input.currentIntegrationName, /* @__PURE__ */ new Set())
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
mapDeclaredOwnershipGraph
|
|
34
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
import { type ForeignChildRuntime } from './component-render-context.js';
|
|
4
|
+
import { QueuedForeignSubtreeResolutionService, type QueuedForeignSubtreeResolution, type QueuedForeignSubtreeResolutionContext } from './queued-foreign-subtree-resolution.service.js';
|
|
5
|
+
export interface ForeignSubtreeExecutionOwningRenderer {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
renderComponentWithForeignChildren(input: ComponentRenderInput): Promise<ComponentRenderResult>;
|
|
8
|
+
renderForeignSubtree(input: ComponentRenderInput): Promise<ForeignSubtreeRenderPayload>;
|
|
9
|
+
}
|
|
10
|
+
export interface ForeignSubtreeExecutionDecisionInput {
|
|
11
|
+
currentIntegration: string;
|
|
12
|
+
targetIntegration?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ForeignSubtreeExecutionRenderOptions {
|
|
15
|
+
currentIntegrationName: string;
|
|
16
|
+
input: ComponentRenderInput;
|
|
17
|
+
renderComponent(input: ComponentRenderInput): Promise<ComponentRenderResult>;
|
|
18
|
+
normalizeComponentRenderOutput(result: ComponentRenderResult): ComponentRenderResult;
|
|
19
|
+
hasForeignChildDescendants(component: EcoComponent): boolean;
|
|
20
|
+
createForeignChildRuntime(options: {
|
|
21
|
+
renderInput: ComponentRenderInput;
|
|
22
|
+
rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
|
|
23
|
+
}): ForeignChildRuntime;
|
|
24
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
|
|
25
|
+
}
|
|
26
|
+
export interface ForeignSubtreeQueuedRuntimeOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
|
|
27
|
+
renderInput: ComponentRenderInput;
|
|
28
|
+
rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>;
|
|
29
|
+
runtimeContextKey: string;
|
|
30
|
+
tokenPrefix: string;
|
|
31
|
+
createRuntimeContext?: (integrationContext: BaseIntegrationContext & Record<string, unknown>, rendererCache: Map<string, unknown>) => TContext;
|
|
32
|
+
}
|
|
33
|
+
export interface ForeignSubtreeStringQueuedHtmlOptions {
|
|
34
|
+
currentIntegrationName: string;
|
|
35
|
+
renderInput: ComponentRenderInput;
|
|
36
|
+
html: string;
|
|
37
|
+
runtimeContextKey: string;
|
|
38
|
+
queueLabel: string;
|
|
39
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
|
|
40
|
+
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
41
|
+
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
42
|
+
}
|
|
43
|
+
export interface ForeignSubtreeQueuedHtmlOptions<TContext extends QueuedForeignSubtreeResolutionContext> {
|
|
44
|
+
currentIntegrationName: string;
|
|
45
|
+
html: string;
|
|
46
|
+
runtimeContext?: TContext;
|
|
47
|
+
queueLabel: string;
|
|
48
|
+
renderQueuedChildren(children: unknown, runtimeContext: TContext, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<{
|
|
49
|
+
assets: ProcessedAsset[];
|
|
50
|
+
html?: string;
|
|
51
|
+
}>;
|
|
52
|
+
getOwningRenderer(integrationName: string, rendererCache: Map<string, ForeignSubtreeExecutionOwningRenderer>): ForeignSubtreeExecutionOwningRenderer;
|
|
53
|
+
applyAttributesToFirstElement(html: string, attributes: Record<string, string>): string;
|
|
54
|
+
dedupeProcessedAssets(assets: ProcessedAsset[]): ProcessedAsset[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Executes one component render tree under Foreign Child support.
|
|
58
|
+
*
|
|
59
|
+
* This service owns the execution policy for mixed-integration component trees:
|
|
60
|
+
* it decides when a child stays inline, when it must delegate to an owning
|
|
61
|
+
* renderer, how one render-pass renderer cache is reused, and how queued
|
|
62
|
+
* Foreign Subtree tokens resolve back into final HTML.
|
|
63
|
+
*/
|
|
64
|
+
export declare class ForeignSubtreeExecutionService {
|
|
65
|
+
private readonly queuedForeignSubtreeResolutionService;
|
|
66
|
+
constructor(queuedForeignSubtreeResolutionService?: QueuedForeignSubtreeResolutionService);
|
|
67
|
+
/**
|
|
68
|
+
* Returns whether the current render pass must hand the child off to a foreign owner.
|
|
69
|
+
*/
|
|
70
|
+
shouldDelegateForeignChild(input: ForeignSubtreeExecutionDecisionInput): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Creates the base runtime used when a renderer has not supplied its own queueing runtime.
|
|
73
|
+
*
|
|
74
|
+
* The runtime allows same-integration children to continue inline and fails fast
|
|
75
|
+
* when execution crosses into a foreign owner without a renderer-owned handoff.
|
|
76
|
+
*/
|
|
77
|
+
createFailFastRuntime(rendererName: string): ForeignChildRuntime;
|
|
78
|
+
getQueuedRuntimeContext<TContext extends QueuedForeignSubtreeResolutionContext>(input: ComponentRenderInput, runtimeContextKey: string): TContext | undefined;
|
|
79
|
+
createQueuedRuntime<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeQueuedRuntimeOptions<TContext>): ForeignChildRuntime;
|
|
80
|
+
/**
|
|
81
|
+
* Resolves a string-first renderer HTML fragment that may contain queued Foreign Subtree tokens.
|
|
82
|
+
*/
|
|
83
|
+
resolveStringQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeStringQueuedHtmlOptions): Promise<{
|
|
84
|
+
assets: ProcessedAsset[];
|
|
85
|
+
html: string;
|
|
86
|
+
}>;
|
|
87
|
+
resolveQueuedHtml<TContext extends QueuedForeignSubtreeResolutionContext>(options: ForeignSubtreeQueuedHtmlOptions<TContext>): Promise<{
|
|
88
|
+
assets: ProcessedAsset[];
|
|
89
|
+
html: string;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* Executes one component render with Foreign Child support under the current integration.
|
|
93
|
+
*/
|
|
94
|
+
executeComponentRender(options: ForeignSubtreeExecutionRenderOptions): Promise<ComponentRenderResult>;
|
|
95
|
+
private getRendererCache;
|
|
96
|
+
private withRendererCache;
|
|
97
|
+
/**
|
|
98
|
+
* Returns the delegatable owning renderer integration for one component.
|
|
99
|
+
*
|
|
100
|
+
* The pseudo `html` integration marks document-shell ownership only and does
|
|
101
|
+
* not participate in component-level foreign subtree execution.
|
|
102
|
+
*/
|
|
103
|
+
private getForeignOwnerIntegrationName;
|
|
104
|
+
private resolveForeignChildInOwningRenderer;
|
|
105
|
+
private resolveForeignSubtreeInOwningRenderer;
|
|
106
|
+
private runInForeignOwningRenderer;
|
|
107
|
+
resolveQueuedTokens(html: string, queuedResolutionsByToken: Map<string, QueuedForeignSubtreeResolution>, resolveToken: (token: string) => Promise<string>): Promise<string>;
|
|
108
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getComponentRenderContext,
|
|
3
|
+
runWithComponentRenderContext
|
|
4
|
+
} from "./component-render-context.js";
|
|
5
|
+
import {
|
|
6
|
+
QueuedForeignSubtreeResolutionService
|
|
7
|
+
} from "./queued-foreign-subtree-resolution.service.js";
|
|
8
|
+
class ForeignSubtreeExecutionService {
|
|
9
|
+
queuedForeignSubtreeResolutionService;
|
|
10
|
+
constructor(queuedForeignSubtreeResolutionService = new QueuedForeignSubtreeResolutionService()) {
|
|
11
|
+
this.queuedForeignSubtreeResolutionService = queuedForeignSubtreeResolutionService;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns whether the current render pass must hand the child off to a foreign owner.
|
|
15
|
+
*/
|
|
16
|
+
shouldDelegateForeignChild(input) {
|
|
17
|
+
return !!input.targetIntegration && input.targetIntegration !== input.currentIntegration;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates the base runtime used when a renderer has not supplied its own queueing runtime.
|
|
21
|
+
*
|
|
22
|
+
* The runtime allows same-integration children to continue inline and fails fast
|
|
23
|
+
* when execution crosses into a foreign owner without a renderer-owned handoff.
|
|
24
|
+
*/
|
|
25
|
+
createFailFastRuntime(rendererName) {
|
|
26
|
+
const interceptForeignChild = (input) => {
|
|
27
|
+
if (!this.shouldDelegateForeignChild(input)) {
|
|
28
|
+
return { kind: "inline" };
|
|
29
|
+
}
|
|
30
|
+
throw new Error(
|
|
31
|
+
`[ecopages] ${rendererName} renderer crossed into ${input.targetIntegration} without a renderer-owned foreign-child runtime. Override createForeignChildRuntime() to resolve foreign children inside the owning renderer.`
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
interceptForeignChild,
|
|
36
|
+
interceptForeignChildSync: interceptForeignChild
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
getQueuedRuntimeContext(input, runtimeContextKey) {
|
|
40
|
+
return this.queuedForeignSubtreeResolutionService.getRuntimeContext(input, runtimeContextKey);
|
|
41
|
+
}
|
|
42
|
+
createQueuedRuntime(options) {
|
|
43
|
+
return this.queuedForeignSubtreeResolutionService.createRuntime({
|
|
44
|
+
renderInput: options.renderInput,
|
|
45
|
+
rendererCache: options.rendererCache,
|
|
46
|
+
runtimeContextKey: options.runtimeContextKey,
|
|
47
|
+
tokenPrefix: options.tokenPrefix,
|
|
48
|
+
shouldQueueForeignChild: (input) => this.shouldDelegateForeignChild(input),
|
|
49
|
+
createRuntimeContext: options.createRuntimeContext
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolves a string-first renderer HTML fragment that may contain queued Foreign Subtree tokens.
|
|
54
|
+
*/
|
|
55
|
+
async resolveStringQueuedHtml(options) {
|
|
56
|
+
const runtimeContext = this.getQueuedRuntimeContext(options.renderInput, options.runtimeContextKey);
|
|
57
|
+
return this.resolveQueuedHtml({
|
|
58
|
+
currentIntegrationName: options.currentIntegrationName,
|
|
59
|
+
html: options.html,
|
|
60
|
+
runtimeContext,
|
|
61
|
+
queueLabel: options.queueLabel,
|
|
62
|
+
renderQueuedChildren: async (children, _runtimeContext, queuedResolutionsByToken, resolveToken) => {
|
|
63
|
+
if (children === void 0) {
|
|
64
|
+
return { assets: [], html: void 0 };
|
|
65
|
+
}
|
|
66
|
+
const html = await this.resolveQueuedTokens(
|
|
67
|
+
typeof children === "string" ? children : String(children ?? ""),
|
|
68
|
+
queuedResolutionsByToken,
|
|
69
|
+
resolveToken
|
|
70
|
+
);
|
|
71
|
+
return { assets: [], html };
|
|
72
|
+
},
|
|
73
|
+
getOwningRenderer: options.getOwningRenderer,
|
|
74
|
+
applyAttributesToFirstElement: options.applyAttributesToFirstElement,
|
|
75
|
+
dedupeProcessedAssets: options.dedupeProcessedAssets
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async resolveQueuedHtml(options) {
|
|
79
|
+
return this.queuedForeignSubtreeResolutionService.resolveQueuedHtml({
|
|
80
|
+
html: options.html,
|
|
81
|
+
runtimeContext: options.runtimeContext,
|
|
82
|
+
queueLabel: options.queueLabel,
|
|
83
|
+
renderQueuedChildren: options.renderQueuedChildren,
|
|
84
|
+
resolveForeignSubtree: (input, rendererCache) => this.resolveForeignSubtreeInOwningRenderer({
|
|
85
|
+
currentIntegrationName: options.currentIntegrationName,
|
|
86
|
+
input,
|
|
87
|
+
rendererCache,
|
|
88
|
+
getOwningRenderer: options.getOwningRenderer
|
|
89
|
+
}),
|
|
90
|
+
applyAttributesToFirstElement: options.applyAttributesToFirstElement,
|
|
91
|
+
dedupeProcessedAssets: options.dedupeProcessedAssets
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Executes one component render with Foreign Child support under the current integration.
|
|
96
|
+
*/
|
|
97
|
+
async executeComponentRender(options) {
|
|
98
|
+
const rendererCache = this.getRendererCache(options.input.integrationContext) ?? /* @__PURE__ */ new Map();
|
|
99
|
+
const delegatedForeignChildRender = await this.resolveForeignChildInOwningRenderer({
|
|
100
|
+
currentIntegrationName: options.currentIntegrationName,
|
|
101
|
+
input: options.input,
|
|
102
|
+
rendererCache,
|
|
103
|
+
getOwningRenderer: options.getOwningRenderer
|
|
104
|
+
});
|
|
105
|
+
if (delegatedForeignChildRender) {
|
|
106
|
+
return delegatedForeignChildRender;
|
|
107
|
+
}
|
|
108
|
+
const hasForeignChildren = options.hasForeignChildDescendants(options.input.component);
|
|
109
|
+
const activeRenderContext = getComponentRenderContext();
|
|
110
|
+
if (!hasForeignChildren) {
|
|
111
|
+
if (!activeRenderContext || activeRenderContext.currentIntegration === options.currentIntegrationName) {
|
|
112
|
+
return options.normalizeComponentRenderOutput(await options.renderComponent(options.input));
|
|
113
|
+
}
|
|
114
|
+
const sameIntegrationExecution = await runWithComponentRenderContext(
|
|
115
|
+
{
|
|
116
|
+
currentIntegration: options.currentIntegrationName
|
|
117
|
+
},
|
|
118
|
+
async () => options.renderComponent(options.input)
|
|
119
|
+
);
|
|
120
|
+
return options.normalizeComponentRenderOutput(sameIntegrationExecution.value);
|
|
121
|
+
}
|
|
122
|
+
const execution = await runWithComponentRenderContext(
|
|
123
|
+
{
|
|
124
|
+
currentIntegration: options.currentIntegrationName,
|
|
125
|
+
foreignChildRuntime: options.createForeignChildRuntime({
|
|
126
|
+
renderInput: options.input,
|
|
127
|
+
rendererCache
|
|
128
|
+
})
|
|
129
|
+
},
|
|
130
|
+
async () => options.renderComponent(options.input)
|
|
131
|
+
);
|
|
132
|
+
return options.normalizeComponentRenderOutput(execution.value);
|
|
133
|
+
}
|
|
134
|
+
getRendererCache(integrationContext) {
|
|
135
|
+
if (integrationContext?.rendererCache instanceof Map) {
|
|
136
|
+
return integrationContext.rendererCache;
|
|
137
|
+
}
|
|
138
|
+
return void 0;
|
|
139
|
+
}
|
|
140
|
+
withRendererCache(input, rendererCache) {
|
|
141
|
+
const integrationContext = input.integrationContext;
|
|
142
|
+
const sharedRendererCache = rendererCache;
|
|
143
|
+
return {
|
|
144
|
+
...input,
|
|
145
|
+
integrationContext: integrationContext ? { ...integrationContext, rendererCache: sharedRendererCache } : { rendererCache: sharedRendererCache }
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Returns the delegatable owning renderer integration for one component.
|
|
150
|
+
*
|
|
151
|
+
* The pseudo `html` integration marks document-shell ownership only and does
|
|
152
|
+
* not participate in component-level foreign subtree execution.
|
|
153
|
+
*/
|
|
154
|
+
getForeignOwnerIntegrationName(component, currentIntegrationName) {
|
|
155
|
+
const integrationName = component.config?.integration ?? component.config?.__eco?.integration;
|
|
156
|
+
if (!integrationName || integrationName === "html" || integrationName === currentIntegrationName) {
|
|
157
|
+
return void 0;
|
|
158
|
+
}
|
|
159
|
+
return integrationName;
|
|
160
|
+
}
|
|
161
|
+
async resolveForeignChildInOwningRenderer(options) {
|
|
162
|
+
return await this.runInForeignOwningRenderer({
|
|
163
|
+
currentIntegrationName: options.currentIntegrationName,
|
|
164
|
+
input: options.input,
|
|
165
|
+
rendererCache: options.rendererCache,
|
|
166
|
+
getOwningRenderer: options.getOwningRenderer,
|
|
167
|
+
run: (owningRenderer, delegatedInput) => owningRenderer.renderComponentWithForeignChildren(delegatedInput)
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async resolveForeignSubtreeInOwningRenderer(options) {
|
|
171
|
+
return await this.runInForeignOwningRenderer({
|
|
172
|
+
currentIntegrationName: options.currentIntegrationName,
|
|
173
|
+
input: options.input,
|
|
174
|
+
rendererCache: options.rendererCache,
|
|
175
|
+
getOwningRenderer: options.getOwningRenderer,
|
|
176
|
+
run: (owningRenderer, delegatedInput) => owningRenderer.renderForeignSubtree(delegatedInput)
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
async runInForeignOwningRenderer(options) {
|
|
180
|
+
const foreignOwnerIntegrationName = this.getForeignOwnerIntegrationName(
|
|
181
|
+
options.input.component,
|
|
182
|
+
options.currentIntegrationName
|
|
183
|
+
);
|
|
184
|
+
if (!foreignOwnerIntegrationName) {
|
|
185
|
+
return void 0;
|
|
186
|
+
}
|
|
187
|
+
const owningRenderer = options.getOwningRenderer(foreignOwnerIntegrationName, options.rendererCache);
|
|
188
|
+
if (owningRenderer.name === options.currentIntegrationName) {
|
|
189
|
+
return void 0;
|
|
190
|
+
}
|
|
191
|
+
return await options.run(owningRenderer, this.withRendererCache(options.input, options.rendererCache));
|
|
192
|
+
}
|
|
193
|
+
async resolveQueuedTokens(html, queuedResolutionsByToken, resolveToken) {
|
|
194
|
+
let resolvedHtml = html;
|
|
195
|
+
for (const token of queuedResolutionsByToken.keys()) {
|
|
196
|
+
if (!resolvedHtml.includes(token)) {
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
resolvedHtml = resolvedHtml.split(token).join(await resolveToken(token));
|
|
200
|
+
}
|
|
201
|
+
return resolvedHtml;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
export {
|
|
205
|
+
ForeignSubtreeExecutionService
|
|
206
|
+
};
|