@ecopages/core 0.2.0-beta.31 → 0.2.0-beta.32
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 +82 -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/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/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,198 +1,199 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
} from
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Unified pages Rolldown graph (Phase A build + Phase C import).
|
|
3
|
+
*
|
|
4
|
+
* Enabled by default in production builds. Opt out with
|
|
5
|
+
* `ECOPAGES_UNIFIED_PAGES_GRAPH=0`. Covers all static page template extensions
|
|
6
|
+
* registered on the app config.
|
|
7
|
+
*/
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { pathToFileURL } from 'node:url';
|
|
10
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
11
|
+
import { appLogger } from '../../global/app-logger.js';
|
|
12
|
+
import { build } from '../build-adapter.js';
|
|
13
|
+
import { requireBuildRuntime } from '../runtime/build-runtime.js';
|
|
14
|
+
import { createServerBuildRequest, resolveServerAppBuildPlugins } from '../runtime/build-request-policy.js';
|
|
15
|
+
import { createBuildInputsFingerprint, hashAppConfigFile } from './build-input-fingerprint.js';
|
|
16
|
+
import { isProductionCacheManifestCurrent, matchesProductionCacheBuildKey, matchesProductionCacheFingerprint, readProductionCacheManifest, writeProductionCacheManifest, } from './production-build-cache.js';
|
|
17
|
+
import { getCorePackageVersion } from './cache-keys.js';
|
|
18
|
+
import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
|
|
19
|
+
import { getSharedRouteModuleBuildCache } from '../../services/module-loading/route-module-build-cache-registry.js';
|
|
20
|
+
import { resolveRouteModuleDependencyPaths } from '../../services/module-loading/route-module-dependency-hasher.js';
|
|
21
|
+
export const PAGES_UNIFIED_GRAPH_CACHE_DIR = '.server-pages-graph';
|
|
22
|
+
export const PAGES_UNIFIED_GRAPH_CACHE_FILENAME = '.build-cache.json';
|
|
23
|
+
export function isPagesUnifiedGraphEnabled() {
|
|
24
|
+
if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '0') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (process.env.ECOPAGES_UNIFIED_PAGES_GRAPH === '1') {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return process.env.NODE_ENV === 'production';
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
/** True when the unified graph should build or serve prebuilt page modules. */
|
|
33
|
+
export function shouldBuildPagesUnifiedGraph() {
|
|
34
|
+
return isPagesUnifiedGraphEnabled() && process.env.NODE_ENV === 'production';
|
|
33
35
|
}
|
|
34
|
-
function isPagesUnifiedGraphPage(filePath, appConfig) {
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
export function isPagesUnifiedGraphPage(filePath, appConfig) {
|
|
37
|
+
const normalizedPath = path.normalize(filePath);
|
|
38
|
+
return appConfig.templatesExt.some((extension) => normalizedPath.endsWith(extension));
|
|
37
39
|
}
|
|
38
40
|
function getPagesUnifiedGraphCachePath(appConfig) {
|
|
39
|
-
|
|
40
|
-
resolveInternalExecutionDir(appConfig),
|
|
41
|
-
PAGES_UNIFIED_GRAPH_CACHE_DIR,
|
|
42
|
-
PAGES_UNIFIED_GRAPH_CACHE_FILENAME
|
|
43
|
-
);
|
|
41
|
+
return path.join(resolveInternalExecutionDir(appConfig), PAGES_UNIFIED_GRAPH_CACHE_DIR, PAGES_UNIFIED_GRAPH_CACHE_FILENAME);
|
|
44
42
|
}
|
|
45
43
|
function createPagesUnifiedGraphBuildKey(appConfig, outdir) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
const pluginNames = resolveServerAppBuildPlugins(appConfig)
|
|
45
|
+
.map((plugin) => plugin.name)
|
|
46
|
+
.sort()
|
|
47
|
+
.join('|');
|
|
48
|
+
const templateExtensions = [...appConfig.templatesExt].sort().join('|');
|
|
49
|
+
return [
|
|
50
|
+
path.resolve(outdir),
|
|
51
|
+
hashAppConfigFile(appConfig),
|
|
52
|
+
templateExtensions,
|
|
53
|
+
pluginNames,
|
|
54
|
+
'es2022',
|
|
55
|
+
'esm',
|
|
56
|
+
'external-packages',
|
|
57
|
+
].join('::');
|
|
57
58
|
}
|
|
58
59
|
function readPagesUnifiedGraphManifest(appConfig) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
return manifest;
|
|
60
|
+
const manifest = readProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig));
|
|
61
|
+
if (!manifest?.outputs) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return manifest;
|
|
66
65
|
}
|
|
67
66
|
function writePagesUnifiedGraphManifest(appConfig, manifest) {
|
|
68
|
-
|
|
67
|
+
writeProductionCacheManifest(getPagesUnifiedGraphCachePath(appConfig), manifest);
|
|
69
68
|
}
|
|
70
69
|
function createSafeGraphEntryKey(entryPath, rootDir) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const relativePath = path.relative(rootDir, entryPath).replace(/\.[^.]+$/u, '');
|
|
71
|
+
const safeKey = relativePath.replace(/[^a-zA-Z0-9]+/gu, '-').replace(/^-+|-+$/gu, '');
|
|
72
|
+
return safeKey.length > 0 ? safeKey : 'page';
|
|
74
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* @remarks
|
|
76
|
+
* Uses {@link BuildResult.entryOutputs} when present so resolution follows the
|
|
77
|
+
* bundler's `facadeModuleId` instead of guessing from sanitized entry keys.
|
|
78
|
+
* Basename prefix matching remains only as a fallback for backends that omit
|
|
79
|
+
* `entryOutputs`; it can mis-associate keys such as `pages-blog` and
|
|
80
|
+
* `pages-blog-index`.
|
|
81
|
+
*/
|
|
75
82
|
function resolveOutputForEntrypoint(entryPath, entryKey, buildResult) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
83
|
+
const exactOutput = buildResult.entryOutputs?.[path.resolve(entryPath)];
|
|
84
|
+
if (exactOutput) {
|
|
85
|
+
return exactOutput;
|
|
86
|
+
}
|
|
87
|
+
for (const { path: outputPath } of buildResult.outputs) {
|
|
88
|
+
const outputBaseName = path.basename(outputPath);
|
|
89
|
+
if (outputBaseName.startsWith(`${entryKey}-`) && /\.(?:m?js)$/u.test(outputBaseName)) {
|
|
90
|
+
return outputPath;
|
|
91
|
+
}
|
|
92
|
+
if (outputBaseName === `${entryKey}.js` || outputBaseName === `${entryKey}.mjs`) {
|
|
93
|
+
return outputPath;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
90
97
|
}
|
|
91
98
|
function isManifestValidForEntries(manifest, appConfig, outdir, entryPaths) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
if (!isProductionCacheManifestCurrent(manifest, getCorePackageVersion())) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
if (!matchesProductionCacheFingerprint(manifest, createBuildInputsFingerprint(appConfig))) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (!matchesProductionCacheBuildKey(manifest, createPagesUnifiedGraphBuildKey(appConfig, outdir))) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
return entryPaths.every((entryPath) => {
|
|
109
|
+
const resolvedEntryPath = path.resolve(entryPath);
|
|
110
|
+
const outputPath = manifest.outputs[resolvedEntryPath];
|
|
111
|
+
return outputPath ? fileSystem.exists(outputPath) : false;
|
|
112
|
+
});
|
|
106
113
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
throw new Error(`Pages unified graph build failed: ${details}`);
|
|
143
|
-
}
|
|
144
|
-
const outputs = {};
|
|
145
|
-
for (const entryPath of eligibleEntryPaths) {
|
|
146
|
-
const fileHash = fileSystem.hash(entryPath);
|
|
147
|
-
const entryKey = entryKeysByPath.get(entryPath);
|
|
148
|
-
const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : void 0;
|
|
149
|
-
if (!compiledOutput) {
|
|
150
|
-
throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
|
|
151
|
-
}
|
|
152
|
-
outputs[entryPath] = compiledOutput;
|
|
153
|
-
routeModuleBuildCache.recordBuild({
|
|
154
|
-
filePath: entryPath,
|
|
155
|
-
rootDir: options.appConfig.rootDir,
|
|
156
|
-
outdir,
|
|
157
|
-
fileHash,
|
|
158
|
-
outputPath: compiledOutput,
|
|
159
|
-
dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
|
|
160
|
-
externalPackages: true,
|
|
161
|
-
plugins
|
|
114
|
+
/**
|
|
115
|
+
* Builds eligible static pages in one Rolldown invocation and seeds route-module disk cache.
|
|
116
|
+
*/
|
|
117
|
+
export async function ensurePagesUnifiedGraphBuilt(options) {
|
|
118
|
+
if (!shouldBuildPagesUnifiedGraph()) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const eligibleEntryPaths = options.entryPaths
|
|
122
|
+
.map((entryPath) => path.resolve(entryPath))
|
|
123
|
+
.filter((entryPath) => isPagesUnifiedGraphPage(entryPath, options.appConfig));
|
|
124
|
+
if (eligibleEntryPaths.length === 0) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const outdir = path.resolve(options.outdir);
|
|
128
|
+
const existingManifest = options.force ? undefined : readPagesUnifiedGraphManifest(options.appConfig);
|
|
129
|
+
if (existingManifest &&
|
|
130
|
+
isManifestValidForEntries(existingManifest, options.appConfig, outdir, eligibleEntryPaths)) {
|
|
131
|
+
appLogger.debug('Reusing pages unified graph cache');
|
|
132
|
+
return existingManifest;
|
|
133
|
+
}
|
|
134
|
+
const routeModuleBuildCache = getSharedRouteModuleBuildCache(outdir, options.appConfig);
|
|
135
|
+
const entryRecord = {};
|
|
136
|
+
const entryKeysByPath = new Map();
|
|
137
|
+
for (const entryPath of eligibleEntryPaths) {
|
|
138
|
+
const entryKey = createSafeGraphEntryKey(entryPath, options.appConfig.rootDir);
|
|
139
|
+
entryRecord[entryKey] = entryPath;
|
|
140
|
+
entryKeysByPath.set(entryPath, entryKey);
|
|
141
|
+
}
|
|
142
|
+
appLogger.debugTime('pagesUnifiedGraphBuild');
|
|
143
|
+
const buildOptions = createServerBuildRequest(options.appConfig, {
|
|
144
|
+
profile: 'route-module',
|
|
145
|
+
entrypoints: entryRecord,
|
|
146
|
+
outdir,
|
|
147
|
+
splitting: true,
|
|
148
|
+
naming: '[name]-[hash].[ext]',
|
|
162
149
|
});
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
150
|
+
const plugins = buildOptions.plugins ?? [];
|
|
151
|
+
const buildResult = await build(buildOptions, requireBuildRuntime(options.appConfig).getProfile('route-module'));
|
|
152
|
+
appLogger.debugTimeEnd('pagesUnifiedGraphBuild');
|
|
153
|
+
if (!buildResult.success) {
|
|
154
|
+
const details = buildResult.logs.map((log) => log.message).join(' | ');
|
|
155
|
+
throw new Error(`Pages unified graph build failed: ${details}`);
|
|
156
|
+
}
|
|
157
|
+
const outputs = {};
|
|
158
|
+
for (const entryPath of eligibleEntryPaths) {
|
|
159
|
+
const fileHash = fileSystem.hash(entryPath);
|
|
160
|
+
const entryKey = entryKeysByPath.get(entryPath);
|
|
161
|
+
const compiledOutput = entryKey ? resolveOutputForEntrypoint(entryPath, entryKey, buildResult) : undefined;
|
|
162
|
+
if (!compiledOutput) {
|
|
163
|
+
throw new Error(`Pages unified graph build produced no output for ${entryPath}`);
|
|
164
|
+
}
|
|
165
|
+
outputs[entryPath] = compiledOutput;
|
|
166
|
+
routeModuleBuildCache.recordBuild({
|
|
167
|
+
filePath: entryPath,
|
|
168
|
+
rootDir: options.appConfig.rootDir,
|
|
169
|
+
outdir,
|
|
170
|
+
fileHash,
|
|
171
|
+
outputPath: compiledOutput,
|
|
172
|
+
dependencyModulePaths: resolveRouteModuleDependencyPaths(buildResult, entryPath, options.appConfig.rootDir),
|
|
173
|
+
externalPackages: true,
|
|
174
|
+
plugins,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
const manifest = {
|
|
178
|
+
invalidationVersion: getCorePackageVersion(),
|
|
179
|
+
buildInputsFingerprint: createBuildInputsFingerprint(options.appConfig),
|
|
180
|
+
buildKey: createPagesUnifiedGraphBuildKey(options.appConfig, outdir),
|
|
181
|
+
builtAt: Date.now(),
|
|
182
|
+
outputs,
|
|
183
|
+
};
|
|
184
|
+
writePagesUnifiedGraphManifest(options.appConfig, manifest);
|
|
185
|
+
appLogger.debug(`Built pages unified graph for ${eligibleEntryPaths.length} entries`);
|
|
186
|
+
return manifest;
|
|
174
187
|
}
|
|
175
|
-
async function importPagesUnifiedGraphModule(appConfig, filePath) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
/* @vite-ignore */
|
|
187
|
-
pathToFileURL(outputPath).href
|
|
188
|
-
);
|
|
188
|
+
export async function importPagesUnifiedGraphModule(appConfig, filePath) {
|
|
189
|
+
const manifest = readPagesUnifiedGraphManifest(appConfig);
|
|
190
|
+
if (!manifest) {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
const resolvedFilePath = path.resolve(filePath);
|
|
194
|
+
const outputPath = manifest.outputs[resolvedFilePath];
|
|
195
|
+
if (!outputPath || !fileSystem.exists(outputPath)) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
return (await import(/* @vite-ignore */ pathToFileURL(outputPath).href));
|
|
189
199
|
}
|
|
190
|
-
export {
|
|
191
|
-
PAGES_UNIFIED_GRAPH_CACHE_DIR,
|
|
192
|
-
PAGES_UNIFIED_GRAPH_CACHE_FILENAME,
|
|
193
|
-
ensurePagesUnifiedGraphBuilt,
|
|
194
|
-
importPagesUnifiedGraphModule,
|
|
195
|
-
isPagesUnifiedGraphEnabled,
|
|
196
|
-
isPagesUnifiedGraphPage,
|
|
197
|
-
shouldBuildPagesUnifiedGraph
|
|
198
|
-
};
|
|
@@ -1,63 +1,56 @@
|
|
|
1
|
-
import { fileSystem } from
|
|
2
|
-
import path from
|
|
3
|
-
import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from
|
|
4
|
-
import { resolveInternalExecutionDir } from
|
|
5
|
-
const ROUTE_MODULE_CACHE_OUTDIRS = [
|
|
6
|
-
const PAGES_GRAPH_CACHE_DIR =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ROUTE_MODULE_BUILD_CACHE_FILENAME } from './cache-constants.js';
|
|
4
|
+
import { resolveInternalExecutionDir } from '../../utils/resolve-work-dir.js';
|
|
5
|
+
const ROUTE_MODULE_CACHE_OUTDIRS = ['.server-modules', '.server-route-modules'];
|
|
6
|
+
const PAGES_GRAPH_CACHE_DIR = '.server-pages-graph';
|
|
7
|
+
/** Returns every persisted production cache manifest path for one app. */
|
|
8
|
+
export function getProductionBuildCacheManifestPaths(appConfig) {
|
|
9
|
+
const executionDir = resolveInternalExecutionDir(appConfig);
|
|
10
|
+
const paths = [];
|
|
11
|
+
for (const subdir of ROUTE_MODULE_CACHE_OUTDIRS) {
|
|
12
|
+
paths.push(path.join(executionDir, subdir, ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
13
|
+
}
|
|
14
|
+
paths.push(path.join(executionDir, '.server-entry', ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
15
|
+
paths.push(path.join(executionDir, PAGES_GRAPH_CACHE_DIR, ROUTE_MODULE_BUILD_CACHE_FILENAME));
|
|
16
|
+
return paths;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
/** Removes all persisted production cache manifests for one app. */
|
|
19
|
+
export function clearPersistedProductionBuildCacheManifests(appConfig) {
|
|
20
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const manifestPath of getProductionBuildCacheManifestPaths(appConfig)) {
|
|
24
|
+
if (fileSystem.exists(manifestPath)) {
|
|
25
|
+
fileSystem.remove(manifestPath);
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
|
-
}
|
|
26
28
|
}
|
|
27
|
-
function readProductionCacheManifest(manifestPath) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
export function readProductionCacheManifest(manifestPath) {
|
|
30
|
+
if (!fileSystem.exists(manifestPath)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(fileSystem.readFileSync(manifestPath));
|
|
35
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return undefined;
|
|
35
42
|
}
|
|
36
|
-
return parsed;
|
|
37
|
-
} catch {
|
|
38
|
-
return void 0;
|
|
39
|
-
}
|
|
40
43
|
}
|
|
41
|
-
function writeProductionCacheManifest(manifestPath, manifest) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
`);
|
|
44
|
+
export function writeProductionCacheManifest(manifestPath, manifest) {
|
|
45
|
+
fileSystem.ensureDir(path.dirname(manifestPath));
|
|
46
|
+
fileSystem.write(manifestPath, `${JSON.stringify(manifest, null, '\t')}\n`);
|
|
45
47
|
}
|
|
46
|
-
function isProductionCacheManifestCurrent(manifest, invalidationVersion) {
|
|
47
|
-
|
|
48
|
+
export function isProductionCacheManifestCurrent(manifest, invalidationVersion) {
|
|
49
|
+
return manifest?.invalidationVersion === invalidationVersion;
|
|
48
50
|
}
|
|
49
|
-
function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
|
|
50
|
-
|
|
51
|
+
export function matchesProductionCacheFingerprint(manifest, buildInputsFingerprint) {
|
|
52
|
+
return manifest?.buildInputsFingerprint === buildInputsFingerprint;
|
|
51
53
|
}
|
|
52
|
-
function matchesProductionCacheBuildKey(manifest, buildKey) {
|
|
53
|
-
|
|
54
|
+
export function matchesProductionCacheBuildKey(manifest, buildKey) {
|
|
55
|
+
return manifest?.buildKey === buildKey;
|
|
54
56
|
}
|
|
55
|
-
export {
|
|
56
|
-
clearPersistedProductionBuildCacheManifests,
|
|
57
|
-
getProductionBuildCacheManifestPaths,
|
|
58
|
-
isProductionCacheManifestCurrent,
|
|
59
|
-
matchesProductionCacheBuildKey,
|
|
60
|
-
matchesProductionCacheFingerprint,
|
|
61
|
-
readProductionCacheManifest,
|
|
62
|
-
writeProductionCacheManifest
|
|
63
|
-
};
|