@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55
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/package.json +196 -91
- package/src/adapters/abstract/application-adapter.d.ts +194 -0
- package/src/adapters/abstract/application-adapter.js +121 -0
- package/src/adapters/abstract/router-adapter.d.ts +26 -0
- package/src/adapters/abstract/router-adapter.js +5 -0
- package/src/adapters/abstract/server-adapter.d.ts +69 -0
- package/src/adapters/abstract/server-adapter.js +15 -0
- package/src/adapters/bun/client-bridge.d.ts +34 -0
- package/src/adapters/bun/client-bridge.js +48 -0
- package/src/adapters/bun/create-app.d.ts +60 -0
- package/src/adapters/bun/create-app.js +140 -0
- package/src/adapters/bun/hmr-manager.d.ts +47 -0
- package/src/adapters/bun/hmr-manager.js +58 -0
- package/src/adapters/bun/index.d.ts +2 -0
- package/src/adapters/bun/index.js +8 -0
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +223 -0
- package/src/adapters/bun/server-adapter.js +450 -0
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/adapters/create-app.d.ts +20 -0
- package/src/adapters/create-app.js +66 -0
- package/src/adapters/index.d.ts +2 -0
- package/src/adapters/index.js +8 -0
- package/src/adapters/node/create-app.d.ts +24 -0
- package/src/adapters/node/create-app.js +92 -0
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +26 -0
- package/src/adapters/node/node-client-bridge.js +66 -0
- package/src/adapters/node/node-hmr-manager.d.ts +52 -0
- package/src/adapters/node/node-hmr-manager.js +49 -0
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +138 -0
- package/src/adapters/node/server-adapter.js +313 -0
- package/src/adapters/node/static-content-server.d.ts +60 -0
- package/src/adapters/node/static-content-server.js +194 -0
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/api-response.d.ts +52 -0
- package/src/adapters/shared/api-response.js +96 -0
- package/src/adapters/shared/application-adapter.d.ts +18 -0
- package/src/adapters/shared/application-adapter.js +90 -0
- package/src/adapters/shared/define-api-handler.d.ts +25 -0
- package/src/adapters/shared/define-api-handler.js +15 -0
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +41 -0
- package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
- package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
- package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
- package/src/adapters/shared/fs-server-response-factory.js +81 -0
- package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
- package/src/adapters/shared/fs-server-response-matcher.js +186 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +33 -0
- package/src/adapters/shared/render-context.d.ts +16 -0
- package/src/adapters/shared/render-context.js +93 -0
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.d.ts +108 -0
- package/src/adapters/shared/server-adapter.js +436 -0
- package/src/adapters/shared/server-route-handler.d.ts +89 -0
- package/src/adapters/shared/server-route-handler.js +111 -0
- package/src/adapters/shared/server-static-builder.d.ts +71 -0
- package/src/adapters/shared/server-static-builder.js +100 -0
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +241 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/{browser-runtime-plugin-helpers.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
- package/src/build/browser-runtime-plugin-helpers.js +14 -0
- package/src/build/browser-runtime-plugin.d.ts +78 -0
- package/src/build/browser-runtime-plugin.js +172 -0
- package/src/build/build-adapter.d.ts +504 -0
- package/src/build/build-adapter.js +240 -0
- package/src/build/build-manifest.d.ts +33 -0
- package/src/build/build-manifest.js +49 -0
- package/src/build/build-types.d.ts +57 -0
- package/src/build/build-types.js +0 -0
- package/src/build/rolldown-build-adapter.d.ts +32 -0
- package/src/build/rolldown-build-adapter.js +260 -0
- package/src/build/rolldown-plugin-bridge.d.ts +50 -0
- package/src/build/rolldown-plugin-bridge.js +194 -0
- package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
- package/src/build/runtime-build-executor.js +19 -0
- package/src/build/runtime-build-output-normalizer.d.ts +3 -0
- package/src/build/runtime-build-output-normalizer.js +111 -0
- package/src/build/serialized-build-executor.d.ts +64 -0
- package/src/build/serialized-build-executor.js +63 -0
- package/src/build/server-side-css-shim-plugin.d.ts +41 -0
- package/src/build/server-side-css-shim-plugin.js +35 -0
- package/src/cache/{index.ts → index.d.ts} +1 -1
- package/src/cache/index.js +6 -0
- package/src/cache/module-parse-cache.d.ts +65 -0
- package/src/cache/module-parse-cache.js +75 -0
- package/src/config/config-builder.d.ts +252 -0
- package/src/config/config-builder.js +589 -0
- package/src/config/{constants.ts → constants.d.ts} +13 -22
- package/src/config/constants.js +25 -0
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +30 -0
- package/src/dev/sc-server.js +111 -0
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.d.ts +9 -0
- package/src/eco/eco.js +119 -0
- package/src/eco/eco.types.d.ts +230 -0
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +1 -0
- package/src/eco/eco.utils.js +10 -0
- package/src/eco/global-injector-map.d.ts +16 -0
- package/src/eco/global-injector-map.js +80 -0
- package/src/eco/lazy-injector-map.d.ts +8 -0
- package/src/eco/lazy-injector-map.js +70 -0
- package/src/eco/module-dependencies.d.ts +18 -0
- package/src/eco/module-dependencies.js +49 -0
- package/src/errors/http-error.d.ts +31 -0
- package/src/errors/http-error.js +50 -0
- package/src/errors/index.d.ts +3 -0
- package/src/errors/index.js +6 -0
- package/src/errors/locals-access-error.d.ts +4 -0
- package/src/errors/locals-access-error.js +9 -0
- package/src/global/app-logger.d.ts +2 -0
- package/src/global/app-logger.js +6 -0
- package/src/hmr/client/hmr-runtime.d.ts +5 -0
- package/src/hmr/client/hmr-runtime.js +117 -0
- package/src/hmr/hmr-strategy.d.ts +162 -0
- package/src/hmr/hmr-strategy.js +44 -0
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.test.e2e.js +43 -0
- package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
- package/src/hmr/strategies/default-hmr-strategy.js +34 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
- package/src/hmr/strategies/js-hmr-strategy.js +173 -0
- package/src/index.browser.d.ts +3 -0
- package/src/index.browser.js +4 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +21 -0
- package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
- package/src/integrations/ghtml/ghtml-renderer.js +57 -0
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +16 -0
- package/src/integrations/ghtml/ghtml.plugin.js +20 -0
- package/src/plugins/alias-resolver-cache.d.ts +68 -0
- package/src/plugins/alias-resolver-cache.js +106 -0
- package/src/plugins/alias-resolver-plugin.d.ts +6 -0
- package/src/plugins/alias-resolver-plugin.js +65 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
- package/src/plugins/eco-component-meta-plugin.js +175 -0
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +230 -0
- package/src/plugins/integration-plugin.js +201 -0
- package/src/plugins/processor.d.ts +97 -0
- package/src/plugins/processor.js +141 -0
- package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
- package/src/plugins/runtime-capability.js +0 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +991 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +35 -0
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/page-loading/page-module-loader.js +127 -0
- package/src/route-renderer/route-renderer.d.ts +69 -0
- package/src/route-renderer/route-renderer.js +80 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
- package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
- package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
- package/src/services/assets/asset-processing-service/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +57 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
- package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/cache/cache.types.d.ts +107 -0
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +7 -0
- package/src/services/cache/index.js +7 -0
- package/src/services/cache/memory-cache-store.d.ts +42 -0
- package/src/services/cache/memory-cache-store.js +98 -0
- package/src/services/cache/page-cache-service.d.ts +70 -0
- package/src/services/cache/page-cache-service.js +152 -0
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
- package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
- package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +193 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/validation/schema-validation-service.d.ts +122 -0
- package/src/services/validation/schema-validation-service.js +101 -0
- package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +104 -0
- package/src/static-site-generator/static-site-generator.js +316 -0
- package/src/types/internal-types.d.ts +232 -0
- package/src/types/internal-types.js +0 -0
- package/src/types/public-types.d.ts +1307 -0
- package/src/types/public-types.js +0 -0
- package/src/utils/deep-merge.d.ts +14 -0
- package/src/utils/deep-merge.js +32 -0
- package/src/utils/hash.d.ts +1 -0
- package/src/utils/hash.js +7 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/html.js +4 -0
- package/src/utils/invariant.d.ts +5 -0
- package/src/utils/invariant.js +11 -0
- package/src/utils/locals-utils.d.ts +15 -0
- package/src/utils/locals-utils.js +24 -0
- package/src/utils/parse-cli-args.d.ts +27 -0
- package/src/utils/parse-cli-args.js +62 -0
- package/src/utils/path-utils.module.d.ts +5 -0
- package/src/utils/path-utils.module.js +14 -0
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/utils/runtime.d.ts +11 -0
- package/src/utils/runtime.js +40 -0
- package/src/utils/server-utils.module.d.ts +19 -0
- package/src/utils/server-utils.module.js +56 -0
- package/src/watchers/project-watcher.d.ts +136 -0
- package/src/watchers/project-watcher.js +275 -0
- package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
- package/src/watchers/project-watcher.test-helpers.js +52 -0
- package/src/adapters/abstract/application-adapter.test.ts +0 -218
- package/src/adapters/abstract/application-adapter.ts +0 -379
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -214
- package/src/adapters/bun/hmr-manager.test.ts +0 -265
- package/src/adapters/bun/hmr-manager.ts +0 -88
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/runtime-host.ts +0 -76
- package/src/adapters/bun/server-adapter.ts +0 -605
- package/src/adapters/bun/static-preview-host.ts +0 -70
- package/src/adapters/create-app.test.ts +0 -10
- package/src/adapters/create-app.ts +0 -91
- package/src/adapters/index.ts +0 -2
- package/src/adapters/node/create-app.test.ts +0 -76
- package/src/adapters/node/create-app.ts +0 -116
- package/src/adapters/node/http-request-bridge.test.ts +0 -146
- package/src/adapters/node/http-request-bridge.ts +0 -176
- package/src/adapters/node/node-client-bridge.test.ts +0 -198
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.test.ts +0 -374
- package/src/adapters/node/node-hmr-manager.ts +0 -72
- package/src/adapters/node/runtime-host.test.ts +0 -49
- package/src/adapters/node/runtime-host.ts +0 -113
- package/src/adapters/node/server-adapter-dependencies.ts +0 -28
- package/src/adapters/node/server-adapter.test.ts +0 -84
- package/src/adapters/node/server-adapter.ts +0 -423
- package/src/adapters/node/static-content-server.test.ts +0 -60
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/static-preview-host.test.ts +0 -89
- package/src/adapters/node/static-preview-host.ts +0 -101
- package/src/adapters/shared/api-response.test.ts +0 -97
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-render-preparation.ts +0 -58
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
- package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
- package/src/adapters/shared/fs-server-response-factory.ts +0 -96
- package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -54
- package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
- package/src/adapters/shared/render-context.test.ts +0 -244
- package/src/adapters/shared/render-context.ts +0 -161
- package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
- package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
- package/src/adapters/shared/runtime-host.ts +0 -11
- package/src/adapters/shared/server-adapter.test.ts +0 -130
- package/src/adapters/shared/server-adapter.ts +0 -571
- package/src/adapters/shared/server-route-handler.test.ts +0 -112
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.test.ts +0 -338
- package/src/adapters/shared/server-static-builder.ts +0 -170
- package/src/adapters/shared/shared-hmr-manager.ts +0 -298
- package/src/adapters/shared/static-preview-host.ts +0 -12
- package/src/build/browser-runtime-manifest.test.ts +0 -121
- package/src/build/browser-runtime-manifest.ts +0 -105
- package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
- package/src/build/browser-runtime-plugin.test.ts +0 -256
- package/src/build/browser-runtime-plugin.ts +0 -306
- package/src/build/build-adapter.test.ts +0 -463
- package/src/build/build-adapter.ts +0 -788
- package/src/build/build-manifest.ts +0 -79
- package/src/build/build-types.ts +0 -83
- package/src/build/rolldown-build-adapter.test.ts +0 -352
- package/src/build/rolldown-build-adapter.ts +0 -363
- package/src/build/rolldown-plugin-bridge.test.ts +0 -256
- package/src/build/rolldown-plugin-bridge.ts +0 -309
- package/src/build/runtime-build-executor.test.ts +0 -130
- package/src/build/runtime-build-output-normalizer.ts +0 -137
- package/src/build/serialized-build-executor.test.ts +0 -96
- package/src/build/serialized-build-executor.ts +0 -90
- package/src/build/server-side-css-shim-plugin.ts +0 -77
- package/src/cache/module-parse-cache.test.ts +0 -73
- package/src/cache/module-parse-cache.ts +0 -137
- package/src/config/config-builder.test.ts +0 -456
- package/src/config/config-builder.ts +0 -728
- package/src/config/config-builder.typecheck.test.ts +0 -96
- package/src/dev/host-runtime.ts +0 -34
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/eco.browser.test.ts +0 -43
- package/src/eco/eco.browser.ts +0 -137
- package/src/eco/eco.test.ts +0 -781
- package/src/eco/eco.ts +0 -262
- package/src/eco/eco.types.ts +0 -293
- package/src/eco/eco.utils.test.ts +0 -219
- package/src/eco/eco.utils.ts +0 -5
- package/src/eco/global-injector-map.test.ts +0 -42
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.test.ts +0 -66
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.test.ts +0 -30
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.test.ts +0 -134
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -3
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/global/utils.test.ts +0 -12
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +0 -162
- package/src/hmr/hmr-strategy.test.ts +0 -124
- package/src/hmr/hmr-strategy.ts +0 -177
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.test.ts +0 -344
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -15
- package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
- package/src/integrations/ghtml/ghtml.constants.ts +0 -1
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
- package/src/plugins/alias-resolver-cache.test.ts +0 -110
- package/src/plugins/alias-resolver-cache.ts +0 -145
- package/src/plugins/alias-resolver-plugin.test.ts +0 -41
- package/src/plugins/alias-resolver-plugin.ts +0 -75
- package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
- package/src/plugins/eco-component-meta-plugin.ts +0 -518
- package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
- package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
- package/src/plugins/integration-plugin.test.ts +0 -151
- package/src/plugins/integration-plugin.ts +0 -344
- package/src/plugins/processor.test.ts +0 -148
- package/src/plugins/processor.ts +0 -257
- package/src/plugins/source-transform.test.ts +0 -82
- package/src/plugins/source-transform.ts +0 -123
- package/src/route-renderer/orchestration/component-render-context.ts +0 -338
- package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
- package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
- package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
- package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
- package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
- package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
- package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
- package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
- package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
- package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
- package/src/route-renderer/orchestration/template-serialization.ts +0 -117
- package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
- package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
- package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
- package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
- package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
- package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
- package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
- package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
- package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
- package/src/route-renderer/route-renderer.ts +0 -133
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.test.ts +0 -237
- package/src/router/client/navigation-coordinator.ts +0 -453
- package/src/router/server/route-registry.test.ts +0 -176
- package/src/router/server/route-registry.ts +0 -382
- package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
- package/src/services/assets/asset-processing-service/index.ts +0 -6
- package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
- package/src/services/assets/asset-processing-service/page-package.ts +0 -103
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
- package/src/services/assets/browser-bundle.service.test.ts +0 -66
- package/src/services/assets/browser-bundle.service.ts +0 -109
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.test.ts +0 -225
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.test.ts +0 -175
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
- package/src/services/html/html-rewriter-provider.service.ts +0 -105
- package/src/services/html/html-transformer.service.test.ts +0 -544
- package/src/services/html/html-transformer.service.ts +0 -369
- package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
- package/src/services/invalidation/development-invalidation.service.ts +0 -262
- package/src/services/module-loading/app-module-loader.service.ts +0 -9
- package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
- package/src/services/module-loading/host-module-loader-registry.ts +0 -15
- package/src/services/module-loading/page-module-import.service.test.ts +0 -652
- package/src/services/module-loading/page-module-import.service.ts +0 -302
- package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
- package/src/services/module-loading/source-module-support.ts +0 -19
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.test.ts +0 -223
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/static-site-generator/static-site-generator.test.ts +0 -408
- package/src/static-site-generator/static-site-generator.ts +0 -445
- package/src/types/internal-types.ts +0 -243
- package/src/types/public-types.ts +0 -1508
- package/src/utils/deep-merge.test.ts +0 -114
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html-escaping.ts +0 -9
- package/src/utils/invariant.test.ts +0 -22
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.test.ts +0 -69
- package/src/utils/parse-cli-args.ts +0 -105
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/path-utils.test.ts +0 -15
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/utils/server-utils.test.ts +0 -38
- package/src/watchers/project-watcher.integration.test.ts +0 -337
- package/src/watchers/project-watcher.test-helpers.ts +0 -42
- package/src/watchers/project-watcher.test.ts +0 -768
- package/src/watchers/project-watcher.ts +0 -357
- /package/src/utils/{html.ts → html.d.ts} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
2
|
+
import { SharedApplicationAdapter } from "../shared/application-adapter.js";
|
|
3
|
+
import { resolveRuntimeBinding } from "../shared/runtime-app-bootstrap.js";
|
|
4
|
+
import { createNodeServerAdapter } from "./server-adapter.js";
|
|
5
|
+
import { NodeHttpRequestBridge } from "./http-request-bridge.js";
|
|
6
|
+
import { NodeRuntimeHost } from "./runtime-host.js";
|
|
7
|
+
class NodeEcopagesApp extends SharedApplicationAdapter {
|
|
8
|
+
serverAdapter;
|
|
9
|
+
server = null;
|
|
10
|
+
runtimeOrigin = "";
|
|
11
|
+
runtimeHost;
|
|
12
|
+
constructor(options, dependencies) {
|
|
13
|
+
super(options);
|
|
14
|
+
this.runtimeHost = dependencies.runtimeHost;
|
|
15
|
+
}
|
|
16
|
+
createServerAdapter(params) {
|
|
17
|
+
return createNodeServerAdapter(params);
|
|
18
|
+
}
|
|
19
|
+
async stop(force = true) {
|
|
20
|
+
if (!this.server) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const activeServer = this.server;
|
|
24
|
+
this.server = null;
|
|
25
|
+
await this.runtimeHost.stop(activeServer, { force });
|
|
26
|
+
}
|
|
27
|
+
async initializeServerAdapter() {
|
|
28
|
+
const binding = resolveRuntimeBinding({
|
|
29
|
+
cliArgs: this.cliArgs,
|
|
30
|
+
serverOptions: this.serverOptions
|
|
31
|
+
});
|
|
32
|
+
this.runtimeOrigin = binding.runtimeOrigin;
|
|
33
|
+
return this.createServerAdapter({
|
|
34
|
+
runtimeOrigin: this.runtimeOrigin,
|
|
35
|
+
appConfig: this.appConfig,
|
|
36
|
+
apiHandlers: this.apiHandlers,
|
|
37
|
+
staticRoutes: this.staticRoutes,
|
|
38
|
+
errorHandler: this.errorHandler,
|
|
39
|
+
options: { watch: binding.watch },
|
|
40
|
+
serveOptions: binding.serveOptions
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async start() {
|
|
44
|
+
if (!this.serverAdapter) {
|
|
45
|
+
this.serverAdapter = await this.initializeServerAdapter();
|
|
46
|
+
}
|
|
47
|
+
if (this.server) {
|
|
48
|
+
return this.server;
|
|
49
|
+
}
|
|
50
|
+
const { build, preview } = this.cliArgs;
|
|
51
|
+
if (build || preview) {
|
|
52
|
+
appLogger.debugTime("Building static pages");
|
|
53
|
+
await this.serverAdapter.buildStatic({ preview });
|
|
54
|
+
await this.stop(true);
|
|
55
|
+
appLogger.debugTimeEnd("Building static pages");
|
|
56
|
+
if (build) {
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const serveOptions = this.serverAdapter.getServerOptions();
|
|
62
|
+
this.server = await this.runtimeHost.start({
|
|
63
|
+
serveOptions,
|
|
64
|
+
handleRequest: async (request) => await this.serverAdapter.handleRequest(request),
|
|
65
|
+
onError: async () => {
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
this.runtimeOrigin = this.runtimeHost.getOrigin(this.server, serveOptions);
|
|
69
|
+
await this.serverAdapter.completeInitialization(this.server);
|
|
70
|
+
appLogger.info(`Node server running at ${this.runtimeOrigin}`);
|
|
71
|
+
return this.server;
|
|
72
|
+
}
|
|
73
|
+
async fetch(request) {
|
|
74
|
+
if (!this.serverAdapter) {
|
|
75
|
+
this.serverAdapter = await this.initializeServerAdapter();
|
|
76
|
+
}
|
|
77
|
+
return this.serverAdapter.handleRequest(request);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function createNodeApp(options) {
|
|
81
|
+
return new NodeEcopagesApp(options, {
|
|
82
|
+
runtimeHost: new NodeRuntimeHost(new NodeHttpRequestBridge())
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function createApp(options) {
|
|
86
|
+
return createNodeApp(options);
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
NodeEcopagesApp,
|
|
90
|
+
createApp,
|
|
91
|
+
createNodeApp
|
|
92
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Signals that the remote client closed the HTTP exchange before the Node
|
|
4
|
+
* adapter finished reading or writing the body.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* This error represents a transport-level disconnect, not an application
|
|
8
|
+
* failure. Higher layers may safely suppress logging for this error when the
|
|
9
|
+
* client socket is already gone and no meaningful response can still be sent.
|
|
10
|
+
*/
|
|
11
|
+
export declare class NodeClientAbortError extends Error {
|
|
12
|
+
/**
|
|
13
|
+
* Creates the canonical Node transport abort error used across request-body
|
|
14
|
+
* reads and response-body writes.
|
|
15
|
+
*/
|
|
16
|
+
constructor();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Type guard for the canonical client-abort error used by the Node adapter.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* Runtime hosts use this guard before logging so only explicitly classified
|
|
23
|
+
* client disconnects are muted. All other failures continue through the normal
|
|
24
|
+
* error-reporting path.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isNodeClientAbortError(error: unknown): error is NodeClientAbortError;
|
|
27
|
+
/**
|
|
28
|
+
* Bridges Node's `IncomingMessage` / `ServerResponse` pair to the Web
|
|
29
|
+
* `Request` / `Response` contract used by the shared routing pipeline.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* This class is the Node transport boundary. It owns the translation of request
|
|
33
|
+
* headers and bodies into Web primitives and the reverse translation of Web
|
|
34
|
+
* responses back onto Node streams, including client-abort normalization.
|
|
35
|
+
*/
|
|
36
|
+
export declare class NodeHttpRequestBridge {
|
|
37
|
+
/**
|
|
38
|
+
* Converts one incoming Node request into the Web `Request` shape consumed by
|
|
39
|
+
* the shared server adapter.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* Non-GET/HEAD requests retain streaming semantics via a `ReadableStream` so
|
|
43
|
+
* large request bodies do not need to be buffered before route handling begins.
|
|
44
|
+
*/
|
|
45
|
+
createWebRequest(req: IncomingMessage, runtimeOrigin: string): Request;
|
|
46
|
+
/**
|
|
47
|
+
* Sends a Web `Response` through Node's `ServerResponse` without buffering the
|
|
48
|
+
* full body in memory first.
|
|
49
|
+
*
|
|
50
|
+
* @remarks
|
|
51
|
+
* Streaming responses matter for large payloads and long-lived transports such
|
|
52
|
+
* as server-sent events. The bridge therefore forwards the `ReadableStream`
|
|
53
|
+
* directly into the Node writable response instead of materializing an
|
|
54
|
+
* intermediate `ArrayBuffer`.
|
|
55
|
+
*/
|
|
56
|
+
sendNodeResponse(res: ServerResponse, response: Response): Promise<void>;
|
|
57
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Readable } from "node:stream";
|
|
2
|
+
import { pipeline } from "node:stream/promises";
|
|
3
|
+
class NodeClientAbortError extends Error {
|
|
4
|
+
/**
|
|
5
|
+
* Creates the canonical Node transport abort error used across request-body
|
|
6
|
+
* reads and response-body writes.
|
|
7
|
+
*/
|
|
8
|
+
constructor() {
|
|
9
|
+
super("Client closed the request");
|
|
10
|
+
this.name = "ClientAbortError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function isNodeClientDisconnectCode(code) {
|
|
14
|
+
return [
|
|
15
|
+
"ECONNRESET",
|
|
16
|
+
"EPIPE",
|
|
17
|
+
"ERR_STREAM_DESTROYED",
|
|
18
|
+
"ERR_STREAM_PREMATURE_CLOSE",
|
|
19
|
+
"ERR_STREAM_UNABLE_TO_PIPE"
|
|
20
|
+
].includes(code ?? "");
|
|
21
|
+
}
|
|
22
|
+
function isNodeClientAbortError(error) {
|
|
23
|
+
return error instanceof NodeClientAbortError;
|
|
24
|
+
}
|
|
25
|
+
function toNodeClientAbortError(error) {
|
|
26
|
+
if (error instanceof NodeClientAbortError) {
|
|
27
|
+
return error;
|
|
28
|
+
}
|
|
29
|
+
if (typeof error === "object" && error !== null && "code" in error) {
|
|
30
|
+
const code = typeof error.code === "string" ? error.code : void 0;
|
|
31
|
+
if (isNodeClientDisconnectCode(code)) {
|
|
32
|
+
return new NodeClientAbortError();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
class NodeHttpRequestBridge {
|
|
38
|
+
/**
|
|
39
|
+
* Converts one incoming Node request into the Web `Request` shape consumed by
|
|
40
|
+
* the shared server adapter.
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* Non-GET/HEAD requests retain streaming semantics via a `ReadableStream` so
|
|
44
|
+
* large request bodies do not need to be buffered before route handling begins.
|
|
45
|
+
*/
|
|
46
|
+
createWebRequest(req, runtimeOrigin) {
|
|
47
|
+
const url = new URL(req.url ?? "/", runtimeOrigin);
|
|
48
|
+
const headers = new Headers();
|
|
49
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
50
|
+
if (Array.isArray(value)) {
|
|
51
|
+
for (const item of value) {
|
|
52
|
+
headers.append(key, item);
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (value !== void 0) {
|
|
57
|
+
headers.set(key, value);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
61
|
+
const requestInit = {
|
|
62
|
+
method,
|
|
63
|
+
headers
|
|
64
|
+
};
|
|
65
|
+
if (method !== "GET" && method !== "HEAD") {
|
|
66
|
+
const body = new ReadableStream({
|
|
67
|
+
start(controller) {
|
|
68
|
+
req.on("data", (chunk) => controller.enqueue(chunk));
|
|
69
|
+
req.once("end", () => controller.close());
|
|
70
|
+
req.once("aborted", () => {
|
|
71
|
+
controller.error(new NodeClientAbortError());
|
|
72
|
+
});
|
|
73
|
+
req.once("error", (err) => {
|
|
74
|
+
const isClientAbort = err.code === "ECONNRESET";
|
|
75
|
+
controller.error(isClientAbort ? new NodeClientAbortError() : err);
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
cancel() {
|
|
79
|
+
req.destroy();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
requestInit.body = body;
|
|
83
|
+
requestInit.duplex = "half";
|
|
84
|
+
}
|
|
85
|
+
return new Request(url, requestInit);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sends a Web `Response` through Node's `ServerResponse` without buffering the
|
|
89
|
+
* full body in memory first.
|
|
90
|
+
*
|
|
91
|
+
* @remarks
|
|
92
|
+
* Streaming responses matter for large payloads and long-lived transports such
|
|
93
|
+
* as server-sent events. The bridge therefore forwards the `ReadableStream`
|
|
94
|
+
* directly into the Node writable response instead of materializing an
|
|
95
|
+
* intermediate `ArrayBuffer`.
|
|
96
|
+
*/
|
|
97
|
+
async sendNodeResponse(res, response) {
|
|
98
|
+
res.statusCode = response.status;
|
|
99
|
+
response.headers.forEach((value, key) => {
|
|
100
|
+
res.setHeader(key, value);
|
|
101
|
+
});
|
|
102
|
+
if (!response.body) {
|
|
103
|
+
res.end();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const responseBody = response.body;
|
|
107
|
+
try {
|
|
108
|
+
await pipeline(Readable.fromWeb(responseBody), res);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
throw toNodeClientAbortError(error) ?? error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
NodeClientAbortError,
|
|
116
|
+
NodeHttpRequestBridge,
|
|
117
|
+
isNodeClientAbortError
|
|
118
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { WebSocket } from 'ws';
|
|
2
|
+
import type { ClientBridgeEvent, IClientBridge } from '../../types/public-types.js';
|
|
3
|
+
export declare class NodeClientBridge implements IClientBridge {
|
|
4
|
+
private subscribers;
|
|
5
|
+
private heartbeatTimer;
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* Pings all open subscribers and removes any that are no longer in OPEN state.
|
|
9
|
+
* This prevents a slow memory leak caused by zombie connections that never
|
|
10
|
+
* send a close event (e.g. abruptly killed browsers, orphaned tabs, network drops).
|
|
11
|
+
*/
|
|
12
|
+
private sweep;
|
|
13
|
+
subscribe(ws: WebSocket): void;
|
|
14
|
+
unsubscribe(ws: WebSocket): void;
|
|
15
|
+
broadcast(event: ClientBridgeEvent): void;
|
|
16
|
+
reload(): void;
|
|
17
|
+
cssUpdate(path: string): void;
|
|
18
|
+
update(path: string): void;
|
|
19
|
+
error(message: string): void;
|
|
20
|
+
get subscriberCount(): number;
|
|
21
|
+
/**
|
|
22
|
+
* Stops the heartbeat timer and clears all subscribers.
|
|
23
|
+
* Call this when the dev server is shutting down.
|
|
24
|
+
*/
|
|
25
|
+
destroy(): void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const HEARTBEAT_INTERVAL_MS = 3e4;
|
|
2
|
+
class NodeClientBridge {
|
|
3
|
+
subscribers = /* @__PURE__ */ new Set();
|
|
4
|
+
heartbeatTimer = null;
|
|
5
|
+
constructor() {
|
|
6
|
+
this.heartbeatTimer = setInterval(() => this.sweep(), HEARTBEAT_INTERVAL_MS);
|
|
7
|
+
this.heartbeatTimer.unref?.();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Pings all open subscribers and removes any that are no longer in OPEN state.
|
|
11
|
+
* This prevents a slow memory leak caused by zombie connections that never
|
|
12
|
+
* send a close event (e.g. abruptly killed browsers, orphaned tabs, network drops).
|
|
13
|
+
*/
|
|
14
|
+
sweep() {
|
|
15
|
+
for (const ws of this.subscribers) {
|
|
16
|
+
if (ws.readyState !== 1) {
|
|
17
|
+
this.subscribers.delete(ws);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
ws.ping();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
subscribe(ws) {
|
|
24
|
+
this.subscribers.add(ws);
|
|
25
|
+
}
|
|
26
|
+
unsubscribe(ws) {
|
|
27
|
+
this.subscribers.delete(ws);
|
|
28
|
+
}
|
|
29
|
+
broadcast(event) {
|
|
30
|
+
const payload = JSON.stringify(event);
|
|
31
|
+
for (const ws of this.subscribers) {
|
|
32
|
+
if (ws.readyState === 1) {
|
|
33
|
+
ws.send(payload);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
reload() {
|
|
38
|
+
this.broadcast({ type: "reload" });
|
|
39
|
+
}
|
|
40
|
+
cssUpdate(path) {
|
|
41
|
+
this.broadcast({ type: "css-update", path, timestamp: Date.now() });
|
|
42
|
+
}
|
|
43
|
+
update(path) {
|
|
44
|
+
this.broadcast({ type: "update", path, timestamp: Date.now() });
|
|
45
|
+
}
|
|
46
|
+
error(message) {
|
|
47
|
+
this.broadcast({ type: "error", message });
|
|
48
|
+
}
|
|
49
|
+
get subscriberCount() {
|
|
50
|
+
return this.subscribers.size;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Stops the heartbeat timer and clears all subscribers.
|
|
54
|
+
* Call this when the dev server is shutting down.
|
|
55
|
+
*/
|
|
56
|
+
destroy() {
|
|
57
|
+
if (this.heartbeatTimer !== null) {
|
|
58
|
+
clearInterval(this.heartbeatTimer);
|
|
59
|
+
this.heartbeatTimer = null;
|
|
60
|
+
}
|
|
61
|
+
this.subscribers.clear();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
NodeClientBridge
|
|
66
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig, IClientBridge } from '../../types/internal-types.js';
|
|
2
|
+
import { InMemoryEntrypointDependencyGraph, type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
|
|
3
|
+
import { SharedHmrManager } from '../shared/shared-hmr-manager.js';
|
|
4
|
+
export interface NodeHmrManagerParams {
|
|
5
|
+
appConfig: EcoPagesAppConfig;
|
|
6
|
+
bridge: IClientBridge;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Node development HMR manager.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* This manager owns three separate concerns:
|
|
13
|
+
* - runtime websocket event fanout
|
|
14
|
+
* - entrypoint registration and dedupe
|
|
15
|
+
* - strategy coordination for rebuilds and invalidation
|
|
16
|
+
*
|
|
17
|
+
* The strict page-entrypoint contract lives here: `registerEntrypoint()` is
|
|
18
|
+
* reserved for integration-owned page bundles, while generic script assets must
|
|
19
|
+
* go through `registerScriptEntrypoint()`.
|
|
20
|
+
*/
|
|
21
|
+
export declare class NodeHmrManager extends SharedHmrManager {
|
|
22
|
+
/**
|
|
23
|
+
* Creates the Node HMR manager over the shared coordination pipeline.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Unlike Bun, Node keeps websocket subscription wiring in the server adapter,
|
|
27
|
+
* so this manager only specializes the shared manager where runtime behavior
|
|
28
|
+
* actually differs: dependency-graph storage, missing-file tolerance, and how
|
|
29
|
+
* runtime bundle failures disable HMR.
|
|
30
|
+
*/
|
|
31
|
+
constructor({ appConfig, bridge }: NodeHmrManagerParams);
|
|
32
|
+
/**
|
|
33
|
+
* Reuses the shared in-memory dependency graph when the app already has one and
|
|
34
|
+
* otherwise creates the default Node development graph.
|
|
35
|
+
*/
|
|
36
|
+
protected createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): InMemoryEntrypointDependencyGraph;
|
|
37
|
+
/**
|
|
38
|
+
* Tells the shared HMR manager to ignore missing-file events during Node watch
|
|
39
|
+
* mode.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* Node file watching can briefly report remove-and-recreate sequences while a
|
|
43
|
+
* file is being rewritten. Treating those transient gaps as fatal would disable
|
|
44
|
+
* otherwise healthy development sessions.
|
|
45
|
+
*/
|
|
46
|
+
protected shouldSkipMissingFileChange(_filePath: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Disables HMR after a runtime bundle failure so the Node dev server can keep
|
|
49
|
+
* serving requests without repeatedly emitting broken updates.
|
|
50
|
+
*/
|
|
51
|
+
protected onRuntimeBundleFailure(error: unknown): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
2
|
+
import {
|
|
3
|
+
InMemoryEntrypointDependencyGraph
|
|
4
|
+
} from "../../services/runtime-state/entrypoint-dependency-graph.service.js";
|
|
5
|
+
import { SharedHmrManager } from "../shared/shared-hmr-manager.js";
|
|
6
|
+
class NodeHmrManager extends SharedHmrManager {
|
|
7
|
+
/**
|
|
8
|
+
* Creates the Node HMR manager over the shared coordination pipeline.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* Unlike Bun, Node keeps websocket subscription wiring in the server adapter,
|
|
12
|
+
* so this manager only specializes the shared manager where runtime behavior
|
|
13
|
+
* actually differs: dependency-graph storage, missing-file tolerance, and how
|
|
14
|
+
* runtime bundle failures disable HMR.
|
|
15
|
+
*/
|
|
16
|
+
constructor({ appConfig, bridge }) {
|
|
17
|
+
super({ appConfig, bridge });
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reuses the shared in-memory dependency graph when the app already has one and
|
|
21
|
+
* otherwise creates the default Node development graph.
|
|
22
|
+
*/
|
|
23
|
+
createEntrypointDependencyGraph(existingEntrypointDependencyGraph) {
|
|
24
|
+
return existingEntrypointDependencyGraph instanceof InMemoryEntrypointDependencyGraph ? existingEntrypointDependencyGraph : new InMemoryEntrypointDependencyGraph();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Tells the shared HMR manager to ignore missing-file events during Node watch
|
|
28
|
+
* mode.
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* Node file watching can briefly report remove-and-recreate sequences while a
|
|
32
|
+
* file is being rewritten. Treating those transient gaps as fatal would disable
|
|
33
|
+
* otherwise healthy development sessions.
|
|
34
|
+
*/
|
|
35
|
+
shouldSkipMissingFileChange(_filePath) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Disables HMR after a runtime bundle failure so the Node dev server can keep
|
|
40
|
+
* serving requests without repeatedly emitting broken updates.
|
|
41
|
+
*/
|
|
42
|
+
onRuntimeBundleFailure(error) {
|
|
43
|
+
this.enabled = false;
|
|
44
|
+
appLogger.error("[HMR] Failed to build runtime script; continuing with HMR disabled.", error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
NodeHmrManager
|
|
49
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createServer, type Server as NodeServerInstance } from 'node:http';
|
|
2
|
+
import type { RuntimeHost, RuntimeHostStartOptions } from '../shared/runtime-host.js';
|
|
3
|
+
import { NodeHttpRequestBridge } from './http-request-bridge.js';
|
|
4
|
+
type NodeServerFactory = typeof createServer;
|
|
5
|
+
/**
|
|
6
|
+
* Node runtime host that binds the shared Web-request pipeline onto a concrete
|
|
7
|
+
* Node HTTP server.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* The host owns only transport concerns: creating the Node listener, converting
|
|
11
|
+
* requests through `NodeHttpRequestBridge`, and handling socket-level failures.
|
|
12
|
+
* Routing and rendering remain in the shared server adapter.
|
|
13
|
+
*/
|
|
14
|
+
export declare class NodeRuntimeHost implements RuntimeHost<NodeServerInstance, {
|
|
15
|
+
port?: number;
|
|
16
|
+
hostname?: string;
|
|
17
|
+
}> {
|
|
18
|
+
private readonly requestBridge;
|
|
19
|
+
private readonly serverFactory;
|
|
20
|
+
/**
|
|
21
|
+
* Creates a Node runtime host with injectable request bridging and server
|
|
22
|
+
* creation seams for tests and alternate hosts.
|
|
23
|
+
*/
|
|
24
|
+
constructor(requestBridge: NodeHttpRequestBridge, serverFactory?: NodeServerFactory);
|
|
25
|
+
/**
|
|
26
|
+
* Starts the Node HTTP server and wires each request through the shared Web
|
|
27
|
+
* request pipeline.
|
|
28
|
+
*
|
|
29
|
+
* @remarks
|
|
30
|
+
* Client disconnects are treated as normal aborts and do not trigger adapter
|
|
31
|
+
* error logging or the runtime host's `onError` callback.
|
|
32
|
+
*/
|
|
33
|
+
start(options: RuntimeHostStartOptions<{
|
|
34
|
+
port?: number;
|
|
35
|
+
hostname?: string;
|
|
36
|
+
}>): Promise<NodeServerInstance>;
|
|
37
|
+
/**
|
|
38
|
+
* Stops the Node HTTP server and, by default, force-closes any remaining open
|
|
39
|
+
* connections.
|
|
40
|
+
*/
|
|
41
|
+
stop(server: NodeServerInstance, options?: {
|
|
42
|
+
force?: boolean;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Resolves the public runtime origin from the bound Node listener.
|
|
46
|
+
*
|
|
47
|
+
* @remarks
|
|
48
|
+
* The host preserves the configured hostname rather than echoing the raw socket
|
|
49
|
+
* address because users care about the requested host contract, not the local
|
|
50
|
+
* bind interface that Node chose internally.
|
|
51
|
+
*/
|
|
52
|
+
getOrigin(server: NodeServerInstance, fallbackServeOptions: {
|
|
53
|
+
port?: number;
|
|
54
|
+
hostname?: string;
|
|
55
|
+
}): string;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
|
|
3
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
4
|
+
import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
|
|
5
|
+
import { isNodeClientAbortError, NodeHttpRequestBridge } from "./http-request-bridge.js";
|
|
6
|
+
class NodeRuntimeHost {
|
|
7
|
+
/**
|
|
8
|
+
* Creates a Node runtime host with injectable request bridging and server
|
|
9
|
+
* creation seams for tests and alternate hosts.
|
|
10
|
+
*/
|
|
11
|
+
constructor(requestBridge, serverFactory = createServer) {
|
|
12
|
+
this.requestBridge = requestBridge;
|
|
13
|
+
this.serverFactory = serverFactory;
|
|
14
|
+
}
|
|
15
|
+
requestBridge;
|
|
16
|
+
serverFactory;
|
|
17
|
+
/**
|
|
18
|
+
* Starts the Node HTTP server and wires each request through the shared Web
|
|
19
|
+
* request pipeline.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* Client disconnects are treated as normal aborts and do not trigger adapter
|
|
23
|
+
* error logging or the runtime host's `onError` callback.
|
|
24
|
+
*/
|
|
25
|
+
async start(options) {
|
|
26
|
+
const hostname = String(options.serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME);
|
|
27
|
+
const port = Number(options.serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
|
|
28
|
+
const runtimeOrigin = resolveServeRuntimeOrigin({ hostname, port });
|
|
29
|
+
const server = this.serverFactory(async (req, res) => {
|
|
30
|
+
try {
|
|
31
|
+
const webRequest = this.requestBridge.createWebRequest(req, runtimeOrigin);
|
|
32
|
+
const response = await options.handleRequest(webRequest);
|
|
33
|
+
await this.requestBridge.sendNodeResponse(res, response);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
if (isNodeClientAbortError(error)) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
appLogger.error("Node server adapter request failed", error);
|
|
39
|
+
res.statusCode = 500;
|
|
40
|
+
res.end("Internal Server Error");
|
|
41
|
+
await options.onError(error instanceof Error ? error : new Error(String(error)));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
await new Promise((resolve) => {
|
|
45
|
+
server.listen(port, hostname, () => resolve());
|
|
46
|
+
});
|
|
47
|
+
return server;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Stops the Node HTTP server and, by default, force-closes any remaining open
|
|
51
|
+
* connections.
|
|
52
|
+
*/
|
|
53
|
+
async stop(server, options) {
|
|
54
|
+
await new Promise((resolve, reject) => {
|
|
55
|
+
server.close((error) => {
|
|
56
|
+
if (error) {
|
|
57
|
+
reject(error);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
resolve();
|
|
61
|
+
});
|
|
62
|
+
if (options?.force ?? true) {
|
|
63
|
+
server.closeAllConnections();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolves the public runtime origin from the bound Node listener.
|
|
69
|
+
*
|
|
70
|
+
* @remarks
|
|
71
|
+
* The host preserves the configured hostname rather than echoing the raw socket
|
|
72
|
+
* address because users care about the requested host contract, not the local
|
|
73
|
+
* bind interface that Node chose internally.
|
|
74
|
+
*/
|
|
75
|
+
getOrigin(server, fallbackServeOptions) {
|
|
76
|
+
const address = server.address();
|
|
77
|
+
const fallbackHostname = fallbackServeOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
|
|
78
|
+
if (address && typeof address === "object") {
|
|
79
|
+
return resolveServeRuntimeOrigin({
|
|
80
|
+
hostname: fallbackHostname,
|
|
81
|
+
port: address.port
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return resolveServeRuntimeOrigin({
|
|
85
|
+
hostname: fallbackHostname,
|
|
86
|
+
port: fallbackServeOptions.port
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
NodeRuntimeHost
|
|
92
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WebSocketServer } from 'ws';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
+
import { NodeClientBridge } from './node-client-bridge.js';
|
|
4
|
+
import { NodeHmrManager } from './node-hmr-manager.js';
|
|
5
|
+
export interface NodeServerDevRuntime {
|
|
6
|
+
websocketServer: WebSocketServer;
|
|
7
|
+
bridge: NodeClientBridge;
|
|
8
|
+
hmrManager: NodeHmrManager;
|
|
9
|
+
}
|
|
10
|
+
export interface NodeServerDevRuntimeFactory {
|
|
11
|
+
create(options: {
|
|
12
|
+
appConfig: EcoPagesAppConfig;
|
|
13
|
+
}): NodeServerDevRuntime;
|
|
14
|
+
}
|
|
15
|
+
export declare class DefaultNodeServerDevRuntimeFactory implements NodeServerDevRuntimeFactory {
|
|
16
|
+
create(options: {
|
|
17
|
+
appConfig: EcoPagesAppConfig;
|
|
18
|
+
}): NodeServerDevRuntime;
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WebSocketServer } from "ws";
|
|
2
|
+
import { NodeClientBridge } from "./node-client-bridge.js";
|
|
3
|
+
import { NodeHmrManager } from "./node-hmr-manager.js";
|
|
4
|
+
class DefaultNodeServerDevRuntimeFactory {
|
|
5
|
+
create(options) {
|
|
6
|
+
const websocketServer = new WebSocketServer({ noServer: true });
|
|
7
|
+
const bridge = new NodeClientBridge();
|
|
8
|
+
const hmrManager = new NodeHmrManager({ appConfig: options.appConfig, bridge });
|
|
9
|
+
return {
|
|
10
|
+
websocketServer,
|
|
11
|
+
bridge,
|
|
12
|
+
hmrManager
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
DefaultNodeServerDevRuntimeFactory
|
|
18
|
+
};
|