@ecopages/core 0.2.0-alpha.52 → 0.2.0-alpha.54
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 +2 -3
- package/package.json +97 -182
- package/src/adapters/abstract/application-adapter.test.ts +218 -0
- package/src/adapters/abstract/application-adapter.ts +379 -0
- package/src/adapters/abstract/router-adapter.ts +30 -0
- package/src/adapters/abstract/server-adapter.ts +79 -0
- package/src/adapters/bun/client-bridge.ts +62 -0
- package/src/adapters/bun/create-app.ts +214 -0
- package/src/adapters/bun/hmr-manager.test.ts +265 -0
- package/src/adapters/bun/hmr-manager.ts +88 -0
- package/src/adapters/bun/index.ts +2 -0
- package/src/adapters/bun/runtime-host.ts +76 -0
- package/src/adapters/bun/server-adapter.ts +605 -0
- package/src/adapters/bun/static-preview-host.ts +70 -0
- package/src/adapters/create-app.test.ts +10 -0
- package/src/adapters/create-app.ts +91 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/node/create-app.test.ts +76 -0
- package/src/adapters/node/create-app.ts +116 -0
- package/src/adapters/node/http-request-bridge.test.ts +146 -0
- package/src/adapters/node/http-request-bridge.ts +176 -0
- package/src/adapters/node/node-client-bridge.test.ts +198 -0
- package/src/adapters/node/node-client-bridge.ts +79 -0
- package/src/adapters/node/node-hmr-manager.test.ts +374 -0
- package/src/adapters/node/node-hmr-manager.ts +72 -0
- package/src/adapters/node/runtime-host.test.ts +49 -0
- package/src/adapters/node/runtime-host.ts +113 -0
- package/src/adapters/node/server-adapter-dependencies.ts +28 -0
- package/src/adapters/node/server-adapter.test.ts +84 -0
- package/src/adapters/node/server-adapter.ts +423 -0
- package/src/adapters/node/static-content-server.test.ts +60 -0
- package/src/adapters/node/static-content-server.ts +239 -0
- package/src/adapters/node/static-preview-host.test.ts +89 -0
- package/src/adapters/node/static-preview-host.ts +101 -0
- package/src/adapters/shared/api-response.test.ts +97 -0
- package/src/adapters/shared/api-response.ts +104 -0
- package/src/adapters/shared/application-adapter.ts +199 -0
- package/src/adapters/shared/define-api-handler.ts +66 -0
- package/src/adapters/shared/explicit-static-render-preparation.ts +58 -0
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
- package/src/adapters/shared/explicit-static-route-matcher.ts +131 -0
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +85 -0
- package/src/adapters/shared/file-route-middleware-pipeline.ts +118 -0
- package/src/adapters/shared/fs-server-response-factory.test.ts +176 -0
- package/src/adapters/shared/fs-server-response-factory.ts +96 -0
- package/src/adapters/shared/fs-server-response-matcher.test.ts +311 -0
- package/src/adapters/shared/fs-server-response-matcher.ts +240 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
- package/src/adapters/shared/hmr-html-response.ts +54 -0
- package/src/adapters/shared/hmr-manager.contract.test.ts +228 -0
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +229 -0
- package/src/adapters/shared/render-context.test.ts +244 -0
- package/src/adapters/shared/render-context.ts +161 -0
- package/src/adapters/shared/runtime-app-bootstrap.test.ts +96 -0
- package/src/adapters/shared/runtime-app-bootstrap.ts +72 -0
- package/src/adapters/shared/runtime-host.ts +11 -0
- package/src/adapters/shared/server-adapter.test.ts +130 -0
- package/src/adapters/shared/server-adapter.ts +571 -0
- package/src/adapters/shared/server-route-handler.test.ts +112 -0
- package/src/adapters/shared/server-route-handler.ts +153 -0
- package/src/adapters/shared/server-static-builder.test.ts +338 -0
- package/src/adapters/shared/server-static-builder.ts +170 -0
- package/src/adapters/shared/shared-hmr-manager.ts +298 -0
- package/src/adapters/shared/static-preview-host.ts +12 -0
- package/src/build/README.md +57 -73
- package/src/build/browser-runtime-manifest.test.ts +121 -0
- package/src/build/browser-runtime-manifest.ts +105 -0
- package/src/build/browser-runtime-plugin-helpers.test.ts +49 -0
- package/src/build/browser-runtime-plugin-helpers.ts +37 -0
- package/src/build/browser-runtime-plugin.test.ts +256 -0
- package/src/build/browser-runtime-plugin.ts +306 -0
- package/src/build/build-adapter.test.ts +463 -0
- package/src/build/build-adapter.ts +788 -0
- package/src/build/build-manifest.ts +79 -0
- package/src/build/build-types.ts +83 -0
- package/src/build/rolldown-build-adapter.test.ts +352 -0
- package/src/build/rolldown-build-adapter.ts +363 -0
- package/src/build/rolldown-plugin-bridge.test.ts +256 -0
- package/src/build/rolldown-plugin-bridge.ts +309 -0
- package/src/build/runtime-build-executor.test.ts +130 -0
- package/src/build/runtime-build-executor.ts +37 -0
- package/src/build/runtime-build-output-normalizer.ts +137 -0
- package/src/build/serialized-build-executor.test.ts +96 -0
- package/src/build/serialized-build-executor.ts +90 -0
- package/src/build/server-side-css-shim-plugin.ts +77 -0
- package/src/cache/index.ts +6 -0
- package/src/cache/module-parse-cache.test.ts +73 -0
- package/src/cache/module-parse-cache.ts +137 -0
- package/src/config/README.md +1 -1
- package/src/config/config-builder.test.ts +456 -0
- package/src/config/config-builder.ts +728 -0
- package/src/config/config-builder.typecheck.test.ts +96 -0
- package/src/config/{constants.d.ts → constants.ts} +22 -13
- package/src/dev/host-runtime.ts +34 -0
- package/src/dev/sc-server.ts +143 -0
- package/src/eco/eco.browser.test.ts +43 -0
- package/src/eco/eco.browser.ts +137 -0
- package/src/eco/eco.test.ts +781 -0
- package/src/eco/eco.ts +262 -0
- package/src/eco/eco.types.ts +293 -0
- package/src/eco/eco.utils.test.ts +219 -0
- package/src/eco/eco.utils.ts +5 -0
- package/src/eco/global-injector-map.test.ts +42 -0
- package/src/eco/global-injector-map.ts +112 -0
- package/src/eco/lazy-injector-map.test.ts +66 -0
- package/src/eco/lazy-injector-map.ts +120 -0
- package/src/eco/module-dependencies.test.ts +30 -0
- package/src/eco/module-dependencies.ts +75 -0
- package/src/errors/http-error.test.ts +134 -0
- package/src/errors/http-error.ts +72 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/locals-access-error.ts +7 -0
- package/src/global/app-logger.ts +4 -0
- package/src/global/utils.test.ts +12 -0
- 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 +162 -0
- package/src/hmr/hmr-strategy.test.ts +124 -0
- package/src/hmr/hmr-strategy.ts +177 -0
- package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
- package/src/hmr/hmr.test.e2e.ts +66 -0
- package/src/hmr/strategies/default-hmr-strategy.ts +60 -0
- package/src/hmr/strategies/js-hmr-strategy.test.ts +344 -0
- package/src/hmr/strategies/js-hmr-strategy.ts +307 -0
- package/src/index.browser.ts +3 -0
- package/src/index.ts +15 -0
- package/src/integrations/ghtml/ghtml-renderer.test.ts +253 -0
- package/src/integrations/ghtml/ghtml-renderer.ts +87 -0
- package/src/integrations/ghtml/ghtml.constants.ts +1 -0
- package/src/integrations/ghtml/ghtml.plugin.ts +28 -0
- package/src/plugins/alias-resolver-cache.test.ts +110 -0
- package/src/plugins/alias-resolver-cache.ts +145 -0
- package/src/plugins/alias-resolver-plugin.test.ts +41 -0
- package/src/plugins/alias-resolver-plugin.ts +75 -0
- package/src/plugins/eco-component-meta-plugin.test.ts +421 -0
- package/src/plugins/eco-component-meta-plugin.ts +518 -0
- package/src/plugins/foreign-jsx-override-plugin.test.ts +65 -0
- package/src/plugins/foreign-jsx-override-plugin.ts +76 -0
- package/src/plugins/integration-plugin.test.ts +151 -0
- package/src/plugins/integration-plugin.ts +344 -0
- package/src/plugins/processor.test.ts +148 -0
- package/src/plugins/processor.ts +257 -0
- package/src/plugins/{runtime-capability.d.ts → runtime-capability.ts} +8 -3
- package/src/plugins/source-transform.test.ts +82 -0
- package/src/plugins/source-transform.ts +123 -0
- package/src/route-renderer/orchestration/component-render-context.ts +338 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.ts +62 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +431 -0
- package/src/route-renderer/orchestration/integration-renderer.test.ts +2251 -0
- package/src/route-renderer/orchestration/integration-renderer.ts +1384 -0
- package/src/route-renderer/orchestration/ownership-planning.service.ts +97 -0
- package/src/route-renderer/orchestration/ownership-validation.service.ts +76 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.ts +29 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +435 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +310 -0
- package/src/route-renderer/orchestration/render-output.utils.ts +310 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +1365 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +267 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.ts +879 -0
- package/src/route-renderer/orchestration/template-serialization.test.ts +110 -0
- package/src/route-renderer/orchestration/template-serialization.ts +117 -0
- package/src/route-renderer/page-loading/component-dependency-collection.ts +202 -0
- package/src/route-renderer/page-loading/declared-asset-collection.ts +153 -0
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +761 -0
- package/src/route-renderer/page-loading/dependency-resolver.ts +144 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +75 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.ts +167 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.ts +74 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.ts +60 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.ts +16 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.ts +244 -0
- package/src/route-renderer/page-loading/page-module-loader.test.ts +183 -0
- package/src/route-renderer/page-loading/page-module-loader.ts +184 -0
- package/src/route-renderer/route-renderer.ts +133 -0
- package/src/router/client/link-intent.test.browser.ts +51 -0
- package/src/router/client/link-intent.ts +92 -0
- package/src/router/client/navigation-coordinator.test.ts +237 -0
- package/src/router/client/navigation-coordinator.ts +453 -0
- package/src/router/server/route-registry.test.ts +176 -0
- package/src/router/server/route-registry.ts +382 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +66 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +473 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +344 -0
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
- package/src/services/assets/asset-processing-service/asset.factory.ts +105 -0
- package/src/services/assets/asset-processing-service/assets.types.ts +128 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +74 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +98 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +104 -0
- package/src/services/assets/asset-processing-service/index.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.test.ts +135 -0
- package/src/services/assets/asset-processing-service/page-package.ts +103 -0
- package/src/services/assets/asset-processing-service/{processor.interface.d.ts → processor.interface.ts} +10 -5
- package/src/services/assets/asset-processing-service/processor.registry.ts +18 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +83 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +173 -0
- package/src/services/assets/asset-processing-service/processors/index.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +188 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +138 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +326 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +116 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +270 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +145 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +261 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +72 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +83 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +65 -0
- package/src/services/assets/browser-bundle.service.test.ts +66 -0
- package/src/services/assets/browser-bundle.service.ts +109 -0
- package/src/services/cache/cache.types.ts +126 -0
- package/src/services/cache/index.ts +18 -0
- package/src/services/cache/memory-cache-store.test.ts +225 -0
- package/src/services/cache/memory-cache-store.ts +130 -0
- package/src/services/cache/page-cache-service.test.ts +175 -0
- package/src/services/cache/page-cache-service.ts +202 -0
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
- package/src/services/cache/page-request-cache-coordinator.service.ts +131 -0
- package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
- package/src/services/html/html-rewriter-provider.service.ts +105 -0
- package/src/services/html/html-transformer.service.test.ts +544 -0
- package/src/services/html/html-transformer.service.ts +369 -0
- package/src/services/invalidation/development-invalidation.service.test.ts +87 -0
- package/src/services/invalidation/development-invalidation.service.ts +262 -0
- package/src/services/module-loading/app-module-loader.service.ts +9 -0
- package/src/services/module-loading/app-server-module-transpiler.service.test.ts +297 -0
- package/src/services/module-loading/app-server-module-transpiler.service.ts +168 -0
- package/src/services/module-loading/host-module-loader-registry.ts +15 -0
- package/src/services/module-loading/{module-loading-types.d.ts → module-loading-types.ts} +1 -0
- package/src/services/module-loading/page-module-import.service.test.ts +652 -0
- package/src/services/module-loading/page-module-import.service.ts +302 -0
- package/src/services/module-loading/server-module-transpiler.service.test.ts +242 -0
- package/src/services/module-loading/server-module-transpiler.service.ts +104 -0
- package/src/services/module-loading/source-module-support.ts +19 -0
- package/src/services/runtime-state/dev-graph.service.ts +217 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
- package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
- package/src/services/validation/schema-validation-service.test.ts +223 -0
- package/src/services/validation/schema-validation-service.ts +204 -0
- package/src/services/validation/{standard-schema.types.d.ts → standard-schema.types.ts} +20 -17
- package/src/static-site-generator/static-site-generator.test.ts +408 -0
- package/src/static-site-generator/static-site-generator.ts +445 -0
- package/src/types/internal-types.ts +243 -0
- package/src/types/public-types.ts +1508 -0
- package/src/utils/deep-merge.test.ts +114 -0
- package/src/utils/deep-merge.ts +47 -0
- package/src/utils/hash.ts +5 -0
- package/src/utils/html-escaping.ts +9 -0
- package/src/utils/invariant.test.ts +22 -0
- package/src/utils/invariant.ts +15 -0
- package/src/utils/locals-utils.ts +37 -0
- package/src/utils/parse-cli-args.test.ts +69 -0
- package/src/utils/parse-cli-args.ts +105 -0
- package/src/utils/path-utils.module.ts +14 -0
- package/src/utils/path-utils.test.ts +15 -0
- package/src/utils/resolve-work-dir.ts +45 -0
- package/src/utils/runtime.ts +44 -0
- package/src/utils/server-utils.module.ts +67 -0
- package/src/utils/server-utils.test.ts +38 -0
- package/src/watchers/project-watcher.integration.test.ts +337 -0
- package/src/watchers/project-watcher.test-helpers.ts +42 -0
- package/src/watchers/project-watcher.test.ts +768 -0
- package/src/watchers/project-watcher.ts +357 -0
- package/src/adapters/abstract/application-adapter.d.ts +0 -194
- package/src/adapters/abstract/application-adapter.js +0 -121
- package/src/adapters/abstract/router-adapter.d.ts +0 -26
- package/src/adapters/abstract/router-adapter.js +0 -5
- package/src/adapters/abstract/server-adapter.d.ts +0 -69
- package/src/adapters/abstract/server-adapter.js +0 -15
- package/src/adapters/bun/client-bridge.d.ts +0 -34
- package/src/adapters/bun/client-bridge.js +0 -48
- package/src/adapters/bun/create-app.d.ts +0 -60
- package/src/adapters/bun/create-app.js +0 -140
- package/src/adapters/bun/hmr-manager.d.ts +0 -47
- package/src/adapters/bun/hmr-manager.js +0 -58
- package/src/adapters/bun/index.d.ts +0 -2
- package/src/adapters/bun/index.js +0 -8
- package/src/adapters/bun/runtime-host.d.ts +0 -52
- package/src/adapters/bun/runtime-host.js +0 -56
- package/src/adapters/bun/server-adapter.d.ts +0 -216
- package/src/adapters/bun/server-adapter.js +0 -445
- package/src/adapters/bun/static-preview-host.d.ts +0 -28
- package/src/adapters/bun/static-preview-host.js +0 -45
- package/src/adapters/create-app.d.ts +0 -20
- package/src/adapters/create-app.js +0 -66
- package/src/adapters/index.d.ts +0 -2
- package/src/adapters/index.js +0 -8
- package/src/adapters/node/create-app.d.ts +0 -24
- package/src/adapters/node/create-app.js +0 -92
- package/src/adapters/node/http-request-bridge.d.ts +0 -57
- package/src/adapters/node/http-request-bridge.js +0 -118
- package/src/adapters/node/node-client-bridge.d.ts +0 -26
- package/src/adapters/node/node-client-bridge.js +0 -66
- package/src/adapters/node/node-hmr-manager.d.ts +0 -52
- package/src/adapters/node/node-hmr-manager.js +0 -49
- package/src/adapters/node/runtime-host.d.ts +0 -57
- package/src/adapters/node/runtime-host.js +0 -92
- package/src/adapters/node/server-adapter-dependencies.d.ts +0 -19
- package/src/adapters/node/server-adapter-dependencies.js +0 -18
- package/src/adapters/node/server-adapter.d.ts +0 -138
- package/src/adapters/node/server-adapter.js +0 -315
- package/src/adapters/node/static-content-server.d.ts +0 -60
- package/src/adapters/node/static-content-server.js +0 -194
- package/src/adapters/node/static-preview-host.d.ts +0 -55
- package/src/adapters/node/static-preview-host.js +0 -68
- package/src/adapters/shared/api-response.d.ts +0 -52
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.d.ts +0 -18
- package/src/adapters/shared/application-adapter.js +0 -90
- 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/explicit-static-render-preparation.d.ts +0 -25
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -41
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -62
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.d.ts +0 -23
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -75
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.d.ts +0 -22
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/render-context.d.ts +0 -16
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +0 -26
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
- package/src/adapters/shared/runtime-host.d.ts +0 -12
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.d.ts +0 -108
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.d.ts +0 -89
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.d.ts +0 -71
- package/src/adapters/shared/server-static-builder.js +0 -100
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/adapters/shared/static-preview-host.d.ts +0 -10
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/build/browser-runtime-import-rewrite-plugin.d.ts +0 -26
- package/src/build/browser-runtime-import-rewrite-plugin.js +0 -165
- package/src/build/browser-runtime-manifest.d.ts +0 -31
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/build-adapter.d.ts +0 -247
- package/src/build/build-adapter.js +0 -671
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -52
- package/src/build/build-types.d.ts +0 -57
- package/src/build/build-types.js +0 -0
- package/src/build/dev-build-coordinator.d.ts +0 -72
- package/src/build/dev-build-coordinator.js +0 -154
- package/src/build/esbuild-build-adapter.d.ts +0 -79
- package/src/build/esbuild-build-adapter.js +0 -521
- package/src/build/runtime-build-executor.d.ts +0 -14
- package/src/build/runtime-build-executor.js +0 -22
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/config/config-builder.d.ts +0 -252
- package/src/config/config-builder.js +0 -598
- package/src/config/constants.js +0 -25
- package/src/dev/host-runtime.d.ts +0 -10
- package/src/dev/host-runtime.js +0 -24
- package/src/dev/sc-server.d.ts +0 -30
- package/src/dev/sc-server.js +0 -111
- package/src/eco/eco.browser.d.ts +0 -2
- package/src/eco/eco.browser.js +0 -88
- package/src/eco/eco.d.ts +0 -9
- package/src/eco/eco.js +0 -119
- package/src/eco/eco.types.d.ts +0 -233
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +0 -1
- package/src/eco/eco.utils.js +0 -10
- package/src/eco/global-injector-map.d.ts +0 -16
- package/src/eco/global-injector-map.js +0 -80
- package/src/eco/lazy-injector-map.d.ts +0 -8
- package/src/eco/lazy-injector-map.js +0 -70
- package/src/eco/module-dependencies.d.ts +0 -18
- package/src/eco/module-dependencies.js +0 -49
- package/src/errors/http-error.d.ts +0 -31
- package/src/errors/http-error.js +0 -50
- package/src/errors/index.d.ts +0 -3
- package/src/errors/index.js +0 -6
- package/src/errors/locals-access-error.d.ts +0 -4
- package/src/errors/locals-access-error.js +0 -9
- package/src/global/app-logger.d.ts +0 -2
- package/src/global/app-logger.js +0 -6
- package/src/hmr/client/hmr-runtime.d.ts +0 -5
- package/src/hmr/client/hmr-runtime.js +0 -117
- package/src/hmr/hmr-strategy.d.ts +0 -162
- package/src/hmr/hmr-strategy.js +0 -44
- package/src/hmr/hmr.postcss.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
- package/src/hmr/strategies/default-hmr-strategy.js +0 -34
- package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -134
- package/src/hmr/strategies/js-hmr-strategy.js +0 -173
- package/src/index.browser.d.ts +0 -3
- package/src/index.browser.js +0 -4
- package/src/index.d.ts +0 -6
- package/src/index.js +0 -21
- package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -16
- package/src/integrations/ghtml/ghtml-renderer.js +0 -57
- package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
- package/src/integrations/ghtml/ghtml.constants.js +0 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
- package/src/integrations/ghtml/ghtml.plugin.js +0 -20
- package/src/plugins/alias-resolver-plugin.d.ts +0 -3
- package/src/plugins/alias-resolver-plugin.js +0 -61
- package/src/plugins/eco-component-meta-plugin.d.ts +0 -108
- package/src/plugins/eco-component-meta-plugin.js +0 -175
- package/src/plugins/foreign-jsx-override-plugin.d.ts +0 -33
- package/src/plugins/foreign-jsx-override-plugin.js +0 -41
- package/src/plugins/integration-plugin.d.ts +0 -230
- package/src/plugins/integration-plugin.js +0 -201
- package/src/plugins/processor.d.ts +0 -97
- package/src/plugins/processor.js +0 -141
- package/src/plugins/runtime-capability.js +0 -0
- package/src/plugins/source-transform.d.ts +0 -46
- package/src/plugins/source-transform.js +0 -71
- package/src/route-renderer/orchestration/component-render-context.d.ts +0 -97
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- 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/foreign-subtree-execution.service.d.ts +0 -110
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
- package/src/route-renderer/orchestration/integration-renderer.d.ts +0 -534
- package/src/route-renderer/orchestration/integration-renderer.js +0 -991
- 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/ownership-validation.service.d.ts +0 -29
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +0 -3
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- 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/render-output.utils.d.ts +0 -66
- package/src/route-renderer/orchestration/render-output.utils.js +0 -171
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +0 -156
- 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/route-renderer/page-loading/component-dependency-collection.d.ts +0 -37
- package/src/route-renderer/page-loading/component-dependency-collection.js +0 -132
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +0 -24
- package/src/route-renderer/page-loading/declared-asset-collection.js +0 -106
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +0 -35
- package/src/route-renderer/page-loading/dependency-resolver.js +0 -115
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +0 -11
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +0 -57
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +0 -45
- package/src/route-renderer/page-loading/lazy-entry-collection.js +0 -105
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +0 -19
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +0 -40
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +0 -5
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +0 -33
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +0 -3
- package/src/route-renderer/page-loading/module-declaration-scripts.js +0 -18
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +0 -13
- package/src/route-renderer/page-loading/page-dependency-bundling.js +0 -137
- package/src/route-renderer/page-loading/page-module-loader.d.ts +0 -90
- package/src/route-renderer/page-loading/page-module-loader.js +0 -127
- package/src/route-renderer/route-renderer.d.ts +0 -69
- package/src/route-renderer/route-renderer.js +0 -80
- package/src/router/client/link-intent.js +0 -34
- package/src/router/client/link-intent.test.browser.d.ts +0 -1
- package/src/router/client/link-intent.test.browser.js +0 -43
- package/src/router/client/navigation-coordinator.d.ts +0 -169
- package/src/router/client/navigation-coordinator.js +0 -215
- package/src/router/server/route-registry.d.ts +0 -78
- package/src/router/server/route-registry.js +0 -262
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +0 -3
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +0 -56
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +0 -103
- package/src/services/assets/asset-processing-service/asset-processing.service.js +0 -285
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +0 -17
- package/src/services/assets/asset-processing-service/asset.factory.js +0 -82
- package/src/services/assets/asset-processing-service/assets.types.d.ts +0 -103
- 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 +0 -57
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +0 -49
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +0 -20
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +0 -41
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +0 -30
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +0 -65
- package/src/services/assets/asset-processing-service/index.d.ts +0 -6
- package/src/services/assets/asset-processing-service/index.js +0 -6
- package/src/services/assets/asset-processing-service/page-package.d.ts +0 -6
- package/src/services/assets/asset-processing-service/page-package.js +0 -80
- package/src/services/assets/asset-processing-service/processor.interface.js +0 -6
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +0 -8
- package/src/services/assets/asset-processing-service/processor.registry.js +0 -15
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +0 -24
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +0 -65
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -22
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +0 -136
- package/src/services/assets/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/index.js +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +0 -6
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +0 -120
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -9
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +0 -97
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -42
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +0 -126
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -8
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -59
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -69
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -18
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +0 -45
- package/src/services/assets/browser-bundle.service.d.ts +0 -73
- package/src/services/assets/browser-bundle.service.js +0 -41
- package/src/services/cache/cache.types.d.ts +0 -107
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +0 -7
- package/src/services/cache/index.js +0 -7
- package/src/services/cache/memory-cache-store.d.ts +0 -42
- package/src/services/cache/memory-cache-store.js +0 -98
- package/src/services/cache/page-cache-service.d.ts +0 -70
- package/src/services/cache/page-cache-service.js +0 -152
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +0 -75
- package/src/services/cache/page-request-cache-coordinator.service.js +0 -109
- package/src/services/html/html-rewriter-provider.service.d.ts +0 -40
- package/src/services/html/html-rewriter-provider.service.js +0 -68
- package/src/services/html/html-transformer.service.d.ts +0 -96
- package/src/services/html/html-transformer.service.js +0 -287
- package/src/services/invalidation/development-invalidation.service.d.ts +0 -74
- package/src/services/invalidation/development-invalidation.service.js +0 -190
- package/src/services/module-loading/app-module-loader.service.d.ts +0 -7
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +0 -24
- package/src/services/module-loading/app-server-module-transpiler.service.js +0 -151
- package/src/services/module-loading/host-module-loader-registry.d.ts +0 -4
- package/src/services/module-loading/host-module-loader-registry.js +0 -15
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +0 -38
- package/src/services/module-loading/node-bootstrap-plugin.js +0 -215
- package/src/services/module-loading/page-module-import.service.d.ts +0 -95
- package/src/services/module-loading/page-module-import.service.js +0 -191
- package/src/services/module-loading/server-module-transpiler.service.d.ts +0 -63
- package/src/services/module-loading/server-module-transpiler.service.js +0 -64
- package/src/services/module-loading/source-module-support.d.ts +0 -5
- package/src/services/module-loading/source-module-support.js +0 -8
- package/src/services/runtime-state/dev-graph.service.d.ts +0 -118
- package/src/services/runtime-state/dev-graph.service.js +0 -162
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +0 -41
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +0 -85
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +0 -26
- package/src/services/runtime-state/server-invalidation-state.service.js +0 -35
- package/src/services/validation/schema-validation-service.d.ts +0 -122
- package/src/services/validation/schema-validation-service.js +0 -101
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +0 -104
- package/src/static-site-generator/static-site-generator.js +0 -316
- package/src/types/internal-types.d.ts +0 -232
- package/src/types/internal-types.js +0 -0
- package/src/types/public-types.d.ts +0 -1307
- package/src/types/public-types.js +0 -0
- package/src/utils/deep-merge.d.ts +0 -14
- package/src/utils/deep-merge.js +0 -32
- package/src/utils/hash.d.ts +0 -1
- package/src/utils/hash.js +0 -7
- package/src/utils/html-escaping.d.ts +0 -7
- package/src/utils/html-escaping.js +0 -6
- package/src/utils/html.js +0 -4
- package/src/utils/invariant.d.ts +0 -5
- package/src/utils/invariant.js +0 -11
- package/src/utils/locals-utils.d.ts +0 -15
- package/src/utils/locals-utils.js +0 -24
- package/src/utils/parse-cli-args.d.ts +0 -27
- package/src/utils/parse-cli-args.js +0 -62
- package/src/utils/path-utils.module.d.ts +0 -5
- package/src/utils/path-utils.module.js +0 -14
- package/src/utils/resolve-work-dir.d.ts +0 -11
- package/src/utils/resolve-work-dir.js +0 -31
- package/src/utils/runtime.d.ts +0 -11
- package/src/utils/runtime.js +0 -40
- package/src/utils/server-utils.module.d.ts +0 -19
- package/src/utils/server-utils.module.js +0 -56
- package/src/watchers/project-watcher.d.ts +0 -136
- package/src/watchers/project-watcher.js +0 -275
- package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
- package/src/watchers/project-watcher.test-helpers.js +0 -52
- /package/src/utils/{html.d.ts → html.ts} +0 -0
|
@@ -1,57 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,92 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
-
};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { type Server as NodeHttpServer } from 'node:http';
|
|
2
|
-
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';
|
|
5
|
-
import type { ServerAdapterResult } from '../abstract/server-adapter.js';
|
|
6
|
-
import { NodeHttpRequestBridge } from './http-request-bridge.js';
|
|
7
|
-
import type { StaticPreviewHost } from '../shared/static-preview-host.js';
|
|
8
|
-
import { type NodeServerDevRuntimeFactory } from './server-adapter-dependencies.js';
|
|
9
|
-
export type NodeServerInstance = NodeHttpServer;
|
|
10
|
-
export type NodeServeAdapterServerOptions = {
|
|
11
|
-
port?: number;
|
|
12
|
-
hostname?: string;
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
};
|
|
15
|
-
export interface NodeServerAdapterParams {
|
|
16
|
-
appConfig: EcoPagesAppConfig;
|
|
17
|
-
runtimeOrigin: string;
|
|
18
|
-
serveOptions: NodeServeAdapterServerOptions;
|
|
19
|
-
apiHandlers?: ApiHandler[];
|
|
20
|
-
staticRoutes?: StaticRoute[];
|
|
21
|
-
errorHandler?: ErrorHandler;
|
|
22
|
-
options?: {
|
|
23
|
-
watch?: boolean;
|
|
24
|
-
};
|
|
25
|
-
previewHost?: StaticPreviewHost;
|
|
26
|
-
requestBridge?: NodeHttpRequestBridge;
|
|
27
|
-
devRuntimeFactory?: NodeServerDevRuntimeFactory;
|
|
28
|
-
}
|
|
29
|
-
export interface NodeServerAdapterResult extends ServerAdapterResult {
|
|
30
|
-
completeInitialization: (server: NodeServerInstance) => Promise<void>;
|
|
31
|
-
handleRequest: (request: Request) => Promise<Response>;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Node.js HTTP server adapter for the Ecopages runtime.
|
|
35
|
-
*
|
|
36
|
-
* `NodeServerAdapter` bridges the Node.js `http` module and the Ecopages
|
|
37
|
-
* `SharedServerAdapter` abstraction, translating between Node's
|
|
38
|
-
* `IncomingMessage`/`ServerResponse` API and the platform-agnostic Web
|
|
39
|
-
* `Request`/`Response` model.
|
|
40
|
-
*
|
|
41
|
-
* Lifecycle:
|
|
42
|
-
* 1. `createAdapter()` — calls `initialize()` and returns the public adapter result.
|
|
43
|
-
* 2. `completeInitialization(server)` — called once the HTTP server is listening.
|
|
44
|
-
* Conditionally wires HMR, WebSocket upgrades, and the file watcher when
|
|
45
|
-
* `options.watch` is `true`.
|
|
46
|
-
* 3. `handleRequest(request)` — delegates to `handleSharedRequest` for routing;
|
|
47
|
-
* intercepts `ClientAbortError` to return 499 instead of 500.
|
|
48
|
-
* 4. `buildStatic()` — spins up an ephemeral runtime server, generates all static
|
|
49
|
-
* pages against it, then tears it down.
|
|
50
|
-
*
|
|
51
|
-
* @see SharedServerAdapter for routing, caching and response handler logic.
|
|
52
|
-
*/
|
|
53
|
-
export declare class NodeServerAdapter extends SharedServerAdapter<NodeServerAdapterParams, NodeServerAdapterResult> {
|
|
54
|
-
private serverInstance;
|
|
55
|
-
private initialized;
|
|
56
|
-
private apiHandlers;
|
|
57
|
-
private staticRoutes;
|
|
58
|
-
private errorHandler?;
|
|
59
|
-
private bridge;
|
|
60
|
-
private hmrManager;
|
|
61
|
-
private readonly previewHost;
|
|
62
|
-
private readonly requestBridge;
|
|
63
|
-
private readonly devRuntimeFactory;
|
|
64
|
-
private shouldInjectHmrScript;
|
|
65
|
-
private isHtmlResponse;
|
|
66
|
-
private maybeInjectHmrScript;
|
|
67
|
-
constructor(options: NodeServerAdapterParams);
|
|
68
|
-
/**
|
|
69
|
-
* Prepares the adapter for use.
|
|
70
|
-
*
|
|
71
|
-
* Order is intentional:
|
|
72
|
-
* 1. **Loaders** are registered first so processors and integrations can
|
|
73
|
-
* reference loader-provided file types in their own plugins.
|
|
74
|
-
* 2. **Public dir** is copied before any build so static assets are in `distDir`
|
|
75
|
-
* before the first request arrives.
|
|
76
|
-
* 3. **Plugins** (processors, then integrations) are set up after the public dir
|
|
77
|
-
* is in place so they can safely reference dist-relative paths.
|
|
78
|
-
* 4. **Router** is initialised last because it may depend on files written by
|
|
79
|
-
* processors during their `setup()` calls.
|
|
80
|
-
*/
|
|
81
|
-
initialize(): Promise<void>;
|
|
82
|
-
private prepareRuntimePublicDir;
|
|
83
|
-
getServerOptions(): NodeServeAdapterServerOptions;
|
|
84
|
-
buildStatic(options?: {
|
|
85
|
-
preview?: boolean;
|
|
86
|
-
}): Promise<void>;
|
|
87
|
-
private startBuildRuntimeServer;
|
|
88
|
-
private getListeningServerOrigin;
|
|
89
|
-
/**
|
|
90
|
-
* Gracefully shuts down the ephemeral build runtime server.
|
|
91
|
-
*
|
|
92
|
-
* `closeAllConnections()` is called *before* `close()` because `server.close()`
|
|
93
|
-
* only stops accepting new connections — it waits for existing keep-alive
|
|
94
|
-
* connections to finish naturally, which can stall the build indefinitely.
|
|
95
|
-
* `closeAllConnections()` force-closes any lingering sockets immediately so
|
|
96
|
-
* the `close()` callback fires promptly.
|
|
97
|
-
*
|
|
98
|
-
* The `NodeClientBridge` heartbeat is also destroyed here so its `setInterval`
|
|
99
|
-
* does not prevent the Node.js process from exiting cleanly after the build.
|
|
100
|
-
*/
|
|
101
|
-
private stopBuildRuntimeServer;
|
|
102
|
-
createAdapter(): Promise<NodeServerAdapterResult>;
|
|
103
|
-
/**
|
|
104
|
-
* Handles a single incoming Web `Request` and returns a Web `Response`.
|
|
105
|
-
*
|
|
106
|
-
* Delegates to `handleSharedRequest` for all routing, caching, and response
|
|
107
|
-
* handler logic. The only Node-specific concern here is translating a
|
|
108
|
-
* `ClientAbortError` — which the body `ReadableStream` raises when the
|
|
109
|
-
* underlying socket closes early — into a 499 response so it does not
|
|
110
|
-
* incorrectly surface as a 500 in application logs.
|
|
111
|
-
*/
|
|
112
|
-
handleRequest(request: Request): Promise<Response>;
|
|
113
|
-
/**
|
|
114
|
-
* Called once the HTTP server is bound and listening.
|
|
115
|
-
*
|
|
116
|
-
* When `options.watch` is `true` this method wires the full HMR pipeline:
|
|
117
|
-
* - A `WebSocketServer` is attached to the existing HTTP server via the
|
|
118
|
-
* `upgrade` event (no separate port needed).
|
|
119
|
-
* - `NodeClientBridge` tracks active WebSocket connections and handles
|
|
120
|
-
* broadcast + heartbeat cleanup.
|
|
121
|
-
* - `NodeHmrManager` watches the filesystem and triggers incremental esbuild
|
|
122
|
-
* rebuilds, notifying connected clients via the bridge.
|
|
123
|
-
* - Shared watcher bootstrapping listens for route-level file changes and
|
|
124
|
-
* refreshes the router and response handlers when pages are added or removed.
|
|
125
|
-
*
|
|
126
|
-
* WebSocket upgrade requests that do not target `/_hmr` are rejected with an
|
|
127
|
-
* immediate socket destroy to prevent unhandled upgrade leaks.
|
|
128
|
-
*/
|
|
129
|
-
completeInitialization(server: NodeServerInstance): Promise<void>;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Factory function that creates and fully initialises a `NodeServerAdapter`.
|
|
133
|
-
*
|
|
134
|
-
* `runtimeOrigin` is derived from `serveOptions` when not explicitly provided,
|
|
135
|
-
* so callers only need to set it when the server is behind a reverse proxy that
|
|
136
|
-
* changes the effective host or port.
|
|
137
|
-
*/
|
|
138
|
-
export declare function createNodeServerAdapter(params: NodeServerAdapterParams): Promise<NodeServerAdapterResult>;
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import { createServer } from "node:http";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { fileSystem } from "@ecopages/file-system";
|
|
4
|
-
import { getAppBrowserBuildPlugins, setupAppRuntimePlugins } from "../../build/build-adapter.js";
|
|
5
|
-
import { installAppRuntimeBuildExecutor } from "../../build/runtime-build-executor.js";
|
|
6
|
-
import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
|
|
7
|
-
import { appLogger } from "../../global/app-logger.js";
|
|
8
|
-
import { NodeClientBridge } from "./node-client-bridge.js";
|
|
9
|
-
import { NodeHmrManager } from "./node-hmr-manager.js";
|
|
10
|
-
import { ProjectWatcher } from "../../watchers/project-watcher.js";
|
|
11
|
-
import { StaticSiteGenerator } from "../../static-site-generator/static-site-generator.js";
|
|
12
|
-
import { SharedServerAdapter } from "../shared/server-adapter.js";
|
|
13
|
-
import { ServerStaticBuilder } from "../shared/server-static-builder.js";
|
|
14
|
-
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
|
|
15
|
-
import {
|
|
16
|
-
injectHmrRuntimeIntoHtmlResponse,
|
|
17
|
-
isHtmlResponse,
|
|
18
|
-
shouldInjectHmrHtmlResponse
|
|
19
|
-
} from "../shared/hmr-html-response.js";
|
|
20
|
-
import { resolveServeRuntimeOrigin } from "../shared/runtime-app-bootstrap.js";
|
|
21
|
-
import { NodeClientAbortError, NodeHttpRequestBridge } from "./http-request-bridge.js";
|
|
22
|
-
import { NodeStaticPreviewHost } from "./static-preview-host.js";
|
|
23
|
-
import { DefaultNodeServerDevRuntimeFactory } from "./server-adapter-dependencies.js";
|
|
24
|
-
class NodeServerAdapter extends SharedServerAdapter {
|
|
25
|
-
serverInstance = null;
|
|
26
|
-
initialized = false;
|
|
27
|
-
apiHandlers;
|
|
28
|
-
staticRoutes;
|
|
29
|
-
errorHandler;
|
|
30
|
-
bridge = null;
|
|
31
|
-
hmrManager = null;
|
|
32
|
-
previewHost;
|
|
33
|
-
requestBridge;
|
|
34
|
-
devRuntimeFactory;
|
|
35
|
-
shouldInjectHmrScript() {
|
|
36
|
-
return shouldInjectHmrHtmlResponse(this.options?.watch === true, this.hmrManager ?? void 0);
|
|
37
|
-
}
|
|
38
|
-
isHtmlResponse(response) {
|
|
39
|
-
return isHtmlResponse(response);
|
|
40
|
-
}
|
|
41
|
-
async maybeInjectHmrScript(response) {
|
|
42
|
-
if (this.shouldInjectHmrScript() && this.isHtmlResponse(response)) {
|
|
43
|
-
return injectHmrRuntimeIntoHtmlResponse(response);
|
|
44
|
-
}
|
|
45
|
-
return response;
|
|
46
|
-
}
|
|
47
|
-
constructor(options) {
|
|
48
|
-
super(options);
|
|
49
|
-
this.apiHandlers = options.apiHandlers || [];
|
|
50
|
-
this.staticRoutes = options.staticRoutes || [];
|
|
51
|
-
this.errorHandler = options.errorHandler;
|
|
52
|
-
this.previewHost = options.previewHost;
|
|
53
|
-
this.requestBridge = options.requestBridge;
|
|
54
|
-
this.devRuntimeFactory = options.devRuntimeFactory;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Prepares the adapter for use.
|
|
58
|
-
*
|
|
59
|
-
* Order is intentional:
|
|
60
|
-
* 1. **Loaders** are registered first so processors and integrations can
|
|
61
|
-
* reference loader-provided file types in their own plugins.
|
|
62
|
-
* 2. **Public dir** is copied before any build so static assets are in `distDir`
|
|
63
|
-
* before the first request arrives.
|
|
64
|
-
* 3. **Plugins** (processors, then integrations) are set up after the public dir
|
|
65
|
-
* is in place so they can safely reference dist-relative paths.
|
|
66
|
-
* 4. **Router** is initialised last because it may depend on files written by
|
|
67
|
-
* processors during their `setup()` calls.
|
|
68
|
-
*/
|
|
69
|
-
async initialize() {
|
|
70
|
-
installAppRuntimeBuildExecutor(this.appConfig, {
|
|
71
|
-
development: this.options?.watch === true
|
|
72
|
-
});
|
|
73
|
-
this.prepareRuntimePublicDir();
|
|
74
|
-
await setupAppRuntimePlugins({
|
|
75
|
-
appConfig: this.appConfig,
|
|
76
|
-
runtimeOrigin: this.runtimeOrigin,
|
|
77
|
-
hmrManager: this.hmrManager ?? void 0
|
|
78
|
-
});
|
|
79
|
-
await this.initializeSharedRouteHandling({
|
|
80
|
-
staticRoutes: this.staticRoutes,
|
|
81
|
-
hmrManager: this.hmrManager ?? void 0
|
|
82
|
-
});
|
|
83
|
-
this.staticSiteGenerator = new StaticSiteGenerator({ appConfig: this.appConfig });
|
|
84
|
-
this.staticBuilder = new ServerStaticBuilder({
|
|
85
|
-
appConfig: this.appConfig,
|
|
86
|
-
staticSiteGenerator: this.staticSiteGenerator,
|
|
87
|
-
serveOptions: this.serveOptions,
|
|
88
|
-
apiHandlers: this.apiHandlers
|
|
89
|
-
});
|
|
90
|
-
this.initialized = true;
|
|
91
|
-
}
|
|
92
|
-
prepareRuntimePublicDir() {
|
|
93
|
-
const srcPublicDir = path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.publicDir);
|
|
94
|
-
if (fileSystem.exists(srcPublicDir)) {
|
|
95
|
-
fileSystem.copyDir(srcPublicDir, path.join(this.appConfig.rootDir, this.appConfig.distDir));
|
|
96
|
-
}
|
|
97
|
-
fileSystem.ensureDir(path.join(this.appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR));
|
|
98
|
-
}
|
|
99
|
-
getServerOptions() {
|
|
100
|
-
return {
|
|
101
|
-
...this.serveOptions
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
async buildStatic(options) {
|
|
105
|
-
if (!this.initialized) {
|
|
106
|
-
await this.initialize();
|
|
107
|
-
}
|
|
108
|
-
const buildServer = await this.startBuildRuntimeServer();
|
|
109
|
-
const buildRuntimeOrigin = this.getListeningServerOrigin(buildServer);
|
|
110
|
-
try {
|
|
111
|
-
await this.staticBuilder.build(
|
|
112
|
-
{ preview: false, baseUrl: buildRuntimeOrigin },
|
|
113
|
-
{
|
|
114
|
-
router: this.router,
|
|
115
|
-
routeRendererFactory: this.routeRendererFactory,
|
|
116
|
-
staticRoutes: this.staticRoutes
|
|
117
|
-
}
|
|
118
|
-
);
|
|
119
|
-
} finally {
|
|
120
|
-
await this.stopBuildRuntimeServer(buildServer);
|
|
121
|
-
}
|
|
122
|
-
if (!options?.preview) {
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
await this.previewHost.start({
|
|
126
|
-
appConfig: this.appConfig,
|
|
127
|
-
hostname: String(this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME),
|
|
128
|
-
port: Number(this.serveOptions.port || DEFAULT_ECOPAGES_PORT)
|
|
129
|
-
});
|
|
130
|
-
const previewHostname = this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME;
|
|
131
|
-
const previewPort = this.serveOptions.port || DEFAULT_ECOPAGES_PORT;
|
|
132
|
-
appLogger.info(`Preview running at http://${previewHostname}:${previewPort}`);
|
|
133
|
-
}
|
|
134
|
-
async startBuildRuntimeServer() {
|
|
135
|
-
const hostname = String(this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME);
|
|
136
|
-
const port = 0;
|
|
137
|
-
const server = createServer(async (req, res) => {
|
|
138
|
-
try {
|
|
139
|
-
const webRequest = this.requestBridge.createWebRequest(req, this.runtimeOrigin);
|
|
140
|
-
const response = await this.handleRequest(webRequest);
|
|
141
|
-
await this.requestBridge.sendNodeResponse(res, response);
|
|
142
|
-
} catch (error) {
|
|
143
|
-
if (error instanceof NodeClientAbortError) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
appLogger.error("Node static build runtime request failed", error);
|
|
147
|
-
res.statusCode = 500;
|
|
148
|
-
res.end("Internal Server Error");
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
await new Promise((resolve, reject) => {
|
|
152
|
-
server.once("error", reject);
|
|
153
|
-
server.listen(port, hostname, () => {
|
|
154
|
-
server.off("error", reject);
|
|
155
|
-
resolve();
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
this.serverInstance = server;
|
|
159
|
-
appLogger.info(`Server running at ${this.getListeningServerOrigin(server)}`);
|
|
160
|
-
return server;
|
|
161
|
-
}
|
|
162
|
-
getListeningServerOrigin(server) {
|
|
163
|
-
const address = server.address();
|
|
164
|
-
const hostname = String(this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME);
|
|
165
|
-
if (!address || typeof address === "string") {
|
|
166
|
-
throw new Error("Build runtime server did not expose a numeric listening port");
|
|
167
|
-
}
|
|
168
|
-
return `http://${hostname}:${address.port}`;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Gracefully shuts down the ephemeral build runtime server.
|
|
172
|
-
*
|
|
173
|
-
* `closeAllConnections()` is called *before* `close()` because `server.close()`
|
|
174
|
-
* only stops accepting new connections — it waits for existing keep-alive
|
|
175
|
-
* connections to finish naturally, which can stall the build indefinitely.
|
|
176
|
-
* `closeAllConnections()` force-closes any lingering sockets immediately so
|
|
177
|
-
* the `close()` callback fires promptly.
|
|
178
|
-
*
|
|
179
|
-
* The `NodeClientBridge` heartbeat is also destroyed here so its `setInterval`
|
|
180
|
-
* does not prevent the Node.js process from exiting cleanly after the build.
|
|
181
|
-
*/
|
|
182
|
-
async stopBuildRuntimeServer(server) {
|
|
183
|
-
await new Promise((resolve, reject) => {
|
|
184
|
-
server.close((error) => {
|
|
185
|
-
if (error) {
|
|
186
|
-
reject(error);
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
resolve();
|
|
190
|
-
});
|
|
191
|
-
server.closeAllConnections();
|
|
192
|
-
});
|
|
193
|
-
if (this.serverInstance === server) {
|
|
194
|
-
this.serverInstance = null;
|
|
195
|
-
}
|
|
196
|
-
this.bridge?.destroy();
|
|
197
|
-
this.bridge = null;
|
|
198
|
-
}
|
|
199
|
-
async createAdapter() {
|
|
200
|
-
await this.initialize();
|
|
201
|
-
return {
|
|
202
|
-
getServerOptions: this.getServerOptions.bind(this),
|
|
203
|
-
buildStatic: this.buildStatic.bind(this),
|
|
204
|
-
completeInitialization: this.completeInitialization.bind(this),
|
|
205
|
-
handleRequest: this.handleRequest.bind(this)
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Handles a single incoming Web `Request` and returns a Web `Response`.
|
|
210
|
-
*
|
|
211
|
-
* Delegates to `handleSharedRequest` for all routing, caching, and response
|
|
212
|
-
* handler logic. The only Node-specific concern here is translating a
|
|
213
|
-
* `ClientAbortError` — which the body `ReadableStream` raises when the
|
|
214
|
-
* underlying socket closes early — into a 499 response so it does not
|
|
215
|
-
* incorrectly surface as a 500 in application logs.
|
|
216
|
-
*/
|
|
217
|
-
async handleRequest(request) {
|
|
218
|
-
if (!this.initialized) {
|
|
219
|
-
throw new Error("Node server adapter is not initialized. Call createAdapter() first.");
|
|
220
|
-
}
|
|
221
|
-
try {
|
|
222
|
-
const response = await this.handleSharedRequest(request, {
|
|
223
|
-
apiHandlers: this.apiHandlers,
|
|
224
|
-
errorHandler: this.errorHandler,
|
|
225
|
-
serverInstance: this.serverInstance,
|
|
226
|
-
hmrManager: this.hmrManager
|
|
227
|
-
});
|
|
228
|
-
return await this.maybeInjectHmrScript(response);
|
|
229
|
-
} catch (error) {
|
|
230
|
-
if (error instanceof NodeClientAbortError) {
|
|
231
|
-
return new Response(null, { status: 499 });
|
|
232
|
-
}
|
|
233
|
-
throw error;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Called once the HTTP server is bound and listening.
|
|
238
|
-
*
|
|
239
|
-
* When `options.watch` is `true` this method wires the full HMR pipeline:
|
|
240
|
-
* - A `WebSocketServer` is attached to the existing HTTP server via the
|
|
241
|
-
* `upgrade` event (no separate port needed).
|
|
242
|
-
* - `NodeClientBridge` tracks active WebSocket connections and handles
|
|
243
|
-
* broadcast + heartbeat cleanup.
|
|
244
|
-
* - `NodeHmrManager` watches the filesystem and triggers incremental esbuild
|
|
245
|
-
* rebuilds, notifying connected clients via the bridge.
|
|
246
|
-
* - Shared watcher bootstrapping listens for route-level file changes and
|
|
247
|
-
* refreshes the router and response handlers when pages are added or removed.
|
|
248
|
-
*
|
|
249
|
-
* WebSocket upgrade requests that do not target `/_hmr` are rejected with an
|
|
250
|
-
* immediate socket destroy to prevent unhandled upgrade leaks.
|
|
251
|
-
*/
|
|
252
|
-
async completeInitialization(server) {
|
|
253
|
-
this.serverInstance = server;
|
|
254
|
-
if (this.options?.watch) {
|
|
255
|
-
const devRuntime = this.devRuntimeFactory.create({ appConfig: this.appConfig });
|
|
256
|
-
const wss = devRuntime.websocketServer;
|
|
257
|
-
this.bridge = devRuntime.bridge;
|
|
258
|
-
this.hmrManager = devRuntime.hmrManager;
|
|
259
|
-
this.hmrManager.setEnabled(true);
|
|
260
|
-
await this.hmrManager.buildRuntime();
|
|
261
|
-
server.on("upgrade", (req, socket, head) => {
|
|
262
|
-
const url = new URL(req.url ?? "/", this.runtimeOrigin);
|
|
263
|
-
if (url.pathname === "/_hmr") {
|
|
264
|
-
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
265
|
-
this.bridge.subscribe(ws);
|
|
266
|
-
ws.on("close", () => this.bridge.unsubscribe(ws));
|
|
267
|
-
ws.on("error", (err) => appLogger.error("[HMR] WebSocket error:", err));
|
|
268
|
-
});
|
|
269
|
-
} else {
|
|
270
|
-
socket.destroy();
|
|
271
|
-
}
|
|
272
|
-
});
|
|
273
|
-
const browserBuildPlugins = getAppBrowserBuildPlugins(this.appConfig);
|
|
274
|
-
this.hmrManager.setPlugins(browserBuildPlugins);
|
|
275
|
-
for (const integration of this.appConfig.integrations) {
|
|
276
|
-
integration.setHmrManager(this.hmrManager);
|
|
277
|
-
}
|
|
278
|
-
this.configureSharedResponseHandlers(this.staticRoutes, this.hmrManager);
|
|
279
|
-
const watcher = new ProjectWatcher({
|
|
280
|
-
config: this.appConfig,
|
|
281
|
-
refreshRouterRoutesCallback: this.createSharedWatchRefreshCallback({
|
|
282
|
-
staticRoutes: this.staticRoutes,
|
|
283
|
-
hmrManager: this.hmrManager
|
|
284
|
-
}),
|
|
285
|
-
hmrManager: this.hmrManager,
|
|
286
|
-
bridge: this.bridge
|
|
287
|
-
});
|
|
288
|
-
await watcher.createWatcherSubscription();
|
|
289
|
-
}
|
|
290
|
-
appLogger.debug("Node server adapter initialization completed", {
|
|
291
|
-
apiHandlers: this.apiHandlers.length,
|
|
292
|
-
staticRoutes: this.staticRoutes.length,
|
|
293
|
-
hasErrorHandler: !!this.errorHandler,
|
|
294
|
-
hmrEnabled: !!this.hmrManager?.isEnabled()
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
async function createNodeServerAdapter(params) {
|
|
299
|
-
const runtimeOrigin = params.runtimeOrigin ?? resolveServeRuntimeOrigin(params.serveOptions);
|
|
300
|
-
const previewHost = params.previewHost ?? new NodeStaticPreviewHost();
|
|
301
|
-
const requestBridge = params.requestBridge ?? new NodeHttpRequestBridge();
|
|
302
|
-
const devRuntimeFactory = params.devRuntimeFactory ?? new DefaultNodeServerDevRuntimeFactory();
|
|
303
|
-
const adapter = new NodeServerAdapter({
|
|
304
|
-
...params,
|
|
305
|
-
runtimeOrigin,
|
|
306
|
-
previewHost,
|
|
307
|
-
requestBridge,
|
|
308
|
-
devRuntimeFactory
|
|
309
|
-
});
|
|
310
|
-
return adapter.createAdapter();
|
|
311
|
-
}
|
|
312
|
-
export {
|
|
313
|
-
NodeServerAdapter,
|
|
314
|
-
createNodeServerAdapter
|
|
315
|
-
};
|