@ecopages/core 0.2.0-beta.3 → 0.2.0-beta.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -9
- package/package.json +241 -30
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +123 -6
- package/src/adapters/abstract/application-adapter.js +151 -1
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +149 -0
- package/src/adapters/abstract/server-adapter.d.ts +16 -2
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +12 -0
- package/src/adapters/abstract/ws-pattern-matcher.js +30 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.d.ts +22 -0
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +96 -0
- package/src/adapters/bun/client-bridge.d.ts +1 -0
- package/src/adapters/bun/client-bridge.js +3 -0
- package/src/adapters/bun/create-app.d.ts +9 -6
- package/src/adapters/bun/create-app.js +76 -45
- package/src/adapters/bun/hmr-manager.d.ts +1 -1
- package/src/adapters/bun/hmr-manager.js +1 -1
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +25 -2
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +1 -1
- package/src/adapters/bun/server-adapter.d.ts +92 -41
- package/src/adapters/bun/server-adapter.js +256 -117
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +25 -20
- package/src/adapters/create-app.d.ts +13 -11
- package/src/adapters/create-app.js +2 -51
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +26 -4
- package/src/adapters/node/create-app.d.ts +8 -3
- package/src/adapters/node/create-app.js +61 -13
- package/src/adapters/node/node-client-bridge.d.ts +1 -0
- package/src/adapters/node/node-client-bridge.js +3 -0
- package/src/adapters/node/node-hmr-manager.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.js +1 -1
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +1 -1
- package/src/adapters/node/server-adapter-dependencies.js +4 -0
- package/src/adapters/node/server-adapter.d.ts +64 -23
- package/src/adapters/node/server-adapter.js +169 -142
- package/src/adapters/node/static-content-server.d.ts +1 -0
- package/src/adapters/node/static-content-server.js +10 -2
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +27 -12
- package/src/adapters/shared/{hmr-entrypoint-registrar.d.ts → hmr/hmr-entrypoint-registrar.d.ts} +31 -30
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +106 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/{hmr-html-response.js → hmr/hmr-html-response.js} +4 -1
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +101 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +432 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +129 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/{api-response.js → http/api-response.js} +6 -23
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +23 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +63 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/{explicit-static-route-matcher.js → http/explicit-static-route-matcher.js} +3 -38
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/{file-route-middleware-pipeline.js → http/file-route-middleware-pipeline.js} +10 -22
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/{fs-server-response-factory.js → http/fs-server-response-factory.js} +22 -2
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/{fs-server-response-matcher.js → http/fs-server-response-matcher.js} +109 -27
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/{application-adapter.js → runtime/application-adapter.js} +1 -1
- package/src/adapters/shared/runtime/copy-runtime-public-dir.d.ts +6 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +24 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +196 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/{render-context.js → runtime/render-context.js} +8 -17
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -3
- package/src/adapters/shared/{runtime-app-bootstrap.js → runtime/runtime-app-bootstrap.js} +4 -7
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +46 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +57 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +23 -49
- package/src/adapters/shared/runtime/server-adapter.js +226 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/{server-route-handler.js → runtime/server-route-handler.js} +5 -43
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +27 -35
- package/src/adapters/shared/runtime/server-static-builder.js +191 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.d.ts +21 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +100 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +55 -0
- package/src/build/README.md +140 -31
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +124 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +1 -1
- package/src/build/{browser-runtime-plugin.js → browser/browser-runtime-plugin.js} +1 -1
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +41 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +6 -0
- package/src/build/build-adapter.d.ts +29 -334
- package/src/build/build-adapter.js +32 -133
- package/src/build/cache/build-input-fingerprint.d.ts +28 -0
- package/src/build/cache/build-input-fingerprint.js +31 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +6 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +63 -0
- package/src/build/cache/dev-browser-script-cache.d.ts +34 -0
- package/src/build/cache/dev-browser-script-cache.js +90 -0
- package/src/build/cache/pages-unified-graph-build.d.ts +31 -0
- package/src/build/cache/pages-unified-graph-build.js +198 -0
- package/src/build/cache/production-build-cache.d.ts +20 -0
- package/src/build/cache/production-build-cache.js +63 -0
- package/src/build/cache/server-entry-build-cache.d.ts +43 -0
- package/src/build/cache/server-entry-build-cache.js +165 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/{build-manifest.js → contracts/build-manifest.js} +2 -2
- package/src/build/contracts/build-types.js +0 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +23 -9
- package/src/build/{rolldown-adapter-helpers.js → rolldown/rolldown-adapter-helpers.js} +99 -13
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/{rolldown-build-adapter.js → rolldown/rolldown-build-adapter.js} +3 -3
- package/src/build/rolldown/rolldown-build-invocation-metrics.d.ts +12 -0
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +43 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
- package/src/build/{rolldown-plugin-bridge.js → rolldown/rolldown-plugin-bridge.js} +21 -6
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- package/src/build/rolldown/rolldown-source-transform-pass.js +61 -0
- package/src/build/rolldown/runtime-build-output-normalizer.d.ts +10 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +201 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +54 -0
- package/src/build/runtime/build-request-policy.d.ts +59 -0
- package/src/build/runtime/build-request-policy.js +46 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +65 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +34 -0
- package/src/build/runtime/parallel-build-executor.d.ts +21 -0
- package/src/build/runtime/parallel-build-executor.js +52 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +41 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +23 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +65 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +12 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +73 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +25 -0
- package/src/client/scroll.test.browser.js +37 -0
- package/src/client/view-transitions.d.ts +16 -0
- package/src/client/view-transitions.js +63 -0
- package/src/config/config-builder.d.ts +25 -10
- package/src/config/config-builder.js +53 -11
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +2 -1
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +15 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +6 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +15 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +7 -0
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +6 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +33 -0
- package/src/diagnostics/startup-trace.d.ts +72 -0
- package/src/diagnostics/startup-trace.js +253 -0
- package/src/eco/README.md +11 -0
- package/src/eco/eco-declared-component.d.ts +14 -0
- package/src/eco/eco-declared-component.js +16 -0
- package/src/eco/eco.browser.js +5 -6
- package/src/eco/eco.js +7 -8
- package/src/eco/eco.types.d.ts +14 -3
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -1
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +59 -0
- package/src/env.d.ts +2 -0
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +7 -1
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/hmr/client/hmr-runtime.js +7 -4
- package/src/hmr/hmr-entrypoint-output.d.ts +49 -0
- package/src/hmr/hmr-entrypoint-output.js +60 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +17 -0
- package/src/hmr/hmr-strategy.d.ts +15 -0
- package/src/hmr/hmr-strategy.js +19 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +3 -5
- package/src/hmr/strategies/js-hmr-strategy.js +72 -19
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +29 -0
- package/src/index.d.ts +2 -1
- package/src/index.js +28 -2
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -6
- package/src/integrations/ghtml/ghtml-renderer.js +2 -51
- package/src/integrations/ghtml/ghtml.plugin.d.ts +3 -16
- package/src/integrations/ghtml/ghtml.plugin.js +7 -14
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +38 -51
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +19 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +1 -1
- package/src/plugins/eco-component-meta-plugin.js +5 -8
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +4 -6
- package/src/plugins/integration-plugin.d.ts +43 -14
- package/src/plugins/integration-plugin.js +18 -5
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +26 -0
- package/src/plugins/processor.d.ts +61 -12
- package/src/plugins/processor.js +24 -5
- package/src/plugins/source-transform.d.ts +32 -1
- package/src/plugins/source-transform.js +23 -1
- package/src/plugins/tsconfig-import-resolver.d.ts +18 -0
- package/src/plugins/tsconfig-import-resolver.js +159 -0
- package/src/route-renderer/GRAPH.md +26 -32
- package/src/route-renderer/README.md +38 -31
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +148 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +31 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/{component-render-context.js → foreign-child/component-render-context.js} +4 -2
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +17 -7
- package/src/route-renderer/orchestration/{render-output.utils.js → foreign-child/foreign-child-output.utils.js} +35 -26
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.js → foreign-child/foreign-subtree-execution.service.js} +170 -37
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +35 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +24 -143
- package/src/route-renderer/orchestration/integration-renderer.js +163 -402
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +177 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +143 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +96 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +7 -2
- package/src/route-renderer/orchestration/{ownership-validation.service.js → ownership-graph/ownership-validation.service.js} +30 -3
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.d.ts +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +106 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +436 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +31 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +229 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +31 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +27 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +36 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +20 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +24 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +49 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +33 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +13 -53
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +162 -0
- package/src/route-renderer/orchestration/string-markup-renderer.d.ts +14 -0
- package/src/route-renderer/orchestration/string-markup-renderer.js +55 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +5 -2
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +6 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +7 -2
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +4 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +10 -0
- package/src/router/client/link-intent.test.browser.js +12 -1
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +101 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +92 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +12 -2
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +3 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +6 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +44 -5
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +78 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +4 -2
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +28 -13
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +7 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +38 -12
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +2 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +17 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +18 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +2 -15
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +73 -68
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +18 -15
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +17 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +2 -31
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +2 -30
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +43 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +17 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +5 -10
- package/src/services/assets/browser-bundle.service.d.ts +28 -30
- package/src/services/assets/browser-bundle.service.js +28 -19
- package/src/services/html/html-transformer.service.d.ts +1 -1
- package/src/services/html/html-transformer.service.js +5 -5
- package/src/services/invalidation/development-invalidation.service.d.ts +25 -2
- package/src/services/invalidation/development-invalidation.service.js +64 -11
- package/src/services/module-loading/README.md +49 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +3 -21
- package/src/services/module-loading/page-module-import.service.d.ts +6 -2
- package/src/services/module-loading/page-module-import.service.js +110 -47
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +24 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +37 -0
- package/src/services/module-loading/route-module-build-cache.d.ts +4 -0
- package/src/services/module-loading/route-module-build-cache.js +38 -0
- package/src/services/module-loading/route-module-build-cache.store.d.ts +57 -0
- package/src/services/module-loading/route-module-build-cache.store.js +207 -0
- package/src/services/module-loading/route-module-build-manifest.d.ts +54 -0
- package/src/services/module-loading/route-module-build-manifest.js +85 -0
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +81 -0
- package/src/services/module-loading/route-module-dependency-hasher.js +122 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -1
- package/src/services/module-loading/server-module-transpiler.service.js +1 -1
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +12 -13
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +41 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +28 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +22 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +31 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +33 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +10 -0
- package/src/static-site-generator/static-build-invalidation.js +59 -0
- package/src/static-site-generator/static-export-context.d.ts +30 -0
- package/src/static-site-generator/static-export-context.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +43 -25
- package/src/static-site-generator/static-site-generator.js +381 -106
- package/src/types/internal-types.d.ts +39 -13
- package/src/types/public-types.d.ts +289 -52
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +26 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +5 -1
- package/src/utils/parse-cli-args.d.ts +2 -0
- package/src/utils/parse-cli-args.js +6 -0
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +27 -0
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +5 -6
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +48 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +16 -0
- package/src/watchers/project-watcher.d.ts +29 -6
- package/src/watchers/project-watcher.js +146 -34
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-static-builder.js +0 -162
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -166
- package/src/build/runtime-build-executor.d.ts +0 -21
- package/src/build/runtime-build-executor.js +0 -19
- package/src/build/runtime-build-output-normalizer.d.ts +0 -3
- package/src/build/runtime-build-output-normalizer.js +0 -111
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- /package/src/adapters/shared/{explicit-static-render-preparation.js → http/explicit-static-render-preparation.js} +0 -0
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/adapters/shared/{runtime-host.js → runtime/runtime-host.js} +0 -0
- /package/src/adapters/shared/{static-preview-host.js → runtime/static-preview-host.js} +0 -0
- /package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +0 -0
- /package/src/build/{browser-runtime-manifest.js → browser/browser-runtime-manifest.js} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +0 -0
- /package/src/build/{browser-runtime-plugin-helpers.js → browser/browser-runtime-plugin-helpers.js} +0 -0
- /package/src/build/{build-types.js → contracts/build-contracts.js} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.js → rolldown/server-side-css-shim-plugin.js} +0 -0
- /package/src/build/{serialized-build-executor.js → runtime/serialized-build-executor.js} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → client/navigation-scripts/navigation-scripts.test.browser.d.ts} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → client/scroll.test.browser.d.ts} +0 -0
- /package/src/route-renderer/orchestration/{processed-asset-dedupe.js → page-browser-graph/processed-asset-dedupe.js} +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
2
|
+
import { invokeWebSocketHandlerHook, toWebSocketCloseInfo } from "../shared/ws/websocket-lifecycle.js";
|
|
3
|
+
function toUpgradeRequest(ws, runtimeOrigin) {
|
|
4
|
+
const upgradeUrl = ws.data?.upgradeUrl;
|
|
5
|
+
if (upgradeUrl) {
|
|
6
|
+
return new Request(upgradeUrl);
|
|
7
|
+
}
|
|
8
|
+
return new Request(runtimeOrigin);
|
|
9
|
+
}
|
|
10
|
+
async function runUserWebSocketOpen(ws, kind, deps) {
|
|
11
|
+
const handler = deps.userHandlers.get(kind);
|
|
12
|
+
if (!handler) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const params = ws.data?.params ?? {};
|
|
16
|
+
const search = ws.data?.search ?? {};
|
|
17
|
+
const request = toUpgradeRequest(ws, deps.runtimeOrigin);
|
|
18
|
+
let context;
|
|
19
|
+
try {
|
|
20
|
+
context = await deps.resolveContext(request, handler, kind, params, search);
|
|
21
|
+
} catch {
|
|
22
|
+
ws.close(1011, "context initialization failed");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
ws.data.context = context;
|
|
26
|
+
const socket = deps.adaptSocket(ws, kind, params, search, context);
|
|
27
|
+
try {
|
|
28
|
+
await handler.onConnect?.(socket);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
appLogger.error(`[WS:${kind}] onConnect failed:`, error);
|
|
31
|
+
ws.close(1011, "onConnect failed");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function createBunUserWebSocketLifecycle(deps) {
|
|
35
|
+
const resolveSocketForEvent = (ws) => {
|
|
36
|
+
const kind = ws.data?.kind;
|
|
37
|
+
if (!kind) {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
const handler = deps.userHandlers.get(kind);
|
|
41
|
+
if (!handler) {
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
const params = ws.data?.params ?? {};
|
|
45
|
+
const search = ws.data?.search ?? {};
|
|
46
|
+
const socket = deps.adaptSocket(ws, kind, params, search, ws.data?.context);
|
|
47
|
+
return { kind, handler, socket };
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
open(ws) {
|
|
51
|
+
const kind = ws.data?.kind;
|
|
52
|
+
if (!kind) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
void runUserWebSocketOpen(ws, kind, deps).catch((error) => {
|
|
56
|
+
appLogger.error(`[WS:${kind}] open failed:`, error);
|
|
57
|
+
ws.close(1011, "internal error");
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
message(ws, msg) {
|
|
61
|
+
const resolved = resolveSocketForEvent(ws);
|
|
62
|
+
if (!resolved) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (ws.data?.context === void 0 && resolved.handler.context) {
|
|
66
|
+
appLogger.warn(`[WS:${resolved.kind}] message received before context resolved; dropping.`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const message = typeof msg === "string" ? { kind: "text", text: msg } : { kind: "binary", data: new Uint8Array(msg.buffer, msg.byteOffset, msg.byteLength) };
|
|
70
|
+
invokeWebSocketHandlerHook(
|
|
71
|
+
resolved.kind,
|
|
72
|
+
"onMessage",
|
|
73
|
+
resolved.handler.onMessage?.(resolved.socket, message)
|
|
74
|
+
);
|
|
75
|
+
},
|
|
76
|
+
close(ws, code, reason) {
|
|
77
|
+
const resolved = resolveSocketForEvent(ws);
|
|
78
|
+
if (!resolved) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const event = toWebSocketCloseInfo(code, reason);
|
|
82
|
+
invokeWebSocketHandlerHook(resolved.kind, "onClose", resolved.handler.onClose?.(resolved.socket, event));
|
|
83
|
+
},
|
|
84
|
+
error(ws, error) {
|
|
85
|
+
const resolved = resolveSocketForEvent(ws);
|
|
86
|
+
if (!resolved) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
appLogger.error(`[WS:${resolved.kind}] error:`, error);
|
|
90
|
+
invokeWebSocketHandlerHook(resolved.kind, "onError", resolved.handler.onError?.(resolved.socket, error));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
createBunUserWebSocketLifecycle
|
|
96
|
+
};
|
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Server } from 'bun';
|
|
11
11
|
import type { ApiHandlerContext, RouteGroupBuilder } from '../../types/public-types.js';
|
|
12
|
-
import { SharedApplicationAdapter } from '../shared/application-adapter.js';
|
|
13
|
-
import type { RuntimeHost } from '../shared/runtime-host.js';
|
|
14
|
-
import type { StaticPreviewHost } from '../shared/static-preview-host.js';
|
|
12
|
+
import { SharedApplicationAdapter } from '../shared/runtime/application-adapter.js';
|
|
13
|
+
import type { RuntimeHost } from '../shared/runtime/runtime-host.js';
|
|
15
14
|
import type { EcopagesAppOptions } from '../create-app.js';
|
|
16
15
|
import { type BunServerAdapterResult } from './server-adapter.js';
|
|
17
16
|
/**
|
|
@@ -31,13 +30,15 @@ export type BunRouteGroupBuilder<WebSocketData = undefined, TContext extends Api
|
|
|
31
30
|
export declare class BunEcopagesApp<WebSocketData = undefined> extends SharedApplicationAdapter<EcopagesAppOptions, Server<WebSocketData>, Request> {
|
|
32
31
|
serverAdapter: BunServerAdapterResult | undefined;
|
|
33
32
|
private server;
|
|
33
|
+
private stopped;
|
|
34
34
|
private readonly runtimeHost;
|
|
35
|
-
private readonly previewHost;
|
|
36
35
|
constructor(options: EcopagesAppOptions, dependencies: {
|
|
37
36
|
runtimeHost: RuntimeHost<Server<WebSocketData>, Bun.Serve.Options<WebSocketData>>;
|
|
38
|
-
previewHost: StaticPreviewHost;
|
|
39
37
|
});
|
|
40
38
|
fetch(request: Request): Promise<Response>;
|
|
39
|
+
attachWebSocketUpgrades(httpServer: import('node:http').Server, options?: {
|
|
40
|
+
passthroughUnmatched?: boolean;
|
|
41
|
+
}): Promise<void>;
|
|
41
42
|
/**
|
|
42
43
|
* Complete the initialization of the server adapter by processing dynamic routes
|
|
43
44
|
* @param server The Bun server instance
|
|
@@ -52,7 +53,9 @@ export declare class BunEcopagesApp<WebSocketData = undefined> extends SharedApp
|
|
|
52
53
|
* @param options Optional settings
|
|
53
54
|
* @param options.autoCompleteInitialization Whether to automatically complete initialization with dynamic routes after server start (defaults to true)
|
|
54
55
|
*/
|
|
55
|
-
|
|
56
|
+
protected bootServer(): Promise<Server<WebSocketData> | void>;
|
|
57
|
+
stop(force?: boolean): Promise<void>;
|
|
58
|
+
protected resolveAppRoutes(): Promise<import("../../index.browser.js").EcopagesRouteInfo[]>;
|
|
56
59
|
}
|
|
57
60
|
/**
|
|
58
61
|
* Factory function to create a Bun application
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
|
|
2
1
|
import { appLogger } from "../../global/app-logger.js";
|
|
3
|
-
import { SharedApplicationAdapter } from "../shared/application-adapter.js";
|
|
4
|
-
import { resolveRuntimeBinding, resolveStaticRuntimeMode } from "../shared/runtime-app-bootstrap.js";
|
|
2
|
+
import { SharedApplicationAdapter } from "../shared/runtime/application-adapter.js";
|
|
3
|
+
import { resolveRuntimeBinding, resolveStaticRuntimeMode } from "../shared/runtime/runtime-app-bootstrap.js";
|
|
4
|
+
import { startupTrace } from "../../diagnostics/startup-trace.js";
|
|
5
5
|
import { createBunServerAdapter } from "./server-adapter.js";
|
|
6
|
-
import { BunStaticPreviewHost } from "./static-preview-host.js";
|
|
7
6
|
import { BunRuntimeHost } from "./runtime-host.js";
|
|
7
|
+
import { hostOwnsDevClient } from "../../dev/dev-client-ownership.js";
|
|
8
|
+
import { resolveAppStartRoutes } from "../../utils/ecopages-route-info.js";
|
|
8
9
|
class BunEcopagesApp extends SharedApplicationAdapter {
|
|
9
10
|
serverAdapter;
|
|
10
11
|
server = null;
|
|
12
|
+
stopped = false;
|
|
11
13
|
runtimeHost;
|
|
12
|
-
previewHost;
|
|
13
14
|
constructor(options, dependencies) {
|
|
14
|
-
super(options);
|
|
15
|
+
super(options, "Bun");
|
|
15
16
|
this.runtimeHost = dependencies.runtimeHost;
|
|
16
|
-
this.previewHost = dependencies.previewHost;
|
|
17
17
|
}
|
|
18
18
|
async fetch(request) {
|
|
19
19
|
if (!this.serverAdapter) {
|
|
@@ -22,6 +22,12 @@ class BunEcopagesApp extends SharedApplicationAdapter {
|
|
|
22
22
|
await this.serverAdapter.completeInitialization(this.server);
|
|
23
23
|
return this.serverAdapter.handleRequest(request);
|
|
24
24
|
}
|
|
25
|
+
async attachWebSocketUpgrades(httpServer, options) {
|
|
26
|
+
if (!this.serverAdapter) {
|
|
27
|
+
this.serverAdapter = await this.initializeServerAdapter();
|
|
28
|
+
}
|
|
29
|
+
this.serverAdapter.attachUserWebSocketUpgrades(httpServer, options);
|
|
30
|
+
}
|
|
25
31
|
/**
|
|
26
32
|
* Complete the initialization of the server adapter by processing dynamic routes
|
|
27
33
|
* @param server The Bun server instance
|
|
@@ -40,24 +46,21 @@ class BunEcopagesApp extends SharedApplicationAdapter {
|
|
|
40
46
|
cliArgs: this.cliArgs,
|
|
41
47
|
serverOptions: this.serverOptions
|
|
42
48
|
});
|
|
43
|
-
|
|
44
|
-
dev: this.cliArgs.dev,
|
|
45
|
-
cliPort: this.cliArgs.port,
|
|
46
|
-
cliHostname: this.cliArgs.hostname,
|
|
47
|
-
envPort: process.env.ECOPAGES_PORT,
|
|
48
|
-
envHostname: process.env.ECOPAGES_HOSTNAME,
|
|
49
|
-
preferredPort: binding.preferredPort,
|
|
50
|
-
preferredHostname: binding.preferredHostname,
|
|
51
|
-
composedUrl: binding.runtimeOrigin
|
|
52
|
-
});
|
|
53
|
-
return await createBunServerAdapter({
|
|
49
|
+
return createBunServerAdapter({
|
|
54
50
|
runtimeOrigin: binding.runtimeOrigin,
|
|
55
51
|
appConfig: this.appConfig,
|
|
56
52
|
apiHandlers: this.apiHandlers,
|
|
57
53
|
staticRoutes: this.staticRoutes,
|
|
58
54
|
errorHandler: this.errorHandler,
|
|
55
|
+
websocketHandlers: this.websocketHandlers.size > 0 ? this.websocketHandlers : void 0,
|
|
59
56
|
options: { watch: binding.watch },
|
|
60
|
-
serveOptions: binding.serveOptions
|
|
57
|
+
serveOptions: binding.serveOptions,
|
|
58
|
+
hostOwnsDevClient: hostOwnsDevClient(this.runtimeOptions),
|
|
59
|
+
deferRuntimeAssetSetup: resolveStaticRuntimeMode({
|
|
60
|
+
appConfig: this.appConfig,
|
|
61
|
+
cliArgs: this.cliArgs
|
|
62
|
+
}).canBuildWithoutRuntimeServer,
|
|
63
|
+
allowPortFallback: binding.allowPortFallback
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
/**
|
|
@@ -65,19 +68,33 @@ class BunEcopagesApp extends SharedApplicationAdapter {
|
|
|
65
68
|
* @param options Optional settings
|
|
66
69
|
* @param options.autoCompleteInitialization Whether to automatically complete initialization with dynamic routes after server start (defaults to true)
|
|
67
70
|
*/
|
|
68
|
-
async
|
|
71
|
+
async bootServer() {
|
|
72
|
+
if (this.stopped) {
|
|
73
|
+
this.serverAdapter = void 0;
|
|
74
|
+
this.stopped = false;
|
|
75
|
+
}
|
|
69
76
|
if (!this.serverAdapter) {
|
|
70
77
|
this.serverAdapter = await this.initializeServerAdapter();
|
|
71
78
|
}
|
|
72
|
-
const { dev, preview, build } = this.cliArgs;
|
|
79
|
+
const { dev, preview, build, force, serveOnly } = this.cliArgs;
|
|
73
80
|
const staticRuntimeMode = resolveStaticRuntimeMode({
|
|
74
81
|
appConfig: this.appConfig,
|
|
75
82
|
cliArgs: this.cliArgs
|
|
76
83
|
});
|
|
84
|
+
if (preview && serveOnly) {
|
|
85
|
+
const previewOrigin2 = await this.serverAdapter.servePreviewOnly();
|
|
86
|
+
if (previewOrigin2) {
|
|
87
|
+
await this.notifyListening(previewOrigin2);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
77
91
|
if (staticRuntimeMode.canBuildWithoutRuntimeServer) {
|
|
78
92
|
appLogger.debugTime("Building static pages");
|
|
79
|
-
await this.serverAdapter.buildStatic({ preview });
|
|
93
|
+
const previewOrigin2 = await this.serverAdapter.buildStatic({ preview, force });
|
|
80
94
|
appLogger.debugTimeEnd("Building static pages");
|
|
95
|
+
if (preview && previewOrigin2) {
|
|
96
|
+
await this.notifyListening(previewOrigin2);
|
|
97
|
+
}
|
|
81
98
|
if (build) {
|
|
82
99
|
process.exit(0);
|
|
83
100
|
}
|
|
@@ -85,12 +102,8 @@ class BunEcopagesApp extends SharedApplicationAdapter {
|
|
|
85
102
|
}
|
|
86
103
|
const enableHmr = dev || !preview && !build;
|
|
87
104
|
const serverOptions = this.serverAdapter.getServerOptions({ enableHmr });
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
const runtimeServerOptions = (preview || build) && staticRuntimeMode.requiresFetchRuntime ? {
|
|
91
|
-
...serverOptions,
|
|
92
|
-
port: 0
|
|
93
|
-
} : serverOptions;
|
|
105
|
+
const runtimeServerOptions = serverOptions;
|
|
106
|
+
startupTrace.beginServerListen();
|
|
94
107
|
this.server = await this.runtimeHost.start({
|
|
95
108
|
serveOptions: runtimeServerOptions,
|
|
96
109
|
handleRequest: async () => new Response(null, { status: 500 }),
|
|
@@ -103,35 +116,53 @@ class BunEcopagesApp extends SharedApplicationAdapter {
|
|
|
103
116
|
if (!this.server) {
|
|
104
117
|
throw new Error("Server failed to start");
|
|
105
118
|
}
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
const runtimeOrigin = this.runtimeHost.getOrigin(
|
|
120
|
+
this.server,
|
|
121
|
+
runtimeServerOptions
|
|
108
122
|
);
|
|
123
|
+
let previewOrigin;
|
|
109
124
|
if (build || preview) {
|
|
110
125
|
appLogger.debugTime("Building static pages");
|
|
111
|
-
await this.serverAdapter.buildStatic({ preview
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
appConfig: this.appConfig,
|
|
116
|
-
hostname: configuredHostname,
|
|
117
|
-
port: configuredPort
|
|
118
|
-
});
|
|
119
|
-
if (previewPort) {
|
|
120
|
-
appLogger.info(`Preview running at http://${configuredHostname}:${previewPort}`);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
126
|
+
previewOrigin = await this.serverAdapter.buildStatic({ preview, force });
|
|
127
|
+
const buildRuntimeServer = this.server;
|
|
128
|
+
this.server = null;
|
|
129
|
+
await this.runtimeHost.stop(buildRuntimeServer, { force: true });
|
|
123
130
|
appLogger.debugTimeEnd("Building static pages");
|
|
124
131
|
if (build) {
|
|
125
132
|
process.exit(0);
|
|
126
133
|
}
|
|
134
|
+
} else {
|
|
135
|
+
await this.notifyListening(runtimeOrigin);
|
|
136
|
+
}
|
|
137
|
+
if (preview && previewOrigin) {
|
|
138
|
+
await this.notifyListening(previewOrigin);
|
|
139
|
+
}
|
|
140
|
+
return this.server ?? void 0;
|
|
141
|
+
}
|
|
142
|
+
async stop(force = true) {
|
|
143
|
+
if (this.stopped) {
|
|
144
|
+
return;
|
|
127
145
|
}
|
|
128
|
-
|
|
146
|
+
if (this.server) {
|
|
147
|
+
const activeServer = this.server;
|
|
148
|
+
this.server = null;
|
|
149
|
+
await this.runtimeHost.stop(activeServer, { force });
|
|
150
|
+
}
|
|
151
|
+
if (this.serverAdapter) {
|
|
152
|
+
await this.serverAdapter.dispose();
|
|
153
|
+
}
|
|
154
|
+
this.stopped = true;
|
|
155
|
+
}
|
|
156
|
+
async resolveAppRoutes() {
|
|
157
|
+
return resolveAppStartRoutes({
|
|
158
|
+
listStaticGenerationRoutes: this.serverAdapter?.listStaticGenerationRoutes,
|
|
159
|
+
runtimeOrigin: this.appConfig.baseUrl
|
|
160
|
+
});
|
|
129
161
|
}
|
|
130
162
|
}
|
|
131
163
|
async function createApp(options) {
|
|
132
164
|
return new BunEcopagesApp(options, {
|
|
133
|
-
runtimeHost: new BunRuntimeHost()
|
|
134
|
-
previewHost: new BunStaticPreviewHost()
|
|
165
|
+
runtimeHost: new BunRuntimeHost()
|
|
135
166
|
});
|
|
136
167
|
}
|
|
137
168
|
export {
|
|
@@ -2,7 +2,7 @@ import type { WebSocketHandler } from 'bun';
|
|
|
2
2
|
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
3
|
import type { ClientBridge } from './client-bridge.js';
|
|
4
4
|
import { InMemoryEntrypointDependencyGraph, type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
|
|
5
|
-
import { SharedHmrManager } from '../shared/shared-hmr-manager.js';
|
|
5
|
+
import { SharedHmrManager } from '../shared/hmr/shared-hmr-manager.js';
|
|
6
6
|
type BunSocketHandler = WebSocketHandler<unknown>;
|
|
7
7
|
export interface HmrManagerParams {
|
|
8
8
|
appConfig: EcoPagesAppConfig;
|
|
@@ -2,7 +2,7 @@ import { appLogger } from "../../global/app-logger.js";
|
|
|
2
2
|
import {
|
|
3
3
|
InMemoryEntrypointDependencyGraph
|
|
4
4
|
} from "../../services/runtime-state/entrypoint-dependency-graph.service.js";
|
|
5
|
-
import { SharedHmrManager } from "../shared/shared-hmr-manager.js";
|
|
5
|
+
import { SharedHmrManager } from "../shared/hmr/shared-hmr-manager.js";
|
|
6
6
|
class HmrManager extends SharedHmrManager {
|
|
7
7
|
wsHandler;
|
|
8
8
|
/**
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { BunEcopagesApp, createApp } from './create-app.js';
|
|
2
|
-
export { defineApiHandler, defineGroupHandler, type GroupHandler } from '../shared/define-api-handler.js';
|
|
2
|
+
export { defineApiHandler, defineGroupHandler, defineGet, definePost, definePut, defineDelete, definePatch, defineOptions, defineHead, json, html, redirect, type GroupHandler, } from '../shared/http/define-api-handler.js';
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import { BunEcopagesApp, createApp } from "./create-app.js";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
defineApiHandler,
|
|
4
|
+
defineGroupHandler,
|
|
5
|
+
defineGet,
|
|
6
|
+
definePost,
|
|
7
|
+
definePut,
|
|
8
|
+
defineDelete,
|
|
9
|
+
definePatch,
|
|
10
|
+
defineOptions,
|
|
11
|
+
defineHead,
|
|
12
|
+
json,
|
|
13
|
+
html,
|
|
14
|
+
redirect
|
|
15
|
+
} from "../shared/http/define-api-handler.js";
|
|
3
16
|
export {
|
|
4
17
|
BunEcopagesApp,
|
|
5
18
|
createApp,
|
|
6
19
|
defineApiHandler,
|
|
7
|
-
|
|
20
|
+
defineDelete,
|
|
21
|
+
defineGet,
|
|
22
|
+
defineGroupHandler,
|
|
23
|
+
defineHead,
|
|
24
|
+
defineOptions,
|
|
25
|
+
definePatch,
|
|
26
|
+
definePost,
|
|
27
|
+
definePut,
|
|
28
|
+
html,
|
|
29
|
+
json,
|
|
30
|
+
redirect
|
|
8
31
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Server } from 'bun';
|
|
2
|
-
import type { RuntimeHost, RuntimeHostStartOptions } from '../shared/runtime-host.js';
|
|
2
|
+
import type { RuntimeHost, RuntimeHostStartOptions } from '../shared/runtime/runtime-host.js';
|
|
3
3
|
type BunRuntimeProvider = {
|
|
4
4
|
serve(options: Bun.Serve.Options<unknown>): Server<unknown>;
|
|
5
5
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getBunRuntime } from "../../utils/runtime.js";
|
|
2
|
-
import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
|
|
2
|
+
import { resolveServeRuntimeOrigin } from "../shared/runtime/runtime-app-bootstrap.js";
|
|
3
3
|
class BunRuntimeHost {
|
|
4
4
|
/**
|
|
5
5
|
* Creates a Bun runtime host with an injectable runtime lookup.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { Server as NodeHttpServer } from 'node:http';
|
|
1
2
|
import type { Server, WebSocketHandler } from 'bun';
|
|
2
3
|
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
-
import type { ApiHandler, ErrorHandler, StaticRoute } from '../../types/public-types.js';
|
|
4
|
-
import { SharedServerAdapter } from '../shared/server-adapter.js';
|
|
4
|
+
import type { ApiHandler, ErrorHandler, StaticRoute, EcopagesWebSocketHandler } from '../../types/public-types.js';
|
|
5
|
+
import { SharedServerAdapter } from '../shared/runtime/server-adapter.js';
|
|
5
6
|
import type { ServerAdapterResult } from '../abstract/server-adapter.js';
|
|
6
|
-
import type { StaticPreviewHost } from '../shared/static-preview-host.js';
|
|
7
|
+
import type { StaticPreviewHost } from '../shared/runtime/static-preview-host.js';
|
|
7
8
|
import { ClientBridge } from './client-bridge.js';
|
|
8
9
|
import { HmrManager } from './hmr-manager.js';
|
|
9
10
|
type BunServerInstance = Server<unknown>;
|
|
@@ -32,9 +33,14 @@ export interface BunServerAdapterParams {
|
|
|
32
33
|
apiHandlers?: ApiHandler<string, Request, BunServerInstance>[];
|
|
33
34
|
staticRoutes?: StaticRoute[];
|
|
34
35
|
errorHandler?: ErrorHandler;
|
|
36
|
+
websocketHandlers?: Map<string, EcopagesWebSocketHandler<any, any>>;
|
|
35
37
|
options?: {
|
|
36
38
|
watch?: boolean;
|
|
37
39
|
};
|
|
40
|
+
delegateBrowserReloadToHost?: boolean;
|
|
41
|
+
hostOwnsDevClient?: boolean;
|
|
42
|
+
deferRuntimeAssetSetup?: boolean;
|
|
43
|
+
allowPortFallback?: boolean;
|
|
38
44
|
hmrManager?: HmrManager;
|
|
39
45
|
bridge?: ClientBridge;
|
|
40
46
|
previewHost?: StaticPreviewHost;
|
|
@@ -45,9 +51,15 @@ export interface BunServerAdapterResult extends ServerAdapterResult {
|
|
|
45
51
|
}) => BunServeOptions;
|
|
46
52
|
buildStatic: (options?: {
|
|
47
53
|
preview?: boolean;
|
|
48
|
-
|
|
54
|
+
force?: boolean;
|
|
55
|
+
}) => Promise<string | undefined>;
|
|
56
|
+
servePreviewOnly: () => Promise<string | undefined>;
|
|
49
57
|
completeInitialization: (server?: BunServerInstance | null) => Promise<void>;
|
|
50
58
|
handleRequest: (request: Request) => Promise<Response>;
|
|
59
|
+
attachUserWebSocketUpgrades: (server: NodeHttpServer, options?: {
|
|
60
|
+
passthroughUnmatched?: boolean;
|
|
61
|
+
}) => void;
|
|
62
|
+
dispose: () => Promise<void>;
|
|
51
63
|
}
|
|
52
64
|
/**
|
|
53
65
|
* Bun transport adapter that wires shared Ecopages request handling onto a live
|
|
@@ -71,7 +83,39 @@ export declare class BunServerAdapter extends SharedServerAdapter<BunServerAdapt
|
|
|
71
83
|
private initializationPromise;
|
|
72
84
|
private fullyInitialized;
|
|
73
85
|
serverInstance: BunServerInstance | null;
|
|
86
|
+
private projectWatcher;
|
|
87
|
+
private adapterDisposed;
|
|
88
|
+
private readonly deferRuntimeAssetSetup;
|
|
89
|
+
private readonly allowPortFallback;
|
|
74
90
|
private readonly previewHost;
|
|
91
|
+
/**
|
|
92
|
+
* Reference to the application-level WebSocket handlers map.
|
|
93
|
+
*
|
|
94
|
+
* @remarks
|
|
95
|
+
* This is a reference to the map owned by `AbstractApplicationAdapter`,
|
|
96
|
+
* passed in via the constructor. The Bun adapter reads from it to wire
|
|
97
|
+
* WebSocket upgrades for user-registered patterns.
|
|
98
|
+
*/
|
|
99
|
+
protected websocketHandlers: Map<string, EcopagesWebSocketHandler<any, any>>;
|
|
100
|
+
private registerBunRuntimePlugin;
|
|
101
|
+
private adaptBunWebSocket;
|
|
102
|
+
/**
|
|
103
|
+
* Resolves the per-connection context for a Bun user connection.
|
|
104
|
+
*
|
|
105
|
+
* @remarks
|
|
106
|
+
* `context()` is invoked exactly once per accepted connection. Its
|
|
107
|
+
* resolved value is shared by all subsequent lifecycle hooks. If
|
|
108
|
+
* `context()` throws, the connection is closed immediately with code
|
|
109
|
+
* 1011 (server error) and the error is logged.
|
|
110
|
+
*
|
|
111
|
+
* @param request - The original upgrade request (best-effort reconstructed)
|
|
112
|
+
* @param handler - The registered handler
|
|
113
|
+
* @param kind - The registered route pattern
|
|
114
|
+
* @param params - Dynamic path parameters
|
|
115
|
+
* @param search - Query string parameters
|
|
116
|
+
* @returns The resolved per-connection context
|
|
117
|
+
*/
|
|
118
|
+
private resolveBunContext;
|
|
75
119
|
/**
|
|
76
120
|
* Creates a Bun server adapter with already-resolved runtime collaborators.
|
|
77
121
|
*
|
|
@@ -81,39 +125,21 @@ export declare class BunServerAdapter extends SharedServerAdapter<BunServerAdapt
|
|
|
81
125
|
* is constructed, those collaborators are mandatory because the adapter cannot
|
|
82
126
|
* initialize Bun HMR or preview flows without them.
|
|
83
127
|
*/
|
|
84
|
-
constructor({ appConfig, runtimeOrigin, serveOptions, apiHandlers, staticRoutes, errorHandler, options, hmrManager, bridge, previewHost, }: BunServerAdapterParams & {
|
|
128
|
+
constructor({ appConfig, runtimeOrigin, serveOptions, apiHandlers, staticRoutes, errorHandler, websocketHandlers, options, hostOwnsDevClient, deferRuntimeAssetSetup, allowPortFallback, hmrManager, bridge, previewHost, }: BunServerAdapterParams & {
|
|
85
129
|
hmrManager: HmrManager;
|
|
86
130
|
bridge: ClientBridge;
|
|
87
131
|
previewHost: StaticPreviewHost;
|
|
88
132
|
});
|
|
89
133
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* @remarks
|
|
93
|
-
* Filesystem-routed pages are wrapped later in the shared route layer. This
|
|
94
|
-
* adapter-level check exists for explicit API handlers that return HTML and
|
|
95
|
-
* would otherwise bypass the route wrapper entirely.
|
|
96
|
-
*/
|
|
97
|
-
private shouldInjectHmrScript;
|
|
98
|
-
/**
|
|
99
|
-
* Delegates the HTML-response test to the shared response helper used by both
|
|
100
|
-
* adapters.
|
|
101
|
-
*/
|
|
102
|
-
private isHtmlResponse;
|
|
103
|
-
/**
|
|
104
|
-
* Injects HMR script into HTML responses in development mode.
|
|
105
|
-
* Ensures explicit API handlers that return HTML get auto-reload capability.
|
|
134
|
+
* Wires user WebSocket routes onto a Node HTTP server used by host integrations.
|
|
106
135
|
*/
|
|
107
|
-
|
|
136
|
+
attachUserWebSocketUpgrades(server: NodeHttpServer, options?: {
|
|
137
|
+
passthroughUnmatched?: boolean;
|
|
138
|
+
}): void;
|
|
108
139
|
/**
|
|
109
140
|
* Initializes the server adapter's core runtime components.
|
|
110
141
|
*/
|
|
111
142
|
initialize(): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* Copies the source `public` directory into the runtime output and ensures the
|
|
114
|
-
* HMR assets directory exists before any runtime bundles are emitted.
|
|
115
|
-
*/
|
|
116
|
-
private prepareRuntimePublicDir;
|
|
117
143
|
/**
|
|
118
144
|
* Registers runtime plugins and propagates the final HMR manager into each
|
|
119
145
|
* integration.
|
|
@@ -134,20 +160,32 @@ export declare class BunServerAdapter extends SharedServerAdapter<BunServerAdapt
|
|
|
134
160
|
* Builds the `Bun.serve()` options for the current adapter state.
|
|
135
161
|
*
|
|
136
162
|
* @remarks
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
163
|
+
* When HMR is enabled the websocket dispatcher merges HMR and user handlers,
|
|
164
|
+
* routing by the `kind` field embedded in socket data at upgrade time.
|
|
165
|
+
* This prevents user-registered websocket handlers from being silently overwritten
|
|
166
|
+
* by the HMR handler in development mode.
|
|
167
|
+
*
|
|
168
|
+
* User WebSocket paths are intercepted in the fetch handler via the pattern matcher.
|
|
169
|
+
* The upgrade happens implicitly — no manual GET route registration needed.
|
|
140
170
|
*/
|
|
141
171
|
getServerOptions({ enableHmr }?: {
|
|
142
172
|
enableHmr?: boolean | undefined;
|
|
143
173
|
}): BunServeOptions;
|
|
174
|
+
private createBunUserLifecycle;
|
|
175
|
+
/**
|
|
176
|
+
* @remarks
|
|
177
|
+
* HMR and user sockets share one Bun `websocket` handler. Upgrade tags HMR
|
|
178
|
+
* connections with `kind: '__hmr__'`; everything else routes to the user lifecycle.
|
|
179
|
+
*/
|
|
180
|
+
private createHmrAwareWebSocketHandler;
|
|
144
181
|
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
182
|
+
* @remarks
|
|
183
|
+
* When `serveHmrEndpoints` is set, `/_hmr` is checked before user websocket
|
|
184
|
+
* patterns so HMR upgrades are never captured by app routes. Runtime assets are
|
|
185
|
+
* served by `SharedServerAdapter.handleSharedRequest` via `tryHandleAssetRequest`.
|
|
186
|
+
* Production mode with only user handlers skips the HMR branch entirely.
|
|
149
187
|
*/
|
|
150
|
-
private
|
|
188
|
+
private wrapFetchWithWebSocketUpgrades;
|
|
151
189
|
/**
|
|
152
190
|
* Composes the base Bun server settings that all runtime modes build from.
|
|
153
191
|
*
|
|
@@ -163,7 +201,14 @@ export declare class BunServerAdapter extends SharedServerAdapter<BunServerAdapt
|
|
|
163
201
|
*/
|
|
164
202
|
buildStatic(options?: {
|
|
165
203
|
preview?: boolean;
|
|
166
|
-
|
|
204
|
+
force?: boolean;
|
|
205
|
+
}): Promise<string | undefined>;
|
|
206
|
+
/**
|
|
207
|
+
* Serves an existing static export without running SSG. Used by e2e preview
|
|
208
|
+
* launchers after a shared prewarm build.
|
|
209
|
+
*/
|
|
210
|
+
servePreviewOnly(): Promise<string | undefined>;
|
|
211
|
+
private startPreviewServer;
|
|
167
212
|
/**
|
|
168
213
|
* Initializes the server with dynamic routes after server creation.
|
|
169
214
|
* Must be called before handling any requests.
|
|
@@ -184,15 +229,21 @@ export declare class BunServerAdapter extends SharedServerAdapter<BunServerAdapt
|
|
|
184
229
|
* @returns Configured adapter with server methods
|
|
185
230
|
*/
|
|
186
231
|
createAdapter(): Promise<BunServerAdapterResult>;
|
|
232
|
+
/**
|
|
233
|
+
* Releases dev-time resources owned by the adapter.
|
|
234
|
+
*
|
|
235
|
+
* @remarks
|
|
236
|
+
* Safe to call multiple times. Does not stop the bound Bun server — callers
|
|
237
|
+
* should shut down transport through the runtime host before disposing.
|
|
238
|
+
*/
|
|
239
|
+
dispose(): Promise<void>;
|
|
187
240
|
/**
|
|
188
241
|
* Handles HTTP requests by passing them securely to the shared core router adapter.
|
|
189
242
|
*
|
|
190
243
|
* @remarks
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* dev HMR runtime — so the HMR script injection happens here, after
|
|
195
|
-
* the shared handler runs.
|
|
244
|
+
* HMR HTML injection for API and page responses is owned by
|
|
245
|
+
* `SharedServerAdapter.handleSharedRequest`. This method only maps the
|
|
246
|
+
* request into the shared pipeline.
|
|
196
247
|
*/
|
|
197
248
|
handleRequest(request: Request): Promise<Response>;
|
|
198
249
|
/**
|