@ecopages/core 0.2.0-alpha.1 → 0.2.0-alpha.10
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/CHANGELOG.md +13 -70
- package/README.md +213 -12
- package/package.json +50 -18
- package/src/adapters/README.md +39 -0
- package/src/adapters/bun/hmr-manager.d.ts +77 -18
- package/src/adapters/bun/hmr-manager.js +159 -52
- package/src/adapters/bun/index.d.ts +1 -2
- package/src/adapters/bun/index.js +1 -1
- package/src/adapters/bun/server-adapter.js +35 -30
- package/src/adapters/bun/server-lifecycle.d.ts +24 -13
- package/src/adapters/bun/server-lifecycle.js +32 -60
- package/src/adapters/index.d.ts +1 -1
- package/src/adapters/index.js +1 -1
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +44 -0
- package/src/adapters/node/bootstrap-dependency-resolver.js +172 -0
- package/src/adapters/node/index.d.ts +2 -0
- package/src/adapters/node/index.js +3 -0
- package/src/adapters/node/node-hmr-manager.d.ts +87 -16
- package/src/adapters/node/node-hmr-manager.js +179 -88
- package/src/adapters/node/runtime-adapter.d.ts +46 -0
- package/src/adapters/node/runtime-adapter.js +306 -0
- package/src/adapters/node/server-adapter.d.ts +2 -31
- package/src/adapters/node/server-adapter.js +31 -93
- package/src/adapters/node/static-content-server.d.ts +36 -0
- package/src/adapters/node/static-content-server.js +28 -0
- package/src/adapters/node/write-runtime-manifest.d.ts +26 -0
- package/src/adapters/node/write-runtime-manifest.js +12 -0
- package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
- package/src/adapters/shared/explicit-static-route-matcher.js +4 -1
- package/src/adapters/shared/file-route-middleware-pipeline.js +1 -0
- package/src/adapters/shared/fs-server-response-matcher.d.ts +9 -5
- package/src/adapters/shared/fs-server-response-matcher.js +13 -8
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +32 -0
- package/src/adapters/shared/render-context.js +3 -2
- package/src/adapters/shared/runtime-bootstrap.d.ts +38 -0
- package/src/adapters/shared/runtime-bootstrap.js +43 -0
- package/src/adapters/shared/server-adapter.d.ts +12 -2
- package/src/adapters/shared/server-adapter.js +37 -4
- package/src/adapters/shared/server-route-handler.d.ts +1 -1
- package/src/adapters/shared/server-route-handler.js +4 -13
- package/src/adapters/shared/server-static-builder.d.ts +35 -3
- package/src/adapters/shared/server-static-builder.js +59 -6
- package/src/build/README.md +101 -0
- package/src/build/build-adapter.d.ts +114 -2
- package/src/build/build-adapter.js +119 -5
- package/src/build/build-manifest.d.ts +27 -0
- package/src/build/build-manifest.js +30 -0
- package/src/build/dev-build-coordinator.d.ts +74 -0
- package/src/build/dev-build-coordinator.js +161 -0
- package/src/build/esbuild-build-adapter.d.ts +9 -6
- package/src/build/esbuild-build-adapter.js +103 -71
- package/src/build/runtime-build-executor.d.ts +13 -0
- package/src/build/runtime-build-executor.js +20 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +31 -0
- package/src/config/README.md +33 -0
- package/src/config/config-builder.d.ts +28 -17
- package/src/config/config-builder.js +221 -48
- package/src/constants.d.ts +13 -0
- package/src/constants.js +4 -0
- package/src/declarations.d.ts +18 -13
- package/src/eco/README.md +70 -16
- package/src/eco/component-render-context.d.ts +1 -1
- package/src/eco/component-render-context.js +26 -16
- package/src/eco/eco.js +16 -12
- package/src/eco/eco.types.d.ts +12 -4
- package/src/hmr/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +30 -7
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.js +26 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +45 -42
- package/src/hmr/strategies/js-hmr-strategy.js +70 -71
- package/src/index.d.ts +1 -1
- package/src/index.js +1 -1
- package/src/integrations/ghtml/ghtml-renderer.d.ts +1 -1
- package/src/integrations/ghtml/ghtml-renderer.js +3 -1
- package/src/internal-types.d.ts +39 -18
- package/src/plugins/README.md +34 -0
- package/src/plugins/alias-resolver-plugin.js +17 -3
- package/src/plugins/eco-component-meta-plugin.d.ts +2 -0
- package/src/plugins/eco-component-meta-plugin.js +1 -1
- package/src/plugins/integration-plugin.d.ts +38 -4
- package/src/plugins/integration-plugin.js +34 -1
- package/src/plugins/processor.d.ts +14 -1
- package/src/plugins/processor.js +15 -1
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/public-types.d.ts +65 -10
- package/src/route-renderer/GRAPH.md +16 -20
- package/src/route-renderer/README.md +8 -21
- package/src/route-renderer/component-graph/component-reference.d.ts +10 -0
- package/src/route-renderer/component-graph/component-reference.js +19 -0
- package/src/route-renderer/{marker-graph-resolver.d.ts → component-graph/marker-graph-resolver.d.ts} +6 -5
- package/src/route-renderer/{marker-graph-resolver.js → component-graph/marker-graph-resolver.js} +10 -8
- package/src/route-renderer/{integration-renderer.d.ts → orchestration/integration-renderer.d.ts} +45 -12
- package/src/route-renderer/{integration-renderer.js → orchestration/integration-renderer.js} +79 -16
- package/src/route-renderer/{render-execution.service.d.ts → orchestration/render-execution.service.d.ts} +39 -5
- package/src/route-renderer/{render-execution.service.js → orchestration/render-execution.service.js} +58 -28
- package/src/route-renderer/{render-preparation.service.d.ts → orchestration/render-preparation.service.d.ts} +13 -4
- package/src/route-renderer/{render-preparation.service.js → orchestration/render-preparation.service.js} +92 -3
- package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/{dependency-resolver.js → page-loading/dependency-resolver.js} +18 -4
- package/src/route-renderer/page-loading/page-module-loader.d.ts +87 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +36 -14
- package/src/route-renderer/route-renderer.d.ts +36 -1
- package/src/route-renderer/route-renderer.js +19 -0
- package/src/router/README.md +26 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +149 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/{fs-router-scanner.d.ts → server/fs-router-scanner.d.ts} +3 -3
- package/src/router/{fs-router-scanner.js → server/fs-router-scanner.js} +8 -7
- package/src/router/{fs-router.d.ts → server/fs-router.d.ts} +1 -1
- package/src/router/{fs-router.js → server/fs-router.js} +1 -1
- package/src/services/README.md +29 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +120 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +88 -7
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.d.ts +2 -1
- package/src/services/assets/asset-processing-service/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +48 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/index.d.ts +2 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/index.js +2 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.js +9 -4
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.d.ts +3 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.js +14 -22
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +1 -1
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +5 -4
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +4 -1
- package/src/services/assets/browser-bundle.service.d.ts +32 -0
- package/src/services/assets/browser-bundle.service.js +33 -0
- package/src/services/{page-request-cache-coordinator.service.d.ts → cache/page-request-cache-coordinator.service.d.ts} +2 -2
- package/src/services/{page-request-cache-coordinator.service.js → cache/page-request-cache-coordinator.service.js} +3 -1
- package/src/services/html/html-rewriter-provider.service.d.ts +37 -0
- package/src/services/html/html-rewriter-provider.service.js +65 -0
- package/src/services/html/html-transformer.service.d.ts +77 -0
- package/src/services/html/html-transformer.service.js +221 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +189 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +16 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +34 -0
- package/src/services/module-loading/page-module-import.service.d.ts +71 -0
- package/src/services/module-loading/page-module-import.service.js +132 -0
- package/src/services/module-loading/server-loader.service.d.ts +96 -0
- package/src/services/module-loading/server-loader.service.js +32 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +69 -0
- package/src/services/module-loading/server-module-transpiler.service.js +61 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +35 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +60 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +69 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.js +37 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/{schema-validation-service.d.ts → validation/schema-validation-service.d.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.d.ts +53 -1
- package/src/static-site-generator/static-site-generator.js +86 -5
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/watchers/project-watcher.d.ts +37 -21
- package/src/watchers/project-watcher.js +109 -66
- package/src/watchers/project-watcher.test-helpers.js +1 -0
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.ts +0 -281
- package/src/adapters/bun/index.ts +0 -3
- package/src/adapters/bun/server-adapter.ts +0 -492
- package/src/adapters/bun/server-lifecycle.ts +0 -154
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.ts +0 -9
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -271
- package/src/adapters/node/server-adapter.ts +0 -561
- package/src/adapters/node/static-content-server.ts +0 -203
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -134
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -123
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -198
- package/src/adapters/shared/render-context.ts +0 -105
- package/src/adapters/shared/server-adapter.ts +0 -442
- package/src/adapters/shared/server-route-handler.ts +0 -166
- package/src/adapters/shared/server-static-builder.ts +0 -82
- package/src/build/build-adapter.ts +0 -132
- package/src/build/build-types.ts +0 -83
- package/src/build/esbuild-build-adapter.ts +0 -510
- package/src/config/config-builder.ts +0 -474
- package/src/constants.ts +0 -39
- package/src/create-app.ts +0 -87
- package/src/define-api-handler.js +0 -15
- package/src/define-api-handler.ts +0 -66
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.ts +0 -202
- package/src/eco/eco.ts +0 -221
- package/src/eco/eco.types.ts +0 -202
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +0 -121
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.test.e2e.ts +0 -75
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -308
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -93
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -212
- package/src/plugins/alias-resolver-plugin.ts +0 -45
- package/src/plugins/eco-component-meta-plugin.ts +0 -474
- package/src/plugins/integration-plugin.ts +0 -184
- package/src/plugins/processor.ts +0 -220
- package/src/public-types.ts +0 -1255
- package/src/route-renderer/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.ts +0 -596
- package/src/route-renderer/html-post-processing.service.d.ts +0 -40
- package/src/route-renderer/html-post-processing.service.js +0 -86
- package/src/route-renderer/html-post-processing.service.ts +0 -103
- package/src/route-renderer/integration-renderer.ts +0 -696
- package/src/route-renderer/marker-graph-resolver.ts +0 -153
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.ts +0 -153
- package/src/route-renderer/render-execution.service.ts +0 -158
- package/src/route-renderer/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.ts +0 -122
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.ts +0 -306
- package/src/services/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/asset-processing-service/assets.types.ts +0 -112
- package/src/services/asset-processing-service/index.ts +0 -3
- package/src/services/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/asset-processing-service/processors/base/base-processor.ts +0 -76
- package/src/services/asset-processing-service/processors/base/base-script-processor.ts +0 -105
- package/src/services/asset-processing-service/processors/index.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.ts +0 -84
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -77
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/html-transformer.service.d.ts +0 -50
- package/src/services/html-transformer.service.js +0 -163
- package/src/services/html-transformer.service.ts +0 -217
- package/src/services/page-module-import.service.d.ts +0 -37
- package/src/services/page-module-import.service.js +0 -88
- package/src/services/page-module-import.service.ts +0 -129
- package/src/services/page-request-cache-coordinator.service.ts +0 -128
- package/src/services/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -359
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -40
- package/src/watchers/project-watcher.ts +0 -306
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.js} +0 -0
- /package/src/route-renderer/{component-graph-executor.d.ts → component-graph/component-graph-executor.d.ts} +0 -0
- /package/src/route-renderer/{component-graph-executor.js → component-graph/component-graph-executor.js} +0 -0
- /package/src/route-renderer/{component-graph.d.ts → component-graph/component-graph.d.ts} +0 -0
- /package/src/route-renderer/{component-graph.js → component-graph/component-graph.js} +0 -0
- /package/src/route-renderer/{component-marker.d.ts → component-graph/component-marker.d.ts} +0 -0
- /package/src/route-renderer/{component-marker.js → component-graph/component-marker.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.js +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
package/src/eco/eco.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createNodeId, createPropsRef, createSlotRef, getComponentRenderContext } from "./component-render-context.js";
|
|
2
|
-
import { createComponentMarker, parseComponentMarkers } from "../route-renderer/component-marker.js";
|
|
2
|
+
import { createComponentMarker, parseComponentMarkers } from "../route-renderer/component-graph/component-marker.js";
|
|
3
|
+
import { getComponentReference } from "../route-renderer/component-graph/component-reference.js";
|
|
3
4
|
import { addTriggerAttribute, isThenable, wrapWithScriptsInjector } from "./eco.utils.js";
|
|
4
5
|
function createComponentFactory(options) {
|
|
5
6
|
const integrationName = options.integration ?? options.__eco?.integration;
|
|
@@ -13,12 +14,7 @@ function createComponentFactory(options) {
|
|
|
13
14
|
if (shouldEmitMarker && renderContext) {
|
|
14
15
|
const nodeId = createNodeId(renderContext);
|
|
15
16
|
const propsRef = createPropsRef(renderContext);
|
|
16
|
-
const componentRef = comp
|
|
17
|
-
if (!componentRef) {
|
|
18
|
-
throw new Error(
|
|
19
|
-
"[ecopages] Missing component reference metadata for cross-integration marker emission."
|
|
20
|
-
);
|
|
21
|
-
}
|
|
17
|
+
const componentRef = getComponentReference(comp);
|
|
22
18
|
const componentProps = props ?? {};
|
|
23
19
|
renderContext.propsByRef[propsRef] = componentProps;
|
|
24
20
|
let slotRef;
|
|
@@ -66,20 +62,26 @@ function createComponentFactory(options) {
|
|
|
66
62
|
function component(options) {
|
|
67
63
|
return createComponentFactory(options);
|
|
68
64
|
}
|
|
65
|
+
function html(options) {
|
|
66
|
+
return createComponentFactory(options);
|
|
67
|
+
}
|
|
68
|
+
function layout(options) {
|
|
69
|
+
return createComponentFactory(options);
|
|
70
|
+
}
|
|
69
71
|
function page(options) {
|
|
70
|
-
const { layout, dependencies, render, staticPaths: staticPaths2, staticProps: staticProps2, metadata: metadata2, cache, requires, middleware } = options;
|
|
72
|
+
const { layout: layout2, dependencies, render, staticPaths: staticPaths2, staticProps: staticProps2, metadata: metadata2, cache, requires, middleware } = options;
|
|
71
73
|
const componentOptions = {
|
|
72
74
|
__eco: options.__eco,
|
|
73
75
|
integration: options.integration,
|
|
74
|
-
dependencies:
|
|
76
|
+
dependencies: layout2 ? {
|
|
75
77
|
...dependencies,
|
|
76
|
-
components: [...dependencies?.components || [],
|
|
78
|
+
components: [...dependencies?.components || [], layout2]
|
|
77
79
|
} : dependencies,
|
|
78
80
|
render
|
|
79
81
|
};
|
|
80
82
|
const pageComponent = createComponentFactory(componentOptions);
|
|
81
|
-
if (
|
|
82
|
-
pageComponent.config.layout =
|
|
83
|
+
if (layout2 && pageComponent.config) {
|
|
84
|
+
pageComponent.config.layout = layout2;
|
|
83
85
|
}
|
|
84
86
|
if (staticPaths2) pageComponent.staticPaths = staticPaths2;
|
|
85
87
|
if (staticProps2) pageComponent.staticProps = staticProps2;
|
|
@@ -100,6 +102,8 @@ function staticProps(fn) {
|
|
|
100
102
|
}
|
|
101
103
|
const eco = {
|
|
102
104
|
component,
|
|
105
|
+
html,
|
|
106
|
+
layout,
|
|
103
107
|
page,
|
|
104
108
|
metadata,
|
|
105
109
|
staticPaths,
|
package/src/eco/eco.types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Type definitions for the eco namespace API
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
|
-
import type { DependencyLazyTrigger, EcoComponent, EcoComponentDependencies, EcoInjectedMeta, EcoPagesElement, GetMetadata, GetStaticPaths, GetStaticProps, Middleware, RequestLocals, RequestPageContext } from '../public-types.js';
|
|
5
|
+
import type { DependencyLazyTrigger, EcoComponent, EcoComponentDependencies, EcoHtmlComponent, EcoInjectedMeta, EcoLayoutComponent, EcoPageLayoutComponent, EcoPagesElement, GetMetadata, GetStaticPaths, GetStaticProps, HtmlTemplateProps, LayoutProps, Middleware, RequestLocals, RequestPageContext } from '../public-types.js';
|
|
6
6
|
import type { CacheStrategy } from '../services/cache/cache.types.js';
|
|
7
7
|
type WithRequiredLocals<K extends keyof RequestLocals> = Omit<RequestLocals, K> & {
|
|
8
8
|
[P in K]-?: Exclude<RequestLocals[P], null | undefined>;
|
|
@@ -26,6 +26,8 @@ export interface ComponentOptions<P, E = EcoPagesElement> {
|
|
|
26
26
|
dependencies?: EcoComponentDependencies;
|
|
27
27
|
render: (props: P) => E | Promise<E>;
|
|
28
28
|
}
|
|
29
|
+
export type HtmlOptions<E = EcoPagesElement> = ComponentOptions<HtmlTemplateProps, E>;
|
|
30
|
+
export type LayoutOptions<E = EcoPagesElement> = ComponentOptions<LayoutProps<E>, E>;
|
|
29
31
|
/**
|
|
30
32
|
* Base options shared by all page variants
|
|
31
33
|
*/
|
|
@@ -34,9 +36,7 @@ export interface PageOptionsBase<T, E = EcoPagesElement> {
|
|
|
34
36
|
__eco?: EcoInjectedMeta;
|
|
35
37
|
integration?: string;
|
|
36
38
|
dependencies?: EcoComponentDependencies;
|
|
37
|
-
layout?:
|
|
38
|
-
children: E;
|
|
39
|
-
} & Partial<RequestPageContext>>;
|
|
39
|
+
layout?: EcoPageLayoutComponent<E>;
|
|
40
40
|
/**
|
|
41
41
|
* Define static paths for dynamic routes (e.g., [slug].tsx).
|
|
42
42
|
* Returns all possible paths that should be pre-rendered at build time.
|
|
@@ -139,6 +139,14 @@ export interface Eco {
|
|
|
139
139
|
* @template E - Element/return type (EcoPagesElement for Kita, ReactNode for React)
|
|
140
140
|
*/
|
|
141
141
|
component: <P = {}, E = EcoPagesElement>(options: ComponentOptions<P, E>) => EcoComponent<P, E>;
|
|
142
|
+
/**
|
|
143
|
+
* Create a document shell component for the HTML wrapper.
|
|
144
|
+
*/
|
|
145
|
+
html: <E = EcoPagesElement>(options: HtmlOptions<E>) => EcoHtmlComponent<E>;
|
|
146
|
+
/**
|
|
147
|
+
* Create a route layout component.
|
|
148
|
+
*/
|
|
149
|
+
layout: <E = EcoPagesElement>(options: LayoutOptions<E>) => EcoLayoutComponent<E>;
|
|
142
150
|
/**
|
|
143
151
|
* Create a page component with type-safe props from getStaticProps.
|
|
144
152
|
* Returns an EcoPageComponent with attached staticPaths, staticProps, and metadata.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# HMR Layer
|
|
2
|
+
|
|
3
|
+
This directory contains the framework-owned hot-update strategy contracts used by runtime adapters and integrations.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
The HMR layer separates change classification from update execution.
|
|
8
|
+
|
|
9
|
+
It is responsible for:
|
|
10
|
+
|
|
11
|
+
- defining the shared HMR manager and strategy contracts
|
|
12
|
+
- letting integrations contribute framework-specific update strategies
|
|
13
|
+
- keeping adapter transports independent from update policy
|
|
14
|
+
|
|
15
|
+
## How It Fits
|
|
16
|
+
|
|
17
|
+
1. `ProjectWatcher` observes file changes.
|
|
18
|
+
2. `DevelopmentInvalidationService` classifies the change.
|
|
19
|
+
3. The active HMR manager selects a strategy.
|
|
20
|
+
4. The strategy coordinates browser rebuilds, metadata reloads, and client broadcasts.
|
|
21
|
+
|
|
22
|
+
## Design Rule
|
|
23
|
+
|
|
24
|
+
Generic invalidation policy belongs in core services.
|
|
25
|
+
Framework-specific update behavior belongs in HMR strategies.
|
|
26
|
+
Runtime-specific WebSocket or event-stream transport belongs in adapters.
|
|
@@ -2,9 +2,4 @@
|
|
|
2
2
|
* Ecopages HMR Runtime
|
|
3
3
|
* Injected into the browser to handle Hot Module Replacement updates.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
type: 'reload' | 'error' | 'update' | 'css-update' | 'layout-update';
|
|
7
|
-
path?: string;
|
|
8
|
-
message?: string;
|
|
9
|
-
timestamp?: number;
|
|
10
|
-
}
|
|
5
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getEcoNavigationRuntime } from "../../router/client/navigation-coordinator.js";
|
|
1
2
|
(function() {
|
|
2
3
|
const WS_URL = "ws://" + location.host + "/_hmr";
|
|
3
4
|
let socket;
|
|
@@ -24,14 +25,15 @@
|
|
|
24
25
|
});
|
|
25
26
|
}
|
|
26
27
|
async function handleMessage(payload) {
|
|
28
|
+
const navigationRuntime = getEcoNavigationRuntime(window);
|
|
27
29
|
switch (payload.type) {
|
|
28
30
|
case "reload":
|
|
31
|
+
await waitForNavigationToSettle(navigationRuntime);
|
|
29
32
|
location.reload();
|
|
30
33
|
break;
|
|
31
34
|
case "layout-update": {
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
await reloadFn({ clearCache: true });
|
|
35
|
+
await waitForNavigationToSettle(navigationRuntime);
|
|
36
|
+
if (await navigationRuntime.reloadCurrentPage({ clearCache: true })) {
|
|
35
37
|
} else {
|
|
36
38
|
location.reload();
|
|
37
39
|
}
|
|
@@ -55,20 +57,41 @@
|
|
|
55
57
|
async function applyUpdate(path, timestamp) {
|
|
56
58
|
try {
|
|
57
59
|
const url = path + "?t=" + (timestamp || Date.now());
|
|
58
|
-
const handlers = window.
|
|
60
|
+
const handlers = window.__ECO_PAGES__?.hmrHandlers;
|
|
61
|
+
const navigationRuntime = getEcoNavigationRuntime(window);
|
|
62
|
+
await waitForNavigationToSettle(navigationRuntime);
|
|
59
63
|
if (handlers?.[path]) {
|
|
60
64
|
await handlers[path](url);
|
|
61
65
|
return;
|
|
62
66
|
}
|
|
63
67
|
await import(url);
|
|
64
|
-
|
|
65
|
-
if (typeof reloadFn === "function") {
|
|
66
|
-
await reloadFn({ clearCache: false });
|
|
68
|
+
if (await navigationRuntime.reloadCurrentPage({ clearCache: false })) {
|
|
67
69
|
}
|
|
68
70
|
} catch (e) {
|
|
69
71
|
console.error("[ecopages] Failed to apply HMR update:", e);
|
|
70
72
|
}
|
|
71
73
|
}
|
|
74
|
+
async function waitForNavigationToSettle(navigationRuntime) {
|
|
75
|
+
if (!navigationRuntime.hasPendingNavigationTransaction()) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
await new Promise((resolve) => {
|
|
79
|
+
const startedAt = performance.now();
|
|
80
|
+
const timeoutMs = 2e3;
|
|
81
|
+
const poll = () => {
|
|
82
|
+
if (!navigationRuntime.hasPendingNavigationTransaction()) {
|
|
83
|
+
resolve();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (performance.now() - startedAt >= timeoutMs) {
|
|
87
|
+
resolve();
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
requestAnimationFrame(poll);
|
|
91
|
+
};
|
|
92
|
+
requestAnimationFrame(poll);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
72
95
|
function refreshStylesheet(path) {
|
|
73
96
|
const filename = path.split("/").pop() || "";
|
|
74
97
|
const links = document.querySelectorAll('link[rel="stylesheet"]');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { writeFile } from "node:fs/promises";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
|
|
6
|
+
const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/postcss-hmr.css");
|
|
7
|
+
test.describe("HMR E2E PostCSS", () => {
|
|
8
|
+
test("should hot-update processor-owned CSS without a full page reload", async ({ page }) => {
|
|
9
|
+
const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
|
|
10
|
+
const title = page.locator(".postcss-title").first();
|
|
11
|
+
try {
|
|
12
|
+
await page.goto("/postcss-hmr", { waitUntil: "networkidle" });
|
|
13
|
+
await expect(title).toBeVisible();
|
|
14
|
+
const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
|
|
15
|
+
expect(initialColor).toBeTruthy();
|
|
16
|
+
await page.evaluate(() => {
|
|
17
|
+
window.__postcssReloadProbe = "before-change";
|
|
18
|
+
});
|
|
19
|
+
const modifiedCss = originalCss.replace(".postcss-title {", ".postcss-title {\n color: rgb(255, 0, 0);");
|
|
20
|
+
await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
|
|
21
|
+
await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
|
|
22
|
+
await expect(
|
|
23
|
+
page.evaluate(
|
|
24
|
+
() => window.__postcssReloadProbe ?? null
|
|
25
|
+
)
|
|
26
|
+
).resolves.toBe("before-change");
|
|
27
|
+
} finally {
|
|
28
|
+
await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
package/src/hmr/hmr.test.e2e.js
CHANGED
|
@@ -4,47 +4,40 @@ import { writeFile } from "node:fs/promises";
|
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
const FIXTURE_DIR = resolve(process.cwd(), "packages/core/__fixtures__/app");
|
|
6
6
|
const TEST_CSS_FILE = resolve(FIXTURE_DIR, "src/pages/index.css");
|
|
7
|
-
const BUILT_CSS_FILE = resolve(FIXTURE_DIR, ".eco/assets/pages/index.css");
|
|
8
|
-
const TEST_URL = "http://localhost:3002";
|
|
9
7
|
test.describe("HMR E2E", () => {
|
|
10
8
|
test("should load page with .main-title element", async ({ page }) => {
|
|
11
|
-
await page.goto(
|
|
9
|
+
await page.goto("/", { waitUntil: "networkidle" });
|
|
12
10
|
const title = page.locator(".main-title").first();
|
|
13
11
|
await expect(title).toBeVisible();
|
|
14
12
|
});
|
|
15
13
|
test("should connect to HMR WebSocket", async ({ page }) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const ws = new WebSocket("ws://localhost:3002/_hmr");
|
|
20
|
-
ws.onopen = () => {
|
|
21
|
-
ws.close();
|
|
22
|
-
resolve2(true);
|
|
23
|
-
};
|
|
24
|
-
ws.onerror = () => resolve2(false);
|
|
25
|
-
setTimeout(() => resolve2(false), 5e3);
|
|
26
|
-
});
|
|
14
|
+
const socketPromise = page.waitForEvent("websocket", {
|
|
15
|
+
predicate: (socket2) => socket2.url().endsWith("/_hmr"),
|
|
16
|
+
timeout: 1e4
|
|
27
17
|
});
|
|
28
|
-
|
|
18
|
+
await page.goto("/", { waitUntil: "networkidle" });
|
|
19
|
+
const socket = await socketPromise;
|
|
20
|
+
expect(socket.url()).toMatch(/\/_hmr$/);
|
|
29
21
|
});
|
|
30
|
-
test("should
|
|
22
|
+
test("should fall back to a full page reload when raw CSS file changes", async ({ page }) => {
|
|
31
23
|
const originalCss = readFileSync(TEST_CSS_FILE, "utf-8");
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
24
|
+
const title = page.locator(".main-title").first();
|
|
25
|
+
try {
|
|
26
|
+
await page.goto("/", { waitUntil: "networkidle" });
|
|
27
|
+
await expect(title).toBeVisible();
|
|
28
|
+
const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
|
|
29
|
+
expect(initialColor).toBeTruthy();
|
|
30
|
+
const modifiedCss = originalCss.replace(".main-title {", ".main-title {\n color: rgb(255, 0, 0);");
|
|
31
|
+
const reloadPromise = page.waitForEvent("framenavigated", {
|
|
32
|
+
predicate: (frame) => frame === page.mainFrame(),
|
|
33
|
+
timeout: 1e4
|
|
34
|
+
});
|
|
35
|
+
await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
|
|
36
|
+
await reloadPromise;
|
|
37
|
+
await page.waitForLoadState("networkidle");
|
|
38
|
+
await expect.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 1e4 }).toBe("rgb(255, 0, 0)");
|
|
39
|
+
} finally {
|
|
40
|
+
await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
|
|
41
|
+
}
|
|
49
42
|
});
|
|
50
43
|
});
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* JavaScript HMR Strategy
|
|
3
3
|
*
|
|
4
4
|
* Handles hot module replacement for JavaScript and TypeScript entrypoints.
|
|
5
|
-
* Bundles files,
|
|
5
|
+
* Bundles files, inspects the emitted output, and decides whether the browser
|
|
6
|
+
* can hot-accept the change or must reload.
|
|
6
7
|
*
|
|
7
8
|
* @module
|
|
8
9
|
*/
|
|
9
10
|
import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
|
|
10
11
|
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
12
|
+
import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.js';
|
|
13
|
+
import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.js';
|
|
11
14
|
/**
|
|
12
15
|
* Context interface providing access to HmrManager state.
|
|
13
16
|
* Required for JsHmrStrategy to access registered entrypoints and configuration.
|
|
@@ -21,23 +24,7 @@ export interface JsHmrContext {
|
|
|
21
24
|
* Map of bare specifiers to vendor URLs for import resolution.
|
|
22
25
|
*/
|
|
23
26
|
getSpecifierMap(): Map<string, string>;
|
|
24
|
-
|
|
25
|
-
* Returns entrypoints impacted by a changed dependency path.
|
|
26
|
-
*
|
|
27
|
-
* @remarks
|
|
28
|
-
* This hook is currently provided by the Node HMR manager where dependency
|
|
29
|
-
* graph metadata is extracted from the Node/esbuild build adapter.
|
|
30
|
-
*/
|
|
31
|
-
getDependencyEntrypoints?(filePath: string): Set<string>;
|
|
32
|
-
/**
|
|
33
|
-
* Stores latest dependency set for an entrypoint.
|
|
34
|
-
*
|
|
35
|
-
* @remarks
|
|
36
|
-
* This hook is currently used only by the Node HMR manager to maintain a
|
|
37
|
-
* reverse invalidation index. Runtimes that do not provide it keep rebuild-all
|
|
38
|
-
* fallback semantics.
|
|
39
|
-
*/
|
|
40
|
-
setEntrypointDependencies?(entrypointPath: string, dependencies: string[]): void;
|
|
27
|
+
getEntrypointDependencyGraph(): EntrypointDependencyGraph;
|
|
41
28
|
/**
|
|
42
29
|
* Directory where HMR bundles are written.
|
|
43
30
|
*/
|
|
@@ -50,23 +37,47 @@ export interface JsHmrContext {
|
|
|
50
37
|
* Absolute path to the source directory.
|
|
51
38
|
*/
|
|
52
39
|
getSrcDir(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Absolute path to the pages directory.
|
|
42
|
+
*/
|
|
43
|
+
getPagesDir(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Absolute path to the layouts directory.
|
|
46
|
+
*/
|
|
47
|
+
getLayoutsDir(): string;
|
|
48
|
+
/**
|
|
49
|
+
* All configured route-template extensions across integrations.
|
|
50
|
+
*/
|
|
51
|
+
getTemplateExtensions(): string[];
|
|
52
|
+
/**
|
|
53
|
+
* Browser bundler used to rebuild changed entrypoints.
|
|
54
|
+
*/
|
|
55
|
+
getBrowserBundleService(): BrowserBundleExecutor;
|
|
56
|
+
/**
|
|
57
|
+
* Returns whether a watched entrypoint should be rebuilt by the generic JS strategy.
|
|
58
|
+
*
|
|
59
|
+
* @remarks
|
|
60
|
+
* Integrations with higher-priority HMR strategies can use this to keep the
|
|
61
|
+
* generic JS strategy from overwriting their emitted entrypoints when a shared
|
|
62
|
+
* dependency changes.
|
|
63
|
+
*/
|
|
64
|
+
shouldProcessEntrypoint?(entrypointPath: string): boolean;
|
|
53
65
|
}
|
|
54
66
|
/**
|
|
55
67
|
* Strategy for handling JavaScript/TypeScript file changes with hot reloading.
|
|
56
68
|
*
|
|
57
|
-
* This strategy rebuilds all registered entrypoints when any file changes,
|
|
58
|
-
* as we don't currently track dependencies. This is safe but inefficient.
|
|
59
|
-
*
|
|
60
69
|
* The processing steps are:
|
|
61
70
|
* 1. Check if any entrypoints are registered
|
|
62
|
-
* 2. Rebuild
|
|
63
|
-
*
|
|
71
|
+
* 2. Rebuild impacted entrypoints, or all watched entrypoints when no runtime
|
|
72
|
+
* dependency graph is available
|
|
73
|
+
* 3. Emit rebuilt entrypoint bundles for browser delivery
|
|
64
74
|
* 4. Inject generic HMR boilerplate
|
|
65
75
|
* 5. Broadcast update events for each rebuilt entrypoint
|
|
66
76
|
*
|
|
67
77
|
* @remarks
|
|
68
|
-
*
|
|
69
|
-
*
|
|
78
|
+
* Node can provide dependency-graph metadata, so this strategy can rebuild only
|
|
79
|
+
* the entrypoints impacted by a changed dependency. Runtimes that do not expose
|
|
80
|
+
* that metadata intentionally keep the rebuild-all fallback.
|
|
70
81
|
*
|
|
71
82
|
* @see https://bun.sh/docs/runtime/transpiler
|
|
72
83
|
*
|
|
@@ -83,8 +94,8 @@ export interface JsHmrContext {
|
|
|
83
94
|
* ```
|
|
84
95
|
*/
|
|
85
96
|
export declare class JsHmrStrategy extends HmrStrategy {
|
|
86
|
-
private context;
|
|
87
97
|
readonly type = HmrStrategyType.SCRIPT;
|
|
98
|
+
private context;
|
|
88
99
|
constructor(context: JsHmrContext);
|
|
89
100
|
/**
|
|
90
101
|
* Determines if the file is a JS/TS file that could affect registered entrypoints.
|
|
@@ -105,32 +116,24 @@ export declare class JsHmrStrategy extends HmrStrategy {
|
|
|
105
116
|
* @remarks
|
|
106
117
|
* If runtime-specific dependency graph hooks are unavailable, this strategy
|
|
107
118
|
* falls back to rebuilding all watched entrypoints.
|
|
119
|
+
* When multiple entrypoints are impacted they are bundled in a single esbuild
|
|
120
|
+
* invocation to share AST parsing and chunk deduplication.
|
|
108
121
|
* @returns Action to broadcast update events
|
|
109
122
|
*/
|
|
110
123
|
process(filePath: string): Promise<HmrAction>;
|
|
111
124
|
/**
|
|
112
|
-
* Bundles
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
* @param outputUrl - URL path for the bundled file
|
|
116
|
-
* @returns True if bundling was successful
|
|
125
|
+
* Bundles one or more entrypoints in a single esbuild invocation.
|
|
126
|
+
* Uses the source directory as the output base so that the directory structure
|
|
127
|
+
* is preserved under the HMR dist folder.
|
|
117
128
|
*/
|
|
118
|
-
private
|
|
129
|
+
private bundleEntrypoints;
|
|
119
130
|
/**
|
|
120
|
-
* Processes bundled output
|
|
131
|
+
* Processes bundled output and determines whether the browser can hot-accept
|
|
132
|
+
* the update or must fall back to a full reload.
|
|
121
133
|
*
|
|
122
134
|
* @param filepath - Path to the bundled output file
|
|
123
135
|
* @param url - URL path for the bundled file
|
|
124
136
|
* @returns True if processing was successful and update should be broadcast
|
|
125
137
|
*/
|
|
126
138
|
private processOutput;
|
|
127
|
-
/**
|
|
128
|
-
* Replaces bare specifiers with vendor URLs.
|
|
129
|
-
*
|
|
130
|
-
* Handles both static imports and dynamic imports.
|
|
131
|
-
*
|
|
132
|
-
* @param code - The bundled code to transform
|
|
133
|
-
* @returns The transformed code with vendor URLs
|
|
134
|
-
*/
|
|
135
|
-
private replaceBareSpecifiers;
|
|
136
139
|
}
|