@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.51
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 +267 -14
- package/package.json +98 -108
- package/src/adapters/README.md +39 -0
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +30 -62
- package/src/adapters/bun/hmr-manager.js +30 -194
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +93 -32
- package/src/adapters/bun/server-adapter.js +166 -89
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +2 -6
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +38 -48
- package/src/adapters/node/node-hmr-manager.js +31 -203
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +20 -72
- package/src/adapters/node/server-adapter.js +98 -203
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
- 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 +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
- package/src/adapters/shared/fs-server-response-matcher.js +76 -45
- 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 +33 -0
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +27 -3
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +33 -12
- package/src/adapters/shared/server-adapter.js +215 -132
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +7 -16
- package/src/adapters/shared/server-static-builder.d.ts +41 -8
- package/src/adapters/shared/server-static-builder.js +65 -11
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +240 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +107 -0
- package/src/build/browser-runtime-import-rewrite-plugin.d.ts +26 -0
- package/src/build/browser-runtime-import-rewrite-plugin.js +162 -0
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/build-adapter.d.ts +175 -3
- package/src/build/build-adapter.js +633 -16
- package/src/build/build-manifest.d.ts +33 -0
- package/src/build/build-manifest.js +52 -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 +16 -6
- package/src/build/esbuild-build-adapter.js +205 -75
- 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 +31 -0
- package/src/config/README.md +36 -0
- package/src/config/config-builder.d.ts +54 -29
- package/src/config/config-builder.js +256 -50
- package/src/{constants.d.ts → config/constants.d.ts} +13 -0
- package/src/{constants.js → config/constants.js} +4 -0
- package/src/declarations.d.ts +19 -14
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/README.md +70 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +63 -54
- package/src/eco/eco.types.d.ts +69 -6
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +38 -7
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- 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.js +26 -33
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +40 -42
- package/src/hmr/strategies/js-hmr-strategy.js +24 -43
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.js +16 -5
- package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
- package/src/integrations/ghtml/ghtml-renderer.js +27 -30
- 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 +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +35 -0
- package/src/plugins/alias-resolver-plugin.d.ts +1 -0
- package/src/plugins/alias-resolver-plugin.js +27 -5
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +42 -24
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +157 -29
- package/src/plugins/integration-plugin.js +115 -14
- package/src/plugins/processor.d.ts +17 -2
- package/src/plugins/processor.js +22 -3
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +83 -325
- package/src/route-renderer/README.md +73 -90
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -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 +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +991 -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 +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -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 +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -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/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- 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-module-loader.js → page-loading/page-module-loader.js} +39 -14
- package/src/route-renderer/route-renderer.d.ts +57 -14
- package/src/route-renderer/route-renderer.js +30 -18
- package/src/router/README.md +94 -0
- package/src/router/client/link-intent.d.ts +53 -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/README.md +28 -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/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
- 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 +57 -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 +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
- 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/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
- 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/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
- package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
- package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -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 +151 -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.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +38 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +215 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +191 -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/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.d.ts +67 -20
- package/src/static-site-generator/static-site-generator.js +182 -138
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +239 -31
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/watchers/project-watcher.d.ts +11 -7
- package/src/watchers/project-watcher.js +69 -75
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +6 -5
- package/CHANGELOG.md +0 -94
- package/src/adapters/abstract/application-adapter.ts +0 -337
- 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 -189
- package/src/adapters/bun/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.ts +0 -276
- package/src/adapters/bun/index.ts +0 -3
- package/src/adapters/bun/server-adapter.ts +0 -492
- package/src/adapters/bun/server-lifecycle.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- package/src/adapters/bun/server-lifecycle.ts +0 -154
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/index.ts +0 -9
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -271
- package/src/adapters/node/server-adapter.ts +0 -561
- package/src/adapters/node/static-content-server.ts +0 -203
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
- package/src/adapters/shared/render-context.ts +0 -105
- package/src/adapters/shared/server-adapter.ts +0 -442
- package/src/adapters/shared/server-route-handler.ts +0 -166
- package/src/adapters/shared/server-static-builder.ts +0 -82
- package/src/build/build-adapter.ts +0 -133
- package/src/build/build-types.ts +0 -83
- package/src/build/esbuild-build-adapter.ts +0 -511
- package/src/config/config-builder.ts +0 -474
- package/src/constants.ts +0 -39
- package/src/create-app.ts +0 -87
- package/src/define-api-handler.js +0 -15
- package/src/define-api-handler.ts +0 -66
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -77
- package/src/eco/component-render-context.ts +0 -202
- package/src/eco/eco.ts +0 -221
- package/src/eco/eco.types.ts +0 -202
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -121
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.test.e2e.ts +0 -75
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -327
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -212
- package/src/plugins/alias-resolver-plugin.ts +0 -45
- package/src/plugins/eco-component-meta-plugin.ts +0 -474
- package/src/plugins/integration-plugin.ts +0 -184
- package/src/plugins/processor.ts +0 -220
- package/src/public-types.ts +0 -1255
- package/src/route-renderer/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.js +0 -428
- package/src/route-renderer/dependency-resolver.ts +0 -596
- package/src/route-renderer/html-post-processing.service.d.ts +0 -40
- package/src/route-renderer/html-post-processing.service.js +0 -86
- package/src/route-renderer/html-post-processing.service.ts +0 -103
- package/src/route-renderer/integration-renderer.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/integration-renderer.ts +0 -696
- package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/marker-graph-resolver.ts +0 -153
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.ts +0 -153
- package/src/route-renderer/render-execution.service.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- package/src/route-renderer/render-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/router/fs-router.ts +0 -122
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
- package/src/services/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/asset-processing-service/assets.types.ts +0 -112
- package/src/services/asset-processing-service/index.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- package/src/services/asset-processing-service/index.ts +0 -3
- package/src/services/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
- package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
- package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
- package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
- package/src/services/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/index.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
- package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/html-transformer.service.d.ts +0 -50
- package/src/services/html-transformer.service.js +0 -163
- package/src/services/html-transformer.service.ts +0 -217
- package/src/services/page-module-import.service.d.ts +0 -37
- package/src/services/page-module-import.service.js +0 -88
- package/src/services/page-module-import.service.ts +0 -129
- package/src/services/page-request-cache-coordinator.service.ts +0 -128
- package/src/services/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -359
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -40
- package/src/watchers/project-watcher.ts +0 -364
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
+
function normalizeTransformId(id) {
|
|
4
|
+
const queryIndex = id.indexOf("?");
|
|
5
|
+
const hashIndex = id.indexOf("#");
|
|
6
|
+
const endIndex = [queryIndex, hashIndex].filter((index) => index >= 0).sort((left, right) => left - right)[0];
|
|
7
|
+
return endIndex === void 0 ? id : id.slice(0, endIndex);
|
|
8
|
+
}
|
|
9
|
+
function applySourceTransform(transform, code, id) {
|
|
10
|
+
const normalizedId = normalizeTransformId(id);
|
|
11
|
+
if (!transform.filter.test(normalizedId)) {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
return transform.transform(code, normalizedId);
|
|
15
|
+
}
|
|
16
|
+
function inferLoaderFromPath(filePath) {
|
|
17
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
18
|
+
switch (extension) {
|
|
19
|
+
case ".ts":
|
|
20
|
+
return "ts";
|
|
21
|
+
case ".tsx":
|
|
22
|
+
return "tsx";
|
|
23
|
+
case ".jsx":
|
|
24
|
+
return "jsx";
|
|
25
|
+
default:
|
|
26
|
+
return "js";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function createEcoBuildPluginFromSourceTransform(transform) {
|
|
30
|
+
return {
|
|
31
|
+
name: transform.name,
|
|
32
|
+
setup(build) {
|
|
33
|
+
build.onLoad({ filter: transform.filter }, (args) => {
|
|
34
|
+
const filePath = normalizeTransformId(args.path);
|
|
35
|
+
const code = fileSystem.readFileSync(filePath);
|
|
36
|
+
const result = applySourceTransform(transform, code, filePath);
|
|
37
|
+
if (!result) {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
contents: typeof result === "string" ? result : result.code,
|
|
42
|
+
loader: inferLoaderFromPath(filePath),
|
|
43
|
+
resolveDir: path.dirname(filePath)
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createVitePluginFromSourceTransform(transform) {
|
|
50
|
+
return {
|
|
51
|
+
name: transform.name,
|
|
52
|
+
enforce: transform.enforce,
|
|
53
|
+
transform(code, id) {
|
|
54
|
+
return applySourceTransform(transform, code, id);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function getAppSourceTransforms(appConfig) {
|
|
59
|
+
return Array.from(appConfig.sourceTransforms.values());
|
|
60
|
+
}
|
|
61
|
+
function createVitePluginsFromAppSourceTransforms(appConfig) {
|
|
62
|
+
return getAppSourceTransforms(appConfig).map((transform) => createVitePluginFromSourceTransform(transform));
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
applySourceTransform,
|
|
66
|
+
createEcoBuildPluginFromSourceTransform,
|
|
67
|
+
createVitePluginFromSourceTransform,
|
|
68
|
+
createVitePluginsFromAppSourceTransforms,
|
|
69
|
+
getAppSourceTransforms,
|
|
70
|
+
normalizeTransformId
|
|
71
|
+
};
|
|
@@ -1,40 +1,16 @@
|
|
|
1
1
|
# Rendering Logic Graph
|
|
2
2
|
|
|
3
|
-
This document maps the
|
|
3
|
+
This document maps the rendering logic in core using the ownership, foreign-child, and foreign-subtree model.
|
|
4
4
|
|
|
5
5
|
## Design Principles
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- Rendering entry points stay separate, but they converge on the same integration renderer contracts.
|
|
8
|
+
- Integration selection happens outside the renderer. Once selected, the integration renderer owns the render pipeline.
|
|
9
|
+
- Ownership is preparation-time metadata. Runtime handoff still happens inside renderer-owned foreign-child interception.
|
|
10
|
+
- Route-level fallback resolution is gone. Unresolved `<eco-marker>` artifacts are now a failure signal.
|
|
11
|
+
- Asset emission converges into one final HTML transformation step.
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
Request-time page rendering, explicit view rendering, and static generation all eventually depend on the same integration renderer behavior.
|
|
11
|
-
- **Integration choice should remain a boundary concern.**
|
|
12
|
-
Adapters and route matchers decide which renderer to use; once selected, the integration renderer owns the page render pipeline.
|
|
13
|
-
- **Data resolution should happen before HTML transformation.**
|
|
14
|
-
Static props, metadata, dependency processing, and route assets are all upstream of final HTML injection.
|
|
15
|
-
- **Marker graph orchestration should be a post-render reconciliation step.**
|
|
16
|
-
The initial integration render may emit deferred component markers; those are resolved after the first HTML pass, not during route matching.
|
|
17
|
-
- **Marker emission is integration-defined boundary behavior.**
|
|
18
|
-
Markers are emitted when the active render boundary policy decides a component boundary must be deferred. If no `eco-marker` tokens are emitted, the marker graph stage is skipped entirely.
|
|
19
|
-
- **The marker pipeline remains generic after emission.**
|
|
20
|
-
Once markers exist, core resolves them generically through marker graph extraction, integration renderer dispatch, asset collection, and HTML replacement. The current built-in React integration is one concrete consumer of that mechanism.
|
|
21
|
-
- **Caching policy is authoritative at the page layer.**
|
|
22
|
-
Middleware, locals, and response reuse all depend on the effective page cache strategy.
|
|
23
|
-
- **Asset emission should converge into one injection stage.**
|
|
24
|
-
Route-level assets, integration assets, page-root component assets, and marker-generated assets all end up in the HTML transformer.
|
|
25
|
-
|
|
26
|
-
## Entry Points
|
|
27
|
-
|
|
28
|
-
There are three main rendering entry points:
|
|
29
|
-
|
|
30
|
-
1. **Runtime request rendering**
|
|
31
|
-
- handled through the server adapters and file-system route matching
|
|
32
|
-
2. **Explicit rendering APIs**
|
|
33
|
-
- handled through `renderToResponse()` and route-handler render context helpers
|
|
34
|
-
3. **Static site generation**
|
|
35
|
-
- handled through explicit route generation and route renderer reuse at build time
|
|
36
|
-
|
|
37
|
-
## 1) Runtime Request Flow (Bun and Node)
|
|
13
|
+
## 1) Runtime Request Flow
|
|
38
14
|
|
|
39
15
|
```mermaid
|
|
40
16
|
flowchart TD
|
|
@@ -53,335 +29,117 @@ flowchart TD
|
|
|
53
29
|
K --> L[RouteRenderer createRoute]
|
|
54
30
|
L --> M[IntegrationRenderer execute]
|
|
55
31
|
M --> N[response body and cache strategy]
|
|
56
|
-
|
|
57
|
-
J --> O{Static asset request?}
|
|
58
|
-
O -- Yes --> P[FileSystemServerResponseFactory createFileResponse]
|
|
59
|
-
O -- No --> Q[FileSystemServerResponseFactory createCustomNotFoundResponse]
|
|
60
|
-
Q --> R[routeRendererFactory createRenderer for 404 template]
|
|
61
|
-
R --> S[RouteRenderer createRoute]
|
|
62
32
|
```
|
|
63
33
|
|
|
64
|
-
## 2)
|
|
34
|
+
## 2) Route Render Flow
|
|
65
35
|
|
|
66
|
-
|
|
36
|
+
`IntegrationRenderer.execute()` delegates shared route orchestration to `RouteRenderFlow`.
|
|
67
37
|
|
|
68
38
|
```mermaid
|
|
69
39
|
flowchart TD
|
|
70
|
-
A[
|
|
71
|
-
B --> C[read Page cache and Page middleware]
|
|
72
|
-
C --> D[FileRouteMiddlewarePipeline assertValidConfiguration]
|
|
73
|
-
D --> E{Middleware exists?}
|
|
74
|
-
|
|
75
|
-
E -- Yes --> F{cache dynamic?}
|
|
76
|
-
F -- No --> G[throw LocalsAccessError]
|
|
77
|
-
F -- Yes --> H[FileRouteMiddlewarePipeline createContext]
|
|
78
|
-
H --> I[FileRouteMiddlewarePipeline run]
|
|
79
|
-
|
|
80
|
-
E -- No --> J[renderResponse]
|
|
81
|
-
I --> J
|
|
82
|
-
|
|
83
|
-
J --> K[PageRequestCacheCoordinator render]
|
|
84
|
-
K --> L{cache disabled OR dynamic page?}
|
|
85
|
-
L -- Yes --> M[renderFn directly]
|
|
86
|
-
L -- No --> N[PageCacheService getOrCreate]
|
|
87
|
-
|
|
88
|
-
M --> O[routeRenderer createRoute]
|
|
89
|
-
N --> O
|
|
90
|
-
O --> P[PageRequestCacheCoordinator bodyToString]
|
|
91
|
-
P --> Q[html and strategy]
|
|
92
|
-
Q --> R[createCachedResponse with cache headers]
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
## 3) RouteRendererFactory Selection Logic
|
|
96
|
-
|
|
97
|
-
This is a small but important boundary. It centralizes integration selection and renderer reuse, which helps keep adapter code thin.
|
|
98
|
-
|
|
99
|
-
```mermaid
|
|
100
|
-
flowchart TD
|
|
101
|
-
A[createRenderer filePath] --> B[getRouteRendererEngine filePath]
|
|
102
|
-
B --> C[getIntegrationPlugin by template extension]
|
|
103
|
-
C --> D{renderer cached by integration name?}
|
|
104
|
-
D -- Yes --> E[Reuse renderer]
|
|
105
|
-
D -- No --> F[integrationPlugin.initializeRenderer]
|
|
106
|
-
F --> G[Cache renderer]
|
|
107
|
-
E --> H[RouteRenderer]
|
|
108
|
-
G --> H
|
|
109
|
-
|
|
110
|
-
I[getRendererByIntegration integrationName] --> J{plugin exists?}
|
|
111
|
-
J -- No --> K[return null]
|
|
112
|
-
J -- Yes --> L{renderer cached?}
|
|
113
|
-
L -- Yes --> M[Reuse renderer]
|
|
114
|
-
L -- No --> N[initializeRenderer + cache]
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## 4) IntegrationRenderer Pipeline
|
|
118
|
-
|
|
119
|
-
The original single graph was accurate but a bit dense. Splitting it into preparation and execution phases makes the orchestration easier to reason about.
|
|
120
|
-
|
|
121
|
-
### 4.1 Render preparation via `RenderPreparationService`
|
|
122
|
-
|
|
123
|
-
```mermaid
|
|
124
|
-
flowchart TD
|
|
125
|
-
A[IntegrationRenderer prepareRenderOptions] --> B[RenderPreparationService prepare]
|
|
40
|
+
A[IntegrationRenderer.execute] --> B[RouteRenderFlow.prepareRenderOptions]
|
|
126
41
|
B --> C[resolvePageModule]
|
|
127
|
-
C --> D[
|
|
128
|
-
D --> E[
|
|
129
|
-
E --> F
|
|
130
|
-
F
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
I -->
|
|
135
|
-
J -->
|
|
136
|
-
K -- Yes --> L[buildGlobalInjectorAssets]
|
|
137
|
-
K -- No --> M[continue]
|
|
138
|
-
L --> M
|
|
139
|
-
M --> N[HtmlPostProcessingService dedupeProcessedAssets]
|
|
140
|
-
N --> O[htmlTransformer setProcessedDependencies]
|
|
141
|
-
O --> P[return normalized render options]
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 4.2 Main execute flow via `RenderExecutionService`
|
|
145
|
-
|
|
146
|
-
Important nuance: this phase does not always run marker graph resolution. It only does that when the first render pass actually produced `eco-marker` placeholders. In practice today, that usually means a non-React renderer crossed into React component rendering and deferred those nodes for the second pass.
|
|
147
|
-
|
|
148
|
-
```mermaid
|
|
149
|
-
flowchart TD
|
|
150
|
-
A[IntegrationRenderer execute] --> B[RenderExecutionService execute]
|
|
151
|
-
B --> C[prepareRenderOptions]
|
|
152
|
-
C --> D[runWithComponentRenderContext then render]
|
|
153
|
-
D --> E[normalize response body to renderedHtml]
|
|
154
|
-
E --> F[merge captured and explicit componentGraphContext]
|
|
155
|
-
F --> G{contains eco marker token?}
|
|
156
|
-
G -- Yes --> H[resolveMarkerGraphHtml]
|
|
157
|
-
G -- No --> I[skip graph resolution]
|
|
158
|
-
H --> J[HtmlPostProcessingService dedupeProcessedAssets]
|
|
159
|
-
J --> K[merge marker assets into transformer deps]
|
|
160
|
-
I --> L{root attributes attachable?}
|
|
42
|
+
C --> D[ownershipValidationService.validate]
|
|
43
|
+
D --> E[resolvePageData]
|
|
44
|
+
E --> F[ownershipPlanningService.buildPlan]
|
|
45
|
+
F --> G[resolveDependencies]
|
|
46
|
+
G --> H[buildPageBrowserGraph]
|
|
47
|
+
H --> I{shouldRenderPageComponent?}
|
|
48
|
+
I -- Yes --> J[renderPageComponent]
|
|
49
|
+
I -- No --> K[skip page-root render]
|
|
50
|
+
J --> L[merge component assets]
|
|
161
51
|
K --> L
|
|
162
|
-
L
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
flowchart LR
|
|
173
|
-
A[Page module loader] --> B[static props]
|
|
174
|
-
B --> C[metadata]
|
|
175
|
-
C --> D[page props and locals]
|
|
176
|
-
|
|
177
|
-
E[dependency resolver] --> F[component assets]
|
|
178
|
-
F --> G[integration assets]
|
|
179
|
-
G --> H[route assets]
|
|
180
|
-
H --> I[global injector assets]
|
|
181
|
-
|
|
182
|
-
D --> J[prepared render options]
|
|
183
|
-
I --> J
|
|
52
|
+
L --> M[collect injector and eager SSR lazy assets]
|
|
53
|
+
M --> N[build pagePackage and prepared render options]
|
|
54
|
+
N --> O[callbacks.render]
|
|
55
|
+
O --> P[capture rendered body as html]
|
|
56
|
+
P --> Q[inspect unresolved marker artifacts]
|
|
57
|
+
Q --> R{unresolved eco-marker remains?}
|
|
58
|
+
R -- Yes --> S[throw unresolved artifact error]
|
|
59
|
+
R -- No --> T[stamp root or document attributes when needed]
|
|
60
|
+
T --> U[htmlTransformer transform]
|
|
61
|
+
U --> V[final body and cache strategy]
|
|
184
62
|
```
|
|
185
63
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
```mermaid
|
|
189
|
-
flowchart LR
|
|
190
|
-
A[IntegrationRenderer] --> B[RenderPreparationService]
|
|
191
|
-
A --> C[RenderExecutionService]
|
|
192
|
-
A --> D[MarkerGraphResolver]
|
|
193
|
-
A --> E[HtmlPostProcessingService]
|
|
194
|
-
A --> F[PageModuleLoaderService]
|
|
195
|
-
A --> G[DependencyResolverService]
|
|
196
|
-
A --> H[HtmlTransformerService]
|
|
197
|
-
|
|
198
|
-
B --> F
|
|
199
|
-
B --> G
|
|
200
|
-
B --> E
|
|
201
|
-
C --> D
|
|
202
|
-
C --> E
|
|
203
|
-
C --> H
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
## 5) Marker Emission + Graph Resolution
|
|
207
|
-
|
|
208
|
-
This part is architecturally interesting because it introduces a second render stage. The first pass captures boundaries; the second pass resolves them in dependency order.
|
|
209
|
-
|
|
210
|
-
If this feels complex, the simplest mental model is:
|
|
211
|
-
|
|
212
|
-
- first pass: render everything that can be rendered safely right now
|
|
213
|
-
- when a boundary cannot be rendered safely in the current integration pass, emit a placeholder marker instead
|
|
214
|
-
- second pass: revisit those placeholders and render them using the correct integration renderer
|
|
215
|
-
- final pass: merge any emitted assets and perform the normal HTML transformation
|
|
216
|
-
|
|
217
|
-
In the current implementation, this marker path exists to defer React subtrees that cannot be rendered inline during the active non-React integration pass.
|
|
218
|
-
|
|
219
|
-
Important clarification: not every integration automatically goes through this stage. The marker pipeline is conditional.
|
|
220
|
-
|
|
221
|
-
- If the first render pass returns plain HTML with no `eco-marker` tokens, rendering continues directly to post-processing and HTML transformation.
|
|
222
|
-
- If the first render pass emits `eco-marker` tokens, the marker graph is built and resolved before the final HTML rewrite.
|
|
223
|
-
- In the current implementation, marker emission is triggered when the active render pass boundary policy decides that entering React should be deferred. The policy is injected through component render context, and the React integration currently opts into that deferred behavior.
|
|
224
|
-
|
|
225
|
-
### Why this exists
|
|
226
|
-
|
|
227
|
-
The marker pipeline exists because some component boundaries cannot always be rendered eagerly inside the current integration pass.
|
|
228
|
-
|
|
229
|
-
Typical reasons include:
|
|
230
|
-
|
|
231
|
-
- the child component belongs to a different integration/runtime
|
|
232
|
-
- the child integration needs its own renderer entry point
|
|
233
|
-
- the parent render needs to preserve ordering and slots before the child subtree is resolved
|
|
234
|
-
- the child render may emit its own assets or root attributes that must be merged back into the final document
|
|
64
|
+
## 3) Mixed-Integration Render Model
|
|
235
65
|
|
|
236
|
-
|
|
66
|
+
The renderer-level mental model is:
|
|
237
67
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
- the selected integration renderer resolves the actual component render once it receives `component`, `props`, and optional `children`
|
|
242
|
-
|
|
243
|
-
Another way to say it:
|
|
244
|
-
|
|
245
|
-
- a marker is a promise that says "this subtree will be rendered later by another renderer"
|
|
246
|
-
- the marker stores just enough information to make that later render deterministic
|
|
247
|
-
- the graph exists so nested deferred boundaries resolve from leaves to parents, preserving child insertion order and slot structure
|
|
248
|
-
|
|
249
|
-
### 5.1 Marker emission in `eco.component` factory
|
|
250
|
-
|
|
251
|
-
The key rule here today is: markers are not a general-purpose placeholder for every component. During an active component render pass, `eco.component` asks the current render boundary context whether the next boundary should be deferred. When the answer is defer, it captures props/refs/slot links and returns an `eco-marker` token instead of rendering the component immediately.
|
|
252
|
-
|
|
253
|
-
For the current built-in integrations, this is how non-React renders defer React subtrees until the marker resolution pass.
|
|
68
|
+
1. declared dependencies describe ownership
|
|
69
|
+
2. active render context intercepts foreign children
|
|
70
|
+
3. the owning renderer returns a foreign subtree
|
|
254
71
|
|
|
255
72
|
```mermaid
|
|
256
73
|
flowchart TD
|
|
257
|
-
A[eco
|
|
258
|
-
B --> C[
|
|
259
|
-
C --> D{
|
|
260
|
-
D --
|
|
261
|
-
D --
|
|
262
|
-
F --> G[
|
|
263
|
-
G --> H
|
|
264
|
-
H
|
|
265
|
-
H -- No --> J[no slot links]
|
|
266
|
-
I --> K[createComponentMarker]
|
|
267
|
-
J --> K
|
|
268
|
-
K --> L[return eco marker token]
|
|
74
|
+
A[eco.component render] --> B[getComponentRenderContext]
|
|
75
|
+
B --> C[foreignChildRuntime interceptForeignChildSync]
|
|
76
|
+
C --> D{same integration?}
|
|
77
|
+
D -- Yes --> E[render inline]
|
|
78
|
+
D -- No --> F[delegate to owning renderer]
|
|
79
|
+
F --> G[owning renderer renderComponentWithForeignChildren]
|
|
80
|
+
G --> H[owning renderer renderForeignSubtree when payload form is needed]
|
|
81
|
+
H --> I[resolved html plus assets and attachment policy]
|
|
269
82
|
```
|
|
270
83
|
|
|
271
|
-
|
|
84
|
+
## 4) Queued Foreign-Subtree Resolution
|
|
272
85
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
This means the marker itself is not interpreted by the integration renderer. Core interprets the marker and reconstructs render input; the integration renderer only performs the final component render.
|
|
86
|
+
Some renderers cannot hand off foreign children inline. Those renderers can use the queue service during one render pass.
|
|
276
87
|
|
|
277
88
|
```mermaid
|
|
278
89
|
flowchart TD
|
|
279
|
-
A[
|
|
280
|
-
B --> C[
|
|
281
|
-
|
|
282
|
-
D --> E[
|
|
283
|
-
E --> F[
|
|
284
|
-
F --> G[resolve
|
|
285
|
-
G --> H[
|
|
286
|
-
H --> I[
|
|
287
|
-
I --> J[
|
|
288
|
-
J --> K[collect component assets]
|
|
289
|
-
K --> L[apply root attributes to first element]
|
|
290
|
-
L --> M[replace marker token in HTML]
|
|
291
|
-
M --> N[resolved html and assets]
|
|
90
|
+
A[current renderer encounters foreign child] --> B{can resolve inline?}
|
|
91
|
+
B -- Yes --> C[return resolved renderer-owned output]
|
|
92
|
+
B -- No --> D[queue foreign-subtree token]
|
|
93
|
+
D --> E[finish current render pass]
|
|
94
|
+
E --> F[QueuedForeignSubtreeResolutionService resolveQueuedHtml]
|
|
95
|
+
F --> G[resolve nested queued tokens first]
|
|
96
|
+
G --> H[dispatch foreign subtree to owning renderer]
|
|
97
|
+
H --> I[merge emitted assets and root attributes]
|
|
98
|
+
I --> J[replace token in html]
|
|
292
99
|
```
|
|
293
100
|
|
|
294
|
-
##
|
|
101
|
+
## 5) Explicit Rendering Paths
|
|
295
102
|
|
|
296
|
-
These paths
|
|
103
|
+
These paths bypass most filesystem routing, but they still converge on the same renderer contracts.
|
|
297
104
|
|
|
298
105
|
```mermaid
|
|
299
106
|
flowchart TD
|
|
300
107
|
A[ExplicitStaticRouteMatcher handleMatch] --> B[route loader returns view]
|
|
301
|
-
B --> C[
|
|
302
|
-
C --> D[
|
|
303
|
-
D --> E[optional view.staticProps]
|
|
304
|
-
E --> F[renderer renderToResponse]
|
|
305
|
-
|
|
306
|
-
G[createRenderContext render or renderPartial] --> H[get renderer from integrations list]
|
|
307
|
-
H --> I[merge props + locals]
|
|
308
|
-
I --> J[renderer renderToResponse]
|
|
309
|
-
|
|
310
|
-
K[StaticSiteGenerator explicit routes] --> L[getRendererByIntegration]
|
|
311
|
-
L --> M[optional staticPaths and staticProps]
|
|
312
|
-
M --> N[renderer renderToResponse]
|
|
313
|
-
N --> O[write html to dist]
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## 7) Current Concrete Integration in core
|
|
108
|
+
B --> C[get renderer by integration]
|
|
109
|
+
C --> D[renderer renderToResponse]
|
|
317
110
|
|
|
318
|
-
|
|
111
|
+
E[render context render or renderPartial] --> F[get renderer from integrations list]
|
|
112
|
+
F --> G[renderer renderToResponse]
|
|
319
113
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
B --> C{Layout exists?}
|
|
324
|
-
C -- Yes --> D[Layout wraps page content]
|
|
325
|
-
C -- No --> E[use page content]
|
|
326
|
-
D --> F[HtmlTemplate metadata + children + pageProps]
|
|
327
|
-
E --> F
|
|
328
|
-
F --> G[prepend DOCTYPE]
|
|
329
|
-
|
|
330
|
-
H[GhtmlRenderer renderToResponse] --> I{partial?}
|
|
331
|
-
I -- Yes --> J[return component html only]
|
|
332
|
-
I -- No --> K[resolve Layout and HtmlTemplate and metadata]
|
|
333
|
-
K --> L[prepend DOCTYPE]
|
|
334
|
-
J --> M[createHtmlResponse]
|
|
335
|
-
L --> M
|
|
114
|
+
H[StaticSiteGenerator explicit routes] --> I[get renderer by integration]
|
|
115
|
+
I --> J[renderer renderToResponse]
|
|
116
|
+
J --> K[write html to dist]
|
|
336
117
|
```
|
|
337
118
|
|
|
338
|
-
##
|
|
119
|
+
## 6) Reading Order
|
|
339
120
|
|
|
340
|
-
|
|
121
|
+
The most useful reading order is:
|
|
341
122
|
|
|
342
|
-
1. `
|
|
343
|
-
2. `
|
|
344
|
-
3. `
|
|
345
|
-
4. `
|
|
346
|
-
5. `
|
|
347
|
-
6. `
|
|
348
|
-
7. `
|
|
349
|
-
8. `
|
|
350
|
-
9. `
|
|
351
|
-
10. `
|
|
352
|
-
11. `page-module-loader.ts`
|
|
353
|
-
12. `dependency-resolver.ts`
|
|
354
|
-
13. `component-marker.ts`
|
|
355
|
-
14. `component-graph.ts`
|
|
356
|
-
15. `component-graph-executor.ts`
|
|
357
|
-
16. `eco.ts`
|
|
358
|
-
17. `component-render-context.ts`
|
|
359
|
-
18. `html-transformer.service.ts`
|
|
123
|
+
1. `route-renderer.ts`
|
|
124
|
+
2. `orchestration/route-render-flow.ts`
|
|
125
|
+
3. `orchestration/integration-renderer.ts`
|
|
126
|
+
4. `orchestration/ownership-validation.service.ts`
|
|
127
|
+
5. `orchestration/ownership-planning.service.ts`
|
|
128
|
+
6. `orchestration/component-render-context.ts`
|
|
129
|
+
7. `orchestration/queued-foreign-subtree-resolution.service.ts`
|
|
130
|
+
8. `page-loading/page-module-loader.ts`
|
|
131
|
+
9. `page-loading/dependency-resolver.ts`
|
|
132
|
+
10. `eco/eco.ts`
|
|
360
133
|
|
|
361
|
-
##
|
|
134
|
+
## 7) Key Files
|
|
362
135
|
|
|
363
|
-
- `packages/core/src/adapters/shared/server-adapter.ts`
|
|
364
|
-
- `packages/core/src/adapters/shared/server-route-handler.ts`
|
|
365
|
-
- `packages/core/src/adapters/shared/fs-server-response-matcher.ts`
|
|
366
|
-
- `packages/core/src/adapters/shared/file-route-middleware-pipeline.ts`
|
|
367
|
-
- `packages/core/src/adapters/shared/fs-server-response-factory.ts`
|
|
368
|
-
- `packages/core/src/adapters/shared/explicit-static-route-matcher.ts`
|
|
369
|
-
- `packages/core/src/adapters/shared/render-context.ts`
|
|
370
136
|
- `packages/core/src/route-renderer/route-renderer.ts`
|
|
371
|
-
- `packages/core/src/route-renderer/
|
|
372
|
-
- `packages/core/src/route-renderer/
|
|
373
|
-
- `packages/core/src/route-renderer/
|
|
374
|
-
- `packages/core/src/route-renderer/
|
|
375
|
-
- `packages/core/src/route-renderer/
|
|
376
|
-
- `packages/core/src/route-renderer/
|
|
377
|
-
- `packages/core/src/route-renderer/
|
|
378
|
-
- `packages/core/src/route-renderer/
|
|
379
|
-
- `packages/core/src/route-renderer/page-module-loader.ts`
|
|
380
|
-
- `packages/core/src/route-renderer/dependency-resolver.ts`
|
|
381
|
-
- `packages/core/src/services/page-module-import.service.ts`
|
|
382
|
-
- `packages/core/src/services/page-request-cache-coordinator.service.ts`
|
|
383
|
-
- `packages/core/src/eco/component-render-context.ts`
|
|
137
|
+
- `packages/core/src/route-renderer/orchestration/route-render-flow.ts`
|
|
138
|
+
- `packages/core/src/route-renderer/orchestration/integration-renderer.ts`
|
|
139
|
+
- `packages/core/src/route-renderer/orchestration/ownership-validation.service.ts`
|
|
140
|
+
- `packages/core/src/route-renderer/orchestration/ownership-planning.service.ts`
|
|
141
|
+
- `packages/core/src/route-renderer/orchestration/component-render-context.ts`
|
|
142
|
+
- `packages/core/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts`
|
|
143
|
+
- `packages/core/src/route-renderer/page-loading/page-module-loader.ts`
|
|
144
|
+
- `packages/core/src/route-renderer/page-loading/dependency-resolver.ts`
|
|
384
145
|
- `packages/core/src/eco/eco.ts`
|
|
385
|
-
- `packages/core/src/services/html-transformer.service.ts`
|
|
386
|
-
- `packages/core/src/services/cache/page-cache-service.ts`
|
|
387
|
-
- `packages/core/src/integrations/ghtml/ghtml-renderer.ts`
|