@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,120 +1,124 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
location.reload();
|
|
36
|
-
break;
|
|
37
|
-
case "layout-update": {
|
|
38
|
-
await waitForNavigationToSettle(navigationRuntime);
|
|
39
|
-
if (await navigationRuntime.reloadCurrentPage({ clearCache: true, moduleUrl: getActiveHmrModuleUrl() })) {
|
|
40
|
-
} else if (!window.__ECOPAGES_HOST_OWNS_RELOAD__) {
|
|
41
|
-
location.reload();
|
|
42
|
-
}
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
case "error":
|
|
46
|
-
console.error("[ecopages] HMR Error:", payload.message);
|
|
47
|
-
break;
|
|
48
|
-
case "update":
|
|
49
|
-
if (payload.path) {
|
|
50
|
-
await applyUpdate(payload.path, payload.timestamp);
|
|
51
|
-
}
|
|
52
|
-
break;
|
|
53
|
-
case "css-update":
|
|
54
|
-
if (payload.path) {
|
|
55
|
-
refreshStylesheet(payload.path);
|
|
56
|
-
}
|
|
57
|
-
break;
|
|
1
|
+
/**
|
|
2
|
+
* Ecopages HMR Runtime
|
|
3
|
+
* Injected into the browser to handle Hot Module Replacement updates.
|
|
4
|
+
*/
|
|
5
|
+
import { getEcoNavigationRuntime } from '../../router/client/navigation-coordinator.js';
|
|
6
|
+
import { applyModuleUpdate, resolveActiveModuleUrl } from './module-update.js';
|
|
7
|
+
(function () {
|
|
8
|
+
const WS_URL = 'ws://' + location.host + '/_hmr';
|
|
9
|
+
let socket;
|
|
10
|
+
let reconnectAttempts = 0;
|
|
11
|
+
function connect() {
|
|
12
|
+
socket = new WebSocket(WS_URL);
|
|
13
|
+
socket.addEventListener('open', () => {
|
|
14
|
+
console.log('[ecopages] HMR Connected');
|
|
15
|
+
window.__ECO_HMR_CONNECTED__ = true;
|
|
16
|
+
reconnectAttempts = 0;
|
|
17
|
+
});
|
|
18
|
+
socket.addEventListener('message', async (event) => {
|
|
19
|
+
try {
|
|
20
|
+
const payload = JSON.parse(event.data);
|
|
21
|
+
await handleMessage(payload);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
console.error('[ecopages] Invalid HMR message:', e);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
socket.addEventListener('close', () => {
|
|
28
|
+
window.__ECO_HMR_CONNECTED__ = false;
|
|
29
|
+
if (reconnectAttempts < 10) {
|
|
30
|
+
setTimeout(connect, 1000 * 2 ** reconnectAttempts);
|
|
31
|
+
reconnectAttempts++;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
58
34
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
35
|
+
async function handleMessage(payload) {
|
|
36
|
+
const navigationRuntime = getEcoNavigationRuntime(window);
|
|
37
|
+
switch (payload.type) {
|
|
38
|
+
case 'reload':
|
|
39
|
+
await waitForNavigationToSettle(navigationRuntime);
|
|
40
|
+
if (window.__ECOPAGES_HOST_OWNS_RELOAD__) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
location.reload();
|
|
44
|
+
break;
|
|
45
|
+
case 'layout-update': {
|
|
46
|
+
await waitForNavigationToSettle(navigationRuntime);
|
|
47
|
+
if (await navigationRuntime.reloadCurrentPage({
|
|
48
|
+
clearCache: true,
|
|
49
|
+
moduleUrl: getActiveHmrModuleUrl(),
|
|
50
|
+
})) {
|
|
51
|
+
}
|
|
52
|
+
else if (!window.__ECOPAGES_HOST_OWNS_RELOAD__) {
|
|
53
|
+
location.reload();
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
case 'error':
|
|
58
|
+
console.error('[ecopages] HMR Error:', payload.message);
|
|
59
|
+
break;
|
|
60
|
+
case 'update':
|
|
61
|
+
if (payload.path) {
|
|
62
|
+
await applyUpdate(payload.path, payload.timestamp);
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case 'css-update':
|
|
66
|
+
if (payload.path) {
|
|
67
|
+
refreshStylesheet(payload.path);
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
75
71
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
async function applyUpdate(path, timestamp) {
|
|
73
|
+
const navigationRuntime = getEcoNavigationRuntime(window);
|
|
74
|
+
await applyModuleUpdate(path, {
|
|
75
|
+
getHandlers: () => window.__ECO_PAGES__?.hmrHandlers,
|
|
76
|
+
getActivePageModule: () => window.__ECO_PAGES__?.page?.module,
|
|
77
|
+
reloadCurrentPage: async (request) => Boolean(await navigationRuntime.reloadCurrentPage(request)),
|
|
78
|
+
importModule: (url) => import(url),
|
|
79
|
+
waitForSettled: async () => waitForNavigationToSettle(navigationRuntime),
|
|
80
|
+
}, timestamp);
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
async function waitForNavigationToSettle(navigationRuntime) {
|
|
86
|
-
if (!navigationRuntime.hasPendingNavigationTransaction()) {
|
|
87
|
-
return;
|
|
82
|
+
function getActiveHmrModuleUrl() {
|
|
83
|
+
return resolveActiveModuleUrl(window.__ECO_PAGES__?.hmrHandlers ?? {}, window.__ECO_PAGES__?.page?.module);
|
|
88
84
|
}
|
|
89
|
-
|
|
90
|
-
const startedAt = performance.now();
|
|
91
|
-
const timeoutMs = 5e3;
|
|
92
|
-
const poll = () => {
|
|
85
|
+
async function waitForNavigationToSettle(navigationRuntime) {
|
|
93
86
|
if (!navigationRuntime.hasPendingNavigationTransaction()) {
|
|
94
|
-
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (performance.now() - startedAt >= timeoutMs) {
|
|
98
|
-
resolve();
|
|
99
|
-
return;
|
|
87
|
+
return;
|
|
100
88
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
89
|
+
await new Promise((resolve) => {
|
|
90
|
+
const startedAt = performance.now();
|
|
91
|
+
const timeoutMs = 5_000;
|
|
92
|
+
const poll = () => {
|
|
93
|
+
if (!navigationRuntime.hasPendingNavigationTransaction()) {
|
|
94
|
+
resolve();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (performance.now() - startedAt >= timeoutMs) {
|
|
98
|
+
resolve();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
requestAnimationFrame(poll);
|
|
102
|
+
};
|
|
103
|
+
requestAnimationFrame(poll);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Hot-reload CSS by updating stylesheet link href with cache-busting query param.
|
|
108
|
+
* This causes the browser to re-fetch the stylesheet without a full page reload.
|
|
109
|
+
*/
|
|
110
|
+
function refreshStylesheet(path) {
|
|
111
|
+
const filename = path.split('/').pop() || '';
|
|
112
|
+
const links = document.querySelectorAll('link[rel="stylesheet"]');
|
|
113
|
+
links.forEach((link) => {
|
|
114
|
+
const href = link.href;
|
|
115
|
+
if (href.includes(filename) || href.includes(path.replace(/^.*\/src\//, '/assets/'))) {
|
|
116
|
+
const url = new URL(href, location.origin);
|
|
117
|
+
url.searchParams.set('t', Date.now().toString());
|
|
118
|
+
link.href = url.toString();
|
|
119
|
+
console.log('[ecopages] CSS updated:', filename);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
connect();
|
|
120
124
|
})();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type HmrModuleHandlers = Record<string, (url: string) => Promise<void> | void>;
|
|
2
|
+
export type ApplyModuleUpdateContext = {
|
|
3
|
+
getHandlers: () => HmrModuleHandlers | undefined;
|
|
4
|
+
getActivePageModule?: () => string | undefined;
|
|
5
|
+
reloadCurrentPage: (request: {
|
|
6
|
+
clearCache: boolean;
|
|
7
|
+
moduleUrl: string;
|
|
8
|
+
}) => Promise<boolean>;
|
|
9
|
+
importModule: (url: string) => Promise<unknown>;
|
|
10
|
+
waitForSettled: () => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveActiveModuleUrl(handlers: HmrModuleHandlers, pageModule?: string): string | undefined;
|
|
13
|
+
export declare function applyModuleUpdate(path: string, context: ApplyModuleUpdateContext, timestamp?: number): Promise<void>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { isDevTransformModuleUrl, stripModuleUrlQuery, withModuleCacheBust } from '../hmr-asset-paths.js';
|
|
2
|
+
export function resolveActiveModuleUrl(handlers, pageModule) {
|
|
3
|
+
if (pageModule) {
|
|
4
|
+
const basePath = stripModuleUrlQuery(pageModule);
|
|
5
|
+
if (isDevTransformModuleUrl(basePath)) {
|
|
6
|
+
return basePath;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const handlerPaths = Object.keys(handlers);
|
|
10
|
+
for (let index = handlerPaths.length - 1; index >= 0; index -= 1) {
|
|
11
|
+
const handlerPath = handlerPaths[index];
|
|
12
|
+
if (isDevTransformModuleUrl(handlerPath)) {
|
|
13
|
+
return handlerPath;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return handlerPaths[handlerPaths.length - 1];
|
|
17
|
+
}
|
|
18
|
+
export async function applyModuleUpdate(path, context, timestamp) {
|
|
19
|
+
const basePath = stripModuleUrlQuery(path);
|
|
20
|
+
const url = withModuleCacheBust(basePath, timestamp);
|
|
21
|
+
const handlers = context.getHandlers();
|
|
22
|
+
await context.waitForSettled();
|
|
23
|
+
const handler = handlers?.[basePath];
|
|
24
|
+
if (handler) {
|
|
25
|
+
await handler(url);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (isDevTransformModuleUrl(basePath)) {
|
|
29
|
+
const activePageModule = context.getActivePageModule?.();
|
|
30
|
+
const isActivePageModule = activePageModule !== undefined && stripModuleUrlQuery(activePageModule) === basePath;
|
|
31
|
+
if (isActivePageModule) {
|
|
32
|
+
await context.reloadCurrentPage({ clearCache: false, moduleUrl: url });
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
await context.importModule(url);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.warn(`[ecopages] No HMR handler for module update: ${basePath}`);
|
|
39
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const DEV_TRANSFORM_URL_PREFIX = "/assets/__eco_dev__";
|
|
2
|
+
export declare const VENDOR_URL_PREFIX = "/assets/vendors";
|
|
3
|
+
/**
|
|
4
|
+
* Strips cache-busting query parameters from a browser module URL.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stripModuleUrlQuery(moduleUrl: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Returns true when a module URL is served by the dev transform server.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isDevTransformModuleUrl(moduleUrl: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Appends a cache-busting query parameter for hot module imports.
|
|
13
|
+
*/
|
|
14
|
+
export declare function withModuleCacheBust(moduleUrl: string, timestamp?: number): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RESOLVED_ASSETS_DIR } from '../config/constants.js';
|
|
2
|
+
export const DEV_TRANSFORM_URL_PREFIX = `/${RESOLVED_ASSETS_DIR}/__eco_dev__`;
|
|
3
|
+
export const VENDOR_URL_PREFIX = `/${RESOLVED_ASSETS_DIR}/vendors`;
|
|
4
|
+
/**
|
|
5
|
+
* Strips cache-busting query parameters from a browser module URL.
|
|
6
|
+
*/
|
|
7
|
+
export function stripModuleUrlQuery(moduleUrl) {
|
|
8
|
+
return moduleUrl.split('?')[0] ?? moduleUrl;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns true when a module URL is served by the dev transform server.
|
|
12
|
+
*/
|
|
13
|
+
export function isDevTransformModuleUrl(moduleUrl) {
|
|
14
|
+
return stripModuleUrlQuery(moduleUrl).startsWith(`${DEV_TRANSFORM_URL_PREFIX}/`);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Appends a cache-busting query parameter for hot module imports.
|
|
18
|
+
*/
|
|
19
|
+
export function withModuleCacheBust(moduleUrl, timestamp) {
|
|
20
|
+
const basePath = stripModuleUrlQuery(moduleUrl);
|
|
21
|
+
return `${basePath}?t=${timestamp ?? Date.now()}`;
|
|
22
|
+
}
|
|
@@ -1,49 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
* Verified HMR entrypoint artifact produced by registration.
|
|
3
|
-
*/
|
|
1
|
+
export type HmrEntrypointRole = 'page' | 'script';
|
|
4
2
|
export interface ResolvedHmrEntrypoint {
|
|
5
3
|
sourcePath: string;
|
|
4
|
+
/**
|
|
5
|
+
* Emitted artifact path for disk-based HMR, or the resolved source path for
|
|
6
|
+
* dev-transform entrypoints where modules are served on demand.
|
|
7
|
+
*/
|
|
6
8
|
outputPath: string;
|
|
7
9
|
outputUrl: string;
|
|
10
|
+
role: HmrEntrypointRole;
|
|
8
11
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*/
|
|
12
|
-
export declare function isRegisteredScriptEntrypoint(registered: ReadonlyMap<string, unknown>, filePath: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Returns whether a registered script entrypoint is browser-only and must not be
|
|
15
|
-
* server-imported during HMR invalidation.
|
|
16
|
-
*
|
|
17
|
-
* @remarks
|
|
18
|
-
* Declared `*.script.ts` modules run only in the browser bundle. Re-importing them
|
|
19
|
-
* on the server during `prepareRegisteredScriptChange()` executes DOM globals and
|
|
20
|
-
* aborts the watcher before the client artifact rebuilds. Radiant `*.script.tsx`
|
|
21
|
-
* entrypoints are server-rendered and remain on the invalidation path.
|
|
22
|
-
*/
|
|
23
|
-
export declare function isBrowserOnlyRegisteredScriptEntrypoint(filePath: string): boolean;
|
|
12
|
+
export declare function isRegisteredDevTransformEntrypoint(registered: ReadonlyMap<string, ResolvedHmrEntrypoint>, filePath: string): boolean;
|
|
13
|
+
export declare function isRegisteredScriptEntrypoint(registered: ReadonlyMap<string, ResolvedHmrEntrypoint>, filePath: string): boolean;
|
|
24
14
|
export declare function encodeHmrDynamicSegments(filepath: string): string;
|
|
25
|
-
|
|
26
|
-
* Resolves the on-disk and browser URL targets for one HMR script entrypoint.
|
|
27
|
-
*/
|
|
28
|
-
export declare function resolveHmrEntrypointOutputPaths(srcDir: string, distDir: string, entrypointPath: string): {
|
|
29
|
-
outputPath: string;
|
|
30
|
-
outputUrl: string;
|
|
31
|
-
};
|
|
15
|
+
export declare function decodeHmrDynamicSegments(filepath: string): string;
|
|
32
16
|
/**
|
|
33
17
|
* @remarks
|
|
34
|
-
*
|
|
35
|
-
* stale bundle when the source file changed.
|
|
18
|
+
* Runtime rebuilds must delete the previous artifact so the bundler does not
|
|
19
|
+
* reuse a stale bundle when the source file changed.
|
|
36
20
|
*/
|
|
37
21
|
export declare function removeStaleHmrEntrypointOutput(outputPath: string, scope: string): void;
|
|
38
|
-
/**
|
|
39
|
-
* @remarks
|
|
40
|
-
* Guards against broadcasting reload/update before the bundler has flushed a
|
|
41
|
-
* fresher artifact than the edited source file.
|
|
42
|
-
*/
|
|
43
|
-
export declare function isHmrOutputFresh(outputPath: string, sourcePath: string): boolean;
|
|
44
|
-
/**
|
|
45
|
-
* @remarks
|
|
46
|
-
* Missing output is treated as a benign rebuild race. This helper isolates the
|
|
47
|
-
* post-build case where a bundle exists but is still older than its source.
|
|
48
|
-
*/
|
|
49
|
-
export declare function isHmrOutputOlderThanSource(outputPath: string, sourcePath: string): boolean;
|
|
@@ -1,60 +1,34 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function isRegisteredScriptEntrypoint(registered, filePath) {
|
|
7
|
-
return registered.has(path.resolve(filePath));
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { appLogger } from '../global/app-logger.js';
|
|
4
|
+
function resolveRegisteredEntrypoint(registered, filePath) {
|
|
5
|
+
return registered.get(path.resolve(filePath));
|
|
8
6
|
}
|
|
9
|
-
function
|
|
10
|
-
|
|
7
|
+
export function isRegisteredDevTransformEntrypoint(registered, filePath) {
|
|
8
|
+
return resolveRegisteredEntrypoint(registered, filePath) !== undefined;
|
|
11
9
|
}
|
|
12
|
-
function
|
|
13
|
-
|
|
10
|
+
export function isRegisteredScriptEntrypoint(registered, filePath) {
|
|
11
|
+
return resolveRegisteredEntrypoint(registered, filePath)?.role === 'script';
|
|
14
12
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
const relativePath = path.relative(srcDir, normalizedEntrypoint);
|
|
18
|
-
const relativePathJs = relativePath.replace(/\.(tsx?|jsx?|mdx?)$/, ".js");
|
|
19
|
-
const encodedPathJs = encodeHmrDynamicSegments(relativePathJs);
|
|
20
|
-
const urlPath = encodedPathJs.split(path.sep).join("/");
|
|
21
|
-
return {
|
|
22
|
-
outputUrl: `/${path.join(RESOLVED_ASSETS_DIR, "_hmr", urlPath).split(path.sep).join("/")}`,
|
|
23
|
-
outputPath: path.join(distDir, urlPath)
|
|
24
|
-
};
|
|
13
|
+
export function encodeHmrDynamicSegments(filepath) {
|
|
14
|
+
return filepath.replace(/\[([^\]]+)\]/g, '_$1_');
|
|
25
15
|
}
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
fileSystem.remove(outputPath);
|
|
32
|
-
} catch (error) {
|
|
33
|
-
appLogger.warn(
|
|
34
|
-
`[${scope}] Failed to remove stale entrypoint output ${outputPath}: ${error instanceof Error ? error.message : String(error)}`
|
|
35
|
-
);
|
|
36
|
-
}
|
|
16
|
+
export function decodeHmrDynamicSegments(filepath) {
|
|
17
|
+
return filepath.replace(/_([^_/\\]+)_/g, '[$1]');
|
|
37
18
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
19
|
+
/**
|
|
20
|
+
* @remarks
|
|
21
|
+
* Runtime rebuilds must delete the previous artifact so the bundler does not
|
|
22
|
+
* reuse a stale bundle when the source file changed.
|
|
23
|
+
*/
|
|
24
|
+
export function removeStaleHmrEntrypointOutput(outputPath, scope) {
|
|
25
|
+
if (!fileSystem.exists(outputPath)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
fileSystem.remove(outputPath);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
appLogger.warn(`[${scope}] Failed to remove stale entrypoint output ${outputPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
|
+
}
|
|
45
34
|
}
|
|
46
|
-
function isHmrOutputOlderThanSource(outputPath, sourcePath) {
|
|
47
|
-
if (!fileSystem.exists(outputPath) || !fileSystem.exists(sourcePath)) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return fs.statSync(outputPath).mtimeMs < fs.statSync(sourcePath).mtimeMs;
|
|
51
|
-
}
|
|
52
|
-
export {
|
|
53
|
-
encodeHmrDynamicSegments,
|
|
54
|
-
isBrowserOnlyRegisteredScriptEntrypoint,
|
|
55
|
-
isHmrOutputFresh,
|
|
56
|
-
isHmrOutputOlderThanSource,
|
|
57
|
-
isRegisteredScriptEntrypoint,
|
|
58
|
-
removeStaleHmrEntrypointOutput,
|
|
59
|
-
resolveHmrEntrypointOutputPaths
|
|
60
|
-
};
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function prepareHmrFileChange(appConfig, filePath) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { getAffectedPageBrowserGraphIdentities, invalidatePageBrowserGraphSession, } from '../route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js';
|
|
3
|
+
/**
|
|
4
|
+
* Invalidates affected Page Browser Graph records before HMR strategy dispatch.
|
|
5
|
+
*/
|
|
6
|
+
export function prepareHmrFileChange(appConfig, filePath) {
|
|
7
|
+
const resolvedFilePath = path.resolve(filePath);
|
|
8
|
+
const affectedGraphIdentities = getAffectedPageBrowserGraphIdentities(appConfig, resolvedFilePath);
|
|
9
|
+
const invalidatedGraphCount = invalidatePageBrowserGraphSession(appConfig, resolvedFilePath);
|
|
10
|
+
return {
|
|
11
|
+
affectedGraphIdentities,
|
|
12
|
+
invalidatedGraphCount,
|
|
13
|
+
};
|
|
14
14
|
}
|
|
15
|
-
export {
|
|
16
|
-
prepareHmrFileChange
|
|
17
|
-
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolvedHmrEntrypoint } from './hmr-entrypoint-output.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-only access to dev-transform entrypoints registered for HMR.
|
|
4
|
+
*/
|
|
5
|
+
export interface HmrRegisteredEntrypointsContext {
|
|
6
|
+
getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** On-disk work directory segment under {@link RESOLVED_ASSETS_DIR} for the bundled HMR client runtime. */
|
|
2
|
+
export declare const HMR_RUNTIME_WORK_DIR_SEGMENT = "hmr-runtime";
|
|
3
|
+
/** Browser URL for the bundled HMR client runtime script. */
|
|
4
|
+
export declare const HMR_RUNTIME_SCRIPT_URL = "/_hmr_runtime.js";
|
|
5
|
+
/** WebSocket path used by the HMR client runtime for dev server events. */
|
|
6
|
+
export declare const HMR_WEBSOCKET_PATH = "/_hmr";
|
|
7
|
+
/**
|
|
8
|
+
* Absolute work-directory path for HMR runtime artifacts under an app work dir.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveHmrRuntimeWorkDir(workDir: string): string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { RESOLVED_ASSETS_DIR } from '../config/constants.js';
|
|
2
|
+
/** On-disk work directory segment under {@link RESOLVED_ASSETS_DIR} for the bundled HMR client runtime. */
|
|
3
|
+
export const HMR_RUNTIME_WORK_DIR_SEGMENT = 'hmr-runtime';
|
|
4
|
+
/** Browser URL for the bundled HMR client runtime script. */
|
|
5
|
+
export const HMR_RUNTIME_SCRIPT_URL = '/_hmr_runtime.js';
|
|
6
|
+
/** WebSocket path used by the HMR client runtime for dev server events. */
|
|
7
|
+
export const HMR_WEBSOCKET_PATH = '/_hmr';
|
|
8
|
+
/**
|
|
9
|
+
* Absolute work-directory path for HMR runtime artifacts under an app work dir.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveHmrRuntimeWorkDir(workDir) {
|
|
12
|
+
return `${workDir}/${RESOLVED_ASSETS_DIR}/${HMR_RUNTIME_WORK_DIR_SEGMENT}`;
|
|
13
|
+
}
|
|
@@ -134,20 +134,14 @@ export declare abstract class HmrStrategy {
|
|
|
134
134
|
*/
|
|
135
135
|
abstract matches(filePath: string): boolean;
|
|
136
136
|
/**
|
|
137
|
-
* Returns whether this strategy
|
|
137
|
+
* Returns whether this strategy supplies dev-transform plugins for a source module.
|
|
138
138
|
*
|
|
139
139
|
* @remarks
|
|
140
|
-
*
|
|
141
|
-
*
|
|
140
|
+
* Used by {@link DevTransformBundler} to select integration-owned plugins for any
|
|
141
|
+
* module in the per-file ESM graph (pages and imported children). File-change
|
|
142
|
+
* dispatch continues to use {@link matches}.
|
|
142
143
|
*/
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Materializes one integration-owned HMR entrypoint during registration.
|
|
146
|
-
*
|
|
147
|
-
* @remarks
|
|
148
|
-
* Must write the canonical output path and must not broadcast client events.
|
|
149
|
-
*/
|
|
150
|
-
emitEntrypoint(_entrypointPath: string, _outputPath: string): Promise<void>;
|
|
144
|
+
ownsDevTransformEntrypoint(_sourcePath: string): boolean;
|
|
151
145
|
/**
|
|
152
146
|
* Processes a file change and returns the action to take.
|
|
153
147
|
*
|