@ecopages/core 0.2.0-alpha.5 → 0.2.0-alpha.7
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 +213 -12
- package/package.json +100 -188
- package/src/adapters/README.md +39 -0
- package/src/adapters/bun/hmr-manager.test.ts +267 -0
- package/src/adapters/bun/hmr-manager.ts +180 -47
- package/src/adapters/bun/index.ts +1 -2
- package/src/adapters/bun/server-adapter.ts +41 -34
- package/src/adapters/bun/server-lifecycle.ts +40 -70
- package/src/adapters/index.ts +1 -1
- package/src/adapters/node/bootstrap-dependency-resolver.test.ts +282 -0
- package/src/adapters/node/bootstrap-dependency-resolver.ts +301 -0
- package/src/adapters/node/index.ts +7 -0
- package/src/adapters/node/node-client-bridge.test.ts +198 -0
- package/src/adapters/node/node-hmr-manager.test.ts +322 -0
- package/src/adapters/node/node-hmr-manager.ts +207 -97
- package/src/adapters/node/runtime-adapter.test.ts +868 -0
- package/src/adapters/node/runtime-adapter.ts +439 -0
- package/src/adapters/node/server-adapter.ts +31 -104
- package/src/adapters/node/static-content-server.test.ts +60 -0
- package/src/adapters/node/static-content-server.ts +36 -0
- package/src/adapters/node/write-runtime-manifest.ts +38 -0
- package/src/adapters/shared/api-response.test.ts +97 -0
- package/src/{define-api-handler.ts → adapters/shared/define-api-handler.ts} +1 -1
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
- package/src/adapters/shared/explicit-static-route-matcher.ts +7 -1
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +90 -0
- package/src/adapters/shared/file-route-middleware-pipeline.ts +6 -2
- package/src/adapters/shared/fs-server-response-factory.test.ts +187 -0
- package/src/adapters/shared/fs-server-response-matcher.test.ts +286 -0
- package/src/adapters/shared/fs-server-response-matcher.ts +17 -10
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
- package/src/adapters/shared/hmr-html-response.ts +52 -0
- package/src/adapters/shared/hmr-manager.contract.test.ts +196 -0
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +220 -0
- package/src/adapters/shared/render-context.test.ts +146 -0
- package/src/adapters/shared/render-context.ts +21 -6
- package/src/adapters/shared/runtime-bootstrap.ts +79 -0
- package/src/adapters/shared/server-adapter.test.ts +77 -0
- package/src/adapters/shared/server-adapter.ts +51 -4
- package/src/adapters/shared/server-route-handler.test.ts +110 -0
- package/src/adapters/shared/server-route-handler.ts +5 -18
- package/src/adapters/shared/server-static-builder.test.ts +316 -0
- package/src/adapters/shared/server-static-builder.ts +92 -8
- package/src/build/README.md +101 -0
- package/src/build/build-adapter-serialization.test.ts +268 -0
- package/src/build/build-adapter.test.ts +815 -0
- package/src/build/build-adapter.ts +234 -6
- package/src/build/build-manifest.ts +54 -0
- package/src/build/dev-build-coordinator.ts +221 -0
- package/src/build/esbuild-build-adapter.ts +132 -84
- package/src/build/runtime-build-executor.ts +34 -0
- package/src/build/runtime-specifier-alias-plugin.test.ts +43 -0
- package/src/build/runtime-specifier-alias-plugin.ts +58 -0
- package/src/config/README.md +33 -0
- package/src/config/config-builder.test.ts +410 -0
- package/src/config/config-builder.ts +281 -49
- package/src/constants.ts +15 -0
- package/src/declarations.d.ts +18 -13
- package/src/eco/README.md +70 -16
- package/src/eco/component-render-context.ts +39 -17
- package/src/eco/eco.test.ts +678 -0
- package/src/eco/eco.ts +29 -8
- package/src/eco/eco.types.ts +20 -1
- package/src/eco/eco.utils.test.ts +124 -0
- package/src/eco/global-injector-map.test.ts +42 -0
- package/src/eco/lazy-injector-map.test.ts +66 -0
- package/src/eco/module-dependencies.test.ts +30 -0
- package/src/errors/http-error.test.ts +134 -0
- package/src/global/utils.test.ts +12 -0
- package/src/hmr/README.md +26 -0
- 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 +38 -7
- package/src/hmr/hmr-strategy.test.ts +124 -0
- package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
- package/src/hmr/hmr.test.e2e.ts +29 -38
- package/src/hmr/strategies/js-hmr-strategy.test.ts +335 -0
- package/src/hmr/strategies/js-hmr-strategy.ts +71 -78
- package/src/index.ts +1 -1
- package/src/integrations/ghtml/ghtml-renderer.test.ts +63 -0
- package/src/integrations/ghtml/ghtml-renderer.ts +4 -1
- package/src/internal-types.ts +39 -19
- package/src/plugins/README.md +34 -0
- package/src/plugins/alias-resolver-plugin.test.ts +41 -0
- package/src/plugins/alias-resolver-plugin.ts +21 -3
- package/src/plugins/eco-component-meta-plugin.test.ts +380 -0
- package/src/plugins/eco-component-meta-plugin.ts +10 -3
- package/src/plugins/integration-plugin.test.ts +111 -0
- package/src/plugins/integration-plugin.ts +45 -3
- package/src/plugins/processor.test.ts +148 -0
- package/src/plugins/processor.ts +22 -2
- package/src/plugins/runtime-capability.ts +14 -0
- package/src/public-types.ts +73 -11
- package/src/route-renderer/GRAPH.md +16 -20
- package/src/route-renderer/README.md +8 -21
- package/src/route-renderer/component-graph/component-graph-executor.test.ts +41 -0
- package/src/route-renderer/component-graph/component-graph.test.ts +63 -0
- package/src/route-renderer/component-graph/component-marker.test.ts +73 -0
- package/src/route-renderer/component-graph/component-reference.ts +29 -0
- package/src/route-renderer/component-graph/marker-graph-resolver.test.ts +135 -0
- package/src/route-renderer/{marker-graph-resolver.ts → component-graph/marker-graph-resolver.ts} +11 -9
- package/src/route-renderer/orchestration/integration-renderer.test.ts +936 -0
- package/src/route-renderer/{integration-renderer.ts → orchestration/integration-renderer.ts} +113 -19
- package/src/route-renderer/orchestration/render-execution.service.test.ts +97 -0
- package/src/route-renderer/{render-execution.service.ts → orchestration/render-execution.service.ts} +109 -37
- package/src/route-renderer/orchestration/render-preparation.service.test.ts +235 -0
- package/src/route-renderer/{render-preparation.service.ts → orchestration/render-preparation.service.ts} +127 -9
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +345 -0
- package/src/route-renderer/{dependency-resolver.ts → page-loading/dependency-resolver.ts} +28 -12
- package/src/route-renderer/page-loading/page-module-loader.test.ts +96 -0
- package/src/route-renderer/{page-module-loader.ts → page-loading/page-module-loader.ts} +49 -21
- package/src/route-renderer/route-renderer.ts +36 -1
- package/src/router/README.md +26 -0
- package/src/router/client/link-intent.d.ts +53 -0
- package/src/router/client/link-intent.test.browser.ts +51 -0
- package/src/router/client/link-intent.ts +92 -0
- package/src/router/client/navigation-coordinator.test.ts +237 -0
- package/src/router/client/navigation-coordinator.ts +433 -0
- package/src/router/server/fs-router-scanner.test.ts +83 -0
- package/src/router/{fs-router-scanner.ts → server/fs-router-scanner.ts} +12 -10
- package/src/router/server/fs-router.test.ts +214 -0
- package/src/router/{fs-router.ts → server/fs-router.ts} +2 -2
- package/src/services/README.md +29 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +385 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.ts +101 -6
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.ts +2 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +72 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +95 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/index.ts +2 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-processor.ts +11 -5
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/base/base-script-processor.ts +17 -27
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +286 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.ts +3 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +227 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.ts +5 -4
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +199 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.ts +4 -1
- package/src/services/assets/browser-bundle.service.test.ts +36 -0
- package/src/services/assets/browser-bundle.service.ts +53 -0
- package/src/services/cache/index.ts +3 -3
- package/src/services/cache/memory-cache-store.test.ts +225 -0
- package/src/services/cache/memory-cache-store.ts +1 -1
- package/src/services/cache/page-cache-service.test.ts +175 -0
- package/src/services/cache/page-cache-service.ts +3 -3
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
- package/src/services/{page-request-cache-coordinator.service.ts → cache/page-request-cache-coordinator.service.ts} +9 -6
- package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
- package/src/services/html/html-rewriter-provider.service.ts +103 -0
- package/src/services/html/html-transformer.service.test.ts +378 -0
- package/src/services/html/html-transformer.service.ts +279 -0
- package/src/services/invalidation/development-invalidation.service.test.ts +77 -0
- package/src/services/invalidation/development-invalidation.service.ts +261 -0
- package/src/services/module-loading/app-server-module-transpiler.service.ts +52 -0
- package/src/services/module-loading/page-module-import.service.test.ts +253 -0
- package/src/services/module-loading/page-module-import.service.ts +200 -0
- package/src/services/module-loading/server-loader.service.test.ts +161 -0
- package/src/services/module-loading/server-loader.service.ts +130 -0
- package/src/services/module-loading/server-module-transpiler.service.test.ts +115 -0
- package/src/services/module-loading/server-module-transpiler.service.ts +105 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.test.ts +95 -0
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +101 -0
- package/src/services/runtime-state/dev-graph.service.ts +217 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +96 -0
- package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
- package/src/services/validation/schema-validation-service.test.ts +223 -0
- package/src/services/{schema-validation-service.ts → validation/schema-validation-service.ts} +1 -1
- package/src/static-site-generator/README.md +26 -0
- package/src/static-site-generator/static-site-generator.test.ts +307 -0
- package/src/static-site-generator/static-site-generator.ts +109 -6
- package/src/utils/deep-merge.test.ts +114 -0
- package/src/utils/invariant.test.ts +22 -0
- package/src/utils/path-utils.test.ts +15 -0
- package/src/utils/resolve-work-dir.ts +45 -0
- package/src/utils/server-utils.test.ts +38 -0
- package/src/watchers/project-watcher.integration.test.ts +337 -0
- package/src/watchers/project-watcher.test-helpers.ts +1 -0
- package/src/watchers/project-watcher.test.ts +678 -0
- package/src/watchers/project-watcher.ts +49 -50
- package/CHANGELOG.md +0 -94
- package/src/adapters/abstract/application-adapter.d.ts +0 -168
- package/src/adapters/abstract/application-adapter.js +0 -109
- package/src/adapters/abstract/router-adapter.d.ts +0 -26
- package/src/adapters/abstract/router-adapter.js +0 -5
- package/src/adapters/abstract/server-adapter.d.ts +0 -69
- package/src/adapters/abstract/server-adapter.js +0 -15
- package/src/adapters/bun/client-bridge.d.ts +0 -34
- package/src/adapters/bun/client-bridge.js +0 -48
- package/src/adapters/bun/create-app.d.ts +0 -60
- package/src/adapters/bun/create-app.js +0 -117
- package/src/adapters/bun/define-api-handler.d.ts +0 -61
- package/src/adapters/bun/define-api-handler.js +0 -15
- package/src/adapters/bun/define-api-handler.ts +0 -114
- package/src/adapters/bun/hmr-manager.d.ts +0 -79
- package/src/adapters/bun/hmr-manager.js +0 -222
- package/src/adapters/bun/index.d.ts +0 -3
- package/src/adapters/bun/index.js +0 -8
- package/src/adapters/bun/server-adapter.d.ts +0 -155
- package/src/adapters/bun/server-adapter.js +0 -368
- package/src/adapters/bun/server-lifecycle.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- package/src/adapters/index.d.ts +0 -6
- package/src/adapters/index.js +0 -14
- package/src/adapters/node/create-app.d.ts +0 -21
- package/src/adapters/node/create-app.js +0 -143
- package/src/adapters/node/index.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- package/src/adapters/node/node-client-bridge.d.ts +0 -26
- package/src/adapters/node/node-client-bridge.js +0 -66
- package/src/adapters/node/node-hmr-manager.d.ts +0 -62
- package/src/adapters/node/node-hmr-manager.js +0 -221
- package/src/adapters/node/server-adapter.d.ts +0 -190
- package/src/adapters/node/server-adapter.js +0 -420
- package/src/adapters/node/static-content-server.d.ts +0 -24
- package/src/adapters/node/static-content-server.js +0 -166
- package/src/adapters/shared/api-response.d.ts +0 -52
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.d.ts +0 -18
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -38
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -100
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -65
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -98
- package/src/adapters/shared/fs-server-response-factory.d.ts +0 -19
- package/src/adapters/shared/fs-server-response-factory.js +0 -97
- package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -71
- package/src/adapters/shared/fs-server-response-matcher.js +0 -155
- package/src/adapters/shared/render-context.d.ts +0 -14
- package/src/adapters/shared/render-context.js +0 -69
- package/src/adapters/shared/server-adapter.d.ts +0 -87
- package/src/adapters/shared/server-adapter.js +0 -353
- package/src/adapters/shared/server-route-handler.d.ts +0 -89
- package/src/adapters/shared/server-route-handler.js +0 -120
- package/src/adapters/shared/server-static-builder.d.ts +0 -38
- package/src/adapters/shared/server-static-builder.js +0 -46
- package/src/build/build-adapter.d.ts +0 -75
- package/src/build/build-adapter.js +0 -54
- package/src/build/build-types.d.ts +0 -57
- package/src/build/build-types.js +0 -0
- package/src/build/esbuild-build-adapter.d.ts +0 -69
- package/src/build/esbuild-build-adapter.js +0 -391
- package/src/config/config-builder.d.ts +0 -227
- package/src/config/config-builder.js +0 -392
- package/src/constants.d.ts +0 -32
- package/src/constants.js +0 -21
- package/src/create-app.d.ts +0 -17
- package/src/create-app.js +0 -66
- package/src/define-api-handler.d.ts +0 -25
- package/src/define-api-handler.js +0 -15
- package/src/dev/sc-server.d.ts +0 -30
- package/src/dev/sc-server.js +0 -111
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -77
- package/src/eco/eco.d.ts +0 -9
- package/src/eco/eco.js +0 -110
- package/src/eco/eco.types.d.ts +0 -170
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +0 -40
- package/src/eco/eco.utils.js +0 -40
- package/src/eco/global-injector-map.d.ts +0 -16
- package/src/eco/global-injector-map.js +0 -80
- package/src/eco/lazy-injector-map.d.ts +0 -8
- package/src/eco/lazy-injector-map.js +0 -70
- package/src/eco/module-dependencies.d.ts +0 -18
- package/src/eco/module-dependencies.js +0 -49
- package/src/errors/http-error.d.ts +0 -31
- package/src/errors/http-error.js +0 -50
- package/src/errors/index.d.ts +0 -2
- package/src/errors/index.js +0 -4
- package/src/errors/locals-access-error.d.ts +0 -4
- package/src/errors/locals-access-error.js +0 -9
- package/src/global/app-logger.d.ts +0 -2
- package/src/global/app-logger.js +0 -6
- package/src/hmr/client/hmr-runtime.d.ts +0 -10
- package/src/hmr/client/hmr-runtime.js +0 -86
- package/src/hmr/hmr-strategy.d.ts +0 -159
- package/src/hmr/hmr-strategy.js +0 -29
- package/src/hmr/hmr.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.test.e2e.js +0 -50
- package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
- package/src/hmr/strategies/default-hmr-strategy.js +0 -34
- package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -136
- package/src/hmr/strategies/js-hmr-strategy.js +0 -192
- package/src/index.browser.d.ts +0 -3
- package/src/index.browser.js +0 -4
- package/src/index.d.ts +0 -5
- package/src/index.js +0 -10
- package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -15
- package/src/integrations/ghtml/ghtml-renderer.js +0 -60
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -20
- package/src/integrations/ghtml/ghtml.plugin.js +0 -21
- package/src/internal-types.d.ts +0 -200
- package/src/internal-types.js +0 -0
- package/src/plugins/alias-resolver-plugin.d.ts +0 -2
- package/src/plugins/alias-resolver-plugin.js +0 -39
- package/src/plugins/eco-component-meta-plugin.d.ts +0 -95
- package/src/plugins/eco-component-meta-plugin.js +0 -157
- package/src/plugins/integration-plugin.d.ts +0 -102
- package/src/plugins/integration-plugin.js +0 -100
- package/src/plugins/processor.d.ts +0 -82
- package/src/plugins/processor.js +0 -122
- package/src/public-types.d.ts +0 -1094
- package/src/public-types.js +0 -0
- package/src/route-renderer/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/dependency-resolver.d.ts +0 -24
- package/src/route-renderer/dependency-resolver.js +0 -428
- 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.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/marker-graph-resolver.d.ts +0 -76
- package/src/route-renderer/marker-graph-resolver.js +0 -93
- package/src/route-renderer/page-module-loader.d.ts +0 -61
- package/src/route-renderer/page-module-loader.js +0 -102
- package/src/route-renderer/render-execution.service.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-preparation.service.d.ts +0 -112
- package/src/route-renderer/render-preparation.service.js +0 -243
- package/src/route-renderer/route-renderer.d.ts +0 -26
- package/src/route-renderer/route-renderer.js +0 -68
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- package/src/services/asset-processing-service/asset-processing.service.d.ts +0 -41
- package/src/services/asset-processing-service/asset-processing.service.js +0 -250
- package/src/services/asset-processing-service/asset.factory.d.ts +0 -17
- package/src/services/asset-processing-service/asset.factory.js +0 -82
- package/src/services/asset-processing-service/assets.types.d.ts +0 -88
- package/src/services/asset-processing-service/assets.types.js +0 -0
- package/src/services/asset-processing-service/index.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- package/src/services/asset-processing-service/processor.interface.d.ts +0 -22
- package/src/services/asset-processing-service/processor.interface.js +0 -6
- package/src/services/asset-processing-service/processor.registry.d.ts +0 -8
- package/src/services/asset-processing-service/processor.registry.js +0 -15
- package/src/services/asset-processing-service/processors/base/base-processor.d.ts +0 -24
- package/src/services/asset-processing-service/processors/base/base-processor.js +0 -59
- package/src/services/asset-processing-service/processors/base/base-script-processor.d.ts +0 -16
- package/src/services/asset-processing-service/processors/base/base-script-processor.js +0 -80
- package/src/services/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/asset-processing-service/processors/index.js +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.d.ts +0 -5
- package/src/services/asset-processing-service/processors/script/content-script.processor.js +0 -57
- package/src/services/asset-processing-service/processors/script/file-script.processor.d.ts +0 -8
- package/src/services/asset-processing-service/processors/script/file-script.processor.js +0 -76
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -5
- package/src/services/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -25
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
- package/src/services/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -63
- package/src/services/cache/cache.types.d.ts +0 -107
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +0 -7
- package/src/services/cache/index.js +0 -7
- package/src/services/cache/memory-cache-store.d.ts +0 -42
- package/src/services/cache/memory-cache-store.js +0 -98
- package/src/services/cache/page-cache-service.d.ts +0 -70
- package/src/services/cache/page-cache-service.js +0 -152
- 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.d.ts +0 -75
- package/src/services/page-request-cache-coordinator.service.js +0 -107
- package/src/services/schema-validation-service.d.ts +0 -122
- package/src/services/schema-validation-service.js +0 -101
- package/src/services/validation/standard-schema.types.d.ts +0 -65
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +0 -57
- package/src/static-site-generator/static-site-generator.js +0 -272
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/deep-merge.d.ts +0 -14
- package/src/utils/deep-merge.js +0 -32
- package/src/utils/hash.d.ts +0 -1
- package/src/utils/hash.js +0 -7
- package/src/utils/html.d.ts +0 -1
- package/src/utils/html.js +0 -4
- package/src/utils/invariant.d.ts +0 -5
- package/src/utils/invariant.js +0 -11
- package/src/utils/locals-utils.d.ts +0 -15
- package/src/utils/locals-utils.js +0 -24
- package/src/utils/parse-cli-args.d.ts +0 -24
- package/src/utils/parse-cli-args.js +0 -47
- package/src/utils/path-utils.module.d.ts +0 -5
- package/src/utils/path-utils.module.js +0 -14
- package/src/utils/runtime.d.ts +0 -11
- package/src/utils/runtime.js +0 -40
- package/src/utils/server-utils.module.d.ts +0 -19
- package/src/utils/server-utils.module.js +0 -56
- package/src/watchers/project-watcher.d.ts +0 -132
- package/src/watchers/project-watcher.js +0 -281
- package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
- package/src/watchers/project-watcher.test-helpers.js +0 -51
- /package/src/route-renderer/{component-graph-executor.ts → component-graph/component-graph-executor.ts} +0 -0
- /package/src/route-renderer/{component-graph.ts → component-graph/component-graph.ts} +0 -0
- /package/src/route-renderer/{component-marker.ts → component-graph/component-marker.ts} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/index.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.ts +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.ts +0 -0
|
@@ -1,45 +1,88 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
3
|
import { RESOLVED_ASSETS_DIR } from '../../constants.ts';
|
|
5
|
-
import {
|
|
4
|
+
import { getAppBuildExecutor } from '../../build/build-adapter.ts';
|
|
6
5
|
import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager, IClientBridge } from '../../internal-types.ts';
|
|
7
6
|
import type { EcoBuildPlugin } from '../../build/build-types.ts';
|
|
8
7
|
import { fileSystem } from '@ecopages/file-system';
|
|
9
|
-
import type
|
|
8
|
+
import { HmrStrategyType, type HmrStrategy } from '../../hmr/hmr-strategy.ts';
|
|
10
9
|
import { DefaultHmrStrategy } from '../../hmr/strategies/default-hmr-strategy.ts';
|
|
11
10
|
import { JsHmrStrategy } from '../../hmr/strategies/js-hmr-strategy.ts';
|
|
12
11
|
import { appLogger } from '../../global/app-logger.ts';
|
|
13
12
|
import type { ClientBridgeEvent } from '../../public-types.ts';
|
|
13
|
+
import { HmrEntrypointRegistrar } from '../shared/hmr-entrypoint-registrar.ts';
|
|
14
|
+
import { BrowserBundleService } from '../../services/assets/browser-bundle.service.ts';
|
|
15
|
+
import { getAppServerModuleTranspiler } from '../../services/module-loading/app-server-module-transpiler.service.ts';
|
|
16
|
+
import {
|
|
17
|
+
getAppEntrypointDependencyGraph,
|
|
18
|
+
InMemoryEntrypointDependencyGraph,
|
|
19
|
+
setAppEntrypointDependencyGraph,
|
|
20
|
+
type EntrypointDependencyGraph,
|
|
21
|
+
} from '../../services/runtime-state/entrypoint-dependency-graph.service.ts';
|
|
22
|
+
import { getAppRuntimeSpecifierRegistry } from '../../services/runtime-state/runtime-specifier-registry.service.ts';
|
|
23
|
+
import type { ServerModuleTranspiler } from '../../services/module-loading/server-module-transpiler.service.ts';
|
|
24
|
+
import { resolveInternalExecutionDir, resolveInternalWorkDir } from '../../utils/resolve-work-dir.ts';
|
|
14
25
|
|
|
15
26
|
export interface NodeHmrManagerParams {
|
|
16
27
|
appConfig: EcoPagesAppConfig;
|
|
17
28
|
bridge: IClientBridge;
|
|
18
29
|
}
|
|
19
30
|
|
|
31
|
+
type HandleFileChangeOptions = {
|
|
32
|
+
broadcast?: boolean;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Node development HMR manager.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* This manager owns three separate concerns:
|
|
40
|
+
* - runtime websocket event fanout
|
|
41
|
+
* - entrypoint registration and dedupe
|
|
42
|
+
* - strategy coordination for rebuilds and invalidation
|
|
43
|
+
*
|
|
44
|
+
* The strict page-entrypoint contract lives here: `registerEntrypoint()` is
|
|
45
|
+
* reserved for integration-owned page bundles, while generic script assets must
|
|
46
|
+
* go through `registerScriptEntrypoint()`.
|
|
47
|
+
*/
|
|
20
48
|
export class NodeHmrManager implements IHmrManager {
|
|
49
|
+
private static readonly entrypointRegistrationTimeoutMs = 4000;
|
|
21
50
|
public readonly appConfig: EcoPagesAppConfig;
|
|
22
51
|
private readonly bridge: IClientBridge;
|
|
23
52
|
private watchers = new Map<string, fs.FSWatcher>();
|
|
24
53
|
private watchedFiles = new Map<string, string>();
|
|
25
|
-
private
|
|
26
|
-
/**
|
|
27
|
-
* Node-only reverse invalidation index: dependency file -> affected entrypoints.
|
|
28
|
-
*/
|
|
29
|
-
private dependencyEntrypoints = new Map<string, Set<string>>();
|
|
30
|
-
/**
|
|
31
|
-
* Node-only forward index: entrypoint -> latest dependency set.
|
|
32
|
-
*/
|
|
33
|
-
private entrypointDependencies = new Map<string, Set<string>>();
|
|
54
|
+
private entrypointRegistrations = new Map<string, Promise<string>>();
|
|
34
55
|
private distDir: string;
|
|
35
56
|
private plugins: EcoBuildPlugin[] = [];
|
|
36
57
|
private enabled = true;
|
|
37
58
|
private strategies: HmrStrategy[] = [];
|
|
59
|
+
private readonly entrypointRegistrar: HmrEntrypointRegistrar;
|
|
60
|
+
private readonly browserBundleService: BrowserBundleService;
|
|
61
|
+
private readonly entrypointDependencyGraph: EntrypointDependencyGraph;
|
|
62
|
+
private readonly runtimeSpecifierRegistry: ReturnType<typeof getAppRuntimeSpecifierRegistry>;
|
|
63
|
+
private readonly serverModuleTranspiler: ServerModuleTranspiler;
|
|
38
64
|
|
|
39
65
|
constructor({ appConfig, bridge }: NodeHmrManagerParams) {
|
|
40
66
|
this.appConfig = appConfig;
|
|
41
67
|
this.bridge = bridge;
|
|
42
|
-
this.distDir = path.join(this.appConfig
|
|
68
|
+
this.distDir = path.join(resolveInternalWorkDir(this.appConfig), RESOLVED_ASSETS_DIR, '_hmr');
|
|
69
|
+
this.entrypointRegistrar = new HmrEntrypointRegistrar({
|
|
70
|
+
srcDir: this.appConfig.absolutePaths.srcDir,
|
|
71
|
+
distDir: this.distDir,
|
|
72
|
+
entrypointRegistrations: this.entrypointRegistrations,
|
|
73
|
+
watchedFiles: this.watchedFiles,
|
|
74
|
+
clearFailedRegistration: (entrypointPath) => this.clearFailedEntrypointRegistration(entrypointPath),
|
|
75
|
+
registrationTimeoutMs: NodeHmrManager.entrypointRegistrationTimeoutMs,
|
|
76
|
+
});
|
|
77
|
+
this.browserBundleService = new BrowserBundleService(appConfig);
|
|
78
|
+
const existingEntrypointDependencyGraph = getAppEntrypointDependencyGraph(appConfig);
|
|
79
|
+
this.entrypointDependencyGraph =
|
|
80
|
+
existingEntrypointDependencyGraph instanceof InMemoryEntrypointDependencyGraph
|
|
81
|
+
? existingEntrypointDependencyGraph
|
|
82
|
+
: new InMemoryEntrypointDependencyGraph();
|
|
83
|
+
setAppEntrypointDependencyGraph(this.appConfig, this.entrypointDependencyGraph);
|
|
84
|
+
this.runtimeSpecifierRegistry = getAppRuntimeSpecifierRegistry(this.appConfig);
|
|
85
|
+
this.serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
|
|
43
86
|
this.cleanDistDir();
|
|
44
87
|
this.initializeStrategies();
|
|
45
88
|
}
|
|
@@ -54,17 +97,42 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
54
97
|
fileSystem.ensureDir(this.distDir);
|
|
55
98
|
}
|
|
56
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Returns whether the generic JS strategy is allowed to rebuild an entrypoint.
|
|
102
|
+
*
|
|
103
|
+
* @remarks
|
|
104
|
+
* Higher-priority integration strategies own framework page entrypoints. When
|
|
105
|
+
* one of them matches, the generic JS strategy must stay out of the way so a
|
|
106
|
+
* shared dependency invalidation does not overwrite framework-specific output.
|
|
107
|
+
*/
|
|
108
|
+
private shouldJsStrategyProcessEntrypoint(entrypointPath: string): boolean {
|
|
109
|
+
return !this.strategies.some((strategy) => {
|
|
110
|
+
if (strategy.type !== HmrStrategyType.INTEGRATION || strategy.priority <= HmrStrategyType.SCRIPT) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
return strategy.matches(entrypointPath);
|
|
116
|
+
} catch (error) {
|
|
117
|
+
appLogger.error(error);
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
57
123
|
private initializeStrategies(): void {
|
|
58
124
|
const jsContext = {
|
|
59
125
|
getWatchedFiles: () => this.watchedFiles,
|
|
60
|
-
getSpecifierMap: () => this.
|
|
61
|
-
getDependencyEntrypoints: (filePath: string) =>
|
|
62
|
-
new Set(this.dependencyEntrypoints.get(path.resolve(filePath)) ?? []),
|
|
63
|
-
setEntrypointDependencies: (entrypointPath: string, dependencies: string[]) =>
|
|
64
|
-
this.setEntrypointDependencies(entrypointPath, dependencies),
|
|
126
|
+
getSpecifierMap: () => this.runtimeSpecifierRegistry.getAll(),
|
|
65
127
|
getDistDir: () => this.distDir,
|
|
66
128
|
getPlugins: () => this.plugins,
|
|
67
129
|
getSrcDir: () => this.appConfig.absolutePaths.srcDir,
|
|
130
|
+
getPagesDir: () => this.appConfig.absolutePaths.pagesDir,
|
|
131
|
+
getLayoutsDir: () => this.appConfig.absolutePaths.layoutsDir,
|
|
132
|
+
getTemplateExtensions: () => this.appConfig.templatesExt,
|
|
133
|
+
getBrowserBundleService: () => this.browserBundleService,
|
|
134
|
+
getEntrypointDependencyGraph: () => this.entrypointDependencyGraph,
|
|
135
|
+
shouldProcessEntrypoint: (entrypointPath: string) => this.shouldJsStrategyProcessEntrypoint(entrypointPath),
|
|
68
136
|
};
|
|
69
137
|
|
|
70
138
|
this.strategies = [new JsHmrStrategy(jsContext), new DefaultHmrStrategy()];
|
|
@@ -86,27 +154,39 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
86
154
|
return this.enabled;
|
|
87
155
|
}
|
|
88
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Registers runtime bare-specifier mappings exposed by integrations.
|
|
159
|
+
*
|
|
160
|
+
* @remarks
|
|
161
|
+
* These mappings are consumed by framework-owned HMR strategies such as the
|
|
162
|
+
* React integration strategy when they rewrite browser bundles. The registry
|
|
163
|
+
* stays generic so the same mappings can support broader import-map-style
|
|
164
|
+
* runtime features later without moving integration semantics into core.
|
|
165
|
+
*/
|
|
89
166
|
public registerSpecifierMap(map: Record<string, string>): void {
|
|
90
|
-
|
|
91
|
-
this.specifierMap.set(specifier, url);
|
|
92
|
-
}
|
|
167
|
+
this.runtimeSpecifierRegistry.register(map);
|
|
93
168
|
}
|
|
94
169
|
|
|
95
170
|
public async buildRuntime(): Promise<void> {
|
|
96
|
-
const
|
|
97
|
-
const runtimeSource = path.resolve(currentDir, '../../hmr/client/hmr-runtime.ts');
|
|
98
|
-
|
|
99
|
-
const result = await defaultBuildAdapter.build({
|
|
100
|
-
entrypoints: [runtimeSource],
|
|
101
|
-
outdir: this.distDir,
|
|
102
|
-
naming: '_hmr_runtime.js',
|
|
103
|
-
minify: false,
|
|
104
|
-
...defaultBuildAdapter.getTranspileOptions('hmr-runtime'),
|
|
105
|
-
plugins: this.plugins,
|
|
106
|
-
});
|
|
171
|
+
const runtimeSource = path.resolve(import.meta.dirname, '../../hmr/client/hmr-runtime.ts');
|
|
107
172
|
|
|
108
|
-
|
|
109
|
-
|
|
173
|
+
try {
|
|
174
|
+
const result = await this.browserBundleService.bundle({
|
|
175
|
+
profile: 'hmr-runtime',
|
|
176
|
+
entrypoints: [runtimeSource],
|
|
177
|
+
outdir: this.distDir,
|
|
178
|
+
naming: '_hmr_runtime.js',
|
|
179
|
+
minify: false,
|
|
180
|
+
plugins: this.plugins,
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
if (!result.success) {
|
|
184
|
+
this.enabled = false;
|
|
185
|
+
appLogger.error('[HMR] Failed to build runtime script; continuing with HMR disabled.', result.logs);
|
|
186
|
+
}
|
|
187
|
+
} catch (error) {
|
|
188
|
+
this.enabled = false;
|
|
189
|
+
appLogger.error('[HMR] Failed to build runtime script; continuing with HMR disabled.', error);
|
|
110
190
|
}
|
|
111
191
|
}
|
|
112
192
|
|
|
@@ -121,7 +201,7 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
121
201
|
this.bridge.broadcast(event);
|
|
122
202
|
}
|
|
123
203
|
|
|
124
|
-
public async handleFileChange(filePath: string): Promise<void> {
|
|
204
|
+
public async handleFileChange(filePath: string, options: HandleFileChangeOptions = {}): Promise<void> {
|
|
125
205
|
const sorted = [...this.strategies].sort((a, b) => b.priority - a.priority);
|
|
126
206
|
const strategy = sorted.find((s) => {
|
|
127
207
|
try {
|
|
@@ -140,8 +220,9 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
140
220
|
appLogger.debug(`[NodeHmrManager] Selected strategy: ${strategy.constructor.name}`);
|
|
141
221
|
|
|
142
222
|
const action = await strategy.process(filePath);
|
|
223
|
+
const shouldBroadcast = options.broadcast ?? true;
|
|
143
224
|
|
|
144
|
-
if (action.type === 'broadcast') {
|
|
225
|
+
if (shouldBroadcast && action.type === 'broadcast') {
|
|
145
226
|
if (action.events) {
|
|
146
227
|
for (const event of action.events) {
|
|
147
228
|
this.broadcast(event);
|
|
@@ -159,7 +240,7 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
159
240
|
}
|
|
160
241
|
|
|
161
242
|
public getSpecifierMap(): Map<string, string> {
|
|
162
|
-
return this.
|
|
243
|
+
return this.runtimeSpecifierRegistry.getAll();
|
|
163
244
|
}
|
|
164
245
|
|
|
165
246
|
public getDistDir(): string {
|
|
@@ -173,99 +254,128 @@ export class NodeHmrManager implements IHmrManager {
|
|
|
173
254
|
public getDefaultContext(): DefaultHmrContext {
|
|
174
255
|
return {
|
|
175
256
|
getWatchedFiles: () => this.watchedFiles,
|
|
176
|
-
getSpecifierMap: () => this.
|
|
257
|
+
getSpecifierMap: () => this.runtimeSpecifierRegistry.getAll(),
|
|
177
258
|
getDistDir: () => this.distDir,
|
|
178
259
|
getPlugins: () => this.plugins,
|
|
179
260
|
getSrcDir: () => this.appConfig.absolutePaths.srcDir,
|
|
180
261
|
getLayoutsDir: () => this.appConfig.absolutePaths.layoutsDir,
|
|
181
262
|
getPagesDir: () => this.appConfig.absolutePaths.pagesDir,
|
|
263
|
+
getBuildExecutor: () => getAppBuildExecutor(this.appConfig),
|
|
264
|
+
getBrowserBundleService: () => this.browserBundleService,
|
|
265
|
+
importServerModule: async <T>(filePath: string) =>
|
|
266
|
+
await this.serverModuleTranspiler.importModule<T>({
|
|
267
|
+
filePath,
|
|
268
|
+
outdir: path.join(resolveInternalExecutionDir(this.appConfig), '.server-modules'),
|
|
269
|
+
externalPackages: true,
|
|
270
|
+
}),
|
|
182
271
|
};
|
|
183
272
|
}
|
|
184
273
|
|
|
274
|
+
private clearFailedEntrypointRegistration(entrypointPath: string): void {
|
|
275
|
+
this.watchedFiles.delete(entrypointPath);
|
|
276
|
+
this.entrypointDependencyGraph.clearEntrypointDependencies(entrypointPath);
|
|
277
|
+
}
|
|
278
|
+
|
|
185
279
|
/**
|
|
186
|
-
*
|
|
280
|
+
* Registers one integration-owned page entrypoint.
|
|
187
281
|
*
|
|
188
282
|
* @remarks
|
|
189
|
-
*
|
|
190
|
-
*
|
|
283
|
+
* Concurrent callers share one in-flight registration. The registration is
|
|
284
|
+
* removed from the dedupe map once it resolves or fails so later requests do
|
|
285
|
+
* not inherit stale state.
|
|
191
286
|
*/
|
|
192
|
-
private setEntrypointDependencies(entrypointPath: string, dependencies: string[]): void {
|
|
193
|
-
const normalizedEntrypoint = path.resolve(entrypointPath);
|
|
194
|
-
const previousDependencies = this.entrypointDependencies.get(normalizedEntrypoint);
|
|
195
|
-
|
|
196
|
-
if (previousDependencies) {
|
|
197
|
-
for (const dependencyPath of previousDependencies) {
|
|
198
|
-
const entrypoints = this.dependencyEntrypoints.get(dependencyPath);
|
|
199
|
-
if (!entrypoints) {
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
entrypoints.delete(normalizedEntrypoint);
|
|
204
|
-
if (entrypoints.size === 0) {
|
|
205
|
-
this.dependencyEntrypoints.delete(dependencyPath);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const normalizedDependencies = new Set<string>([
|
|
211
|
-
normalizedEntrypoint,
|
|
212
|
-
...dependencies.map((dependencyPath) => path.resolve(dependencyPath)),
|
|
213
|
-
]);
|
|
214
|
-
|
|
215
|
-
this.entrypointDependencies.set(normalizedEntrypoint, normalizedDependencies);
|
|
216
|
-
|
|
217
|
-
for (const dependencyPath of normalizedDependencies) {
|
|
218
|
-
const entrypoints = this.dependencyEntrypoints.get(dependencyPath) ?? new Set<string>();
|
|
219
|
-
entrypoints.add(normalizedEntrypoint);
|
|
220
|
-
this.dependencyEntrypoints.set(dependencyPath, entrypoints);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
287
|
public async registerEntrypoint(entrypointPath: string): Promise<string> {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
288
|
+
return await this.entrypointRegistrar.registerEntrypoint(entrypointPath, {
|
|
289
|
+
emit: async (normalizedEntrypoint, outputPath) =>
|
|
290
|
+
await this.emitStrictEntrypoint(normalizedEntrypoint, outputPath),
|
|
291
|
+
getMissingOutputError: (normalizedEntrypoint, outputPath) =>
|
|
292
|
+
new Error(
|
|
293
|
+
`[HMR] Integration failed to emit entrypoint ${normalizedEntrypoint} to ${outputPath}. Page entrypoints must be produced by their owning integration.`,
|
|
294
|
+
),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
228
297
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
298
|
+
/**
|
|
299
|
+
* Registers one generic script entrypoint.
|
|
300
|
+
*
|
|
301
|
+
* @remarks
|
|
302
|
+
* This path is intentionally separate from page entrypoints so non-framework
|
|
303
|
+
* scripts can still use the generic build fallback without weakening the page
|
|
304
|
+
* ownership contract.
|
|
305
|
+
*/
|
|
306
|
+
public async registerScriptEntrypoint(entrypointPath: string): Promise<string> {
|
|
307
|
+
return await this.entrypointRegistrar.registerEntrypoint(entrypointPath, {
|
|
308
|
+
emit: async (normalizedEntrypoint, outputPath) =>
|
|
309
|
+
await this.emitScriptEntrypoint(normalizedEntrypoint, outputPath),
|
|
310
|
+
getMissingOutputError: (normalizedEntrypoint) =>
|
|
311
|
+
new Error(`[HMR] Failed to register script entrypoint: ${normalizedEntrypoint}`),
|
|
312
|
+
});
|
|
313
|
+
}
|
|
233
314
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
315
|
+
/**
|
|
316
|
+
* Performs strict integration-owned entrypoint registration for one normalized source path.
|
|
317
|
+
*
|
|
318
|
+
* @remarks
|
|
319
|
+
* The flow is:
|
|
320
|
+
* 1. Reserve the output URL in the watched map.
|
|
321
|
+
* 2. Remove any stale emitted file from an earlier process or failed build.
|
|
322
|
+
* 3. Let the strategy chain try to emit the entrypoint without broadcasting.
|
|
323
|
+
* 4. Fail if the owning integration did not emit the expected output.
|
|
324
|
+
*/
|
|
325
|
+
private async emitStrictEntrypoint(entrypointPath: string, _outputPath: string): Promise<void> {
|
|
326
|
+
await this.handleFileChange(entrypointPath, { broadcast: false });
|
|
327
|
+
}
|
|
237
328
|
|
|
238
|
-
|
|
329
|
+
/**
|
|
330
|
+
* Performs registration for a generic script asset.
|
|
331
|
+
*
|
|
332
|
+
* @remarks
|
|
333
|
+
* The manager first gives registered strategies a chance to emit the file so
|
|
334
|
+
* processor-owned or integration-owned behavior can still participate. Only
|
|
335
|
+
* when no output exists does it issue the generic build.
|
|
336
|
+
*/
|
|
337
|
+
private async emitScriptEntrypoint(entrypointPath: string, outputPath: string): Promise<void> {
|
|
338
|
+
const naming = path.relative(this.distDir, outputPath).split(path.sep).join('/');
|
|
239
339
|
|
|
240
|
-
await this.handleFileChange(entrypointPath);
|
|
340
|
+
await this.handleFileChange(entrypointPath, { broadcast: false });
|
|
241
341
|
|
|
242
342
|
if (!fileSystem.exists(outputPath)) {
|
|
243
|
-
const
|
|
343
|
+
const buildResult = await this.browserBundleService.bundle({
|
|
344
|
+
profile: 'hmr-entrypoint',
|
|
244
345
|
entrypoints: [entrypointPath],
|
|
245
346
|
outdir: this.distDir,
|
|
246
|
-
naming
|
|
347
|
+
naming,
|
|
247
348
|
minify: false,
|
|
248
|
-
external: Array.from(this.specifierMap.keys()),
|
|
249
|
-
...defaultBuildAdapter.getTranspileOptions('hmr-entrypoint'),
|
|
250
349
|
plugins: this.plugins,
|
|
251
350
|
});
|
|
252
351
|
|
|
253
|
-
if (!
|
|
254
|
-
appLogger.error(
|
|
352
|
+
if (!buildResult.success) {
|
|
353
|
+
appLogger.error(
|
|
354
|
+
`[HMR] Generic script entrypoint build failed for ${entrypointPath}:`,
|
|
355
|
+
buildResult.logs,
|
|
356
|
+
);
|
|
255
357
|
}
|
|
256
358
|
}
|
|
257
|
-
|
|
258
|
-
return outputUrl;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
private encodeDynamicSegments(filepath: string): string {
|
|
262
|
-
return filepath.replace(/\[([^\]]+)\]/g, '_$1_');
|
|
263
359
|
}
|
|
264
360
|
|
|
361
|
+
/**
|
|
362
|
+
* Stops active watchers and releases retained registration state.
|
|
363
|
+
*
|
|
364
|
+
* @remarks
|
|
365
|
+
* The manager intentionally does not remove emitted `_hmr` files from disk
|
|
366
|
+
* because multiple app processes may share the same dist directory during test
|
|
367
|
+
* runs. It does clear in-memory indexes so old entrypoints, dependencies, and
|
|
368
|
+
* specifier maps cannot leak across a reused manager instance.
|
|
369
|
+
*/
|
|
265
370
|
public stop() {
|
|
371
|
+
this.entrypointRegistrations.clear();
|
|
266
372
|
for (const watcher of this.watchers.values()) {
|
|
267
373
|
watcher.close();
|
|
268
374
|
}
|
|
269
375
|
this.watchers.clear();
|
|
376
|
+
this.watchedFiles.clear();
|
|
377
|
+
this.runtimeSpecifierRegistry.clear();
|
|
378
|
+
this.entrypointDependencyGraph.reset();
|
|
379
|
+
this.plugins = [];
|
|
270
380
|
}
|
|
271
381
|
}
|