@ecopages/core 0.2.0-alpha.8 → 0.2.1-beta.0
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 +79 -28
- package/package.json +94 -116
- package/src/adapters/README.md +2 -2
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +19 -115
- package/src/adapters/bun/hmr-manager.js +25 -301
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- 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 +100 -32
- package/src/adapters/bun/server-adapter.js +142 -65
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +22 -103
- package/src/adapters/node/node-hmr-manager.js +26 -289
- 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 +19 -42
- package/src/adapters/node/server-adapter.js +94 -139
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/adapters/shared/define-api-handler.d.ts +1 -1
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
- package/src/adapters/shared/fs-server-response-matcher.js +72 -46
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/hmr-html-response.js +4 -3
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +24 -1
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +22 -11
- package/src/adapters/shared/server-adapter.js +183 -133
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +4 -4
- package/src/adapters/shared/server-static-builder.d.ts +8 -7
- package/src/adapters/shared/server-static-builder.js +6 -5
- 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/build/README.md +57 -67
- 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.d.ts +26 -0
- 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 +173 -0
- package/src/build/build-adapter.d.ts +384 -63
- package/src/build/build-adapter.js +129 -54
- package/src/build/build-manifest.d.ts +6 -0
- package/src/build/build-manifest.js +21 -2
- package/src/build/build-types.d.ts +2 -2
- package/src/build/rolldown-adapter-helpers.d.ts +58 -0
- package/src/build/rolldown-adapter-helpers.js +265 -0
- package/src/build/rolldown-build-adapter.d.ts +28 -0
- package/src/build/rolldown-build-adapter.js +65 -0
- package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
- package/src/build/rolldown-dev-build-adapter.js +166 -0
- package/src/build/rolldown-plugin-bridge.d.ts +59 -0
- package/src/build/rolldown-plugin-bridge.js +199 -0
- package/src/build/runtime-build-executor.d.ts +15 -7
- package/src/build/runtime-build-executor.js +8 -9
- 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.d.ts +6 -0
- 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/README.md +5 -2
- package/src/config/config-builder.d.ts +41 -13
- package/src/config/config-builder.js +62 -24
- package/src/declarations.d.ts +1 -1
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +50 -45
- package/src/eco/eco.types.d.ts +60 -8
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/client/hmr-runtime.js +9 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
- package/src/hmr/strategies/js-hmr-strategy.js +5 -10
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
- package/src/integrations/ghtml/ghtml-renderer.js +24 -29
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +1 -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 +5 -1
- package/src/plugins/alias-resolver-plugin.js +19 -7
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +43 -25
- 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 +136 -42
- package/src/plugins/integration-plugin.js +99 -31
- package/src/plugins/processor.d.ts +4 -2
- package/src/plugins/processor.js +8 -3
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +80 -318
- package/src/route-renderer/README.md +74 -78
- 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 +290 -128
- package/src/route-renderer/orchestration/integration-renderer.js +660 -258
- 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 +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
- 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 +7 -4
- package/src/route-renderer/page-loading/page-module-loader.js +8 -5
- package/src/route-renderer/route-renderer.d.ts +31 -23
- package/src/route-renderer/route-renderer.js +17 -24
- package/src/router/README.md +76 -8
- package/src/router/client/navigation-coordinator.d.ts +20 -0
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +1 -2
- 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 +3 -20
- package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -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 -5
- package/src/services/assets/asset-processing-service/index.js +6 -5
- 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.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
- 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 +44 -3
- package/src/services/assets/browser-bundle.service.js +15 -7
- package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +22 -3
- package/src/services/html/html-transformer.service.js +101 -35
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -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 +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/page-module-import.service.d.ts +32 -8
- package/src/services/module-loading/page-module-import.service.js +83 -22
- package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
- package/src/services/module-loading/server-module-transpiler.service.js +5 -2
- 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 +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +23 -28
- package/src/static-site-generator/static-site-generator.js +119 -156
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +35 -41
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/CHANGELOG.md +0 -31
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.d.ts +0 -63
- package/src/adapters/bun/server-lifecycle.js +0 -92
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
- package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- 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-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
- package/src/adapters/shared/runtime-bootstrap.js +0 -43
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.d.ts +0 -74
- package/src/build/dev-build-coordinator.js +0 -161
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.d.ts +0 -72
- package/src/build/esbuild-build-adapter.js +0 -422
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- 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.ts +0 -320
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
- package/src/route-renderer/orchestration/render-execution.service.js +0 -121
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
- package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- 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.ts +0 -433
- package/src/router/server/fs-router-scanner.d.ts +0 -41
- package/src/router/server/fs-router-scanner.js +0 -156
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.d.ts +0 -26
- package/src/router/server/fs-router.js +0 -100
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- 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/runtime-specifier-registry.service.d.ts +0 -69
- package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -462
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -41
- package/src/watchers/project-watcher.ts +0 -363
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { AbstractServerAdapter } from '../abstract/server-adapter.js';
|
|
2
2
|
import type { ServerAdapterOptions, ServerAdapterResult } from '../abstract/server-adapter.js';
|
|
3
3
|
import { RouteRendererFactory } from '../../route-renderer/route-renderer.js';
|
|
4
|
-
import {
|
|
4
|
+
import { RouteRegistry } from '../../router/server/route-registry.js';
|
|
5
5
|
import { SchemaValidationService } from '../../services/validation/schema-validation-service.js';
|
|
6
6
|
import { StaticSiteGenerator } from '../../static-site-generator/static-site-generator.js';
|
|
7
7
|
import { ServerStaticBuilder } from './server-static-builder.js';
|
|
8
8
|
import { FileSystemResponseMatcher } from './fs-server-response-matcher.js';
|
|
9
9
|
import { ServerRouteHandler } from './server-route-handler.js';
|
|
10
|
-
import type { ApiHandler, CacheInvalidator, ErrorHandler, RenderContext, StaticRoute } from '../../public-types.js';
|
|
10
|
+
import type { ApiHandler, CacheInvalidator, ErrorHandler, RenderContext, StaticRoute } from '../../types/public-types.js';
|
|
11
|
+
type SharedRequestContext = {
|
|
12
|
+
apiHandlers: ApiHandler[];
|
|
13
|
+
errorHandler?: ErrorHandler;
|
|
14
|
+
serverInstance?: any;
|
|
15
|
+
hmrManager?: any;
|
|
16
|
+
};
|
|
11
17
|
export declare abstract class SharedServerAdapter<TOptions extends ServerAdapterOptions, TResult extends ServerAdapterResult> extends AbstractServerAdapter<TOptions, TResult> {
|
|
12
|
-
protected router:
|
|
18
|
+
protected router: RouteRegistry;
|
|
13
19
|
protected fileSystemResponseMatcher: FileSystemResponseMatcher;
|
|
14
20
|
protected routeRendererFactory: RouteRendererFactory;
|
|
15
21
|
protected routeHandler: ServerRouteHandler;
|
|
@@ -27,14 +33,15 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
27
33
|
onError?: (error: Error) => Promise<void> | void;
|
|
28
34
|
}): () => Promise<void>;
|
|
29
35
|
/**
|
|
30
|
-
* Scans the filesystem and dynamically constructs the
|
|
36
|
+
* Scans the filesystem and dynamically constructs the Route Registry.
|
|
31
37
|
*
|
|
32
38
|
* This process runs identically across both Bun and Node wrappers. It analyzes the configured pages
|
|
33
39
|
* directory, building a map of all available UI routes and API endpoints.
|
|
34
|
-
* The resulting `
|
|
40
|
+
* The resulting `RouteRegistry` instance becomes the central nervous system for mapping WinterCG incoming
|
|
35
41
|
* Web Requests (`Request`) to their corresponding internal execution paths.
|
|
36
42
|
*/
|
|
37
43
|
protected initSharedRouter(): Promise<void>;
|
|
44
|
+
private createRouteRegistryPageModuleAdapter;
|
|
38
45
|
/**
|
|
39
46
|
* Sets up the unified rendering pipeline and response matching chain.
|
|
40
47
|
*
|
|
@@ -50,6 +57,8 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
50
57
|
* @param hmrManager - The runtime-specific Hot Module Replacement orchestrator (if watching).
|
|
51
58
|
*/
|
|
52
59
|
protected configureSharedResponseHandlers(staticRoutes: StaticRoute[], hmrManager?: any): void;
|
|
60
|
+
private createSharedResponseHandlerDependencies;
|
|
61
|
+
private createSharedPageCacheService;
|
|
53
62
|
protected getCacheService(): CacheInvalidator | null;
|
|
54
63
|
protected getRenderContext(): RenderContext;
|
|
55
64
|
/**
|
|
@@ -70,6 +79,10 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
70
79
|
* @returns The resulting Web standard `Response` constructed by the user's handler.
|
|
71
80
|
*/
|
|
72
81
|
protected executeApiHandler(request: Request, params: Record<string, string | string[]>, routeConfig: ApiHandler, serverInstance: any, errorHandler?: ErrorHandler): Promise<Response>;
|
|
82
|
+
private createApiHandlerContext;
|
|
83
|
+
private normalizeApiParams;
|
|
84
|
+
private applyApiRequestSchema;
|
|
85
|
+
private runApiMiddlewareChain;
|
|
73
86
|
private normalizePath;
|
|
74
87
|
private matchApiPath;
|
|
75
88
|
private getApiPathScore;
|
|
@@ -77,6 +90,8 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
77
90
|
routeConfig: ApiHandler;
|
|
78
91
|
params: Record<string, string | string[]>;
|
|
79
92
|
} | null;
|
|
93
|
+
private tryHandleSharedHmrRequest;
|
|
94
|
+
private tryHandleSharedApiRequest;
|
|
80
95
|
/**
|
|
81
96
|
* Universally processes an incoming WinterCG Web standard Request.
|
|
82
97
|
*
|
|
@@ -88,10 +103,6 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
88
103
|
* Both Bun and Node bindings fall back to this exact function once they have mapped their
|
|
89
104
|
* native HTTP objects into Web Standard Requests.
|
|
90
105
|
*/
|
|
91
|
-
handleSharedRequest(request: Request, context:
|
|
92
|
-
apiHandlers: ApiHandler[];
|
|
93
|
-
errorHandler?: ErrorHandler;
|
|
94
|
-
serverInstance?: any;
|
|
95
|
-
hmrManager?: any;
|
|
96
|
-
}): Promise<Response>;
|
|
106
|
+
handleSharedRequest(request: Request, context: SharedRequestContext): Promise<Response>;
|
|
97
107
|
}
|
|
108
|
+
export {};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { AbstractServerAdapter } from "../abstract/server-adapter.js";
|
|
3
3
|
import { RouteRendererFactory } from "../../route-renderer/route-renderer.js";
|
|
4
|
-
import {
|
|
5
|
-
import { FSRouterScanner } from "../../router/server/fs-router-scanner.js";
|
|
4
|
+
import { RouteRegistry } from "../../router/server/route-registry.js";
|
|
6
5
|
import { MemoryCacheStore } from "../../services/cache/memory-cache-store.js";
|
|
7
6
|
import { PageCacheService } from "../../services/cache/page-cache-service.js";
|
|
8
7
|
import { SchemaValidationService } from "../../services/validation/schema-validation-service.js";
|
|
@@ -18,6 +17,8 @@ import { HttpError } from "../../errors/http-error.js";
|
|
|
18
17
|
import { ApiResponseBuilder } from "./api-response.js";
|
|
19
18
|
import { appLogger } from "../../global/app-logger.js";
|
|
20
19
|
import { fileSystem } from "@ecopages/file-system";
|
|
20
|
+
import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
|
|
21
|
+
import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
|
|
21
22
|
class SharedServerAdapter extends AbstractServerAdapter {
|
|
22
23
|
router;
|
|
23
24
|
fileSystemResponseMatcher;
|
|
@@ -50,30 +51,43 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
53
|
/**
|
|
53
|
-
* Scans the filesystem and dynamically constructs the
|
|
54
|
+
* Scans the filesystem and dynamically constructs the Route Registry.
|
|
54
55
|
*
|
|
55
56
|
* This process runs identically across both Bun and Node wrappers. It analyzes the configured pages
|
|
56
57
|
* directory, building a map of all available UI routes and API endpoints.
|
|
57
|
-
* The resulting `
|
|
58
|
+
* The resulting `RouteRegistry` instance becomes the central nervous system for mapping WinterCG incoming
|
|
58
59
|
* Web Requests (`Request`) to their corresponding internal execution paths.
|
|
59
60
|
*/
|
|
60
61
|
async initSharedRouter() {
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
this.router = new RouteRegistry({
|
|
63
|
+
pagesDir: path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.pagesDir),
|
|
63
64
|
appConfig: this.appConfig,
|
|
64
65
|
origin: this.runtimeOrigin,
|
|
65
66
|
templatesExt: this.appConfig.templatesExt,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
this.router = new FSRouter({
|
|
71
|
-
origin: this.runtimeOrigin,
|
|
72
|
-
assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
|
|
73
|
-
scanner
|
|
67
|
+
buildMode: !this.options?.watch,
|
|
68
|
+
pageModuleAdapter: this.createRouteRegistryPageModuleAdapter()
|
|
74
69
|
});
|
|
75
70
|
await this.router.init();
|
|
76
71
|
}
|
|
72
|
+
createRouteRegistryPageModuleAdapter() {
|
|
73
|
+
const serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
|
|
74
|
+
return {
|
|
75
|
+
loadPageModule: async (filePath) => {
|
|
76
|
+
const module = await serverModuleTranspiler.importModule({
|
|
77
|
+
filePath,
|
|
78
|
+
outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-route-modules"),
|
|
79
|
+
externalPackages: false,
|
|
80
|
+
transpileErrorMessage: (details) => `Error transpiling route module: ${details}`,
|
|
81
|
+
noOutputMessage: (targetFilePath) => `No transpiled output generated for route module: ${targetFilePath}`
|
|
82
|
+
});
|
|
83
|
+
const page = module.default;
|
|
84
|
+
return {
|
|
85
|
+
staticPaths: page?.staticPaths ?? module.getStaticPaths,
|
|
86
|
+
staticProps: page?.staticProps ?? module.getStaticProps
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
77
91
|
/**
|
|
78
92
|
* Sets up the unified rendering pipeline and response matching chain.
|
|
79
93
|
*
|
|
@@ -91,48 +105,69 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
91
105
|
configureSharedResponseHandlers(staticRoutes, hmrManager) {
|
|
92
106
|
this.routeRendererFactory = new RouteRendererFactory({
|
|
93
107
|
appConfig: this.appConfig,
|
|
108
|
+
rendererModules: this.appConfig.runtime?.rendererModuleContext,
|
|
94
109
|
runtimeOrigin: this.runtimeOrigin
|
|
95
110
|
});
|
|
111
|
+
const { fileSystemResponseMatcher, explicitStaticRouteMatcher } = this.createSharedResponseHandlerDependencies(staticRoutes);
|
|
112
|
+
this.fileSystemResponseMatcher = fileSystemResponseMatcher;
|
|
113
|
+
this.routeHandler = new ServerRouteHandler({
|
|
114
|
+
router: this.router,
|
|
115
|
+
fileSystemResponseMatcher: this.fileSystemResponseMatcher,
|
|
116
|
+
explicitStaticRouteMatcher,
|
|
117
|
+
watch: !!this.options?.watch,
|
|
118
|
+
hmrManager
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
createSharedResponseHandlerDependencies(staticRoutes) {
|
|
96
122
|
const fileSystemResponseFactory = new FileSystemServerResponseFactory({
|
|
97
|
-
appConfig: this.appConfig,
|
|
98
|
-
routeRendererFactory: this.routeRendererFactory,
|
|
99
123
|
options: {
|
|
100
124
|
watchMode: !!this.options?.watch
|
|
101
125
|
}
|
|
102
126
|
});
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
let cacheService = null;
|
|
106
|
-
if (isCacheEnabled) {
|
|
107
|
-
const store = cacheConfig?.store === "memory" || !cacheConfig?.store ? new MemoryCacheStore({ maxEntries: cacheConfig?.maxEntries }) : cacheConfig.store;
|
|
108
|
-
cacheService = new PageCacheService({ store, enabled: true });
|
|
109
|
-
}
|
|
110
|
-
this.fileSystemResponseMatcher = new FileSystemResponseMatcher({
|
|
127
|
+
const cacheService = this.createSharedPageCacheService();
|
|
128
|
+
const fileSystemResponseMatcher = new FileSystemResponseMatcher({
|
|
111
129
|
appConfig: this.appConfig,
|
|
130
|
+
assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
|
|
112
131
|
router: this.router,
|
|
113
132
|
routeRendererFactory: this.routeRendererFactory,
|
|
114
133
|
fileSystemResponseFactory,
|
|
115
134
|
cacheService,
|
|
116
|
-
defaultCacheStrategy:
|
|
117
|
-
});
|
|
118
|
-
const explicitStaticRouteMatcher = staticRoutes.length > 0 ? new ExplicitStaticRouteMatcher({
|
|
119
|
-
appConfig: this.appConfig,
|
|
120
|
-
routeRendererFactory: this.routeRendererFactory,
|
|
121
|
-
staticRoutes
|
|
122
|
-
}) : void 0;
|
|
123
|
-
this.routeHandler = new ServerRouteHandler({
|
|
124
|
-
router: this.router,
|
|
125
|
-
fileSystemResponseMatcher: this.fileSystemResponseMatcher,
|
|
126
|
-
explicitStaticRouteMatcher,
|
|
127
|
-
watch: !!this.options?.watch,
|
|
128
|
-
hmrManager
|
|
135
|
+
defaultCacheStrategy: this.appConfig.cache?.defaultStrategy ?? "static"
|
|
129
136
|
});
|
|
137
|
+
return {
|
|
138
|
+
cacheService,
|
|
139
|
+
fileSystemResponseMatcher,
|
|
140
|
+
explicitStaticRouteMatcher: staticRoutes.length > 0 ? new ExplicitStaticRouteMatcher({
|
|
141
|
+
appConfig: this.appConfig,
|
|
142
|
+
routeRendererFactory: this.routeRendererFactory,
|
|
143
|
+
staticRoutes
|
|
144
|
+
}) : void 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
createSharedPageCacheService() {
|
|
148
|
+
const cacheConfig = this.appConfig.cache;
|
|
149
|
+
const isCacheEnabled = cacheConfig?.enabled ?? !this.options?.watch;
|
|
150
|
+
if (!isCacheEnabled) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const store = cacheConfig?.store === "memory" || !cacheConfig?.store ? new MemoryCacheStore({ maxEntries: cacheConfig?.maxEntries }) : cacheConfig.store;
|
|
154
|
+
return new PageCacheService({ store, enabled: true });
|
|
130
155
|
}
|
|
131
156
|
getCacheService() {
|
|
132
157
|
return this.fileSystemResponseMatcher?.getCacheService() ?? null;
|
|
133
158
|
}
|
|
134
159
|
getRenderContext() {
|
|
135
|
-
|
|
160
|
+
const serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
|
|
161
|
+
return createRenderContext({
|
|
162
|
+
integrations: this.appConfig.integrations,
|
|
163
|
+
rendererModules: this.appConfig.runtime?.rendererModuleContext,
|
|
164
|
+
importServerModule: async (filePath) => await serverModuleTranspiler.importModule({
|
|
165
|
+
filePath,
|
|
166
|
+
outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-modules"),
|
|
167
|
+
externalPackages: true,
|
|
168
|
+
bypassCache: this.options?.watch === true
|
|
169
|
+
})
|
|
170
|
+
});
|
|
136
171
|
}
|
|
137
172
|
/**
|
|
138
173
|
* Executes an Application Programming Interface (API) handler in an environment-agnostic manner.
|
|
@@ -154,87 +189,18 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
154
189
|
async executeApiHandler(request, params, routeConfig, serverInstance, errorHandler) {
|
|
155
190
|
let context;
|
|
156
191
|
try {
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
Object.entries(params).map(([key, value]) => [key, Array.isArray(value) ? value.join("/") : value])
|
|
162
|
-
);
|
|
163
|
-
context = {
|
|
164
|
-
request,
|
|
165
|
-
params: normalizedParams,
|
|
166
|
-
response: new ApiResponseBuilder(),
|
|
167
|
-
server: serverInstance,
|
|
168
|
-
locals,
|
|
169
|
-
require: createRequire(() => locals),
|
|
170
|
-
services: {
|
|
171
|
-
cache: this.getCacheService()
|
|
172
|
-
},
|
|
173
|
-
...this.getRenderContext()
|
|
174
|
-
};
|
|
175
|
-
if (schema) {
|
|
176
|
-
const url = new URL(request.url);
|
|
177
|
-
const queryParams = Object.fromEntries(url.searchParams);
|
|
178
|
-
const headers = Object.fromEntries(request.headers);
|
|
179
|
-
let body;
|
|
180
|
-
if (schema.body) {
|
|
181
|
-
try {
|
|
182
|
-
const contentType = request.headers.get("Content-Type") || "";
|
|
183
|
-
if (contentType.includes("application/json")) body = await request.clone().json();
|
|
184
|
-
else if (contentType.includes("text/plain")) body = await request.clone().text();
|
|
185
|
-
} catch {
|
|
186
|
-
return context.response.status(400).json({ error: "Invalid request body" });
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
const validationResult = await this.schemaValidator.validateRequest(
|
|
190
|
-
{ body, query: queryParams, headers, params: normalizedParams },
|
|
191
|
-
schema
|
|
192
|
-
);
|
|
193
|
-
if (!validationResult.success) {
|
|
194
|
-
return context.response.status(400).json({
|
|
195
|
-
error: "Validation failed",
|
|
196
|
-
issues: validationResult.errors
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
const validated = validationResult.data;
|
|
200
|
-
if (validated.body !== void 0) context.body = validated.body;
|
|
201
|
-
if (validated.query !== void 0) context.query = validated.query;
|
|
202
|
-
if (validated.headers !== void 0) context.headers = validated.headers;
|
|
203
|
-
if (validated.params !== void 0) context.params = validated.params;
|
|
204
|
-
}
|
|
205
|
-
if (middleware.length === 0) {
|
|
206
|
-
return await routeConfig.handler(context);
|
|
192
|
+
context = this.createApiHandlerContext(request, params, serverInstance);
|
|
193
|
+
const schemaResponse = await this.applyApiRequestSchema(context, routeConfig.schema);
|
|
194
|
+
if (schemaResponse) {
|
|
195
|
+
return schemaResponse;
|
|
207
196
|
}
|
|
208
|
-
|
|
209
|
-
const executeNext = async () => {
|
|
210
|
-
if (index < middleware.length) {
|
|
211
|
-
const currentMiddleware = middleware[index++];
|
|
212
|
-
return await currentMiddleware(context, executeNext);
|
|
213
|
-
}
|
|
214
|
-
return await routeConfig.handler(context);
|
|
215
|
-
};
|
|
216
|
-
return await executeNext();
|
|
197
|
+
return await this.runApiMiddlewareChain(context, routeConfig);
|
|
217
198
|
} catch (error) {
|
|
218
199
|
if (error instanceof Response) return error;
|
|
219
200
|
if (errorHandler) {
|
|
220
201
|
try {
|
|
221
202
|
if (!context) {
|
|
222
|
-
|
|
223
|
-
context = {
|
|
224
|
-
request,
|
|
225
|
-
params: Object.fromEntries(
|
|
226
|
-
Object.entries(params).map(([key, value]) => [
|
|
227
|
-
key,
|
|
228
|
-
Array.isArray(value) ? value.join("/") : value
|
|
229
|
-
])
|
|
230
|
-
),
|
|
231
|
-
response: new ApiResponseBuilder(),
|
|
232
|
-
server: serverInstance,
|
|
233
|
-
locals,
|
|
234
|
-
require: createRequire(() => locals),
|
|
235
|
-
services: { cache: this.getCacheService() },
|
|
236
|
-
...this.getRenderContext()
|
|
237
|
-
};
|
|
203
|
+
context = this.createApiHandlerContext(request, params, serverInstance);
|
|
238
204
|
}
|
|
239
205
|
return await errorHandler(error, context);
|
|
240
206
|
} catch (handlerError) {
|
|
@@ -246,6 +212,76 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
246
212
|
return new Response("Internal Server Error", { status: 500 });
|
|
247
213
|
}
|
|
248
214
|
}
|
|
215
|
+
createApiHandlerContext(request, params, serverInstance) {
|
|
216
|
+
const locals = {};
|
|
217
|
+
const normalizedParams = this.normalizeApiParams(params);
|
|
218
|
+
return {
|
|
219
|
+
request,
|
|
220
|
+
params: normalizedParams,
|
|
221
|
+
response: new ApiResponseBuilder(),
|
|
222
|
+
server: serverInstance,
|
|
223
|
+
locals,
|
|
224
|
+
require: createRequire(() => locals),
|
|
225
|
+
services: {
|
|
226
|
+
cache: this.getCacheService()
|
|
227
|
+
},
|
|
228
|
+
...this.getRenderContext()
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
normalizeApiParams(params) {
|
|
232
|
+
return Object.fromEntries(
|
|
233
|
+
Object.entries(params).map(([key, value]) => [key, Array.isArray(value) ? value.join("/") : value])
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
async applyApiRequestSchema(context, schema) {
|
|
237
|
+
if (!schema) {
|
|
238
|
+
return void 0;
|
|
239
|
+
}
|
|
240
|
+
const url = new URL(context.request.url);
|
|
241
|
+
const queryParams = Object.fromEntries(url.searchParams);
|
|
242
|
+
const headers = Object.fromEntries(context.request.headers);
|
|
243
|
+
let body;
|
|
244
|
+
if (schema.body) {
|
|
245
|
+
try {
|
|
246
|
+
const contentType = context.request.headers.get("Content-Type") || "";
|
|
247
|
+
if (contentType.includes("application/json")) body = await context.request.clone().json();
|
|
248
|
+
else if (contentType.includes("text/plain")) body = await context.request.clone().text();
|
|
249
|
+
} catch {
|
|
250
|
+
return context.response.status(400).json({ error: "Invalid request body" });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const validationResult = await this.schemaValidator.validateRequest(
|
|
254
|
+
{ body, query: queryParams, headers, params: context.params },
|
|
255
|
+
schema
|
|
256
|
+
);
|
|
257
|
+
if (!validationResult.success) {
|
|
258
|
+
return context.response.status(400).json({
|
|
259
|
+
error: "Validation failed",
|
|
260
|
+
issues: validationResult.errors
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const validated = validationResult.data;
|
|
264
|
+
if (validated.body !== void 0) context.body = validated.body;
|
|
265
|
+
if (validated.query !== void 0) context.query = validated.query;
|
|
266
|
+
if (validated.headers !== void 0) context.headers = validated.headers;
|
|
267
|
+
if (validated.params !== void 0) context.params = validated.params;
|
|
268
|
+
return void 0;
|
|
269
|
+
}
|
|
270
|
+
async runApiMiddlewareChain(context, routeConfig) {
|
|
271
|
+
const middleware = routeConfig.middleware || [];
|
|
272
|
+
if (middleware.length === 0) {
|
|
273
|
+
return await routeConfig.handler(context);
|
|
274
|
+
}
|
|
275
|
+
let index = 0;
|
|
276
|
+
const executeNext = async () => {
|
|
277
|
+
if (index < middleware.length) {
|
|
278
|
+
const currentMiddleware = middleware[index++];
|
|
279
|
+
return await currentMiddleware(context, executeNext);
|
|
280
|
+
}
|
|
281
|
+
return await routeConfig.handler(context);
|
|
282
|
+
};
|
|
283
|
+
return await executeNext();
|
|
284
|
+
}
|
|
249
285
|
normalizePath(pathname) {
|
|
250
286
|
if (pathname.length > 1 && pathname.endsWith("/")) {
|
|
251
287
|
return pathname.slice(0, -1);
|
|
@@ -338,18 +374,7 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
338
374
|
}
|
|
339
375
|
return null;
|
|
340
376
|
}
|
|
341
|
-
|
|
342
|
-
* Universally processes an incoming WinterCG Web standard Request.
|
|
343
|
-
*
|
|
344
|
-
* 1. Resolves static Hot Module Replacement runtime blobs if development.
|
|
345
|
-
* 2. Checks if the incoming request matches any parsed API route schemas.
|
|
346
|
-
* - Routes through `executeApiHandler` which performs strict validation.
|
|
347
|
-
* 3. Falls through to standard `ServerRouteHandler` for React/Lit filesystem pages.
|
|
348
|
-
*
|
|
349
|
-
* Both Bun and Node bindings fall back to this exact function once they have mapped their
|
|
350
|
-
* native HTTP objects into Web Standard Requests.
|
|
351
|
-
*/
|
|
352
|
-
async handleSharedRequest(request, context) {
|
|
377
|
+
tryHandleSharedHmrRequest(request, context) {
|
|
353
378
|
const url = new URL(request.url);
|
|
354
379
|
if (url.pathname === "/_hmr_runtime.js" && context.hmrManager) {
|
|
355
380
|
const runtimePath = context.hmrManager.getRuntimePath();
|
|
@@ -368,15 +393,40 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
368
393
|
});
|
|
369
394
|
}
|
|
370
395
|
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
async tryHandleSharedApiRequest(request, context) {
|
|
371
399
|
const apiMatch = this.matchApiHandler(request, context.apiHandlers);
|
|
372
|
-
if (apiMatch) {
|
|
373
|
-
return
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
400
|
+
if (!apiMatch) {
|
|
401
|
+
return null;
|
|
402
|
+
}
|
|
403
|
+
return await this.executeApiHandler(
|
|
404
|
+
request,
|
|
405
|
+
apiMatch.params,
|
|
406
|
+
apiMatch.routeConfig,
|
|
407
|
+
context.serverInstance,
|
|
408
|
+
context.errorHandler
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Universally processes an incoming WinterCG Web standard Request.
|
|
413
|
+
*
|
|
414
|
+
* 1. Resolves static Hot Module Replacement runtime blobs if development.
|
|
415
|
+
* 2. Checks if the incoming request matches any parsed API route schemas.
|
|
416
|
+
* - Routes through `executeApiHandler` which performs strict validation.
|
|
417
|
+
* 3. Falls through to standard `ServerRouteHandler` for React/Lit filesystem pages.
|
|
418
|
+
*
|
|
419
|
+
* Both Bun and Node bindings fall back to this exact function once they have mapped their
|
|
420
|
+
* native HTTP objects into Web Standard Requests.
|
|
421
|
+
*/
|
|
422
|
+
async handleSharedRequest(request, context) {
|
|
423
|
+
const hmrResponse = this.tryHandleSharedHmrRequest(request, context);
|
|
424
|
+
if (hmrResponse) {
|
|
425
|
+
return hmrResponse;
|
|
426
|
+
}
|
|
427
|
+
const apiResponse = await this.tryHandleSharedApiRequest(request, context);
|
|
428
|
+
if (apiResponse) {
|
|
429
|
+
return apiResponse;
|
|
380
430
|
}
|
|
381
431
|
return this.routeHandler.handleResponse(request);
|
|
382
432
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { IHmrManager } from '../../public-types';
|
|
2
|
-
import type {
|
|
3
|
-
import type { ExplicitStaticRouteMatcher } from './explicit-static-route-matcher';
|
|
4
|
-
import type { FileSystemResponseMatcher } from './fs-server-response-matcher';
|
|
1
|
+
import type { IHmrManager } from '../../types/public-types.js';
|
|
2
|
+
import type { RouteRegistry } from '../../router/server/route-registry.js';
|
|
3
|
+
import type { ExplicitStaticRouteMatcher } from './explicit-static-route-matcher.js';
|
|
4
|
+
import type { FileSystemResponseMatcher } from './fs-server-response-matcher.js';
|
|
5
5
|
/**
|
|
6
6
|
* Configuration parameters for ServerRouteHandler.
|
|
7
7
|
*/
|
|
8
8
|
export interface ServerRouteHandlerParams {
|
|
9
9
|
/** File system router for matching request URLs to route handlers. */
|
|
10
|
-
router:
|
|
10
|
+
router: RouteRegistry;
|
|
11
11
|
/** Matcher for handling file system route responses. */
|
|
12
12
|
fileSystemResponseMatcher: FileSystemResponseMatcher;
|
|
13
13
|
/** Optional matcher for explicit static routes like processed images or sitemaps. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { appLogger } from "../../global/app-logger";
|
|
2
|
-
import { HttpError } from "../../errors/http-error";
|
|
3
|
-
import { injectHmrRuntimeIntoHtmlResponse, isHtmlResponse, shouldInjectHmrHtmlResponse } from "./hmr-html-response";
|
|
1
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
2
|
+
import { HttpError } from "../../errors/http-error.js";
|
|
3
|
+
import { injectHmrRuntimeIntoHtmlResponse, isHtmlResponse, shouldInjectHmrHtmlResponse } from "./hmr-html-response.js";
|
|
4
4
|
class ServerRouteHandler {
|
|
5
5
|
router;
|
|
6
6
|
fileSystemResponseMatcher;
|
|
@@ -60,7 +60,7 @@ class ServerRouteHandler {
|
|
|
60
60
|
const response2 = await this.explicitStaticRouteMatcher.handleMatch(explicitMatch);
|
|
61
61
|
return this.maybeInjectHmrScript(response2);
|
|
62
62
|
}
|
|
63
|
-
const fsMatch = !pathname.includes(".") && this.router.
|
|
63
|
+
const fsMatch = !pathname.includes(".") && this.router.matchRequest(request.url);
|
|
64
64
|
const response = await (fsMatch ? this.fileSystemResponseMatcher.handleMatch(fsMatch, request) : this.handleNoMatch(request));
|
|
65
65
|
return this.maybeInjectHmrScript(response);
|
|
66
66
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../internal-types';
|
|
2
|
-
import type { ApiHandler, StaticRoute } from '../../public-types';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
import type {
|
|
1
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
2
|
+
import type { ApiHandler, StaticRoute } from '../../types/public-types.js';
|
|
3
|
+
import type { RouteRegistry } from '../../router/server/route-registry.js';
|
|
4
|
+
import type { StaticSiteGenerator } from '../../static-site-generator/static-site-generator.js';
|
|
5
|
+
import type { StaticGenerationRendererResolver } from '../../route-renderer/route-renderer.js';
|
|
6
6
|
export interface StaticBuildOptions {
|
|
7
7
|
preview?: boolean;
|
|
8
|
+
baseUrl?: string;
|
|
8
9
|
}
|
|
9
10
|
export interface ServeOptions {
|
|
10
11
|
hostname?: string;
|
|
@@ -63,8 +64,8 @@ export declare class ServerStaticBuilder {
|
|
|
63
64
|
* @param dependencies.staticRoutes - Explicit static routes registered via app.static()
|
|
64
65
|
*/
|
|
65
66
|
build(options: StaticBuildOptions | undefined, dependencies: {
|
|
66
|
-
router:
|
|
67
|
-
routeRendererFactory:
|
|
67
|
+
router: RouteRegistry;
|
|
68
|
+
routeRendererFactory: StaticGenerationRendererResolver;
|
|
68
69
|
staticRoutes?: StaticRoute[];
|
|
69
70
|
}): Promise<void>;
|
|
70
71
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
|
|
4
|
+
import { StaticContentServer } from "../../dev/sc-server.js";
|
|
5
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
5
6
|
class ServerStaticBuilder {
|
|
6
7
|
appConfig;
|
|
7
8
|
staticSiteGenerator;
|
|
@@ -67,8 +68,8 @@ class ServerStaticBuilder {
|
|
|
67
68
|
* @param dependencies.staticRoutes - Explicit static routes registered via app.static()
|
|
68
69
|
*/
|
|
69
70
|
async build(options, dependencies) {
|
|
70
|
-
const { preview = false } = options ?? {};
|
|
71
|
-
const baseUrl = `http://${this.serveOptions.hostname ||
|
|
71
|
+
const { preview = false, baseUrl: explicitBaseUrl } = options ?? {};
|
|
72
|
+
const baseUrl = explicitBaseUrl ?? `http://${this.serveOptions.hostname || DEFAULT_ECOPAGES_HOSTNAME}:${this.serveOptions.port || DEFAULT_ECOPAGES_PORT}`;
|
|
72
73
|
this.warnApiHandlersUnavailableInStaticMode();
|
|
73
74
|
this.prepareExportDirectory();
|
|
74
75
|
await this.refreshRuntimeAssets();
|
|
@@ -82,7 +83,7 @@ class ServerStaticBuilder {
|
|
|
82
83
|
this.logger.info("Build completed");
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
|
-
const previewPort = this.serveOptions.port ||
|
|
86
|
+
const previewPort = this.serveOptions.port || DEFAULT_ECOPAGES_PORT;
|
|
86
87
|
const { server } = this.previewServerFactory.createServer({
|
|
87
88
|
appConfig: this.appConfig,
|
|
88
89
|
options: { port: Number(previewPort) }
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager, IClientBridge } from '../../types/internal-types.js';
|
|
3
|
+
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
4
|
+
import { type HmrStrategy } from '../../hmr/hmr-strategy.js';
|
|
5
|
+
import type { ClientBridgeEvent } from '../../types/public-types.js';
|
|
6
|
+
import { HmrEntrypointRegistrar } from './hmr-entrypoint-registrar.js';
|
|
7
|
+
import { BrowserBundleService } from '../../services/assets/browser-bundle.service.js';
|
|
8
|
+
import { type EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
|
|
9
|
+
import type { ServerModuleTranspiler } from '../../services/module-loading/server-module-transpiler.service.js';
|
|
10
|
+
type HandleFileChangeOptions = {
|
|
11
|
+
broadcast?: boolean;
|
|
12
|
+
};
|
|
13
|
+
type SharedHmrManagerParams = {
|
|
14
|
+
appConfig: EcoPagesAppConfig;
|
|
15
|
+
bridge: IClientBridge;
|
|
16
|
+
registrationTimeoutMs?: number;
|
|
17
|
+
};
|
|
18
|
+
export declare abstract class SharedHmrManager implements IHmrManager {
|
|
19
|
+
readonly appConfig: EcoPagesAppConfig;
|
|
20
|
+
protected readonly bridge: IClientBridge;
|
|
21
|
+
protected watchers: Map<string, fs.FSWatcher>;
|
|
22
|
+
protected watchedFiles: Map<string, string>;
|
|
23
|
+
protected entrypointRegistrations: Map<string, Promise<string>>;
|
|
24
|
+
protected distDir: string;
|
|
25
|
+
protected plugins: EcoBuildPlugin[];
|
|
26
|
+
protected enabled: boolean;
|
|
27
|
+
protected strategies: HmrStrategy[];
|
|
28
|
+
protected readonly entrypointRegistrar: HmrEntrypointRegistrar;
|
|
29
|
+
protected readonly browserBundleService: BrowserBundleService;
|
|
30
|
+
protected readonly entrypointDependencyGraph: EntrypointDependencyGraph;
|
|
31
|
+
protected readonly serverModuleTranspiler: ServerModuleTranspiler;
|
|
32
|
+
constructor({ appConfig, bridge, registrationTimeoutMs }: SharedHmrManagerParams);
|
|
33
|
+
protected abstract createEntrypointDependencyGraph(existingEntrypointDependencyGraph: EntrypointDependencyGraph): EntrypointDependencyGraph;
|
|
34
|
+
protected shouldSkipMissingFileChange(_filePath: string): boolean;
|
|
35
|
+
protected onRuntimeBundleFailure(error: unknown): void;
|
|
36
|
+
protected ensureDistDir(): void;
|
|
37
|
+
protected shouldJsStrategyProcessEntrypoint(entrypointPath: string): boolean;
|
|
38
|
+
protected initializeStrategies(): void;
|
|
39
|
+
registerStrategy(strategy: HmrStrategy): void;
|
|
40
|
+
setPlugins(plugins: EcoBuildPlugin[]): void;
|
|
41
|
+
setEnabled(enabled: boolean): void;
|
|
42
|
+
isEnabled(): boolean;
|
|
43
|
+
buildRuntime(): Promise<void>;
|
|
44
|
+
getRuntimePath(): string;
|
|
45
|
+
broadcast(event: ClientBridgeEvent): void;
|
|
46
|
+
handleFileChange(filePath: string, options?: HandleFileChangeOptions): Promise<void>;
|
|
47
|
+
getOutputUrl(entrypointPath: string): string | undefined;
|
|
48
|
+
getWatchedFiles(): Map<string, string>;
|
|
49
|
+
getDistDir(): string;
|
|
50
|
+
getPlugins(): EcoBuildPlugin[];
|
|
51
|
+
getDefaultContext(): DefaultHmrContext;
|
|
52
|
+
protected clearFailedEntrypointRegistration(entrypointPath: string): void;
|
|
53
|
+
registerEntrypoint(entrypointPath: string): Promise<string>;
|
|
54
|
+
registerScriptEntrypoint(entrypointPath: string): Promise<string>;
|
|
55
|
+
protected emitStrictEntrypoint(entrypointPath: string): Promise<void>;
|
|
56
|
+
protected emitScriptEntrypoint(entrypointPath: string, outputPath: string): Promise<void>;
|
|
57
|
+
stop(): void;
|
|
58
|
+
}
|
|
59
|
+
export {};
|