@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.41
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 +268 -14
- package/package.json +92 -110
- package/src/adapters/README.md +39 -0
- 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 +30 -68
- package/src/adapters/bun/hmr-manager.js +30 -212
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- 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 +93 -32
- package/src/adapters/bun/server-adapter.js +166 -89
- 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 +2 -6
- package/src/adapters/index.js +2 -8
- 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 +38 -49
- package/src/adapters/node/node-hmr-manager.js +31 -219
- 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 +20 -72
- package/src/adapters/node/server-adapter.js +99 -203
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -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/{define-api-handler.d.ts → 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 -13
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +3 -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 +20 -16
- package/src/adapters/shared/fs-server-response-matcher.js +76 -45
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +33 -0
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +27 -3
- 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 +33 -12
- package/src/adapters/shared/server-adapter.js +215 -132
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +7 -16
- package/src/adapters/shared/server-static-builder.d.ts +41 -8
- package/src/adapters/shared/server-static-builder.js +65 -11
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +240 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +107 -0
- package/src/build/build-adapter.d.ts +176 -3
- package/src/build/build-adapter.js +619 -16
- package/src/build/build-manifest.d.ts +27 -0
- package/src/build/build-manifest.js +30 -0
- package/src/build/dev-build-coordinator.d.ts +72 -0
- package/src/build/dev-build-coordinator.js +154 -0
- package/src/build/esbuild-build-adapter.d.ts +16 -6
- package/src/build/esbuild-build-adapter.js +202 -74
- package/src/build/runtime-build-executor.d.ts +14 -0
- package/src/build/runtime-build-executor.js +22 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +35 -0
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/README.md +36 -0
- package/src/config/config-builder.d.ts +54 -29
- package/src/config/config-builder.js +256 -50
- package/src/{constants.d.ts → config/constants.d.ts} +13 -0
- package/src/{constants.js → config/constants.js} +4 -0
- package/src/declarations.d.ts +19 -14
- 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/README.md +70 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +63 -54
- package/src/eco/eco.types.d.ts +69 -6
- 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/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +38 -7
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.js +26 -33
- 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 +46 -48
- package/src/hmr/strategies/js-hmr-strategy.js +60 -75
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.js +16 -5
- package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
- package/src/integrations/ghtml/ghtml-renderer.js +27 -30
- 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 +35 -0
- package/src/plugins/alias-resolver-plugin.d.ts +1 -0
- package/src/plugins/alias-resolver-plugin.js +27 -5
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +42 -24
- 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 +147 -29
- package/src/plugins/integration-plugin.js +103 -14
- package/src/plugins/processor.d.ts +17 -2
- package/src/plugins/processor.js +22 -3
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +83 -325
- package/src/route-renderer/README.md +73 -90
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +986 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +134 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +442 -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/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
- package/src/route-renderer/route-renderer.d.ts +57 -14
- package/src/route-renderer/route-renderer.js +30 -18
- package/src/router/README.md +94 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +28 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +16 -1
- 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 +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +11 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/{asset-processing-service → 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 +119 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- package/src/services/{asset-processing-service → 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 +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
- package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
- package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +151 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +297 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +191 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.d.ts +67 -20
- package/src/static-site-generator/static-site-generator.js +182 -138
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +239 -35
- 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.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/watchers/project-watcher.d.ts +40 -29
- package/src/watchers/project-watcher.js +126 -116
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +6 -6
- package/CHANGELOG.md +0 -91
- 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/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.ts +0 -296
- package/src/adapters/bun/index.ts +0 -3
- package/src/adapters/bun/server-adapter.ts +0 -492
- package/src/adapters/bun/server-lifecycle.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- package/src/adapters/bun/server-lifecycle.ts +0 -154
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/index.ts +0 -9
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -289
- package/src/adapters/node/server-adapter.ts +0 -561
- package/src/adapters/node/static-content-server.ts +0 -203
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
- package/src/adapters/shared/render-context.ts +0 -105
- package/src/adapters/shared/server-adapter.ts +0 -442
- package/src/adapters/shared/server-route-handler.ts +0 -166
- package/src/adapters/shared/server-static-builder.ts +0 -82
- package/src/build/build-adapter.ts +0 -132
- package/src/build/build-types.ts +0 -83
- package/src/build/esbuild-build-adapter.ts +0 -510
- package/src/config/config-builder.ts +0 -474
- package/src/constants.ts +0 -39
- package/src/create-app.ts +0 -87
- package/src/define-api-handler.js +0 -15
- package/src/define-api-handler.ts +0 -66
- 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 -77
- package/src/eco/component-render-context.ts +0 -202
- package/src/eco/eco.ts +0 -221
- package/src/eco/eco.types.ts +0 -202
- 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 -121
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.test.e2e.ts +0 -75
- 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 -93
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -212
- package/src/plugins/alias-resolver-plugin.ts +0 -45
- package/src/plugins/eco-component-meta-plugin.ts +0 -474
- package/src/plugins/integration-plugin.ts +0 -184
- package/src/plugins/processor.ts +0 -220
- package/src/public-types.ts +0 -1260
- package/src/route-renderer/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.js +0 -428
- package/src/route-renderer/dependency-resolver.ts +0 -596
- package/src/route-renderer/html-post-processing.service.d.ts +0 -40
- package/src/route-renderer/html-post-processing.service.js +0 -86
- package/src/route-renderer/html-post-processing.service.ts +0 -103
- package/src/route-renderer/integration-renderer.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/integration-renderer.ts +0 -696
- package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/marker-graph-resolver.ts +0 -153
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.ts +0 -153
- package/src/route-renderer/render-execution.service.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- package/src/route-renderer/render-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/router/fs-router.ts +0 -122
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
- package/src/services/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/asset-processing-service/assets.types.ts +0 -112
- package/src/services/asset-processing-service/index.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- package/src/services/asset-processing-service/index.ts +0 -3
- package/src/services/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
- package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
- package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
- package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
- package/src/services/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/index.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
- package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
- 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/html-transformer.service.d.ts +0 -50
- package/src/services/html-transformer.service.js +0 -163
- package/src/services/html-transformer.service.ts +0 -217
- package/src/services/page-module-import.service.d.ts +0 -37
- package/src/services/page-module-import.service.js +0 -88
- package/src/services/page-module-import.service.ts +0 -129
- package/src/services/page-request-cache-coordinator.service.ts +0 -128
- package/src/services/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 -359
- 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/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 -344
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /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/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
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/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
|
-
import { SchemaValidationService } from "../../services/schema-validation-service.js";
|
|
7
|
+
import { SchemaValidationService } from "../../services/validation/schema-validation-service.js";
|
|
9
8
|
import { StaticSiteGenerator } from "../../static-site-generator/static-site-generator.js";
|
|
10
9
|
import { ServerStaticBuilder } from "./server-static-builder.js";
|
|
11
10
|
import { ExplicitStaticRouteMatcher } from "./explicit-static-route-matcher.js";
|
|
@@ -17,6 +16,9 @@ import { createRequire } from "../../utils/locals-utils.js";
|
|
|
17
16
|
import { HttpError } from "../../errors/http-error.js";
|
|
18
17
|
import { ApiResponseBuilder } from "./api-response.js";
|
|
19
18
|
import { appLogger } from "../../global/app-logger.js";
|
|
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";
|
|
20
22
|
class SharedServerAdapter extends AbstractServerAdapter {
|
|
21
23
|
router;
|
|
22
24
|
fileSystemResponseMatcher;
|
|
@@ -25,31 +27,67 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
25
27
|
staticSiteGenerator;
|
|
26
28
|
staticBuilder;
|
|
27
29
|
schemaValidator = new SchemaValidationService();
|
|
30
|
+
async initializeSharedRouteHandling(options) {
|
|
31
|
+
await this.initSharedRouter();
|
|
32
|
+
this.configureSharedResponseHandlers(options.staticRoutes, options.hmrManager);
|
|
33
|
+
}
|
|
34
|
+
createSharedWatchRefreshCallback(options) {
|
|
35
|
+
return async () => {
|
|
36
|
+
try {
|
|
37
|
+
await this.initializeSharedRouteHandling({
|
|
38
|
+
staticRoutes: options.staticRoutes,
|
|
39
|
+
hmrManager: options.hmrManager
|
|
40
|
+
});
|
|
41
|
+
if (options.onRoutesReady) {
|
|
42
|
+
await options.onRoutesReady();
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
if (options.onError) {
|
|
46
|
+
await options.onError(error instanceof Error ? error : new Error(String(error)));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
28
53
|
/**
|
|
29
|
-
* Scans the filesystem and dynamically constructs the
|
|
54
|
+
* Scans the filesystem and dynamically constructs the Route Registry.
|
|
30
55
|
*
|
|
31
56
|
* This process runs identically across both Bun and Node wrappers. It analyzes the configured pages
|
|
32
57
|
* directory, building a map of all available UI routes and API endpoints.
|
|
33
|
-
* The resulting `
|
|
58
|
+
* The resulting `RouteRegistry` instance becomes the central nervous system for mapping WinterCG incoming
|
|
34
59
|
* Web Requests (`Request`) to their corresponding internal execution paths.
|
|
35
60
|
*/
|
|
36
61
|
async initSharedRouter() {
|
|
37
|
-
|
|
38
|
-
|
|
62
|
+
this.router = new RouteRegistry({
|
|
63
|
+
pagesDir: path.join(this.appConfig.rootDir, this.appConfig.srcDir, this.appConfig.pagesDir),
|
|
39
64
|
appConfig: this.appConfig,
|
|
40
65
|
origin: this.runtimeOrigin,
|
|
41
66
|
templatesExt: this.appConfig.templatesExt,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
this.router = new FSRouter({
|
|
47
|
-
origin: this.runtimeOrigin,
|
|
48
|
-
assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
|
|
49
|
-
scanner
|
|
67
|
+
buildMode: !this.options?.watch,
|
|
68
|
+
pageModuleAdapter: this.createRouteRegistryPageModuleAdapter()
|
|
50
69
|
});
|
|
51
70
|
await this.router.init();
|
|
52
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
|
+
}
|
|
53
91
|
/**
|
|
54
92
|
* Sets up the unified rendering pipeline and response matching chain.
|
|
55
93
|
*
|
|
@@ -67,47 +105,69 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
67
105
|
configureSharedResponseHandlers(staticRoutes, hmrManager) {
|
|
68
106
|
this.routeRendererFactory = new RouteRendererFactory({
|
|
69
107
|
appConfig: this.appConfig,
|
|
108
|
+
rendererModules: this.appConfig.runtime?.rendererModuleContext,
|
|
70
109
|
runtimeOrigin: this.runtimeOrigin
|
|
71
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) {
|
|
72
122
|
const fileSystemResponseFactory = new FileSystemServerResponseFactory({
|
|
73
|
-
appConfig: this.appConfig,
|
|
74
|
-
routeRendererFactory: this.routeRendererFactory,
|
|
75
123
|
options: {
|
|
76
124
|
watchMode: !!this.options?.watch
|
|
77
125
|
}
|
|
78
126
|
});
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const store = cacheConfig?.store === "memory" || !cacheConfig?.store ? new MemoryCacheStore({ maxEntries: cacheConfig?.maxEntries }) : cacheConfig.store;
|
|
84
|
-
cacheService = new PageCacheService({ store, enabled: true });
|
|
85
|
-
}
|
|
86
|
-
this.fileSystemResponseMatcher = new FileSystemResponseMatcher({
|
|
127
|
+
const cacheService = this.createSharedPageCacheService();
|
|
128
|
+
const fileSystemResponseMatcher = new FileSystemResponseMatcher({
|
|
129
|
+
appConfig: this.appConfig,
|
|
130
|
+
assetPrefix: path.join(this.appConfig.rootDir, this.appConfig.distDir),
|
|
87
131
|
router: this.router,
|
|
88
132
|
routeRendererFactory: this.routeRendererFactory,
|
|
89
133
|
fileSystemResponseFactory,
|
|
90
134
|
cacheService,
|
|
91
|
-
defaultCacheStrategy:
|
|
92
|
-
});
|
|
93
|
-
const explicitStaticRouteMatcher = staticRoutes.length > 0 ? new ExplicitStaticRouteMatcher({
|
|
94
|
-
appConfig: this.appConfig,
|
|
95
|
-
routeRendererFactory: this.routeRendererFactory,
|
|
96
|
-
staticRoutes
|
|
97
|
-
}) : void 0;
|
|
98
|
-
this.routeHandler = new ServerRouteHandler({
|
|
99
|
-
router: this.router,
|
|
100
|
-
fileSystemResponseMatcher: this.fileSystemResponseMatcher,
|
|
101
|
-
explicitStaticRouteMatcher,
|
|
102
|
-
watch: !!this.options?.watch,
|
|
103
|
-
hmrManager
|
|
135
|
+
defaultCacheStrategy: this.appConfig.cache?.defaultStrategy ?? "static"
|
|
104
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 });
|
|
105
155
|
}
|
|
106
156
|
getCacheService() {
|
|
107
157
|
return this.fileSystemResponseMatcher?.getCacheService() ?? null;
|
|
108
158
|
}
|
|
109
159
|
getRenderContext() {
|
|
110
|
-
|
|
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
|
+
});
|
|
111
171
|
}
|
|
112
172
|
/**
|
|
113
173
|
* Executes an Application Programming Interface (API) handler in an environment-agnostic manner.
|
|
@@ -129,87 +189,18 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
129
189
|
async executeApiHandler(request, params, routeConfig, serverInstance, errorHandler) {
|
|
130
190
|
let context;
|
|
131
191
|
try {
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
Object.entries(params).map(([key, value]) => [key, Array.isArray(value) ? value.join("/") : value])
|
|
137
|
-
);
|
|
138
|
-
context = {
|
|
139
|
-
request,
|
|
140
|
-
params: normalizedParams,
|
|
141
|
-
response: new ApiResponseBuilder(),
|
|
142
|
-
server: serverInstance,
|
|
143
|
-
locals,
|
|
144
|
-
require: createRequire(() => locals),
|
|
145
|
-
services: {
|
|
146
|
-
cache: this.getCacheService()
|
|
147
|
-
},
|
|
148
|
-
...this.getRenderContext()
|
|
149
|
-
};
|
|
150
|
-
if (schema) {
|
|
151
|
-
const url = new URL(request.url);
|
|
152
|
-
const queryParams = Object.fromEntries(url.searchParams);
|
|
153
|
-
const headers = Object.fromEntries(request.headers);
|
|
154
|
-
let body;
|
|
155
|
-
if (schema.body) {
|
|
156
|
-
try {
|
|
157
|
-
const contentType = request.headers.get("Content-Type") || "";
|
|
158
|
-
if (contentType.includes("application/json")) body = await request.clone().json();
|
|
159
|
-
else if (contentType.includes("text/plain")) body = await request.clone().text();
|
|
160
|
-
} catch {
|
|
161
|
-
return context.response.status(400).json({ error: "Invalid request body" });
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
const validationResult = await this.schemaValidator.validateRequest(
|
|
165
|
-
{ body, query: queryParams, headers, params: normalizedParams },
|
|
166
|
-
schema
|
|
167
|
-
);
|
|
168
|
-
if (!validationResult.success) {
|
|
169
|
-
return context.response.status(400).json({
|
|
170
|
-
error: "Validation failed",
|
|
171
|
-
issues: validationResult.errors
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
const validated = validationResult.data;
|
|
175
|
-
if (validated.body !== void 0) context.body = validated.body;
|
|
176
|
-
if (validated.query !== void 0) context.query = validated.query;
|
|
177
|
-
if (validated.headers !== void 0) context.headers = validated.headers;
|
|
178
|
-
if (validated.params !== void 0) context.params = validated.params;
|
|
179
|
-
}
|
|
180
|
-
if (middleware.length === 0) {
|
|
181
|
-
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;
|
|
182
196
|
}
|
|
183
|
-
|
|
184
|
-
const executeNext = async () => {
|
|
185
|
-
if (index < middleware.length) {
|
|
186
|
-
const currentMiddleware = middleware[index++];
|
|
187
|
-
return await currentMiddleware(context, executeNext);
|
|
188
|
-
}
|
|
189
|
-
return await routeConfig.handler(context);
|
|
190
|
-
};
|
|
191
|
-
return await executeNext();
|
|
197
|
+
return await this.runApiMiddlewareChain(context, routeConfig);
|
|
192
198
|
} catch (error) {
|
|
193
199
|
if (error instanceof Response) return error;
|
|
194
200
|
if (errorHandler) {
|
|
195
201
|
try {
|
|
196
202
|
if (!context) {
|
|
197
|
-
|
|
198
|
-
context = {
|
|
199
|
-
request,
|
|
200
|
-
params: Object.fromEntries(
|
|
201
|
-
Object.entries(params).map(([key, value]) => [
|
|
202
|
-
key,
|
|
203
|
-
Array.isArray(value) ? value.join("/") : value
|
|
204
|
-
])
|
|
205
|
-
),
|
|
206
|
-
response: new ApiResponseBuilder(),
|
|
207
|
-
server: serverInstance,
|
|
208
|
-
locals,
|
|
209
|
-
require: createRequire(() => locals),
|
|
210
|
-
services: { cache: this.getCacheService() },
|
|
211
|
-
...this.getRenderContext()
|
|
212
|
-
};
|
|
203
|
+
context = this.createApiHandlerContext(request, params, serverInstance);
|
|
213
204
|
}
|
|
214
205
|
return await errorHandler(error, context);
|
|
215
206
|
} catch (handlerError) {
|
|
@@ -221,6 +212,76 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
221
212
|
return new Response("Internal Server Error", { status: 500 });
|
|
222
213
|
}
|
|
223
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
|
+
}
|
|
224
285
|
normalizePath(pathname) {
|
|
225
286
|
if (pathname.length > 1 && pathname.endsWith("/")) {
|
|
226
287
|
return pathname.slice(0, -1);
|
|
@@ -313,6 +374,40 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
313
374
|
}
|
|
314
375
|
return null;
|
|
315
376
|
}
|
|
377
|
+
tryHandleSharedHmrRequest(request, context) {
|
|
378
|
+
const url = new URL(request.url);
|
|
379
|
+
if (url.pathname === "/_hmr_runtime.js" && context.hmrManager) {
|
|
380
|
+
const runtimePath = context.hmrManager.getRuntimePath();
|
|
381
|
+
if (fileSystem.exists(runtimePath)) {
|
|
382
|
+
return new Response(fileSystem.readFileAsBuffer(runtimePath), {
|
|
383
|
+
headers: { "Content-Type": "application/javascript" }
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (url.pathname.startsWith("/assets/_hmr/") && context.hmrManager) {
|
|
388
|
+
const relativePath = url.pathname.slice("/assets/_hmr/".length);
|
|
389
|
+
const assetPath = path.join(context.hmrManager.getDistDir(), relativePath);
|
|
390
|
+
if (fileSystem.exists(assetPath)) {
|
|
391
|
+
return new Response(fileSystem.readFileAsBuffer(assetPath), {
|
|
392
|
+
headers: { "Content-Type": "application/javascript" }
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return null;
|
|
397
|
+
}
|
|
398
|
+
async tryHandleSharedApiRequest(request, context) {
|
|
399
|
+
const apiMatch = this.matchApiHandler(request, context.apiHandlers);
|
|
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
|
+
}
|
|
316
411
|
/**
|
|
317
412
|
* Universally processes an incoming WinterCG Web standard Request.
|
|
318
413
|
*
|
|
@@ -325,25 +420,13 @@ class SharedServerAdapter extends AbstractServerAdapter {
|
|
|
325
420
|
* native HTTP objects into Web Standard Requests.
|
|
326
421
|
*/
|
|
327
422
|
async handleSharedRequest(request, context) {
|
|
328
|
-
const
|
|
329
|
-
if (
|
|
330
|
-
|
|
331
|
-
const fileSystem = (await import("@ecopages/file-system")).fileSystem;
|
|
332
|
-
if (fileSystem.exists(runtimePath)) {
|
|
333
|
-
return new Response(fileSystem.readFileAsBuffer(runtimePath), {
|
|
334
|
-
headers: { "Content-Type": "application/javascript" }
|
|
335
|
-
});
|
|
336
|
-
}
|
|
423
|
+
const hmrResponse = this.tryHandleSharedHmrRequest(request, context);
|
|
424
|
+
if (hmrResponse) {
|
|
425
|
+
return hmrResponse;
|
|
337
426
|
}
|
|
338
|
-
const
|
|
339
|
-
if (
|
|
340
|
-
return
|
|
341
|
-
request,
|
|
342
|
-
apiMatch.params,
|
|
343
|
-
apiMatch.routeConfig,
|
|
344
|
-
context.serverInstance,
|
|
345
|
-
context.errorHandler
|
|
346
|
-
);
|
|
427
|
+
const apiResponse = await this.tryHandleSharedApiRequest(request, context);
|
|
428
|
+
if (apiResponse) {
|
|
429
|
+
return apiResponse;
|
|
347
430
|
}
|
|
348
431
|
return this.routeHandler.handleResponse(request);
|
|
349
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,5 +1,6 @@
|
|
|
1
|
-
import { appLogger } from "../../global/app-logger";
|
|
2
|
-
import { HttpError } from "../../errors/http-error";
|
|
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";
|
|
3
4
|
class ServerRouteHandler {
|
|
4
5
|
router;
|
|
5
6
|
fileSystemResponseMatcher;
|
|
@@ -30,7 +31,7 @@ class ServerRouteHandler {
|
|
|
30
31
|
* @returns true if in watch mode and HMR manager is enabled
|
|
31
32
|
*/
|
|
32
33
|
shouldInjectHmrScript() {
|
|
33
|
-
return this.watch
|
|
34
|
+
return shouldInjectHmrHtmlResponse(this.watch, this.hmrManager);
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
36
37
|
* Checks if a response contains HTML content.
|
|
@@ -39,8 +40,7 @@ class ServerRouteHandler {
|
|
|
39
40
|
* @returns true if Content-Type header starts with 'text/html'
|
|
40
41
|
*/
|
|
41
42
|
isHtmlResponse(response) {
|
|
42
|
-
|
|
43
|
-
return contentType !== null && contentType.startsWith("text/html");
|
|
43
|
+
return isHtmlResponse(response);
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Handles HTTP requests from the router adapter.
|
|
@@ -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
|
}
|
|
@@ -75,16 +75,7 @@ class ServerRouteHandler {
|
|
|
75
75
|
*/
|
|
76
76
|
async maybeInjectHmrScript(response) {
|
|
77
77
|
if (this.shouldInjectHmrScript() && this.isHtmlResponse(response)) {
|
|
78
|
-
|
|
79
|
-
const hmrScript = `<script type="module">import '/_hmr_runtime.js';<\/script>`;
|
|
80
|
-
const updatedHtml = html.replace(/<\/html>/i, `${hmrScript}</html>`);
|
|
81
|
-
const headers = new Headers(response.headers);
|
|
82
|
-
headers.delete("Content-Length");
|
|
83
|
-
return new Response(updatedHtml, {
|
|
84
|
-
status: response.status,
|
|
85
|
-
statusText: response.statusText,
|
|
86
|
-
headers
|
|
87
|
-
});
|
|
78
|
+
return injectHmrRuntimeIntoHtmlResponse(response);
|
|
88
79
|
}
|
|
89
80
|
return response;
|
|
90
81
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../internal-types';
|
|
2
|
-
import type { 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;
|
|
@@ -14,6 +15,32 @@ export interface ServerStaticBuilderParams {
|
|
|
14
15
|
appConfig: EcoPagesAppConfig;
|
|
15
16
|
staticSiteGenerator: StaticSiteGenerator;
|
|
16
17
|
serveOptions: ServeOptions;
|
|
18
|
+
apiHandlers?: ApiHandler[];
|
|
19
|
+
logger?: ServerStaticBuilderLogger;
|
|
20
|
+
previewServerFactory?: ServerStaticPreviewServerFactory;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Minimal logger dependency used by the static builder.
|
|
24
|
+
*/
|
|
25
|
+
export interface ServerStaticBuilderLogger {
|
|
26
|
+
warn(message: string, detail?: string): unknown;
|
|
27
|
+
info(message: string): unknown;
|
|
28
|
+
error(message: string): unknown;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Preview server factory dependency used when static preview mode is enabled.
|
|
32
|
+
*/
|
|
33
|
+
export interface ServerStaticPreviewServerFactory {
|
|
34
|
+
createServer(args: {
|
|
35
|
+
appConfig: EcoPagesAppConfig;
|
|
36
|
+
options: {
|
|
37
|
+
port: number;
|
|
38
|
+
};
|
|
39
|
+
}): {
|
|
40
|
+
server?: {
|
|
41
|
+
port?: number;
|
|
42
|
+
} | null;
|
|
43
|
+
};
|
|
17
44
|
}
|
|
18
45
|
/**
|
|
19
46
|
* Handles static site generation and previews.
|
|
@@ -22,7 +49,13 @@ export declare class ServerStaticBuilder {
|
|
|
22
49
|
private readonly appConfig;
|
|
23
50
|
private readonly staticSiteGenerator;
|
|
24
51
|
private readonly serveOptions;
|
|
25
|
-
|
|
52
|
+
private readonly apiHandlers;
|
|
53
|
+
private readonly logger;
|
|
54
|
+
private readonly previewServerFactory;
|
|
55
|
+
constructor({ appConfig, staticSiteGenerator, serveOptions, apiHandlers, logger, previewServerFactory, }: ServerStaticBuilderParams);
|
|
56
|
+
private warnApiHandlersUnavailableInStaticMode;
|
|
57
|
+
private prepareExportDirectory;
|
|
58
|
+
private refreshRuntimeAssets;
|
|
26
59
|
/**
|
|
27
60
|
* Generates a static build of the site for deployment.
|
|
28
61
|
* @param options.preview - If true, starts a preview server after build
|
|
@@ -31,8 +64,8 @@ export declare class ServerStaticBuilder {
|
|
|
31
64
|
* @param dependencies.staticRoutes - Explicit static routes registered via app.static()
|
|
32
65
|
*/
|
|
33
66
|
build(options: StaticBuildOptions | undefined, dependencies: {
|
|
34
|
-
router:
|
|
35
|
-
routeRendererFactory:
|
|
67
|
+
router: RouteRegistry;
|
|
68
|
+
routeRendererFactory: StaticGenerationRendererResolver;
|
|
36
69
|
staticRoutes?: StaticRoute[];
|
|
37
70
|
}): Promise<void>;
|
|
38
71
|
}
|