@ecopages/core 0.2.0-beta.30 → 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,122 +1,148 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { fileSystem } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const normalizedPath = path.normalize(filePath);
|
|
19
|
-
if (!isTrackableRouteModuleDependency(normalizedPath)) {
|
|
20
|
-
return void 0;
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
/**
|
|
4
|
+
* Lazily hashes route-module dependency files while memoizing results for one build run.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Multiple route modules often share layouts or utilities. Memoizing per path avoids
|
|
8
|
+
* re-reading the same dependency file while validating or recording many cache entries
|
|
9
|
+
* during one production build.
|
|
10
|
+
*/
|
|
11
|
+
export class RouteModuleDependencyHasher {
|
|
12
|
+
memo = new Map();
|
|
13
|
+
hashFile;
|
|
14
|
+
exists;
|
|
15
|
+
constructor(dependencies) {
|
|
16
|
+
this.hashFile = dependencies?.hashFile ?? ((filePath) => fileSystem.hash(filePath));
|
|
17
|
+
this.exists = dependencies?.exists ?? ((filePath) => fileSystem.exists(filePath));
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Returns a memoized content hash for one trackable dependency path.
|
|
21
|
+
*
|
|
22
|
+
* @param filePath - Absolute or project-relative source path.
|
|
23
|
+
* @returns The content hash, or `undefined` when the path is not trackable or missing.
|
|
24
|
+
*/
|
|
25
|
+
hashDependency(filePath) {
|
|
26
|
+
const normalizedPath = path.normalize(filePath);
|
|
27
|
+
if (!isTrackableRouteModuleDependency(normalizedPath)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
if (!this.exists(normalizedPath)) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
const cachedHash = this.memo.get(normalizedPath);
|
|
34
|
+
if (cachedHash) {
|
|
35
|
+
return cachedHash;
|
|
36
|
+
}
|
|
37
|
+
const nextHash = this.hashFile(normalizedPath);
|
|
38
|
+
this.memo.set(normalizedPath, nextHash);
|
|
39
|
+
return nextHash;
|
|
24
40
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Builds the dependency-hash map for one route entrypoint graph.
|
|
43
|
+
*
|
|
44
|
+
* @param modulePaths - Raw module ids from the bundler dependency graph.
|
|
45
|
+
* @returns Hashes for every trackable, existing source file in the graph.
|
|
46
|
+
*/
|
|
47
|
+
createDependencyHashes(modulePaths) {
|
|
48
|
+
const dependencyHashes = {};
|
|
49
|
+
for (const modulePath of filterTrackableRouteModuleDependencies(modulePaths)) {
|
|
50
|
+
const dependencyHash = this.hashDependency(modulePath);
|
|
51
|
+
if (dependencyHash) {
|
|
52
|
+
dependencyHashes[modulePath] = dependencyHash;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return dependencyHashes;
|
|
28
56
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Returns whether every stored dependency hash still matches the current file contents.
|
|
59
|
+
*
|
|
60
|
+
* @param storedHashes - Dependency hashes previously persisted for one route module.
|
|
61
|
+
* @param entrypointPath - Route entry file whose hash is validated separately.
|
|
62
|
+
* @param entrypointSourceHash - Already-validated content hash for {@link entrypointPath}.
|
|
63
|
+
* @returns `true` when all stored hashes are present and still valid.
|
|
64
|
+
*/
|
|
65
|
+
matchesStoredHashes(storedHashes, entrypointPath, entrypointSourceHash) {
|
|
66
|
+
this.clearMemo();
|
|
67
|
+
if (!storedHashes || Object.keys(storedHashes).length === 0) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
const normalizedEntrypoint = entrypointPath ? path.normalize(entrypointPath) : undefined;
|
|
71
|
+
for (const [dependencyPath, storedHash] of Object.entries(storedHashes)) {
|
|
72
|
+
if (normalizedEntrypoint && path.normalize(dependencyPath) === normalizedEntrypoint) {
|
|
73
|
+
if (entrypointSourceHash && storedHash !== entrypointSourceHash) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const currentHash = this.hashDependency(dependencyPath);
|
|
79
|
+
if (!currentHash || currentHash !== storedHash) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
46
84
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
* Returns whether every stored dependency hash still matches the current file contents.
|
|
51
|
-
*
|
|
52
|
-
* @param storedHashes - Dependency hashes previously persisted for one route module.
|
|
53
|
-
* @param entrypointPath - Route entry file whose hash is validated separately.
|
|
54
|
-
* @param entrypointSourceHash - Already-validated content hash for {@link entrypointPath}.
|
|
55
|
-
* @returns `true` when all stored hashes are present and still valid.
|
|
56
|
-
*/
|
|
57
|
-
matchesStoredHashes(storedHashes, entrypointPath, entrypointSourceHash) {
|
|
58
|
-
this.clearMemo();
|
|
59
|
-
if (!storedHashes || Object.keys(storedHashes).length === 0) {
|
|
60
|
-
return false;
|
|
85
|
+
/** Clears the per-build memo so subsequent reads reflect current file contents. */
|
|
86
|
+
clearMemo() {
|
|
87
|
+
this.memo.clear();
|
|
61
88
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns whether a bundler module id should participate in route-module cache invalidation.
|
|
92
|
+
*
|
|
93
|
+
* @remarks
|
|
94
|
+
* Builtins and installed packages are excluded. Their changes are expected to be
|
|
95
|
+
* reflected through framework-level invalidation instead of per-route file hashing.
|
|
96
|
+
*/
|
|
97
|
+
export function isTrackableRouteModuleDependency(modulePath) {
|
|
98
|
+
const normalizedPath = path.normalize(modulePath);
|
|
99
|
+
if (normalizedPath.startsWith('node:')) {
|
|
72
100
|
return false;
|
|
73
|
-
}
|
|
74
101
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
this.memo.clear();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function isTrackableRouteModuleDependency(modulePath) {
|
|
83
|
-
const normalizedPath = path.normalize(modulePath);
|
|
84
|
-
if (normalizedPath.startsWith("node:")) {
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
87
|
-
if (normalizedPath.includes(`${path.sep}node_modules${path.sep}`)) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
return /\.(?:[cm]?[jt]sx?|mdx)$/iu.test(normalizedPath) || normalizedPath.endsWith(".json");
|
|
102
|
+
if (normalizedPath.includes(`${path.sep}node_modules${path.sep}`)) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return /\.(?:[cm]?[jt]sx?|mdx)$/iu.test(normalizedPath) || normalizedPath.endsWith('.json');
|
|
91
106
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
/**
|
|
108
|
+
* Filters a bundler module list down to trackable app-owned source files.
|
|
109
|
+
*/
|
|
110
|
+
export function filterTrackableRouteModuleDependencies(modulePaths) {
|
|
111
|
+
const uniquePaths = new Set();
|
|
112
|
+
for (const modulePath of modulePaths) {
|
|
113
|
+
const normalizedPath = path.normalize(modulePath);
|
|
114
|
+
if (isTrackableRouteModuleDependency(normalizedPath)) {
|
|
115
|
+
uniquePaths.add(normalizedPath);
|
|
116
|
+
}
|
|
98
117
|
}
|
|
99
|
-
|
|
100
|
-
return Array.from(uniquePaths).sort();
|
|
118
|
+
return Array.from(uniquePaths).sort();
|
|
101
119
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Resolves the dependency module list for one route entrypoint from a build result.
|
|
122
|
+
*
|
|
123
|
+
* @param buildResult - Completed route-module build output.
|
|
124
|
+
* @param entrypointPath - Absolute or root-relative route source path used as the build entry.
|
|
125
|
+
* @param rootDir - Project root used to normalize relative module ids.
|
|
126
|
+
* @returns Normalized module paths, falling back to the entrypoint when no graph is available.
|
|
127
|
+
*/
|
|
128
|
+
export function resolveRouteModuleDependencyPaths(buildResult, entrypointPath, rootDir) {
|
|
129
|
+
const normalizedEntrypoint = path.isAbsolute(entrypointPath)
|
|
130
|
+
? path.normalize(entrypointPath)
|
|
131
|
+
: path.normalize(path.resolve(rootDir, entrypointPath));
|
|
132
|
+
const graphEntrypoints = buildResult.dependencyGraph?.entrypoints ?? {};
|
|
133
|
+
const dependencyPaths = graphEntrypoints[normalizedEntrypoint] ??
|
|
134
|
+
graphEntrypoints[entrypointPath] ??
|
|
135
|
+
Object.entries(graphEntrypoints).find(([candidate]) => path.normalize(candidate) === normalizedEntrypoint)?.[1];
|
|
136
|
+
if (!dependencyPaths || dependencyPaths.length === 0) {
|
|
137
|
+
return [normalizedEntrypoint];
|
|
138
|
+
}
|
|
139
|
+
return dependencyPaths.map((dependencyPath) => path.isAbsolute(dependencyPath)
|
|
140
|
+
? path.normalize(dependencyPath)
|
|
141
|
+
: path.normalize(path.resolve(rootDir, dependencyPath)));
|
|
112
142
|
}
|
|
113
|
-
|
|
114
|
-
|
|
143
|
+
/**
|
|
144
|
+
* Convenience helper that combines graph extraction and dependency hashing.
|
|
145
|
+
*/
|
|
146
|
+
export function createRouteModuleDependencyHashes(hasher, buildResult, entrypointPath, rootDir) {
|
|
147
|
+
return hasher.createDependencyHashes(resolveRouteModuleDependencyPaths(buildResult, entrypointPath, rootDir));
|
|
115
148
|
}
|
|
116
|
-
export {
|
|
117
|
-
RouteModuleDependencyHasher,
|
|
118
|
-
createRouteModuleDependencyHashes,
|
|
119
|
-
filterTrackableRouteModuleDependencies,
|
|
120
|
-
isTrackableRouteModuleDependency,
|
|
121
|
-
resolveRouteModuleDependencyPaths
|
|
122
|
-
};
|
|
@@ -1,64 +1,70 @@
|
|
|
1
|
-
import { PageModuleImportService } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
import { PageModuleImportService } from './page-module-import.service.js';
|
|
2
|
+
/**
|
|
3
|
+
* App-owned boundary for server-side source module loading.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* This service centralizes server-side module transpilation and import behind
|
|
7
|
+
* an explicit caller-owned root and build executor.
|
|
8
|
+
*/
|
|
9
|
+
export class ServerModuleTranspiler {
|
|
10
|
+
pageModuleImportService;
|
|
11
|
+
getRootDir;
|
|
12
|
+
getBuildExecutor;
|
|
13
|
+
getInvalidationVersion;
|
|
14
|
+
invalidateModules;
|
|
15
|
+
getDefaultPlugins;
|
|
16
|
+
/**
|
|
17
|
+
* Creates one explicit server-transpiler boundary for a given execution
|
|
18
|
+
* context.
|
|
19
|
+
*/
|
|
20
|
+
constructor(args) {
|
|
21
|
+
this.pageModuleImportService =
|
|
22
|
+
args.pageModuleImportService ??
|
|
23
|
+
new PageModuleImportService(undefined, {
|
|
24
|
+
canLoadSourceModuleFromHost: args.canLoadSourceModuleFromHost,
|
|
25
|
+
getHostModuleLoader: args.getHostModuleLoader,
|
|
26
|
+
});
|
|
27
|
+
this.getRootDir = () => args.rootDir;
|
|
28
|
+
this.getBuildExecutor = args.getBuildExecutor ?? (() => undefined);
|
|
29
|
+
this.getInvalidationVersion = () => args.getInvalidationVersion?.();
|
|
30
|
+
this.getDefaultPlugins = args.getDefaultPlugins ?? (() => []);
|
|
31
|
+
this.invalidateModules = (changedFiles) => {
|
|
32
|
+
if (args.invalidateModules) {
|
|
33
|
+
args.invalidateModules(changedFiles);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.pageModuleImportService.invalidateDevelopmentGraph();
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Loads a server-side source module through the caller-owned transpile
|
|
41
|
+
* context.
|
|
42
|
+
*/
|
|
43
|
+
async importModule(options) {
|
|
44
|
+
const mergedPlugins = [...this.getDefaultPlugins(), ...(options.plugins ?? [])];
|
|
45
|
+
const { plugins: _plugins, ...baseOptions } = options;
|
|
46
|
+
return await this.pageModuleImportService.importModule({
|
|
47
|
+
...baseOptions,
|
|
48
|
+
...(mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {}),
|
|
49
|
+
rootDir: this.getRootDir(),
|
|
50
|
+
buildExecutor: this.getBuildExecutor(),
|
|
51
|
+
invalidationVersion: this.getInvalidationVersion(),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Invalidates cached module state for development reloads.
|
|
56
|
+
*/
|
|
57
|
+
invalidate(changedFiles) {
|
|
58
|
+
this.invalidateModules(changedFiles);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Releases transpiler-owned resources.
|
|
62
|
+
*
|
|
63
|
+
* @remarks
|
|
64
|
+
* The current implementation delegates cache ownership to lower-level module
|
|
65
|
+
* loading services, so disposal is intentionally a no-op for now.
|
|
66
|
+
*/
|
|
67
|
+
async dispose() {
|
|
25
68
|
return;
|
|
26
|
-
|
|
27
|
-
this.pageModuleImportService.invalidateDevelopmentGraph();
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Loads a server-side source module through the caller-owned transpile
|
|
32
|
-
* context.
|
|
33
|
-
*/
|
|
34
|
-
async importModule(options) {
|
|
35
|
-
const mergedPlugins = [...this.getDefaultPlugins(), ...options.plugins ?? []];
|
|
36
|
-
const { plugins: _plugins, ...baseOptions } = options;
|
|
37
|
-
return await this.pageModuleImportService.importModule({
|
|
38
|
-
...baseOptions,
|
|
39
|
-
...mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {},
|
|
40
|
-
rootDir: this.getRootDir(),
|
|
41
|
-
buildExecutor: this.getBuildExecutor(),
|
|
42
|
-
invalidationVersion: this.getInvalidationVersion()
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Invalidates cached module state for development reloads.
|
|
47
|
-
*/
|
|
48
|
-
invalidate(changedFiles) {
|
|
49
|
-
this.invalidateModules(changedFiles);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Releases transpiler-owned resources.
|
|
53
|
-
*
|
|
54
|
-
* @remarks
|
|
55
|
-
* The current implementation delegates cache ownership to lower-level module
|
|
56
|
-
* loading services, so disposal is intentionally a no-op for now.
|
|
57
|
-
*/
|
|
58
|
-
async dispose() {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
69
|
+
}
|
|
61
70
|
}
|
|
62
|
-
export {
|
|
63
|
-
ServerModuleTranspiler
|
|
64
|
-
};
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
/**
|
|
3
|
+
* Returns whether a source module can be loaded directly by the host runtime without
|
|
4
|
+
* first going through the transpile/import pipeline.
|
|
5
|
+
*/
|
|
6
|
+
export function supportsSourceModuleLoading(filePath) {
|
|
7
|
+
const extension = path.extname(filePath);
|
|
8
|
+
return (extension === '.js' ||
|
|
9
|
+
extension === '.jsx' ||
|
|
10
|
+
extension === '.ts' ||
|
|
11
|
+
extension === '.tsx' ||
|
|
12
|
+
extension === '.mjs' ||
|
|
13
|
+
extension === '.mts' ||
|
|
14
|
+
extension === '.cjs' ||
|
|
15
|
+
extension === '.cts');
|
|
5
16
|
}
|
|
6
|
-
export {
|
|
7
|
-
supportsSourceModuleLoading
|
|
8
|
-
};
|