@ecopages/core 0.2.0-beta.3 → 0.2.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -9
- package/package.json +241 -30
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +123 -6
- package/src/adapters/abstract/application-adapter.js +151 -1
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +149 -0
- package/src/adapters/abstract/server-adapter.d.ts +16 -2
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
- package/src/adapters/abstract/ws-pattern-matcher.js +30 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +96 -0
- package/src/adapters/bun/client-bridge.d.ts +1 -0
- package/src/adapters/bun/client-bridge.js +3 -0
- package/src/adapters/bun/create-app.d.ts +9 -6
- package/src/adapters/bun/create-app.js +76 -45
- package/src/adapters/bun/hmr-manager.d.ts +1 -1
- package/src/adapters/bun/hmr-manager.js +1 -1
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +25 -2
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +1 -1
- package/src/adapters/bun/server-adapter.d.ts +92 -41
- package/src/adapters/bun/server-adapter.js +256 -117
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +25 -20
- package/src/adapters/create-app.d.ts +13 -11
- package/src/adapters/create-app.js +2 -51
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +26 -4
- package/src/adapters/node/create-app.d.ts +8 -3
- package/src/adapters/node/create-app.js +61 -13
- package/src/adapters/node/node-client-bridge.d.ts +1 -0
- package/src/adapters/node/node-client-bridge.js +3 -0
- package/src/adapters/node/node-hmr-manager.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.js +1 -1
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +1 -1
- package/src/adapters/node/server-adapter-dependencies.js +4 -0
- package/src/adapters/node/server-adapter.d.ts +64 -23
- package/src/adapters/node/server-adapter.js +169 -142
- package/src/adapters/node/static-content-server.d.ts +1 -0
- package/src/adapters/node/static-content-server.js +10 -2
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +27 -12
- package/src/adapters/shared/{hmr-entrypoint-registrar.d.ts → hmr/hmr-entrypoint-registrar.d.ts} +31 -30
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +106 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/{hmr-html-response.js → hmr/hmr-html-response.js} +4 -1
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +101 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +432 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +129 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/{api-response.js → http/api-response.js} +6 -23
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +23 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +63 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/{explicit-static-route-matcher.js → http/explicit-static-route-matcher.js} +3 -38
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/{file-route-middleware-pipeline.js → http/file-route-middleware-pipeline.js} +10 -22
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/{fs-server-response-factory.js → http/fs-server-response-factory.js} +22 -2
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/{fs-server-response-matcher.js → http/fs-server-response-matcher.js} +109 -27
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/{application-adapter.js → runtime/application-adapter.js} +1 -1
- package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +24 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +196 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/{render-context.js → runtime/render-context.js} +8 -17
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
- package/src/adapters/shared/{runtime-app-bootstrap.js → runtime/runtime-app-bootstrap.js} +4 -7
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +46 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +57 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +23 -49
- package/src/adapters/shared/runtime/server-adapter.js +226 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/{server-route-handler.js → runtime/server-route-handler.js} +5 -43
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
- package/src/adapters/shared/runtime/server-static-builder.js +191 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +100 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +55 -0
- package/src/build/README.md +140 -31
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +124 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
- package/src/build/{browser-runtime-plugin.js → browser/browser-runtime-plugin.js} +1 -1
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +41 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +6 -0
- package/src/build/build-adapter.d.ts +29 -334
- package/src/build/build-adapter.js +32 -133
- package/src/build/cache/build-input-fingerprint.d.ts +28 -0
- package/src/build/cache/build-input-fingerprint.js +31 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +6 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +63 -0
- package/src/build/cache/dev-browser-script-cache.d.ts +34 -0
- package/src/build/cache/dev-browser-script-cache.js +90 -0
- package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
- package/src/build/cache/pages-unified-graph-build.js +198 -0
- package/src/build/cache/production-build-cache.d.ts +20 -0
- package/src/build/cache/production-build-cache.js +63 -0
- package/src/build/cache/server-entry-build-cache.d.ts +43 -0
- package/src/build/cache/server-entry-build-cache.js +165 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/{build-manifest.js → contracts/build-manifest.js} +2 -2
- package/src/build/contracts/build-types.js +0 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +23 -9
- package/src/build/{rolldown-adapter-helpers.js → rolldown/rolldown-adapter-helpers.js} +99 -13
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/{rolldown-build-adapter.js → rolldown/rolldown-build-adapter.js} +3 -3
- package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +43 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
- package/src/build/{rolldown-plugin-bridge.js → rolldown/rolldown-plugin-bridge.js} +21 -6
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +61 -0
- package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +201 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +54 -0
- package/src/build/runtime/build-request-policy.d.ts +59 -0
- package/src/build/runtime/build-request-policy.js +46 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +65 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +34 -0
- package/src/build/runtime/parallel-build-executor.d.ts +21 -0
- package/src/build/runtime/parallel-build-executor.js +52 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +41 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +23 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +65 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +12 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +73 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +25 -0
- package/src/client/scroll.test.browser.js +37 -0
- package/src/client/view-transitions.d.ts +16 -0
- package/src/client/view-transitions.js +63 -0
- package/src/config/config-builder.d.ts +25 -10
- package/src/config/config-builder.js +53 -11
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +2 -1
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +15 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +6 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +15 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +7 -0
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +6 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +33 -0
- package/src/diagnostics/startup-trace.d.ts +72 -0
- package/src/diagnostics/startup-trace.js +253 -0
- package/src/eco/README.md +11 -0
- package/src/eco/eco-declared-component.d.ts +14 -0
- package/src/eco/eco-declared-component.js +16 -0
- package/src/eco/eco.browser.js +5 -6
- package/src/eco/eco.js +7 -8
- package/src/eco/eco.types.d.ts +14 -3
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -1
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +59 -0
- package/src/env.d.ts +2 -0
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +7 -1
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/hmr/client/hmr-runtime.js +7 -4
- package/src/hmr/hmr-entrypoint-output.d.ts +49 -0
- package/src/hmr/hmr-entrypoint-output.js +60 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +17 -0
- package/src/hmr/hmr-strategy.d.ts +15 -0
- package/src/hmr/hmr-strategy.js +19 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +3 -5
- package/src/hmr/strategies/js-hmr-strategy.js +72 -19
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +29 -0
- package/src/index.d.ts +2 -1
- package/src/index.js +28 -2
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
- package/src/integrations/ghtml/ghtml-renderer.js +2 -51
- package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
- package/src/integrations/ghtml/ghtml.plugin.js +7 -14
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +38 -51
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +19 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +1 -1
- package/src/plugins/eco-component-meta-plugin.js +5 -8
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +4 -6
- package/src/plugins/integration-plugin.d.ts +43 -14
- package/src/plugins/integration-plugin.js +18 -5
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +26 -0
- package/src/plugins/processor.d.ts +61 -12
- package/src/plugins/processor.js +24 -5
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +23 -1
- package/src/plugins/tsconfig-import-resolver.d.ts +18 -0
- package/src/plugins/tsconfig-import-resolver.js +159 -0
- package/src/route-renderer/GRAPH.md +26 -32
- package/src/route-renderer/README.md +38 -31
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +148 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +31 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/{component-render-context.js → foreign-child/component-render-context.js} +4 -2
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
- package/src/route-renderer/orchestration/{render-output.utils.js → foreign-child/foreign-child-output.utils.js} +35 -26
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.js → foreign-child/foreign-subtree-execution.service.js} +170 -37
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +35 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +24 -143
- package/src/route-renderer/orchestration/integration-renderer.js +163 -402
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +177 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +143 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +96 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +7 -2
- package/src/route-renderer/orchestration/{ownership-validation.service.js → ownership-graph/ownership-validation.service.js} +30 -3
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.d.ts +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +106 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +436 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +31 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +229 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +31 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +27 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +36 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +20 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +24 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +33 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +13 -53
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +162 -0
- package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
- package/src/route-renderer/orchestration/string-markup-renderer.js +55 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +5 -2
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +6 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +7 -2
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +4 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +10 -0
- package/src/router/client/link-intent.test.browser.js +12 -1
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +101 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +92 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +12 -2
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +3 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +6 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +44 -5
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +78 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +28 -13
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +7 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +38 -12
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +2 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +17 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +18 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -15
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +73 -68
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +18 -15
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +17 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +2 -31
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +2 -30
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +43 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +17 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +5 -10
- package/src/services/assets/browser-bundle.service.d.ts +28 -30
- package/src/services/assets/browser-bundle.service.js +28 -19
- package/src/services/html/html-transformer.service.d.ts +1 -1
- package/src/services/html/html-transformer.service.js +5 -5
- package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
- package/src/services/invalidation/development-invalidation.service.js +64 -11
- package/src/services/module-loading/README.md +49 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +3 -21
- package/src/services/module-loading/page-module-import.service.d.ts +6 -2
- package/src/services/module-loading/page-module-import.service.js +110 -47
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +37 -0
- package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
- package/src/services/module-loading/route-module-build-cache.js +38 -0
- package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
- package/src/services/module-loading/route-module-build-cache.store.js +207 -0
- package/src/services/module-loading/route-module-build-manifest.d.ts +54 -0
- package/src/services/module-loading/route-module-build-manifest.js +85 -0
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
- package/src/services/module-loading/route-module-dependency-hasher.js +122 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -1
- package/src/services/module-loading/server-module-transpiler.service.js +1 -1
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +12 -13
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +41 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +28 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +22 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +31 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +33 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
- package/src/static-site-generator/static-build-invalidation.js +59 -0
- package/src/static-site-generator/static-export-context.d.ts +30 -0
- package/src/static-site-generator/static-export-context.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +43 -25
- package/src/static-site-generator/static-site-generator.js +381 -106
- package/src/types/internal-types.d.ts +39 -13
- package/src/types/public-types.d.ts +289 -52
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +26 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +5 -1
- package/src/utils/parse-cli-args.d.ts +2 -0
- package/src/utils/parse-cli-args.js +6 -0
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +27 -0
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +5 -6
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +48 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +16 -0
- package/src/watchers/project-watcher.d.ts +29 -6
- package/src/watchers/project-watcher.js +146 -34
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-static-builder.js +0 -162
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -166
- package/src/build/runtime-build-executor.d.ts +0 -21
- package/src/build/runtime-build-executor.js +0 -19
- package/src/build/runtime-build-output-normalizer.d.ts +0 -3
- package/src/build/runtime-build-output-normalizer.js +0 -111
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- /package/src/adapters/shared/{explicit-static-render-preparation.js → http/explicit-static-render-preparation.js} +0 -0
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/adapters/shared/{runtime-host.js → runtime/runtime-host.js} +0 -0
- /package/src/adapters/shared/{static-preview-host.js → runtime/static-preview-host.js} +0 -0
- /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
- /package/src/build/{browser-runtime-manifest.js → browser/browser-runtime-manifest.js} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.js → browser/browser-runtime-plugin-helpers.js} +0 -0
- /package/src/build/{build-types.js → contracts/build-contracts.js} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.js → rolldown/server-side-css-shim-plugin.js} +0 -0
- /package/src/build/{serialized-build-executor.js → runtime/serialized-build-executor.js} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → client/navigation-scripts/navigation-scripts.test.browser.d.ts} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → client/scroll.test.browser.d.ts} +0 -0
- /package/src/route-renderer/orchestration/{processed-asset-dedupe.js → page-browser-graph/processed-asset-dedupe.js} +0 -0
|
@@ -1,6 +1,24 @@
|
|
|
1
|
-
import type { BuildResult
|
|
2
|
-
import type {
|
|
1
|
+
import type { BuildResult } from '../../build/build-adapter.js';
|
|
2
|
+
import type { BuildTranspileProfile } from '../../build/build-adapter.js';
|
|
3
|
+
import type { EcoBuildPlugin } from '../../build/contracts/build-types.js';
|
|
3
4
|
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Browser-oriented build request accepted by {@link BrowserBundleService}.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* `profile` is a {@link BuildTranspileProfile} (transpile settings only).
|
|
10
|
+
* `executor` selects the {@link BuildRuntime} concurrency slot:
|
|
11
|
+
* - `'hmr'` + (`hmr-entrypoint` | `hmr-runtime`) → `'browser-hmr'`
|
|
12
|
+
* - everything else (including `browser-script`, and `'build'`) → `'route-module'`
|
|
13
|
+
*
|
|
14
|
+
* Defaults `executor` to `'hmr'`. Request options are always assembled with
|
|
15
|
+
* browser-hmr *defaults* via {@link createBrowserBuildRequest}; only the
|
|
16
|
+
* concurrency/dedupe wrapper differs.
|
|
17
|
+
*
|
|
18
|
+
* Uses request-scope {@link requestBuildDedupe} plus in-flight
|
|
19
|
+
* {@link DedupingBuildExecutor} coalescing; both key on
|
|
20
|
+
* {@link createBuildRequestIdentity}.
|
|
21
|
+
*/
|
|
4
22
|
export type BrowserBundleOptions = {
|
|
5
23
|
entrypoints: string[] | Record<string, string>;
|
|
6
24
|
outdir?: string;
|
|
@@ -16,28 +34,11 @@ export type BrowserBundleOptions = {
|
|
|
16
34
|
externalPackages?: boolean;
|
|
17
35
|
external?: string[];
|
|
18
36
|
plugins?: EcoBuildPlugin[];
|
|
19
|
-
|
|
20
|
-
profile: BuildTranspileProfile;
|
|
21
|
-
excludeAppBuildPlugins?: string[];
|
|
22
|
-
};
|
|
23
|
-
type BrowserBundleGroupedOptions = {
|
|
24
|
-
outdir?: string;
|
|
25
|
-
outbase?: string;
|
|
26
|
-
naming?: string;
|
|
27
|
-
conditions?: string[];
|
|
28
|
-
define?: Record<string, string>;
|
|
29
|
-
minify?: boolean;
|
|
30
|
-
treeshaking?: boolean;
|
|
31
|
-
splitting?: boolean;
|
|
32
|
-
root?: string;
|
|
33
|
-
bundle?: boolean;
|
|
34
|
-
externalPackages?: boolean;
|
|
35
|
-
external?: string[];
|
|
36
|
-
plugins?: EcoBuildPlugin[];
|
|
37
|
-
[key: string]: unknown;
|
|
37
|
+
executor?: 'build' | 'hmr';
|
|
38
38
|
profile: BuildTranspileProfile;
|
|
39
39
|
excludeAppBuildPlugins?: string[];
|
|
40
40
|
};
|
|
41
|
+
type BrowserBundleGroupedOptions = Omit<BrowserBundleOptions, 'entrypoints'>;
|
|
41
42
|
export interface BrowserBundleExecutor {
|
|
42
43
|
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
43
44
|
}
|
|
@@ -49,23 +50,20 @@ export type BrowserBundleGroupedEntry = {
|
|
|
49
50
|
* App-owned boundary for browser-oriented bundle work.
|
|
50
51
|
*
|
|
51
52
|
* @remarks
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* Owns shared browser transpile defaults and ensures browser builds run through
|
|
54
|
+
* the app-owned executor rather than direct backend calls. Assembles a complete
|
|
55
|
+
* request via {@link createBrowserBuildRequest} before scheduling.
|
|
55
56
|
*/
|
|
56
57
|
export declare class BrowserBundleService implements BrowserBundleExecutor {
|
|
57
58
|
private readonly appConfig;
|
|
58
|
-
/**
|
|
59
|
-
* Creates the browser bundle boundary for one finalized app instance.
|
|
60
|
-
*/
|
|
61
59
|
constructor(appConfig: EcoPagesAppConfig);
|
|
62
60
|
/**
|
|
63
61
|
* Runs one browser-targeted build through the app-owned executor.
|
|
64
62
|
*
|
|
65
63
|
* @remarks
|
|
66
|
-
* Browser defaults
|
|
67
|
-
*
|
|
68
|
-
* site.
|
|
64
|
+
* Browser defaults, app-owned browser plugins, and
|
|
65
|
+
* {@link getAppSourceTransforms | app source transforms} are applied here
|
|
66
|
+
* so HMR and asset generation do not recreate that policy at each call site.
|
|
69
67
|
*/
|
|
70
68
|
bundle(options: BrowserBundleOptions): Promise<BuildResult>;
|
|
71
69
|
bundleGroupedEntries(entries: BrowserBundleGroupedEntry[], options: BrowserBundleGroupedOptions): Promise<BuildResult>;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createBrowserBuildRequest } from "../../build/runtime/build-request-policy.js";
|
|
2
|
+
import { requireBuildRuntime } from "../../build/runtime/build-runtime.js";
|
|
3
|
+
import { startupTrace } from "../../diagnostics/startup-trace.js";
|
|
4
|
+
import { requestBuildDedupe } from "../../diagnostics/request-build-dedupe.js";
|
|
5
|
+
import { createBuildRequestIdentity } from "../../build/runtime/build-request-identity.js";
|
|
6
|
+
function resolveBrowserBundleExecutor(appConfig, profile, executor) {
|
|
7
|
+
const buildRuntime = requireBuildRuntime(appConfig);
|
|
8
|
+
if (executor === "hmr" && (profile === "hmr-entrypoint" || profile === "hmr-runtime")) {
|
|
9
|
+
return buildRuntime.getProfile("browser-hmr");
|
|
10
|
+
}
|
|
11
|
+
return buildRuntime.getProfile("route-module");
|
|
12
|
+
}
|
|
3
13
|
class BrowserBundleService {
|
|
4
14
|
appConfig;
|
|
5
|
-
/**
|
|
6
|
-
* Creates the browser bundle boundary for one finalized app instance.
|
|
7
|
-
*/
|
|
8
15
|
constructor(appConfig) {
|
|
9
16
|
this.appConfig = appConfig;
|
|
10
17
|
}
|
|
@@ -12,26 +19,28 @@ class BrowserBundleService {
|
|
|
12
19
|
* Runs one browser-targeted build through the app-owned executor.
|
|
13
20
|
*
|
|
14
21
|
* @remarks
|
|
15
|
-
* Browser defaults
|
|
16
|
-
*
|
|
17
|
-
* site.
|
|
22
|
+
* Browser defaults, app-owned browser plugins, and
|
|
23
|
+
* {@link getAppSourceTransforms | app source transforms} are applied here
|
|
24
|
+
* so HMR and asset generation do not recreate that policy at each call site.
|
|
18
25
|
*/
|
|
19
26
|
async bundle(options) {
|
|
20
|
-
const { profile,
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
const { profile, executor = "hmr", ...requestInput } = options;
|
|
28
|
+
const request = createBrowserBuildRequest(this.appConfig, {
|
|
29
|
+
...requestInput,
|
|
30
|
+
profile
|
|
31
|
+
});
|
|
32
|
+
const buildExecutor = resolveBrowserBundleExecutor(this.appConfig, profile, executor);
|
|
33
|
+
const dedupeKey = createBuildRequestIdentity(request);
|
|
34
|
+
return requestBuildDedupe.dedupeBuild(dedupeKey, async () => {
|
|
35
|
+
const result = await buildExecutor.build(request);
|
|
36
|
+
startupTrace.recordBrowserBundle(result.outputs);
|
|
37
|
+
return result;
|
|
38
|
+
});
|
|
30
39
|
}
|
|
31
40
|
async bundleGroupedEntries(entries, options) {
|
|
32
41
|
const request = {
|
|
33
42
|
...options,
|
|
34
|
-
entrypoints: entries.map((entry) => entry.entrypoint)
|
|
43
|
+
entrypoints: Object.fromEntries(entries.map((entry) => [entry.entryName, entry.entrypoint]))
|
|
35
44
|
};
|
|
36
45
|
return this.bundle(request);
|
|
37
46
|
}
|
|
@@ -83,7 +83,7 @@ export declare class HtmlTransformerService {
|
|
|
83
83
|
* string-based fallback remains in place for runtimes that cannot provide one
|
|
84
84
|
* of those rewriter implementations.
|
|
85
85
|
*/
|
|
86
|
-
transform(res: Response, contributions?: HtmlDocumentContribution[]): Promise<Response>;
|
|
86
|
+
transform(res: Response, contributions?: HtmlDocumentContribution[], pagePackage?: PagePackageResult): Promise<Response>;
|
|
87
87
|
/**
|
|
88
88
|
* Splits processed assets into head and body injection groups.
|
|
89
89
|
*/
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
buildProcessedAssetDedupeKey,
|
|
6
6
|
dedupeProcessedAssets
|
|
7
|
-
} from "../../route-renderer/orchestration/processed-asset-dedupe.js";
|
|
7
|
+
} from "../../route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js";
|
|
8
8
|
class HtmlTransformerService {
|
|
9
9
|
processedDependencies = [];
|
|
10
10
|
pagePackage;
|
|
@@ -188,8 +188,8 @@ class HtmlTransformerService {
|
|
|
188
188
|
* string-based fallback remains in place for runtimes that cannot provide one
|
|
189
189
|
* of those rewriter implementations.
|
|
190
190
|
*/
|
|
191
|
-
async transform(res, contributions = []) {
|
|
192
|
-
const { head, body } = this.groupDependenciesByPosition();
|
|
191
|
+
async transform(res, contributions = [], pagePackage) {
|
|
192
|
+
const { head, body } = this.groupDependenciesByPosition(pagePackage);
|
|
193
193
|
const { headPrepend, headAppend, bodyPrepend, bodyAppend } = this.groupContributionsByPlacement(contributions);
|
|
194
194
|
const htmlRewriter = await this.htmlRewriterProvider.createHtmlRewriter();
|
|
195
195
|
if (htmlRewriter) {
|
|
@@ -239,8 +239,8 @@ class HtmlTransformerService {
|
|
|
239
239
|
/**
|
|
240
240
|
* Splits processed assets into head and body injection groups.
|
|
241
241
|
*/
|
|
242
|
-
groupDependenciesByPosition() {
|
|
243
|
-
const dependencies = this.pagePackage ? this.resolvePagePackageHtmlDependencies(this.pagePackage) : this.processedDependencies;
|
|
242
|
+
groupDependenciesByPosition(pagePackageOverride) {
|
|
243
|
+
const dependencies = pagePackageOverride ? this.resolvePagePackageHtmlDependencies(pagePackageOverride) : this.pagePackage ? this.resolvePagePackageHtmlDependencies(this.pagePackage) : this.processedDependencies;
|
|
244
244
|
return dependencies.reduce(
|
|
245
245
|
(acc, dep) => {
|
|
246
246
|
if (dep.kind === "script") {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
|
-
export type
|
|
1
|
+
import type { EcoPagesAppConfig, RegisteredScriptEntrypointChangeHandler } from '../../types/internal-types.js';
|
|
2
|
+
export type { RegisteredScriptEntrypointChangeHandler };
|
|
3
|
+
export type DevelopmentInvalidationCategory = 'public-asset' | 'additional-watch' | 'include-source' | 'explicit-server-view' | 'route-source' | 'processor-owned-asset' | 'server-source' | 'other';
|
|
3
4
|
/**
|
|
4
5
|
* Framework-owned invalidation plan for one changed file.
|
|
5
6
|
*
|
|
@@ -38,6 +39,14 @@ export declare class DevelopmentInvalidationService {
|
|
|
38
39
|
* Invalidates the app-owned server-module graph.
|
|
39
40
|
*/
|
|
40
41
|
invalidateServerModules(changedFiles?: string[]): void;
|
|
42
|
+
/**
|
|
43
|
+
* Registers an integration-owned handler for registered script entrypoint edits.
|
|
44
|
+
*/
|
|
45
|
+
registerRegisteredScriptEntrypointChangeHandler(handler: RegisteredScriptEntrypointChangeHandler): void;
|
|
46
|
+
/**
|
|
47
|
+
* Notifies integration handlers that a registered script entrypoint changed.
|
|
48
|
+
*/
|
|
49
|
+
notifyRegisteredScriptEntrypointChange(filePath: string): Promise<void>;
|
|
41
50
|
/**
|
|
42
51
|
* Resets runtime-owned graph state and invalidates server modules.
|
|
43
52
|
*/
|
|
@@ -62,6 +71,15 @@ export declare class DevelopmentInvalidationService {
|
|
|
62
71
|
* Returns whether the file is an include/template source file.
|
|
63
72
|
*/
|
|
64
73
|
isIncludeSourceFile(filePath: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Returns whether the file is an explicit server-rendered view module.
|
|
76
|
+
*
|
|
77
|
+
* @remarks
|
|
78
|
+
* These modules are typically registered through `renderServerModule` in
|
|
79
|
+
* `app.ts` rather than the filesystem router. They need a full browser reload
|
|
80
|
+
* because their HTML is produced on the server, not through client HMR entrypoints.
|
|
81
|
+
*/
|
|
82
|
+
isExplicitServerViewFile(filePath: string): boolean;
|
|
65
83
|
/**
|
|
66
84
|
* Returns whether the file is a server-executed source module outside the
|
|
67
85
|
* special route/include buckets.
|
|
@@ -69,6 +87,11 @@ export declare class DevelopmentInvalidationService {
|
|
|
69
87
|
isServerModuleSourceFile(filePath: string): boolean;
|
|
70
88
|
/**
|
|
71
89
|
* Returns whether a processor owns the changed file as an asset input.
|
|
90
|
+
*
|
|
91
|
+
* @remarks
|
|
92
|
+
* Watch config drives processor notifications only. Asset ownership requires
|
|
93
|
+
* declared capabilities so dependency-only watches (for example content
|
|
94
|
+
* collection MDX scans) do not skip server invalidation and HMR.
|
|
72
95
|
*/
|
|
73
96
|
isProcessorOwnedAsset(filePath: string): boolean;
|
|
74
97
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { getAppServerInvalidationState } from "../runtime-state/server-invalidation-state.service.js";
|
|
3
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
3
4
|
class DevelopmentInvalidationService {
|
|
4
5
|
appConfig;
|
|
5
6
|
constructor(appConfig) {
|
|
@@ -18,6 +19,30 @@ class DevelopmentInvalidationService {
|
|
|
18
19
|
getAppServerInvalidationState(this.appConfig).invalidateServerModules(changedFiles);
|
|
19
20
|
this.appConfig.runtime?.appModuleLoader?.invalidateDevelopmentGraph();
|
|
20
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Registers an integration-owned handler for registered script entrypoint edits.
|
|
24
|
+
*/
|
|
25
|
+
registerRegisteredScriptEntrypointChangeHandler(handler) {
|
|
26
|
+
const runtime = this.appConfig.runtime ?? {};
|
|
27
|
+
this.appConfig.runtime = runtime;
|
|
28
|
+
runtime.registeredScriptEntrypointChangeHandlers ??= [];
|
|
29
|
+
runtime.registeredScriptEntrypointChangeHandlers.push(handler);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Notifies integration handlers that a registered script entrypoint changed.
|
|
33
|
+
*/
|
|
34
|
+
async notifyRegisteredScriptEntrypointChange(filePath) {
|
|
35
|
+
const handlers = this.appConfig.runtime?.registeredScriptEntrypointChangeHandlers ?? [];
|
|
36
|
+
for (const handler of handlers) {
|
|
37
|
+
try {
|
|
38
|
+
await handler(filePath);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
appLogger.error(
|
|
41
|
+
`Failed to handle registered script entrypoint change for ${filePath}: ${error instanceof Error ? error.message : String(error)}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
21
46
|
/**
|
|
22
47
|
* Resets runtime-owned graph state and invalidates server modules.
|
|
23
48
|
*/
|
|
@@ -55,8 +80,18 @@ class DevelopmentInvalidationService {
|
|
|
55
80
|
category: "include-source",
|
|
56
81
|
invalidateServerModules: true,
|
|
57
82
|
refreshRoutes: false,
|
|
58
|
-
reloadBrowser:
|
|
59
|
-
delegateToHmr:
|
|
83
|
+
reloadBrowser: false,
|
|
84
|
+
delegateToHmr: true,
|
|
85
|
+
processorHandledAsset: false
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (this.isExplicitServerViewFile(filePath)) {
|
|
89
|
+
return {
|
|
90
|
+
category: "explicit-server-view",
|
|
91
|
+
invalidateServerModules: true,
|
|
92
|
+
refreshRoutes: false,
|
|
93
|
+
reloadBrowser: false,
|
|
94
|
+
delegateToHmr: true,
|
|
60
95
|
processorHandledAsset: false
|
|
61
96
|
};
|
|
62
97
|
}
|
|
@@ -148,6 +183,25 @@ class DevelopmentInvalidationService {
|
|
|
148
183
|
}
|
|
149
184
|
return /\.(?:[cm]?ts|[jt]sx?|mdx)$/u.test(resolvedPath);
|
|
150
185
|
}
|
|
186
|
+
/**
|
|
187
|
+
* Returns whether the file is an explicit server-rendered view module.
|
|
188
|
+
*
|
|
189
|
+
* @remarks
|
|
190
|
+
* These modules are typically registered through `renderServerModule` in
|
|
191
|
+
* `app.ts` rather than the filesystem router. They need a full browser reload
|
|
192
|
+
* because their HTML is produced on the server, not through client HMR entrypoints.
|
|
193
|
+
*/
|
|
194
|
+
isExplicitServerViewFile(filePath) {
|
|
195
|
+
const resolvedPath = path.resolve(filePath);
|
|
196
|
+
const viewsDir = path.join(this.appConfig.absolutePaths.srcDir, "views");
|
|
197
|
+
if (resolvedPath !== viewsDir && !resolvedPath.startsWith(`${viewsDir}${path.sep}`)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (this.appConfig.templatesExt.some((extension) => resolvedPath.endsWith(extension))) {
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
return /\.(?:[cm]?ts|[jt]sx?|mdx)$/u.test(resolvedPath);
|
|
204
|
+
}
|
|
151
205
|
/**
|
|
152
206
|
* Returns whether the file is a server-executed source module outside the
|
|
153
207
|
* special route/include buckets.
|
|
@@ -164,21 +218,20 @@ class DevelopmentInvalidationService {
|
|
|
164
218
|
}
|
|
165
219
|
/**
|
|
166
220
|
* Returns whether a processor owns the changed file as an asset input.
|
|
221
|
+
*
|
|
222
|
+
* @remarks
|
|
223
|
+
* Watch config drives processor notifications only. Asset ownership requires
|
|
224
|
+
* declared capabilities so dependency-only watches (for example content
|
|
225
|
+
* collection MDX scans) do not skip server invalidation and HMR.
|
|
167
226
|
*/
|
|
168
227
|
isProcessorOwnedAsset(filePath) {
|
|
169
228
|
for (const processor of this.appConfig.processors.values()) {
|
|
170
229
|
const capabilities = processor.getAssetCapabilities?.() ?? [];
|
|
171
|
-
if (capabilities.length
|
|
172
|
-
const matchesConfiguredAsset = typeof processor.matchesFileFilter !== "function" || processor.matchesFileFilter(filePath);
|
|
173
|
-
if (matchesConfiguredAsset && capabilities.some((capability) => processor.canProcessAsset?.(capability.kind, filePath))) {
|
|
174
|
-
return true;
|
|
175
|
-
}
|
|
230
|
+
if (capabilities.length === 0) {
|
|
176
231
|
continue;
|
|
177
232
|
}
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
180
|
-
const { extensions = [] } = watchConfig;
|
|
181
|
-
if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
|
|
233
|
+
const matchesConfiguredAsset = typeof processor.matchesFileFilter !== "function" || processor.matchesFileFilter(filePath);
|
|
234
|
+
if (matchesConfiguredAsset && capabilities.some((capability) => processor.canProcessAsset?.(capability.kind, filePath))) {
|
|
182
235
|
return true;
|
|
183
236
|
}
|
|
184
237
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Module Loading
|
|
2
|
+
|
|
3
|
+
Server-side source loading for framework-owned page modules, includes, and related templates.
|
|
4
|
+
|
|
5
|
+
## Import stack
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Call site (route scan, renderer, SSG, API)
|
|
9
|
+
└─ AppModuleLoader.importModule() app-server-module-transpiler.service.ts
|
|
10
|
+
├─ merges server build plugins + JSX ownership plugins
|
|
11
|
+
├─ resolves route-module BuildExecutor
|
|
12
|
+
└─ PageModuleImportService.importModule()
|
|
13
|
+
├─ dev + host loader → host runtime (Node only, when configured)
|
|
14
|
+
├─ production disk cache → route-module build cache
|
|
15
|
+
├─ unified pages graph → prebuilt chunk import
|
|
16
|
+
└─ Rolldown per-page build → dynamic import of transpiled output
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`ServerModuleTranspiler` is a thin wrapper that injects `rootDir`, optional default plugins, and invalidation version into the same `PageModuleImportService` path. App code should prefer `getAppModuleLoader(appConfig)` or `getAppServerModuleTranspiler(appConfig)`.
|
|
20
|
+
|
|
21
|
+
## Host vs app ownership
|
|
22
|
+
|
|
23
|
+
| Path | When |
|
|
24
|
+
| ----------------------- | -------------------------------------------------------------------------------------------- |
|
|
25
|
+
| Host loader | `appConfig.runtime.hostModuleLoader` set (Vite host) and file supports direct source loading |
|
|
26
|
+
| Ecopages build pipeline | Framework-owned template files under `pages/`, `includes/`, etc. |
|
|
27
|
+
|
|
28
|
+
`shouldAppUseHostModuleLoader()` encodes the directory + extension rules. Bun always uses the build pipeline today.
|
|
29
|
+
|
|
30
|
+
## Caching layers
|
|
31
|
+
|
|
32
|
+
1. **In-memory promise cache** (`PageModuleImportService.importCache`) — keyed by file path, resolved `outdir`, JSX/plugin inputs, file hash, and invalidation version. Cleared by `invalidateDevelopmentGraph()`.
|
|
33
|
+
2. **Disk transpile cache** (`.eco/.server-modules/.build-cache.json`) — production only; see route-module build cache slice.
|
|
34
|
+
3. **Unified graph manifest** — production static export fast path; see build layer docs.
|
|
35
|
+
|
|
36
|
+
## Files
|
|
37
|
+
|
|
38
|
+
| File | Role |
|
|
39
|
+
| ----------------------------------------- | --------------------------------------------------------- |
|
|
40
|
+
| `page-module-import.service.ts` | Core import/cache/build orchestration |
|
|
41
|
+
| `app-module-loader.service.ts` | App-facing loader interface |
|
|
42
|
+
| `app-server-module-transpiler.service.ts` | Factory for app-scoped loader + transpiler |
|
|
43
|
+
| `server-module-transpiler.service.ts` | Injectable transpiler boundary for tests and bootstrap |
|
|
44
|
+
| `host-module-loader-registry.ts` | Process-global host loader fallback for embedded runtimes |
|
|
45
|
+
| `source-module-support.ts` | Extension allowlist for host direct loading |
|
|
46
|
+
|
|
47
|
+
## Development invalidation
|
|
48
|
+
|
|
49
|
+
`DevelopmentInvalidationService.invalidateServerModules()` bumps the app-owned invalidation version and calls `appModuleLoader.invalidateDevelopmentGraph()`, which clears the in-memory import cache and increments the per-service invalidation counter used in cache keys and dev `?update=` query params.
|
|
@@ -5,6 +5,14 @@ import { ServerModuleTranspiler } from './server-module-transpiler.service.js';
|
|
|
5
5
|
export declare function shouldAppUseHostModuleLoader(appConfig: EcoPagesAppConfig, filePath: string): boolean;
|
|
6
6
|
export declare function getAppHostModuleLoader(appConfig: EcoPagesAppConfig): SourceModuleLoader | undefined;
|
|
7
7
|
export declare function setAppHostModuleLoader(appConfig: EcoPagesAppConfig, hostModuleLoader?: SourceModuleLoader): void;
|
|
8
|
+
/**
|
|
9
|
+
* Creates the app module loader that imports route modules through the build pipeline.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* Caller `plugins` are treated as contributions only.
|
|
13
|
+
* {@link PageModuleImportService} assembles the complete server request via
|
|
14
|
+
* {@link createServerBuildRequest}; this loader does not merge app plugins.
|
|
15
|
+
*/
|
|
8
16
|
export declare function createAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
|
|
9
17
|
export declare function getAppModuleLoader(appConfig: EcoPagesAppConfig): AppModuleLoader;
|
|
10
18
|
export declare function setAppModuleLoader(appConfig: EcoPagesAppConfig, appModuleLoader: AppModuleLoader): void;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createForeignJsxOverridePlugin } from "../../plugins/foreign-jsx-override-plugin.js";
|
|
1
|
+
import { requireBuildRuntime } from "../../build/runtime/build-runtime.js";
|
|
3
2
|
import path from "node:path";
|
|
4
3
|
import { DevelopmentInvalidationService } from "../invalidation/development-invalidation.service.js";
|
|
5
4
|
import {} from "./app-module-loader.service.js";
|
|
@@ -37,27 +36,12 @@ function setAppHostModuleLoader(appConfig, hostModuleLoader) {
|
|
|
37
36
|
hostModuleLoader
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
|
-
function getJsxOwnershipPlugins(appConfig) {
|
|
41
|
-
const jsxExtensions = (appConfig.integrations ?? []).filter((integration) => integration.jsxImportSource).flatMap(
|
|
42
|
-
(integration) => integration.extensions.filter((extension) => extension.endsWith(".tsx") || extension.endsWith(".jsx")).map((extension) => ({ integration, extension }))
|
|
43
|
-
).sort((left, right) => right.extension.length - left.extension.length);
|
|
44
|
-
return jsxExtensions.map(
|
|
45
|
-
({ integration, extension }) => createForeignJsxOverridePlugin({
|
|
46
|
-
hostJsxImportSource: integration.jsxImportSource,
|
|
47
|
-
foreignExtensions: [extension],
|
|
48
|
-
excludeExtensions: jsxExtensions.filter((candidate) => candidate.extension.length > extension.length).filter((candidate) => candidate.extension.endsWith(extension)).map((candidate) => candidate.extension),
|
|
49
|
-
name: `ecopages-jsx-ownership-${integration.name}-${extension.replace(/[^a-zA-Z0-9]+/g, "-")}`
|
|
50
|
-
})
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
39
|
function createAppModuleLoader(appConfig) {
|
|
54
40
|
const invalidationService = new DevelopmentInvalidationService(appConfig);
|
|
55
|
-
const pageModuleImportService = new PageModuleImportService({
|
|
41
|
+
const pageModuleImportService = new PageModuleImportService(appConfig, {
|
|
56
42
|
canLoadSourceModuleFromHost: (filePath) => shouldAppUseHostModuleLoader(appConfig, filePath),
|
|
57
43
|
getHostModuleLoader: () => getAppHostModuleLoader(appConfig)
|
|
58
44
|
});
|
|
59
|
-
const appServerBuildPlugins = appConfig.runtime?.buildManifest ? getAppServerBuildPlugins(appConfig) : Array.from(appConfig.loaders?.values() ?? []);
|
|
60
|
-
const jsxOwnershipPlugins = getJsxOwnershipPlugins(appConfig);
|
|
61
45
|
const appModuleLoader = {
|
|
62
46
|
get owner() {
|
|
63
47
|
return getAppModuleLoaderOwner(appConfig);
|
|
@@ -65,11 +49,9 @@ function createAppModuleLoader(appConfig) {
|
|
|
65
49
|
pageModuleImportService,
|
|
66
50
|
async importModule(options) {
|
|
67
51
|
const invalidationVersion = options.invalidationVersion ?? invalidationService.getServerModuleInvalidationVersion();
|
|
68
|
-
const mergedPlugins = [...appServerBuildPlugins, ...jsxOwnershipPlugins, ...options.plugins ?? []];
|
|
69
52
|
return await pageModuleImportService.importModule({
|
|
70
53
|
...options,
|
|
71
|
-
|
|
72
|
-
buildExecutor: options.buildExecutor ?? getAppBuildExecutor(appConfig),
|
|
54
|
+
buildExecutor: options.buildExecutor ?? requireBuildRuntime(appConfig).getProfile("route-module"),
|
|
73
55
|
invalidationVersion
|
|
74
56
|
});
|
|
75
57
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { build, type BuildExecutor, type BuildResult } from '../../build/build-adapter.js';
|
|
2
|
-
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
2
|
+
import type { EcoBuildPlugin } from '../../build/contracts/build-types.js';
|
|
3
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
4
|
import type { SourceModuleLoaderFactory } from './module-loading-types.js';
|
|
4
5
|
interface PageModuleImportBaseOptions {
|
|
5
6
|
filePath: string;
|
|
@@ -59,10 +60,12 @@ export interface PageModuleImportDependencies {
|
|
|
59
60
|
* transpilation settings, and error semantics across the different callers.
|
|
60
61
|
*/
|
|
61
62
|
export declare class PageModuleImportService {
|
|
63
|
+
private readonly appConfig?;
|
|
62
64
|
private readonly dependencies;
|
|
65
|
+
private readonly dependencyHasher;
|
|
63
66
|
private readonly importCache;
|
|
64
67
|
private developmentInvalidationVersion;
|
|
65
|
-
constructor(dependencies?: Partial<PageModuleImportDependencies>);
|
|
68
|
+
constructor(appConfig?: EcoPagesAppConfig, dependencies?: Partial<PageModuleImportDependencies>);
|
|
66
69
|
/**
|
|
67
70
|
* Clears the shared import cache used by framework-owned page-module loads.
|
|
68
71
|
*/
|
|
@@ -91,5 +94,6 @@ export declare class PageModuleImportService {
|
|
|
91
94
|
*/
|
|
92
95
|
importModule<T = unknown>(options: PageModuleBuildImportOptions): Promise<T>;
|
|
93
96
|
private loadModule;
|
|
97
|
+
private getRouteModuleBuildCache;
|
|
94
98
|
}
|
|
95
99
|
export {};
|