@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.33
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 +1 -0
- package/package.json +90 -3
- package/src/adapters/abstract/application-adapter.d.ts +0 -8
- package/src/adapters/abstract/application-adapter.js +252 -261
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.js +132 -134
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.js +24 -26
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +83 -86
- package/src/adapters/bun/client-bridge.js +51 -50
- package/src/adapters/bun/create-app.js +171 -161
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.js +2 -31
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +0 -1
- package/src/adapters/bun/server-adapter.js +561 -561
- package/src/adapters/bun/static-preview-host.js +43 -46
- package/src/adapters/create-app.js +11 -14
- package/src/adapters/index.js +2 -30
- package/src/adapters/node/create-app.js +123 -129
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.js +62 -64
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -21
- package/src/adapters/node/server-adapter.d.ts +0 -1
- package/src/adapters/node/server-adapter.js +347 -326
- package/src/adapters/node/static-content-server.js +172 -191
- package/src/adapters/node/static-preview-host.js +87 -78
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/hmr/hmr-html-response.js +46 -32
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +29 -38
- package/src/adapters/shared/hmr/shared-hmr-manager.js +439 -425
- package/src/adapters/shared/http/api-request-pipeline.js +122 -119
- package/src/adapters/shared/http/api-response.js +77 -77
- package/src/adapters/shared/http/create-body-response.js +22 -19
- package/src/adapters/shared/http/define-api-handler.js +41 -55
- package/src/adapters/shared/http/explicit-static-render-preparation.js +26 -23
- package/src/adapters/shared/http/explicit-static-route-matcher.js +55 -62
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +81 -75
- package/src/adapters/shared/http/fs-server-response-factory.js +101 -96
- package/src/adapters/shared/http/fs-server-response-matcher.js +239 -257
- package/src/adapters/shared/http/run-middleware-chain.js +15 -15
- package/src/adapters/shared/runtime/application-adapter.js +72 -87
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +25 -22
- package/src/adapters/shared/runtime/port-manager.js +207 -177
- package/src/adapters/shared/runtime/render-context.js +94 -79
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +33 -38
- package/src/adapters/shared/runtime/runtime-host.js +1 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +2 -3
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +65 -51
- package/src/adapters/shared/runtime/server-adapter.d.ts +1 -0
- package/src/adapters/shared/runtime/server-adapter.js +233 -217
- package/src/adapters/shared/runtime/server-route-handler.js +74 -70
- package/src/adapters/shared/runtime/server-static-builder.js +165 -184
- package/src/adapters/shared/runtime/static-preview-host.js +1 -0
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +97 -88
- package/src/adapters/shared/ws/websocket-lifecycle.js +57 -50
- package/src/build/README.md +52 -1
- package/src/build/app-build-manifest-runtime.js +129 -108
- package/src/build/browser/browser-runtime-manifest.js +47 -50
- package/src/build/browser/browser-runtime-plugin-helpers.js +32 -12
- package/src/build/browser/browser-runtime-plugin.js +206 -160
- package/src/build/browser/jsx-ownership-plugins.js +51 -37
- package/src/build/browser/lit-static-render-worker-context.js +3 -5
- package/src/build/build-adapter.js +276 -139
- package/src/build/cache/build-input-fingerprint.js +28 -26
- package/src/build/cache/cache-constants.js +4 -6
- package/src/build/cache/cache-keys.js +64 -56
- package/src/build/cache/pages-unified-graph-build.js +179 -178
- package/src/build/cache/production-build-cache.js +47 -54
- package/src/build/cache/server-entry-build-cache.js +134 -146
- package/src/build/contracts/build-contracts.d.ts +4 -4
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.js +58 -43
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/rolldown/rolldown-adapter-helpers.d.ts +9 -0
- package/src/build/rolldown/rolldown-adapter-helpers.js +405 -298
- package/src/build/rolldown/rolldown-build-adapter.js +53 -61
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +31 -35
- package/src/build/rolldown/rolldown-plugin-bridge.js +264 -194
- package/src/build/rolldown/rolldown-source-transform-pass.js +59 -50
- package/src/build/rolldown/runtime-build-output-normalizer.js +227 -175
- package/src/build/rolldown/server-side-css-shim-plugin.js +54 -31
- package/src/build/runtime/build-profile-options.js +36 -36
- package/src/build/runtime/build-request-identity.js +70 -45
- package/src/build/runtime/build-request-policy.js +80 -42
- package/src/build/runtime/build-runtime.js +64 -54
- package/src/build/runtime/deduping-build-executor.js +38 -32
- package/src/build/runtime/parallel-build-executor.js +58 -50
- package/src/build/runtime/serialized-build-executor.js +78 -62
- package/src/cache/index.js +6 -6
- package/src/cache/module-parse-cache.js +99 -68
- package/src/client/navigation-scripts/classification.js +45 -37
- package/src/client/navigation-scripts/index.js +3 -23
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +58 -62
- package/src/client/navigation-scripts/registry.js +15 -11
- package/src/client/navigation-scripts/rerun-queue.js +81 -64
- package/src/client/scroll.js +32 -24
- package/src/client/scroll.test.browser.js +27 -33
- package/src/client/view-transitions.js +68 -55
- package/src/config/config-builder.d.ts +8 -0
- package/src/config/config-builder.js +637 -642
- package/src/config/constants.js +44 -24
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.js +7 -12
- package/src/dev/dev-client-ownership.js +7 -5
- package/src/dev/hmr-manager-registry.js +7 -12
- package/src/dev/host-runtime.js +25 -30
- package/src/dev/runtime-server-started-message.js +2 -5
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +110 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +27 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +145 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +51 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +31 -0
- package/src/dev-toolbar/dev-toolbar-package.js +72 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.js +34 -28
- package/src/diagnostics/startup-trace.d.ts +10 -1
- package/src/diagnostics/startup-trace.js +269 -241
- package/src/eco/README.md +6 -0
- package/src/eco/eco-declared-component.js +19 -14
- package/src/eco/eco.browser.js +56 -69
- package/src/eco/eco.js +156 -96
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.js +59 -49
- package/src/errors/http-error.js +50 -49
- package/src/errors/index.js +3 -12
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.js +15 -15
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +10 -0
- package/src/hmr/client/hmr-runtime.js +117 -113
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +11 -39
- package/src/hmr/hmr-entrypoint-output.js +28 -54
- package/src/hmr/hmr-file-change-prep.js +13 -16
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +5 -11
- package/src/hmr/hmr-strategy.js +113 -61
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -95
- package/src/hmr/strategies/js-hmr-strategy.js +104 -217
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +33 -27
- package/src/index.browser.js +1 -4
- package/src/index.d.ts +1 -0
- package/src/index.js +6 -47
- package/src/integrations/ghtml/ghtml-renderer.js +12 -7
- package/src/integrations/ghtml/ghtml.constants.js +1 -4
- package/src/integrations/ghtml/ghtml.plugin.js +9 -12
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.js +33 -47
- package/src/plugins/define-integration.js +18 -17
- package/src/plugins/eco-component-meta-plugin.js +387 -145
- package/src/plugins/foreign-jsx-override-plugin.js +49 -35
- package/src/plugins/integration-plugin.js +212 -203
- package/src/plugins/jsx-import-source.utils.js +16 -21
- package/src/plugins/processor.js +159 -149
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.js +109 -79
- package/src/plugins/tsconfig-import-resolver.d.ts +17 -0
- package/src/plugins/tsconfig-import-resolver.js +218 -142
- package/src/route-renderer/README.md +12 -1
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +143 -136
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +33 -27
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +173 -126
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +165 -154
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +329 -341
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +33 -32
- package/src/route-renderer/orchestration/integration-renderer.d.ts +1 -0
- package/src/route-renderer/orchestration/integration-renderer.js +731 -750
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +168 -172
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +119 -131
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +82 -91
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +82 -76
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +29 -31
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.loader.js +10 -6
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +31 -28
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +3 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +430 -413
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +191 -212
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +20 -24
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +24 -24
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +22 -24
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +41 -34
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +5 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +42 -22
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +50 -48
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +29 -32
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +150 -156
- package/src/route-renderer/orchestration/string-markup-renderer.js +48 -51
- package/src/route-renderer/page-loading/component-dependency-collection.js +120 -124
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +68 -54
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +46 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +38 -31
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.js +130 -124
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +23 -0
- package/src/router/client/link-intent.js +55 -39
- package/src/router/client/link-intent.test.browser.js +49 -49
- package/src/router/client/link-navigation-policy.js +114 -93
- package/src/router/client/link-navigation-policy.test.browser.js +70 -80
- package/src/router/client/navigation-coordinator.js +235 -211
- package/src/router/client/navigation-lifecycle.d.ts +55 -0
- package/src/router/client/navigation-lifecycle.js +50 -0
- package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
- package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
- package/src/router/server/route-registry.js +237 -242
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -53
- package/src/services/assets/asset-processing-service/asset-processing.service.js +287 -303
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +106 -69
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -53
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +4 -6
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +79 -80
- package/src/services/assets/asset-processing-service/index.js +8 -8
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +22 -16
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +21 -17
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -117
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +110 -115
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -97
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +27 -29
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +34 -40
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +36 -35
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +14 -16
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -39
- package/src/services/assets/browser-bundle.service.js +52 -47
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/index.js +6 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.js +156 -145
- package/src/services/cache/page-request-cache-coordinator.service.js +102 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.js +252 -241
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +107 -101
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.js +235 -243
- package/src/services/module-loading/route-module-build-cache-registry.js +47 -33
- package/src/services/module-loading/route-module-build-cache.js +3 -38
- package/src/services/module-loading/route-module-build-cache.store.js +195 -200
- package/src/services/module-loading/route-module-build-manifest.js +61 -74
- package/src/services/module-loading/route-module-dependency-hasher.js +136 -110
- package/src/services/module-loading/server-module-transpiler.service.js +68 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.js +157 -95
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.js +13 -13
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +35 -19
- package/src/static-site-generator/sitemap-routes.js +33 -28
- package/src/static-site-generator/sitemap.js +38 -29
- package/src/static-site-generator/static-build-invalidation.js +34 -56
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.js +517 -553
- package/src/types/internal-types.d.ts +19 -3
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +16 -46
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.js +27 -23
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.js +21 -8
- package/src/utils/html.js +1 -4
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.js +73 -65
- package/src/utils/path-pattern.js +38 -23
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.js +60 -52
- package/src/utils/static-file-extensions.js +52 -46
- package/src/watchers/project-watcher-ignore.js +16 -15
- package/src/watchers/project-watcher.js +385 -366
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.d.ts +0 -56
- package/src/adapters/shared/hmr/hmr-entrypoint-registrar.js +0 -106
- package/src/build/cache/dev-browser-script-cache.d.ts +0 -34
- package/src/build/cache/dev-browser-script-cache.js +0 -90
|
@@ -1,84 +1,99 @@
|
|
|
1
|
-
import { fileURLToPath } from
|
|
2
|
-
import { invariant } from
|
|
3
|
-
import { createBodyResponse } from
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { invariant } from '../../../utils/invariant.js';
|
|
3
|
+
import { createBodyResponse } from '../http/create-body-response.js';
|
|
4
4
|
function resolveServerModulePath(filePath) {
|
|
5
|
-
|
|
5
|
+
return filePath instanceof URL ? fileURLToPath(filePath) : filePath;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Merges request locals into component props as a dedicated 'locals' property.
|
|
9
|
+
* This prevents naming conflicts and maintains type safety by keeping locals
|
|
10
|
+
* separate from other props.
|
|
11
|
+
*
|
|
12
|
+
* @param props - The original component props
|
|
13
|
+
* @param locals - Optional request-scoped locals from middleware
|
|
14
|
+
* @returns Props with locals merged in, or original props if no locals provided
|
|
15
|
+
*/
|
|
7
16
|
function mergePropsWithLocals(props, locals) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
return { ...props, locals };
|
|
12
|
-
}
|
|
13
|
-
function createRenderContext(options) {
|
|
14
|
-
const { integrations } = options;
|
|
15
|
-
const getRendererForView = (view) => {
|
|
16
|
-
const integrationName = view.config?.integration ?? view.config?.__eco?.integration;
|
|
17
|
-
invariant(
|
|
18
|
-
!!integrationName,
|
|
19
|
-
"Cannot determine integration for view. Set view.config.integration explicitly or ensure the view is defined with eco.page() in a file with a recognized extension."
|
|
20
|
-
);
|
|
21
|
-
const integration = integrations.find((i) => i.name === integrationName);
|
|
22
|
-
invariant(!!integration, `No integration found for: ${integrationName}`);
|
|
23
|
-
return integration.initializeRenderer({
|
|
24
|
-
rendererModules: options.rendererModules
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
const renderContext = {
|
|
28
|
-
importServerModule: async (filePath) => {
|
|
29
|
-
invariant(!!options.importServerModule, "Server module importing is not available in this render context.");
|
|
30
|
-
return await options.importServerModule(resolveServerModulePath(filePath));
|
|
31
|
-
},
|
|
32
|
-
async renderServerModule(filePath, props, renderOptions) {
|
|
33
|
-
const module = await renderContext.importServerModule(filePath);
|
|
34
|
-
const view = module.default;
|
|
35
|
-
const locals = this?.locals;
|
|
36
|
-
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
37
|
-
const renderer = getRendererForView(view);
|
|
38
|
-
const ctx = {
|
|
39
|
-
partial: false,
|
|
40
|
-
status: renderOptions?.status,
|
|
41
|
-
headers: renderOptions?.headers
|
|
42
|
-
};
|
|
43
|
-
return await renderer.renderToResponse(view, mergedProps, ctx);
|
|
44
|
-
},
|
|
45
|
-
async render(view, props, renderOptions) {
|
|
46
|
-
const locals = this?.locals;
|
|
47
|
-
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
48
|
-
const renderer = getRendererForView(view);
|
|
49
|
-
const ctx = {
|
|
50
|
-
partial: false,
|
|
51
|
-
status: renderOptions?.status,
|
|
52
|
-
headers: renderOptions?.headers
|
|
53
|
-
};
|
|
54
|
-
return renderer.renderToResponse(view, mergedProps, ctx);
|
|
55
|
-
},
|
|
56
|
-
async renderPartial(view, props, renderOptions) {
|
|
57
|
-
const locals = this?.locals;
|
|
58
|
-
const mergedProps = mergePropsWithLocals(props, locals);
|
|
59
|
-
const renderer = getRendererForView(view);
|
|
60
|
-
const ctx = {
|
|
61
|
-
partial: true,
|
|
62
|
-
status: renderOptions?.status,
|
|
63
|
-
headers: renderOptions?.headers
|
|
64
|
-
};
|
|
65
|
-
return renderer.renderToResponse(view, mergedProps, ctx);
|
|
66
|
-
},
|
|
67
|
-
json(data, responseOptions) {
|
|
68
|
-
return createBodyResponse("json", data, {
|
|
69
|
-
status: responseOptions?.status,
|
|
70
|
-
headers: responseOptions?.headers
|
|
71
|
-
});
|
|
72
|
-
},
|
|
73
|
-
html(content, responseOptions) {
|
|
74
|
-
return createBodyResponse("html", content, {
|
|
75
|
-
status: responseOptions?.status,
|
|
76
|
-
headers: responseOptions?.headers
|
|
77
|
-
});
|
|
17
|
+
if (!locals || typeof props !== 'object' || props === null) {
|
|
18
|
+
return props;
|
|
78
19
|
}
|
|
79
|
-
|
|
80
|
-
|
|
20
|
+
return { ...props, locals };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates a render context for route handlers.
|
|
24
|
+
* Provides render(), renderPartial(), json(), and html() methods that can be used
|
|
25
|
+
* within route handlers to generate responses.
|
|
26
|
+
*
|
|
27
|
+
* @param options - Configuration options including available integrations
|
|
28
|
+
* @returns A RenderContext object with methods for rendering views and creating responses
|
|
29
|
+
*/
|
|
30
|
+
export function createRenderContext(options) {
|
|
31
|
+
const { integrations } = options;
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the appropriate renderer for a given view component based on its integration.
|
|
34
|
+
* Throws an error if the integration cannot be determined or is not found.
|
|
35
|
+
*/
|
|
36
|
+
const getRendererForView = (view) => {
|
|
37
|
+
const integrationName = view.config?.integration ?? view.config?.__eco?.integration;
|
|
38
|
+
invariant(!!integrationName, 'Cannot determine integration for view. Set view.config.integration explicitly or ensure the view is defined with eco.page() in a file with a recognized extension.');
|
|
39
|
+
const integration = integrations.find((i) => i.name === integrationName);
|
|
40
|
+
invariant(!!integration, `No integration found for: ${integrationName}`);
|
|
41
|
+
return integration.initializeRenderer({
|
|
42
|
+
rendererModules: options.rendererModules,
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
const renderContext = {
|
|
46
|
+
importServerModule: async (filePath) => {
|
|
47
|
+
invariant(!!options.importServerModule, 'Server module importing is not available in this render context.');
|
|
48
|
+
return (await options.importServerModule(resolveServerModulePath(filePath)));
|
|
49
|
+
},
|
|
50
|
+
async renderServerModule(filePath, props, renderOptions) {
|
|
51
|
+
const module = await renderContext.importServerModule(filePath);
|
|
52
|
+
const view = module.default;
|
|
53
|
+
const locals = this?.locals;
|
|
54
|
+
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
55
|
+
const renderer = getRendererForView(view);
|
|
56
|
+
const ctx = {
|
|
57
|
+
partial: false,
|
|
58
|
+
status: renderOptions?.status,
|
|
59
|
+
headers: renderOptions?.headers,
|
|
60
|
+
};
|
|
61
|
+
return await renderer.renderToResponse(view, mergedProps, ctx);
|
|
62
|
+
},
|
|
63
|
+
async render(view, props, renderOptions) {
|
|
64
|
+
const locals = this?.locals;
|
|
65
|
+
const mergedProps = mergePropsWithLocals(props ?? {}, locals);
|
|
66
|
+
const renderer = getRendererForView(view);
|
|
67
|
+
const ctx = {
|
|
68
|
+
partial: false,
|
|
69
|
+
status: renderOptions?.status,
|
|
70
|
+
headers: renderOptions?.headers,
|
|
71
|
+
};
|
|
72
|
+
return renderer.renderToResponse(view, mergedProps, ctx);
|
|
73
|
+
},
|
|
74
|
+
async renderPartial(view, props, renderOptions) {
|
|
75
|
+
const locals = this?.locals;
|
|
76
|
+
const mergedProps = mergePropsWithLocals(props, locals);
|
|
77
|
+
const renderer = getRendererForView(view);
|
|
78
|
+
const ctx = {
|
|
79
|
+
partial: true,
|
|
80
|
+
status: renderOptions?.status,
|
|
81
|
+
headers: renderOptions?.headers,
|
|
82
|
+
};
|
|
83
|
+
return renderer.renderToResponse(view, mergedProps, ctx);
|
|
84
|
+
},
|
|
85
|
+
json(data, responseOptions) {
|
|
86
|
+
return createBodyResponse('json', data, {
|
|
87
|
+
status: responseOptions?.status,
|
|
88
|
+
headers: responseOptions?.headers,
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
html(content, responseOptions) {
|
|
92
|
+
return createBodyResponse('html', content, {
|
|
93
|
+
status: responseOptions?.status,
|
|
94
|
+
headers: responseOptions?.headers,
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
return renderContext;
|
|
81
99
|
}
|
|
82
|
-
export {
|
|
83
|
-
createRenderContext
|
|
84
|
-
};
|
|
@@ -1,43 +1,38 @@
|
|
|
1
|
-
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from
|
|
1
|
+
import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT } from '../../../config/constants.js';
|
|
2
2
|
function normalizeOriginHostname(hostname) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
if (hostname.includes(':') && !hostname.startsWith('[') && !hostname.endsWith(']')) {
|
|
4
|
+
return `[${hostname}]`;
|
|
5
|
+
}
|
|
6
|
+
return hostname;
|
|
7
7
|
}
|
|
8
|
-
function resolveServeRuntimeOrigin(serveOptions) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
export 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
12
|
}
|
|
13
|
-
function resolveRuntimeBinding(options) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
13
|
+
export function resolveRuntimeBinding(options) {
|
|
14
|
+
const env = options.env ?? process.env;
|
|
15
|
+
const portExplicitlyConfigured = options.cliArgs.port !== undefined || Boolean(env.ECOPAGES_PORT) || options.serverOptions?.port !== undefined;
|
|
16
|
+
const preferredPort = options.cliArgs.port ?? (env.ECOPAGES_PORT ? Number(env.ECOPAGES_PORT) : undefined) ?? DEFAULT_ECOPAGES_PORT;
|
|
17
|
+
const preferredHostname = options.cliArgs.hostname ?? env.ECOPAGES_HOSTNAME ?? DEFAULT_ECOPAGES_HOSTNAME;
|
|
18
|
+
return {
|
|
19
|
+
preferredPort,
|
|
20
|
+
preferredHostname,
|
|
21
|
+
allowPortFallback: !portExplicitlyConfigured,
|
|
22
|
+
runtimeOrigin: resolveServeRuntimeOrigin({
|
|
23
|
+
hostname: preferredHostname,
|
|
24
|
+
port: preferredPort,
|
|
25
|
+
}),
|
|
26
|
+
serveOptions: {
|
|
27
|
+
port: preferredPort,
|
|
28
|
+
hostname: preferredHostname,
|
|
29
|
+
...(options.serverOptions ?? {}),
|
|
30
|
+
},
|
|
31
|
+
watch: options.cliArgs.dev,
|
|
32
|
+
};
|
|
33
33
|
}
|
|
34
|
-
function resolveStaticRuntimeMode(options) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
export function resolveStaticRuntimeMode(options) {
|
|
35
|
+
return {
|
|
36
|
+
canBuildWithoutRuntimeServer: options.cliArgs.build || options.cliArgs.preview,
|
|
37
|
+
};
|
|
38
38
|
}
|
|
39
|
-
export {
|
|
40
|
-
resolveRuntimeBinding,
|
|
41
|
-
resolveServeRuntimeOrigin,
|
|
42
|
-
resolveStaticRuntimeMode
|
|
43
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { EcoPagesAppConfig } from '../../../types/internal-types.js';
|
|
2
|
-
import type { IHmrManager } from '../../../types/public-types.js';
|
|
1
|
+
import type { EcoPagesAppConfig, IHmrManager } from '../../../types/internal-types.js';
|
|
3
2
|
import type { ProjectWatcher } from '../../../watchers/project-watcher.js';
|
|
4
3
|
/**
|
|
5
4
|
* Copies source `public/` into dist and ensures the resolved assets directory exists.
|
|
@@ -21,7 +20,7 @@ export declare function attachHmrToIntegrations(appConfig: EcoPagesAppConfig, hm
|
|
|
21
20
|
* coalesced {@link ensureIntegrationRuntimeReady} promise instead of paying a cold vendor build.
|
|
22
21
|
* Failures are logged and do not crash the server.
|
|
23
22
|
*/
|
|
24
|
-
export declare function
|
|
23
|
+
export declare function startDevWarmup(options: {
|
|
25
24
|
appConfig: EcoPagesAppConfig;
|
|
26
25
|
runtimeOrigin: string;
|
|
27
26
|
}): void;
|
|
@@ -1,57 +1,71 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { fileSystem } from
|
|
3
|
-
import { RESOLVED_ASSETS_DIR } from
|
|
4
|
-
import { disposeAppBuildRuntime } from
|
|
5
|
-
import { ensureIntegrationRuntimeReady } from
|
|
6
|
-
import { appLogger } from
|
|
7
|
-
import { copyRuntimePublicDirIfChanged } from
|
|
8
|
-
import { clearAppDevClientBridge } from
|
|
9
|
-
import { clearAppHmrManager } from
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { RESOLVED_ASSETS_DIR } from '../../../config/constants.js';
|
|
4
|
+
import { disposeAppBuildRuntime } from '../../../build/runtime/build-runtime.js';
|
|
5
|
+
import { ensureIntegrationRuntimeReady } from '../../../build/app-build-manifest-runtime.js';
|
|
6
|
+
import { appLogger } from '../../../global/app-logger.js';
|
|
7
|
+
import { copyRuntimePublicDirIfChanged } from './copy-runtime-public-dir.js';
|
|
8
|
+
import { clearAppDevClientBridge } from '../../../dev/client-bridge-registry.js';
|
|
9
|
+
import { clearAppHmrManager } from '../../../dev/hmr-manager-registry.js';
|
|
10
|
+
/**
|
|
11
|
+
* Copies source `public/` into dist and ensures the resolved assets directory exists.
|
|
12
|
+
*/
|
|
13
|
+
export function prepareRuntimePublicDir(appConfig) {
|
|
14
|
+
const srcPublicDir = path.join(appConfig.rootDir, appConfig.srcDir, appConfig.publicDir);
|
|
15
|
+
if (fileSystem.exists(srcPublicDir)) {
|
|
16
|
+
copyRuntimePublicDirIfChanged(srcPublicDir, path.join(appConfig.rootDir, appConfig.distDir));
|
|
17
|
+
}
|
|
18
|
+
fileSystem.ensureDir(path.join(appConfig.absolutePaths.distDir, RESOLVED_ASSETS_DIR));
|
|
16
19
|
}
|
|
17
|
-
const attachedHmrApps =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
const attachedHmrApps = new WeakSet();
|
|
21
|
+
/**
|
|
22
|
+
* Attaches the shared HMR manager to every integration exactly once per app config.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* Runtime plugin setup must not call `integration.setHmrManager()` directly. Adapters invoke
|
|
26
|
+
* this after the manager is enabled so late plugin init cannot double-bind integrations.
|
|
27
|
+
*/
|
|
28
|
+
export function attachHmrToIntegrations(appConfig, hmrManager) {
|
|
29
|
+
if (attachedHmrApps.has(appConfig)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
attachedHmrApps.add(appConfig);
|
|
33
|
+
for (const integration of appConfig.integrations) {
|
|
34
|
+
integration.setHmrManager(hmrManager);
|
|
35
|
+
}
|
|
26
36
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Starts background activation of every configured integration after watch-mode HMR is ready.
|
|
39
|
+
*
|
|
40
|
+
* @remarks
|
|
41
|
+
* Fire-and-forget: overlaps with watcher setup so first-page render can join the same
|
|
42
|
+
* coalesced {@link ensureIntegrationRuntimeReady} promise instead of paying a cold vendor build.
|
|
43
|
+
* Failures are logged and do not crash the server.
|
|
44
|
+
*/
|
|
45
|
+
export function startDevWarmup(options) {
|
|
46
|
+
const { appConfig, runtimeOrigin } = options;
|
|
47
|
+
void Promise.all(appConfig.integrations.map((integration) => ensureIntegrationRuntimeReady({
|
|
32
48
|
appConfig,
|
|
33
49
|
integrationName: integration.name,
|
|
34
|
-
runtimeOrigin
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
appLogger.error(
|
|
39
|
-
`Failed to prewarm integration runtimes: ${error instanceof Error ? error.message : String(error)}`
|
|
40
|
-
);
|
|
41
|
-
});
|
|
50
|
+
runtimeOrigin,
|
|
51
|
+
}))).catch((error) => {
|
|
52
|
+
appLogger.error(`Failed to prewarm integration runtimes: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
|
+
});
|
|
42
54
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Releases shared dev resources in a consistent order across server adapters.
|
|
57
|
+
*
|
|
58
|
+
* @remarks
|
|
59
|
+
* Bun calls `buildRuntime()` during `initialize()` when watch is enabled; Node defers
|
|
60
|
+
* runtime creation to `completeInitialization()`. Transport-specific setup stays in
|
|
61
|
+
* each adapter — only shared teardown lives here.
|
|
62
|
+
*/
|
|
63
|
+
export async function disposeDevResources(options) {
|
|
64
|
+
await options.projectWatcher?.close();
|
|
65
|
+
await disposeAppBuildRuntime(options.appConfig);
|
|
66
|
+
options.hmrManager?.stop();
|
|
67
|
+
options.bridge?.destroy();
|
|
68
|
+
clearAppDevClientBridge(options.appConfig);
|
|
69
|
+
clearAppHmrManager(options.appConfig);
|
|
70
|
+
await options.previewHost.stop();
|
|
51
71
|
}
|
|
52
|
-
export {
|
|
53
|
-
attachHmrToIntegrations,
|
|
54
|
-
disposeDevResources,
|
|
55
|
-
prepareRuntimePublicDir,
|
|
56
|
-
startConfiguredIntegrationRuntimePrewarm
|
|
57
|
-
};
|
|
@@ -63,6 +63,7 @@ export declare abstract class SharedServerAdapter<TOptions extends ServerAdapter
|
|
|
63
63
|
private createSharedPageCacheService;
|
|
64
64
|
protected getCacheService(): CacheInvalidator | null;
|
|
65
65
|
protected getRenderContext(): RenderContext;
|
|
66
|
+
private tryHandleSharedDevClientRequest;
|
|
66
67
|
private tryHandleSharedHmrRequest;
|
|
67
68
|
private injectSharedHmrHtmlResponse;
|
|
68
69
|
private tryHandleSharedApiRequest;
|