@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,8 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FileRouteMiddleware, FileRouteMiddlewareContext, RequestLocals } from '../../types/public-types.js';
|
|
2
2
|
import type { PageCacheService } from '../../services/cache/page-cache-service.js';
|
|
3
3
|
export declare const FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS: {
|
|
4
|
-
readonly CTX_RENDER_UNAVAILABLE: "[ecopages] ctx.render is not available in file-route middleware";
|
|
5
|
-
readonly CTX_RENDER_PARTIAL_UNAVAILABLE: "[ecopages] ctx.renderPartial is not available in file-route middleware";
|
|
6
4
|
readonly middlewareRequiresDynamic: (filePath: string) => string;
|
|
7
5
|
};
|
|
8
6
|
/**
|
|
@@ -26,7 +24,7 @@ export declare class FileRouteMiddlewarePipeline {
|
|
|
26
24
|
* @throws LocalsAccessError When middleware is configured for a non-dynamic page.
|
|
27
25
|
*/
|
|
28
26
|
assertValidConfiguration(input: {
|
|
29
|
-
middleware:
|
|
27
|
+
middleware: FileRouteMiddleware[];
|
|
30
28
|
pageCacheStrategy: 'static' | 'dynamic' | {
|
|
31
29
|
revalidate: number;
|
|
32
30
|
tags?: string[];
|
|
@@ -36,9 +34,8 @@ export declare class FileRouteMiddlewarePipeline {
|
|
|
36
34
|
/**
|
|
37
35
|
* Creates the request-scoped middleware context used by page middleware.
|
|
38
36
|
*
|
|
39
|
-
* The context intentionally
|
|
40
|
-
*
|
|
41
|
-
* not by middleware stages.
|
|
37
|
+
* The context intentionally omits `render()` and `renderPartial()` because
|
|
38
|
+
* rendering is owned by the page route pipeline, not by middleware stages.
|
|
42
39
|
*
|
|
43
40
|
* @param input Request details and the mutable locals store.
|
|
44
41
|
* @returns Middleware execution context.
|
|
@@ -47,7 +44,7 @@ export declare class FileRouteMiddlewarePipeline {
|
|
|
47
44
|
request: Request;
|
|
48
45
|
params: Record<string, string>;
|
|
49
46
|
locals: RequestLocals;
|
|
50
|
-
}):
|
|
47
|
+
}): FileRouteMiddlewareContext;
|
|
51
48
|
/**
|
|
52
49
|
* Runs the middleware chain and eventually delegates to the render callback.
|
|
53
50
|
*
|
|
@@ -58,8 +55,8 @@ export declare class FileRouteMiddlewarePipeline {
|
|
|
58
55
|
* @returns Response from middleware or final render stage.
|
|
59
56
|
*/
|
|
60
57
|
run(input: {
|
|
61
|
-
middleware:
|
|
62
|
-
context:
|
|
58
|
+
middleware: FileRouteMiddleware[];
|
|
59
|
+
context: FileRouteMiddlewareContext;
|
|
63
60
|
renderResponse: () => Promise<Response>;
|
|
64
61
|
}): Promise<Response>;
|
|
65
62
|
}
|
|
@@ -2,8 +2,6 @@ import { createRequire } from "../../utils/locals-utils.js";
|
|
|
2
2
|
import { ApiResponseBuilder } from "./api-response.js";
|
|
3
3
|
import { LocalsAccessError } from "../../errors/locals-access-error.js";
|
|
4
4
|
const FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS = {
|
|
5
|
-
CTX_RENDER_UNAVAILABLE: "[ecopages] ctx.render is not available in file-route middleware",
|
|
6
|
-
CTX_RENDER_PARTIAL_UNAVAILABLE: "[ecopages] ctx.renderPartial is not available in file-route middleware",
|
|
7
5
|
middlewareRequiresDynamic: (filePath) => `[ecopages] Page middleware requires cache: 'dynamic'. Page: ${filePath}`
|
|
8
6
|
};
|
|
9
7
|
class FileRouteMiddlewarePipeline {
|
|
@@ -30,9 +28,8 @@ class FileRouteMiddlewarePipeline {
|
|
|
30
28
|
/**
|
|
31
29
|
* Creates the request-scoped middleware context used by page middleware.
|
|
32
30
|
*
|
|
33
|
-
* The context intentionally
|
|
34
|
-
*
|
|
35
|
-
* not by middleware stages.
|
|
31
|
+
* The context intentionally omits `render()` and `renderPartial()` because
|
|
32
|
+
* rendering is owned by the page route pipeline, not by middleware stages.
|
|
36
33
|
*
|
|
37
34
|
* @param input Request details and the mutable locals store.
|
|
38
35
|
* @returns Middleware execution context.
|
|
@@ -48,12 +45,6 @@ class FileRouteMiddlewarePipeline {
|
|
|
48
45
|
},
|
|
49
46
|
locals: input.locals,
|
|
50
47
|
require: createRequire(() => context.locals),
|
|
51
|
-
render: async () => {
|
|
52
|
-
throw new Error(FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS.CTX_RENDER_UNAVAILABLE);
|
|
53
|
-
},
|
|
54
|
-
renderPartial: async () => {
|
|
55
|
-
throw new Error(FILE_ROUTE_MIDDLEWARE_PIPELINE_ERRORS.CTX_RENDER_PARTIAL_UNAVAILABLE);
|
|
56
|
-
},
|
|
57
48
|
json: (data, options) => {
|
|
58
49
|
const builder = new ApiResponseBuilder();
|
|
59
50
|
if (options?.status) builder.status(options.status);
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { RouteRendererBody } from '../../public-types.js';
|
|
3
|
-
|
|
1
|
+
import type { FileSystemServerOptions } from '../../types/internal-types.js';
|
|
2
|
+
import type { RouteRendererBody } from '../../types/public-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds HTTP responses for static files and shared file-system fallbacks.
|
|
5
|
+
*/
|
|
4
6
|
export declare class FileSystemServerResponseFactory {
|
|
5
|
-
private appConfig;
|
|
6
|
-
private routeRendererFactory;
|
|
7
7
|
private options;
|
|
8
|
-
constructor({
|
|
9
|
-
appConfig: EcoPagesAppConfig;
|
|
10
|
-
routeRendererFactory: RouteRendererFactory;
|
|
8
|
+
constructor({ options }: {
|
|
11
9
|
options: FileSystemServerOptions;
|
|
12
10
|
});
|
|
13
11
|
isHtml(contentType: string): contentType is "text/html";
|
|
14
12
|
shouldEnableGzip(contentType: string): boolean;
|
|
15
13
|
createResponseWithBody(body: RouteRendererBody, init?: ResponseInit): Promise<Response>;
|
|
16
14
|
createDefaultNotFoundResponse(): Promise<Response>;
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Wraps already-rendered HTML in a 404 response envelope.
|
|
17
|
+
*/
|
|
18
|
+
createHtmlNotFoundResponse(body: RouteRendererBody): Promise<Response>;
|
|
19
|
+
/**
|
|
20
|
+
* Reads a static file response, returning `null` when the file is missing.
|
|
21
|
+
*/
|
|
22
|
+
createFileResponse(filePath: string, contentType: string): Promise<Response | null>;
|
|
19
23
|
}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { STATUS_MESSAGE } from "../../constants.js";
|
|
1
|
+
import { STATUS_MESSAGE } from "../../config/constants.js";
|
|
2
2
|
import { appLogger } from "../../global/app-logger.js";
|
|
3
3
|
import { fileSystem } from "@ecopages/file-system";
|
|
4
4
|
class FileSystemServerResponseFactory {
|
|
5
|
-
appConfig;
|
|
6
|
-
routeRendererFactory;
|
|
7
5
|
options;
|
|
8
|
-
constructor({
|
|
9
|
-
appConfig,
|
|
10
|
-
routeRendererFactory,
|
|
11
|
-
options
|
|
12
|
-
}) {
|
|
13
|
-
this.appConfig = appConfig;
|
|
14
|
-
this.routeRendererFactory = routeRendererFactory;
|
|
6
|
+
constructor({ options }) {
|
|
15
7
|
this.options = options;
|
|
16
8
|
}
|
|
17
9
|
isHtml(contentType) {
|
|
@@ -34,22 +26,11 @@ class FileSystemServerResponseFactory {
|
|
|
34
26
|
status: 404
|
|
35
27
|
});
|
|
36
28
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
appLogger.debug(
|
|
43
|
-
"Custom 404 template not found, falling back to default 404 response",
|
|
44
|
-
error404TemplatePath
|
|
45
|
-
);
|
|
46
|
-
return this.createDefaultNotFoundResponse();
|
|
47
|
-
}
|
|
48
|
-
const routeRenderer = this.routeRendererFactory.createRenderer(error404TemplatePath);
|
|
49
|
-
const result = await routeRenderer.createRoute({
|
|
50
|
-
file: error404TemplatePath
|
|
51
|
-
});
|
|
52
|
-
return await this.createResponseWithBody(result.body, {
|
|
29
|
+
/**
|
|
30
|
+
* Wraps already-rendered HTML in a 404 response envelope.
|
|
31
|
+
*/
|
|
32
|
+
async createHtmlNotFoundResponse(body) {
|
|
33
|
+
return await this.createResponseWithBody(body, {
|
|
53
34
|
status: 404,
|
|
54
35
|
statusText: STATUS_MESSAGE[404],
|
|
55
36
|
headers: {
|
|
@@ -57,6 +38,9 @@ class FileSystemServerResponseFactory {
|
|
|
57
38
|
}
|
|
58
39
|
});
|
|
59
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Reads a static file response, returning `null` when the file is missing.
|
|
43
|
+
*/
|
|
60
44
|
async createFileResponse(filePath, contentType) {
|
|
61
45
|
try {
|
|
62
46
|
let file;
|
|
@@ -88,7 +72,7 @@ class FileSystemServerResponseFactory {
|
|
|
88
72
|
} else {
|
|
89
73
|
appLogger.error("Error reading file", filePath, err);
|
|
90
74
|
}
|
|
91
|
-
return
|
|
75
|
+
return null;
|
|
92
76
|
}
|
|
93
77
|
}
|
|
94
78
|
}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig, MatchResult } from '../../internal-types.js';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type { EcoPagesAppConfig, MatchResult } from '../../types/internal-types.js';
|
|
2
|
+
import type { PageRendererResolver } from '../../route-renderer/route-renderer.js';
|
|
3
|
+
import type { RouteRegistry } from '../../router/server/route-registry.js';
|
|
4
4
|
import type { PageCacheService } from '../../services/cache/page-cache-service.js';
|
|
5
5
|
import type { CacheStrategy } from '../../services/cache/cache.types.js';
|
|
6
6
|
import type { FileSystemServerResponseFactory } from './fs-server-response-factory.js';
|
|
7
|
-
export declare const FILE_SYSTEM_RESPONSE_MATCHER_ERRORS: {
|
|
8
|
-
readonly transpilePageModuleFailed: (details: string) => string;
|
|
9
|
-
readonly noTranspiledOutputForPageModule: (filePath: string) => string;
|
|
10
|
-
};
|
|
11
7
|
export interface FileSystemResponseMatcherOptions {
|
|
12
8
|
appConfig: EcoPagesAppConfig;
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
assetPrefix: string;
|
|
10
|
+
router: RouteRegistry;
|
|
11
|
+
routeRendererFactory: PageRendererResolver;
|
|
15
12
|
fileSystemResponseFactory: FileSystemServerResponseFactory;
|
|
16
13
|
/** Optional cache service. When null, caching is disabled. */
|
|
17
14
|
cacheService?: PageCacheService | null;
|
|
@@ -21,24 +18,22 @@ export interface FileSystemResponseMatcherOptions {
|
|
|
21
18
|
/**
|
|
22
19
|
* Matches file-system routes to rendered HTML responses.
|
|
23
20
|
*
|
|
24
|
-
* This
|
|
25
|
-
* render pipeline. It coordinates page module inspection, request-local policy,
|
|
21
|
+
* This render pipeline coordinates page module inspection, request-local policy,
|
|
26
22
|
* renderer invocation, middleware execution, cache integration, and fallback
|
|
27
23
|
* error translation.
|
|
28
24
|
*/
|
|
29
25
|
export declare class FileSystemResponseMatcher {
|
|
30
26
|
private appConfig;
|
|
27
|
+
private assetPrefix;
|
|
31
28
|
private router;
|
|
32
29
|
private routeRendererFactory;
|
|
33
30
|
private fileSystemResponseFactory;
|
|
34
|
-
private serverModuleTranspiler;
|
|
35
31
|
private pageRequestCacheCoordinator;
|
|
36
32
|
private fileRouteMiddlewarePipeline;
|
|
37
|
-
constructor({ appConfig, router, routeRendererFactory, fileSystemResponseFactory, cacheService, defaultCacheStrategy, }: FileSystemResponseMatcherOptions);
|
|
33
|
+
constructor({ appConfig, assetPrefix, router, routeRendererFactory, fileSystemResponseFactory, cacheService, defaultCacheStrategy, }: FileSystemResponseMatcherOptions);
|
|
38
34
|
/**
|
|
39
35
|
* Resolves unmatched paths either as static asset requests or as the custom
|
|
40
36
|
* not-found page.
|
|
41
|
-
*
|
|
42
37
|
* @param requestUrl Incoming pathname.
|
|
43
38
|
* @returns Static file response or rendered 404 response.
|
|
44
39
|
*/
|
|
@@ -55,14 +50,19 @@ export declare class FileSystemResponseMatcher {
|
|
|
55
50
|
* @returns Final response for the matched route.
|
|
56
51
|
*/
|
|
57
52
|
handleMatch(match: MatchResult, request?: Request): Promise<Response>;
|
|
53
|
+
/**
|
|
54
|
+
* Renders the app-owned custom 404 page, falling back to the default text 404
|
|
55
|
+
* when the page template cannot be resolved.
|
|
56
|
+
*/
|
|
57
|
+
private renderCustomNotFoundResponse;
|
|
58
|
+
private createExecutionPlan;
|
|
58
59
|
/**
|
|
59
60
|
* Loads the matched page module for request-time inspection.
|
|
60
61
|
*
|
|
61
62
|
* The matcher needs access to page-level metadata such as `cache` and
|
|
62
|
-
* `middleware` before full rendering starts, so it
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* boundary instead of leaking through nested router collaborators.
|
|
63
|
+
* `middleware` before full rendering starts, so it asks the owning route
|
|
64
|
+
* renderer to load the page module. That preserves integration-specific page
|
|
65
|
+
* import setup for request-time inspection as well as for full rendering.
|
|
66
66
|
*
|
|
67
67
|
* @param filePath Absolute page module path.
|
|
68
68
|
* @returns Imported page module.
|
|
@@ -1,26 +1,21 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { appLogger } from "../../global/app-logger.js";
|
|
3
3
|
import { PageRequestCacheCoordinator } from "../../services/cache/page-request-cache-coordinator.service.js";
|
|
4
|
-
import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
|
|
5
|
-
import { resolveInternalExecutionDir } from "../../utils/resolve-work-dir.js";
|
|
6
4
|
import { ServerUtils } from "../../utils/server-utils.module.js";
|
|
7
5
|
import { FileRouteMiddlewarePipeline } from "./file-route-middleware-pipeline.js";
|
|
8
6
|
import { LocalsAccessError } from "../../errors/locals-access-error.js";
|
|
9
7
|
import { isDevelopmentRuntime } from "../../utils/runtime.js";
|
|
10
|
-
const FILE_SYSTEM_RESPONSE_MATCHER_ERRORS = {
|
|
11
|
-
transpilePageModuleFailed: (details) => `Error transpiling page module: ${details}`,
|
|
12
|
-
noTranspiledOutputForPageModule: (filePath) => `No transpiled output generated for page module: ${filePath}`
|
|
13
|
-
};
|
|
14
8
|
class FileSystemResponseMatcher {
|
|
15
9
|
appConfig;
|
|
10
|
+
assetPrefix;
|
|
16
11
|
router;
|
|
17
12
|
routeRendererFactory;
|
|
18
13
|
fileSystemResponseFactory;
|
|
19
|
-
serverModuleTranspiler;
|
|
20
14
|
pageRequestCacheCoordinator;
|
|
21
15
|
fileRouteMiddlewarePipeline;
|
|
22
16
|
constructor({
|
|
23
17
|
appConfig,
|
|
18
|
+
assetPrefix,
|
|
24
19
|
router,
|
|
25
20
|
routeRendererFactory,
|
|
26
21
|
fileSystemResponseFactory,
|
|
@@ -28,29 +23,29 @@ class FileSystemResponseMatcher {
|
|
|
28
23
|
defaultCacheStrategy = "static"
|
|
29
24
|
}) {
|
|
30
25
|
this.appConfig = appConfig;
|
|
26
|
+
this.assetPrefix = assetPrefix;
|
|
31
27
|
this.router = router;
|
|
32
28
|
this.routeRendererFactory = routeRendererFactory;
|
|
33
29
|
this.fileSystemResponseFactory = fileSystemResponseFactory;
|
|
34
|
-
this.serverModuleTranspiler = getAppServerModuleTranspiler(appConfig);
|
|
35
30
|
this.pageRequestCacheCoordinator = new PageRequestCacheCoordinator(cacheService, defaultCacheStrategy);
|
|
36
31
|
this.fileRouteMiddlewarePipeline = new FileRouteMiddlewarePipeline(cacheService);
|
|
37
32
|
}
|
|
38
33
|
/**
|
|
39
34
|
* Resolves unmatched paths either as static asset requests or as the custom
|
|
40
35
|
* not-found page.
|
|
41
|
-
*
|
|
42
36
|
* @param requestUrl Incoming pathname.
|
|
43
37
|
* @returns Static file response or rendered 404 response.
|
|
44
38
|
*/
|
|
45
39
|
async handleNoMatch(requestUrl) {
|
|
46
40
|
const isStaticFileRequest = ServerUtils.hasKnownExtension(requestUrl);
|
|
47
41
|
if (!isStaticFileRequest) {
|
|
48
|
-
return this.
|
|
42
|
+
return this.renderCustomNotFoundResponse();
|
|
49
43
|
}
|
|
50
44
|
const relativeUrl = requestUrl.startsWith("/") ? requestUrl.slice(1) : requestUrl;
|
|
51
|
-
const filePath = path.join(this.
|
|
45
|
+
const filePath = path.join(this.assetPrefix, relativeUrl);
|
|
52
46
|
const contentType = ServerUtils.getContentType(filePath);
|
|
53
|
-
|
|
47
|
+
const response = await this.fileSystemResponseFactory.createFileResponse(filePath, contentType);
|
|
48
|
+
return response ?? this.renderCustomNotFoundResponse();
|
|
54
49
|
}
|
|
55
50
|
/**
|
|
56
51
|
* Handles a matched file-system page route.
|
|
@@ -64,34 +59,25 @@ class FileSystemResponseMatcher {
|
|
|
64
59
|
* @returns Final response for the matched route.
|
|
65
60
|
*/
|
|
66
61
|
async handleMatch(match, request) {
|
|
67
|
-
const cacheKey = this.pageRequestCacheCoordinator.buildCacheKey(match);
|
|
68
62
|
try {
|
|
69
|
-
const
|
|
70
|
-
method: "GET"
|
|
71
|
-
});
|
|
72
|
-
const localsStore = {};
|
|
73
|
-
const pageModule = await this.importPageModule(match.filePath);
|
|
74
|
-
const Page = pageModule?.default;
|
|
75
|
-
const pageMiddleware = Page?.middleware ?? [];
|
|
76
|
-
const pageCacheStrategy = Page?.cache ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
|
|
77
|
-
const localsForRender = pageCacheStrategy === "dynamic" ? localsStore : void 0;
|
|
63
|
+
const executionPlan = await this.createExecutionPlan(match, request);
|
|
78
64
|
this.fileRouteMiddlewarePipeline.assertValidConfiguration({
|
|
79
|
-
middleware: pageMiddleware,
|
|
80
|
-
pageCacheStrategy,
|
|
81
|
-
filePath:
|
|
65
|
+
middleware: executionPlan.pageMiddleware,
|
|
66
|
+
pageCacheStrategy: executionPlan.pageCacheStrategy,
|
|
67
|
+
filePath: executionPlan.pageFilePath
|
|
82
68
|
});
|
|
83
|
-
const routeRenderer = this.routeRendererFactory.
|
|
69
|
+
const routeRenderer = this.routeRendererFactory.getPageRenderer(executionPlan.pageFilePath);
|
|
84
70
|
const middlewareContext = this.fileRouteMiddlewarePipeline.createContext({
|
|
85
|
-
request:
|
|
71
|
+
request: executionPlan.request,
|
|
86
72
|
params: match.params,
|
|
87
|
-
locals: localsStore
|
|
73
|
+
locals: executionPlan.localsStore
|
|
88
74
|
});
|
|
89
75
|
const renderFn = async () => {
|
|
90
|
-
const result = await routeRenderer.
|
|
91
|
-
file:
|
|
76
|
+
const result = await routeRenderer.execute({
|
|
77
|
+
file: executionPlan.pageFilePath,
|
|
92
78
|
params: match.params,
|
|
93
79
|
query: match.query,
|
|
94
|
-
locals: localsForRender
|
|
80
|
+
locals: executionPlan.localsForRender
|
|
95
81
|
});
|
|
96
82
|
const html = await this.pageRequestCacheCoordinator.bodyToString(result.body);
|
|
97
83
|
const strategy = result.cacheStrategy ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
|
|
@@ -99,13 +85,13 @@ class FileSystemResponseMatcher {
|
|
|
99
85
|
};
|
|
100
86
|
const renderResponse = async () => {
|
|
101
87
|
return this.pageRequestCacheCoordinator.render({
|
|
102
|
-
cacheKey,
|
|
103
|
-
pageCacheStrategy,
|
|
88
|
+
cacheKey: executionPlan.cacheKey,
|
|
89
|
+
pageCacheStrategy: executionPlan.pageCacheStrategy,
|
|
104
90
|
renderFn
|
|
105
91
|
});
|
|
106
92
|
};
|
|
107
93
|
return await this.fileRouteMiddlewarePipeline.run({
|
|
108
|
-
middleware: pageMiddleware,
|
|
94
|
+
middleware: executionPlan.pageMiddleware,
|
|
109
95
|
context: middlewareContext,
|
|
110
96
|
renderResponse
|
|
111
97
|
});
|
|
@@ -121,30 +107,71 @@ class FileSystemResponseMatcher {
|
|
|
121
107
|
}
|
|
122
108
|
if (error instanceof Error) {
|
|
123
109
|
if (isDevelopmentRuntime() || appLogger.isDebugEnabled()) {
|
|
124
|
-
appLogger.error(`[FileSystemResponseMatcher] ${error.message} at ${match.
|
|
110
|
+
appLogger.error(`[FileSystemResponseMatcher] ${error.message} at ${match.requestedPathname}`);
|
|
125
111
|
}
|
|
126
112
|
}
|
|
127
|
-
return this.
|
|
113
|
+
return this.renderCustomNotFoundResponse();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Renders the app-owned custom 404 page, falling back to the default text 404
|
|
118
|
+
* when the page template cannot be resolved.
|
|
119
|
+
*/
|
|
120
|
+
async renderCustomNotFoundResponse() {
|
|
121
|
+
const error404TemplatePath = this.appConfig.absolutePaths.error404TemplatePath;
|
|
122
|
+
try {
|
|
123
|
+
const routeRenderer = this.routeRendererFactory.getPageRenderer(error404TemplatePath);
|
|
124
|
+
const result = await routeRenderer.execute({
|
|
125
|
+
file: error404TemplatePath
|
|
126
|
+
});
|
|
127
|
+
return this.fileSystemResponseFactory.createHtmlNotFoundResponse(result.body);
|
|
128
|
+
} catch {
|
|
129
|
+
appLogger.debug(
|
|
130
|
+
"Custom 404 template not found, falling back to default 404 response",
|
|
131
|
+
error404TemplatePath
|
|
132
|
+
);
|
|
133
|
+
return this.fileSystemResponseFactory.createDefaultNotFoundResponse();
|
|
128
134
|
}
|
|
129
135
|
}
|
|
136
|
+
async createExecutionPlan(match, request) {
|
|
137
|
+
const cacheKey = this.pageRequestCacheCoordinator.buildCacheKey({
|
|
138
|
+
pathname: match.requestedPathname,
|
|
139
|
+
query: match.query
|
|
140
|
+
});
|
|
141
|
+
const resolvedRequest = request ?? new Request(new URL(cacheKey, this.router.origin).toString(), {
|
|
142
|
+
method: "GET"
|
|
143
|
+
});
|
|
144
|
+
const localsStore = {};
|
|
145
|
+
const pageFilePath = match.templateRoute.filePath;
|
|
146
|
+
const pageModule = await this.importPageModule(pageFilePath);
|
|
147
|
+
const Page = pageModule?.default;
|
|
148
|
+
const pageMiddleware = Page?.middleware ?? [];
|
|
149
|
+
const pageCacheStrategy = Page?.cache ?? this.pageRequestCacheCoordinator.getDefaultCacheStrategy();
|
|
150
|
+
return {
|
|
151
|
+
cacheKey,
|
|
152
|
+
request: resolvedRequest,
|
|
153
|
+
pageFilePath,
|
|
154
|
+
pageMiddleware,
|
|
155
|
+
pageCacheStrategy,
|
|
156
|
+
localsStore,
|
|
157
|
+
localsForRender: pageCacheStrategy === "dynamic" ? localsStore : void 0
|
|
158
|
+
};
|
|
159
|
+
}
|
|
130
160
|
/**
|
|
131
161
|
* Loads the matched page module for request-time inspection.
|
|
132
162
|
*
|
|
133
163
|
* The matcher needs access to page-level metadata such as `cache` and
|
|
134
|
-
* `middleware` before full rendering starts, so it
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* boundary instead of leaking through nested router collaborators.
|
|
164
|
+
* `middleware` before full rendering starts, so it asks the owning route
|
|
165
|
+
* renderer to load the page module. That preserves integration-specific page
|
|
166
|
+
* import setup for request-time inspection as well as for full rendering.
|
|
138
167
|
*
|
|
139
168
|
* @param filePath Absolute page module path.
|
|
140
169
|
* @returns Imported page module.
|
|
141
170
|
*/
|
|
142
171
|
async importPageModule(filePath) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
transpileErrorMessage: FILE_SYSTEM_RESPONSE_MATCHER_ERRORS.transpilePageModuleFailed,
|
|
147
|
-
noOutputMessage: FILE_SYSTEM_RESPONSE_MATCHER_ERRORS.noTranspiledOutputForPageModule
|
|
172
|
+
const routeRenderer = this.routeRendererFactory.getPageRenderer(filePath);
|
|
173
|
+
return routeRenderer.loadPageModule(filePath, {
|
|
174
|
+
cacheScope: "request-metadata"
|
|
148
175
|
});
|
|
149
176
|
}
|
|
150
177
|
/**
|
|
@@ -155,6 +182,5 @@ class FileSystemResponseMatcher {
|
|
|
155
182
|
}
|
|
156
183
|
}
|
|
157
184
|
export {
|
|
158
|
-
FILE_SYSTEM_RESPONSE_MATCHER_ERRORS,
|
|
159
185
|
FileSystemResponseMatcher
|
|
160
186
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { fileSystem } from "@ecopages/file-system";
|
|
3
3
|
import { appLogger } from "../../global/app-logger.js";
|
|
4
|
-
import { RESOLVED_ASSETS_DIR } from "../../constants.js";
|
|
4
|
+
import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
|
|
5
5
|
class HmrEntrypointRegistrar {
|
|
6
6
|
options;
|
|
7
7
|
constructor(options) {
|
|
@@ -9,16 +9,17 @@ function shouldInjectHmrHtmlResponse(watch, hmrManager) {
|
|
|
9
9
|
}
|
|
10
10
|
async function injectHmrRuntimeIntoHtmlResponse(response) {
|
|
11
11
|
const html = await response.text();
|
|
12
|
+
const headers = new Headers(response.headers);
|
|
13
|
+
headers.set("Cache-Control", "no-store, must-revalidate");
|
|
14
|
+
headers.delete("Content-Length");
|
|
12
15
|
if (html.includes(HMR_RUNTIME_IMPORT)) {
|
|
13
16
|
return new Response(html, {
|
|
14
17
|
status: response.status,
|
|
15
18
|
statusText: response.statusText,
|
|
16
|
-
headers
|
|
19
|
+
headers
|
|
17
20
|
});
|
|
18
21
|
}
|
|
19
22
|
const updatedHtml = html.replace(/<\/html>/i, `${HMR_RUNTIME_SCRIPT}</html>`);
|
|
20
|
-
const headers = new Headers(response.headers);
|
|
21
|
-
headers.delete("Content-Length");
|
|
22
23
|
return new Response(updatedHtml, {
|
|
23
24
|
status: response.status,
|
|
24
25
|
statusText: response.statusText,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { RenderContext } from '../../public-types.js';
|
|
2
|
-
import type {
|
|
1
|
+
import type { RenderContext } from '../../types/public-types.js';
|
|
2
|
+
import type { AnyIntegrationPlugin } from '../../plugins/integration-plugin.js';
|
|
3
3
|
export interface CreateRenderContextOptions {
|
|
4
|
-
integrations:
|
|
4
|
+
integrations: AnyIntegrationPlugin[];
|
|
5
|
+
rendererModules?: unknown;
|
|
6
|
+
importServerModule?: (filePath: string) => Promise<unknown>;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* Creates a render context for route handlers.
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
1
2
|
import { invariant } from "../../utils/invariant.js";
|
|
3
|
+
function resolveServerModulePath(filePath) {
|
|
4
|
+
return filePath instanceof URL ? fileURLToPath(filePath) : filePath;
|
|
5
|
+
}
|
|
2
6
|
function mergePropsWithLocals(props, locals) {
|
|
3
7
|
if (!locals || typeof props !== "object" || props === null) {
|
|
4
8
|
return props;
|
|
@@ -15,9 +19,28 @@ function createRenderContext(options) {
|
|
|
15
19
|
);
|
|
16
20
|
const integration = integrations.find((i) => i.name === integrationName);
|
|
17
21
|
invariant(!!integration, `No integration found for: ${integrationName}`);
|
|
18
|
-
return integration.initializeRenderer(
|
|
22
|
+
return integration.initializeRenderer({
|
|
23
|
+
rendererModules: options.rendererModules
|
|
24
|
+
});
|
|
19
25
|
};
|
|
20
26
|
const renderContext = {
|
|
27
|
+
importServerModule: async (filePath) => {
|
|
28
|
+
invariant(!!options.importServerModule, "Server module importing is not available in this render context.");
|
|
29
|
+
return await options.importServerModule(resolveServerModulePath(filePath));
|
|
30
|
+
},
|
|
31
|
+
async renderServerModule(filePath, props, renderOptions) {
|
|
32
|
+
const module = await renderContext.importServerModule(filePath);
|
|
33
|
+
const view = module.default;
|
|
34
|
+
const locals = this?.locals;
|
|
35
|
+
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
36
|
+
const renderer = getRendererForView(view);
|
|
37
|
+
const ctx = {
|
|
38
|
+
partial: false,
|
|
39
|
+
status: renderOptions?.status,
|
|
40
|
+
headers: renderOptions?.headers
|
|
41
|
+
};
|
|
42
|
+
return await renderer.renderToResponse(view, mergedProps, ctx);
|
|
43
|
+
},
|
|
21
44
|
async render(view, props, renderOptions) {
|
|
22
45
|
const locals = this?.locals;
|
|
23
46
|
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReturnParseCliArgs } from '../../utils/parse-cli-args.js';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
+
export type RuntimeBinding = {
|
|
4
|
+
preferredPort: number;
|
|
5
|
+
preferredHostname: string;
|
|
6
|
+
runtimeOrigin: string;
|
|
7
|
+
serveOptions: Record<string, unknown>;
|
|
8
|
+
watch: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type StaticRuntimeMode = {
|
|
11
|
+
requiresFetchRuntime: boolean;
|
|
12
|
+
canBuildWithoutRuntimeServer: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare function resolveServeRuntimeOrigin(serveOptions: {
|
|
15
|
+
hostname?: string;
|
|
16
|
+
port?: number | string;
|
|
17
|
+
}): string;
|
|
18
|
+
export declare function resolveRuntimeBinding(options: {
|
|
19
|
+
cliArgs: ReturnParseCliArgs;
|
|
20
|
+
serverOptions?: Record<string, unknown>;
|
|
21
|
+
env?: NodeJS.ProcessEnv;
|
|
22
|
+
}): RuntimeBinding;
|
|
23
|
+
export declare function resolveStaticRuntimeMode(options: {
|
|
24
|
+
appConfig: EcoPagesAppConfig;
|
|
25
|
+
cliArgs: ReturnParseCliArgs;
|
|
26
|
+
}): StaticRuntimeMode;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from "../../config/constants.js";
|
|
2
|
+
function normalizeOriginHostname(hostname) {
|
|
3
|
+
if (hostname.includes(":") && !hostname.startsWith("[") && !hostname.endsWith("]")) {
|
|
4
|
+
return `[${hostname}]`;
|
|
5
|
+
}
|
|
6
|
+
return hostname;
|
|
7
|
+
}
|
|
8
|
+
function resolveServeRuntimeOrigin(serveOptions) {
|
|
9
|
+
const hostname = normalizeOriginHostname(String(serveOptions.hostname ?? DEFAULT_ECOPAGES_HOSTNAME));
|
|
10
|
+
const port = Number(serveOptions.port ?? DEFAULT_ECOPAGES_PORT);
|
|
11
|
+
return `http://${hostname}:${port}`;
|
|
12
|
+
}
|
|
13
|
+
function resolveRuntimeBinding(options) {
|
|
14
|
+
const env = options.env ?? process.env;
|
|
15
|
+
const preferredPort = options.cliArgs.port ?? (env.ECOPAGES_PORT ? Number(env.ECOPAGES_PORT) : void 0) ?? DEFAULT_ECOPAGES_PORT;
|
|
16
|
+
const preferredHostname = options.cliArgs.hostname ?? env.ECOPAGES_HOSTNAME ?? DEFAULT_ECOPAGES_HOSTNAME;
|
|
17
|
+
return {
|
|
18
|
+
preferredPort,
|
|
19
|
+
preferredHostname,
|
|
20
|
+
runtimeOrigin: resolveServeRuntimeOrigin({
|
|
21
|
+
hostname: preferredHostname,
|
|
22
|
+
port: preferredPort
|
|
23
|
+
}),
|
|
24
|
+
serveOptions: {
|
|
25
|
+
port: preferredPort,
|
|
26
|
+
hostname: preferredHostname,
|
|
27
|
+
...options.serverOptions ?? {}
|
|
28
|
+
},
|
|
29
|
+
watch: options.cliArgs.dev
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function resolveStaticRuntimeMode(options) {
|
|
33
|
+
const requiresFetchRuntime = options.appConfig.integrations.some(
|
|
34
|
+
(integration) => integration.staticBuildStep === "fetch"
|
|
35
|
+
);
|
|
36
|
+
const canBuildWithoutRuntimeServer = (options.cliArgs.build || options.cliArgs.preview) && !requiresFetchRuntime;
|
|
37
|
+
return {
|
|
38
|
+
requiresFetchRuntime,
|
|
39
|
+
canBuildWithoutRuntimeServer
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
resolveRuntimeBinding,
|
|
44
|
+
resolveServeRuntimeOrigin,
|
|
45
|
+
resolveStaticRuntimeMode
|
|
46
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface RuntimeHost<TServer, TServeOptions> {
|
|
2
|
+
start(options: RuntimeHostStartOptions<TServeOptions>): Promise<TServer>;
|
|
3
|
+
stop(server: TServer, options?: {
|
|
4
|
+
force?: boolean;
|
|
5
|
+
}): Promise<void>;
|
|
6
|
+
getOrigin(server: TServer, fallbackServeOptions: TServeOptions): string;
|
|
7
|
+
}
|
|
8
|
+
export interface RuntimeHostStartOptions<TServeOptions> {
|
|
9
|
+
serveOptions: TServeOptions;
|
|
10
|
+
handleRequest(request: Request): Promise<Response>;
|
|
11
|
+
onError(error: Error): Promise<void> | void;
|
|
12
|
+
}
|