@ecopages/core 0.2.0-alpha.3 → 0.2.0-alpha.31
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 +66 -66
- package/README.md +268 -14
- package/package.json +72 -108
- package/src/adapters/README.md +39 -0
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +5 -12
- package/src/adapters/bun/create-app.js +43 -7
- package/src/adapters/bun/hmr-manager.d.ts +72 -26
- package/src/adapters/bun/hmr-manager.js +153 -81
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- package/src/adapters/bun/server-adapter.d.ts +5 -5
- package/src/adapters/bun/server-adapter.js +63 -38
- package/src/adapters/bun/server-lifecycle.d.ts +28 -17
- package/src/adapters/bun/server-lifecycle.js +34 -62
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +2 -6
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +6 -9
- package/src/adapters/node/create-app.js +12 -6
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +79 -21
- package/src/adapters/node/node-hmr-manager.js +167 -114
- package/src/adapters/node/server-adapter.d.ts +7 -35
- package/src/adapters/node/server-adapter.js +55 -107
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -1
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/{define-api-handler.d.ts → adapters/shared/define-api-handler.d.ts} +1 -1
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -13
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +3 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +20 -16
- package/src/adapters/shared/fs-server-response-matcher.js +76 -45
- 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.d.ts +4 -3
- package/src/adapters/shared/render-context.js +6 -3
- 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 +33 -12
- package/src/adapters/shared/server-adapter.js +208 -132
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +7 -16
- package/src/adapters/shared/server-static-builder.d.ts +41 -8
- package/src/adapters/shared/server-static-builder.js +65 -11
- package/src/build/README.md +107 -0
- package/src/build/build-adapter.d.ts +168 -3
- package/src/build/build-adapter.js +604 -16
- 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 +72 -0
- package/src/build/dev-build-coordinator.js +154 -0
- package/src/build/esbuild-build-adapter.d.ts +15 -6
- package/src/build/esbuild-build-adapter.js +189 -74
- package/src/build/runtime-build-executor.d.ts +14 -0
- package/src/build/runtime-build-executor.js +22 -0
- package/src/build/runtime-specifier-alias-plugin.d.ts +15 -0
- package/src/build/runtime-specifier-alias-plugin.js +35 -0
- package/src/build/runtime-specifier-aliases.d.ts +5 -0
- package/src/build/runtime-specifier-aliases.js +95 -0
- package/src/config/README.md +36 -0
- package/src/config/config-builder.d.ts +54 -29
- package/src/config/config-builder.js +255 -49
- package/src/{constants.d.ts → config/constants.d.ts} +13 -0
- package/src/{constants.js → config/constants.js} +4 -0
- package/src/declarations.d.ts +19 -14
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/README.md +70 -16
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +83 -0
- package/src/eco/eco.js +32 -57
- package/src/eco/eco.types.d.ts +14 -6
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/README.md +26 -0
- package/src/hmr/client/hmr-runtime.d.ts +1 -6
- package/src/hmr/client/hmr-runtime.js +38 -7
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -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/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +46 -48
- package/src/hmr/strategies/js-hmr-strategy.js +64 -74
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +4 -3
- package/src/index.js +16 -5
- package/src/integrations/ghtml/ghtml-renderer.d.ts +3 -2
- package/src/integrations/ghtml/ghtml-renderer.js +27 -30
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +35 -0
- package/src/plugins/alias-resolver-plugin.js +17 -3
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +27 -22
- package/src/plugins/foreign-jsx-override-plugin.d.ts +31 -0
- package/src/plugins/foreign-jsx-override-plugin.js +35 -0
- package/src/plugins/integration-plugin.d.ts +142 -29
- package/src/plugins/integration-plugin.js +103 -14
- package/src/plugins/processor.d.ts +17 -2
- package/src/plugins/processor.js +22 -3
- package/src/plugins/runtime-capability.d.ts +9 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +83 -325
- package/src/route-renderer/README.md +73 -90
- package/src/route-renderer/orchestration/component-render-context.d.ts +89 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +108 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +206 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +516 -0
- package/src/route-renderer/orchestration/integration-renderer.js +909 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +2 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +90 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +158 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +120 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +388 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/{dependency-resolver.d.ts → page-loading/dependency-resolver.d.ts} +15 -4
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/{page-module-loader.js → page-loading/page-module-loader.js} +39 -14
- package/src/route-renderer/route-renderer.d.ts +57 -14
- package/src/route-renderer/route-renderer.js +30 -18
- package/src/router/README.md +94 -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 +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +28 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset-processing.service.js +124 -89
- package/src/services/{asset-processing-service → assets/asset-processing-service}/asset.factory.d.ts +1 -1
- 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 +16 -1
- 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 +49 -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/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +3 -0
- package/src/services/assets/asset-processing-service/page-package.js +74 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.interface.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processor.registry.d.ts +2 -2
- 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 +11 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +119 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/file-script.processor.js +28 -7
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.d.ts +3 -3
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/script/node-module-script.processor.js +12 -7
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/{asset-processing-service → assets/asset-processing-service}/processors/stylesheet/file-stylesheet.processor.js +9 -3
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -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 +68 -0
- package/src/services/html/html-transformer.service.d.ts +87 -0
- package/src/services/html/html-transformer.service.js +216 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +115 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +42 -0
- package/src/services/module-loading/node-bootstrap-plugin.js +216 -0
- package/src/services/module-loading/page-module-import.service.d.ts +76 -0
- package/src/services/module-loading/page-module-import.service.js +170 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -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/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 +67 -20
- package/src/static-site-generator/static-site-generator.js +182 -138
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +62 -30
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +201 -32
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- 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 +40 -29
- package/src/watchers/project-watcher.js +126 -116
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +6 -6
- 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 -296
- 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.d.ts +0 -4
- package/src/adapters/node/index.js +0 -8
- 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 -289
- 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.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -77
- 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 -320
- 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 -1260
- 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-executor.ts +0 -84
- package/src/route-renderer/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph.js +0 -72
- package/src/route-renderer/component-graph.ts +0 -159
- package/src/route-renderer/component-marker.d.ts +0 -52
- package/src/route-renderer/component-marker.js +0 -46
- package/src/route-renderer/component-marker.ts +0 -117
- package/src/route-renderer/dependency-resolver.js +0 -428
- 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.d.ts +0 -339
- package/src/route-renderer/integration-renderer.js +0 -526
- package/src/route-renderer/integration-renderer.ts +0 -696
- 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/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.d.ts +0 -69
- package/src/route-renderer/render-execution.service.js +0 -91
- package/src/route-renderer/render-execution.service.ts +0 -158
- 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/render-preparation.service.ts +0 -358
- package/src/route-renderer/route-renderer.ts +0 -80
- package/src/router/fs-router-scanner.d.ts +0 -41
- package/src/router/fs-router-scanner.js +0 -155
- package/src/router/fs-router-scanner.ts +0 -217
- package/src/router/fs-router.d.ts +0 -26
- package/src/router/fs-router.js +0 -100
- 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.d.ts +0 -3
- package/src/services/asset-processing-service/index.js +0 -3
- 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.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/base/base-script-processor.ts +0 -105
- 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/index.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/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.js +0 -25
- 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.d.ts +0 -1
- package/src/utils/css.js +0 -7
- 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 -41
- package/src/watchers/project-watcher.ts +0 -344
- /package/src/adapters/{bun → shared}/define-api-handler.js +0 -0
- /package/src/{internal-types.js → plugins/runtime-capability.js} +0 -0
- /package/src/services/{asset-processing-service → assets/asset-processing-service}/assets.types.js +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.js +0 -0
- /package/src/{public-types.js → services/module-loading/app-module-loader.service.js} +0 -0
- /package/src/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
import type { WebSocketHandler } from 'bun';
|
|
2
|
-
import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager } from '../../internal-types';
|
|
2
|
+
import type { DefaultHmrContext, EcoPagesAppConfig, IHmrManager } from '../../types/internal-types.js';
|
|
3
3
|
import type { EcoBuildPlugin } from '../../build/build-types.js';
|
|
4
|
-
import type
|
|
5
|
-
import type { ClientBridge } from './client-bridge';
|
|
6
|
-
import type { ClientBridgeEvent } from '../../public-types';
|
|
4
|
+
import { type HmrStrategy } from '../../hmr/hmr-strategy.js';
|
|
5
|
+
import type { ClientBridge } from './client-bridge.js';
|
|
6
|
+
import type { ClientBridgeEvent } from '../../types/public-types.js';
|
|
7
7
|
type BunSocketHandler = WebSocketHandler<unknown>;
|
|
8
8
|
export interface HmrManagerParams {
|
|
9
9
|
appConfig: EcoPagesAppConfig;
|
|
10
10
|
bridge: ClientBridge;
|
|
11
11
|
}
|
|
12
|
+
type HandleFileChangeOptions = {
|
|
13
|
+
broadcast?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Bun development HMR manager.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* Bun shares the same public contract as the Node manager: page entrypoints are
|
|
20
|
+
* strict integration-owned registrations, while generic script assets use their
|
|
21
|
+
* own explicit registration path.
|
|
22
|
+
*/
|
|
12
23
|
export declare class HmrManager implements IHmrManager {
|
|
24
|
+
private static readonly entrypointRegistrationTimeoutMs;
|
|
13
25
|
readonly appConfig: EcoPagesAppConfig;
|
|
14
26
|
private readonly bridge;
|
|
15
27
|
/** Keep track of watchers */
|
|
16
28
|
private watchers;
|
|
17
29
|
/** entrypoint -> output path */
|
|
18
30
|
private watchedFiles;
|
|
19
|
-
|
|
20
|
-
private specifierMap;
|
|
31
|
+
private entrypointRegistrations;
|
|
21
32
|
private distDir;
|
|
22
33
|
private plugins;
|
|
23
34
|
private enabled;
|
|
24
35
|
private strategies;
|
|
36
|
+
private readonly entrypointRegistrar;
|
|
37
|
+
private readonly browserBundleService;
|
|
38
|
+
private readonly entrypointDependencyGraph;
|
|
39
|
+
private readonly serverModuleTranspiler;
|
|
25
40
|
private wsHandler;
|
|
26
41
|
constructor({ appConfig, bridge }: HmrManagerParams);
|
|
27
42
|
/**
|
|
@@ -31,6 +46,15 @@ export declare class HmrManager implements IHmrManager {
|
|
|
31
46
|
* can share the same dist path during e2e runs.
|
|
32
47
|
*/
|
|
33
48
|
private cleanDistDir;
|
|
49
|
+
/**
|
|
50
|
+
* Returns whether the generic JS strategy may rebuild an entrypoint.
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* Integration-owned page entrypoints are excluded so a shared dependency
|
|
54
|
+
* invalidation cannot replace framework-owned browser output with a generic JS
|
|
55
|
+
* rebuild.
|
|
56
|
+
*/
|
|
57
|
+
private shouldJsStrategyProcessEntrypoint;
|
|
34
58
|
/**
|
|
35
59
|
* Initializes core HMR strategies.
|
|
36
60
|
* Strategies are evaluated in priority order (highest first).
|
|
@@ -45,12 +69,6 @@ export declare class HmrManager implements IHmrManager {
|
|
|
45
69
|
setPlugins(plugins: EcoBuildPlugin[]): void;
|
|
46
70
|
setEnabled(enabled: boolean): void;
|
|
47
71
|
isEnabled(): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Registers a mapping from bare specifiers to vendor URLs.
|
|
50
|
-
* Used by integrations to provide their module resolution mappings.
|
|
51
|
-
* @param map - Object mapping bare specifiers to vendor URLs
|
|
52
|
-
*/
|
|
53
|
-
registerSpecifierMap(map: Record<string, string>): void;
|
|
54
72
|
getWebSocketHandler(): BunSocketHandler;
|
|
55
73
|
/**
|
|
56
74
|
* Builds the client-side HMR runtime script.
|
|
@@ -58,28 +76,56 @@ export declare class HmrManager implements IHmrManager {
|
|
|
58
76
|
buildRuntime(): Promise<void>;
|
|
59
77
|
getRuntimePath(): string;
|
|
60
78
|
broadcast(event: ClientBridgeEvent): void;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Handles file changes using registered HMR strategies.
|
|
64
|
-
* Strategies are evaluated in priority order until one matches.
|
|
65
|
-
* @param filePath - Absolute path to the changed file
|
|
66
|
-
*/
|
|
67
|
-
handleFileChange(filePath: string): Promise<void>;
|
|
68
|
-
/**
|
|
69
|
-
* Registers a client entrypoint to be built and watched by Bun.
|
|
70
|
-
*/
|
|
79
|
+
handleFileChange(filePath: string, options?: HandleFileChangeOptions): Promise<void>;
|
|
71
80
|
getOutputUrl(entrypointPath: string): string | undefined;
|
|
72
81
|
getWatchedFiles(): Map<string, string>;
|
|
73
|
-
getSpecifierMap(): Map<string, string>;
|
|
74
82
|
getDistDir(): string;
|
|
75
83
|
getPlugins(): EcoBuildPlugin[];
|
|
76
84
|
getDefaultContext(): DefaultHmrContext;
|
|
85
|
+
private clearFailedEntrypointRegistration;
|
|
86
|
+
/**
|
|
87
|
+
* Registers one integration-owned page entrypoint.
|
|
88
|
+
*
|
|
89
|
+
* @remarks
|
|
90
|
+
* Concurrent callers share one in-flight registration. The registration is
|
|
91
|
+
* cleared from the dedupe map when it settles so later callers cannot inherit a
|
|
92
|
+
* stale promise.
|
|
93
|
+
*/
|
|
77
94
|
registerEntrypoint(entrypointPath: string): Promise<string>;
|
|
78
95
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
96
|
+
* Registers one generic script entrypoint.
|
|
97
|
+
*
|
|
98
|
+
* @remarks
|
|
99
|
+
* This explicit path keeps the page-entrypoint contract strict while still
|
|
100
|
+
* allowing generic script assets to use the fallback build path.
|
|
101
|
+
*/
|
|
102
|
+
registerScriptEntrypoint(entrypointPath: string): Promise<string>;
|
|
103
|
+
/**
|
|
104
|
+
* Performs strict integration-owned registration for one normalized path.
|
|
105
|
+
*
|
|
106
|
+
* @remarks
|
|
107
|
+
* The manager reserves the output URL, removes any stale emitted file, runs
|
|
108
|
+
* strategy processing without broadcasting, and then verifies that the owning
|
|
109
|
+
* integration emitted the expected file.
|
|
110
|
+
*/
|
|
111
|
+
private emitStrictEntrypoint;
|
|
112
|
+
/**
|
|
113
|
+
* Performs registration for a generic script asset.
|
|
114
|
+
*
|
|
115
|
+
* @remarks
|
|
116
|
+
* This path performs a targeted browser bundle for the requested script
|
|
117
|
+
* entrypoint only. The resulting dependency graph is retained so later file
|
|
118
|
+
* changes can invalidate just the affected script entrypoints.
|
|
119
|
+
*/
|
|
120
|
+
private emitScriptEntrypoint;
|
|
121
|
+
/**
|
|
122
|
+
* Stops active watchers and releases retained registration state.
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* Emitted `_hmr` files remain on disk because parallel app processes may share
|
|
126
|
+
* the same dist directory. The in-memory indexes are cleared so stale
|
|
127
|
+
* entrypoints cannot leak through a reused manager object.
|
|
81
128
|
*/
|
|
82
|
-
private encodeDynamicSegments;
|
|
83
129
|
stop(): void;
|
|
84
130
|
}
|
|
85
131
|
export {};
|
|
@@ -1,30 +1,56 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { RESOLVED_ASSETS_DIR } from "../../constants";
|
|
4
|
-
import {
|
|
3
|
+
import { RESOLVED_ASSETS_DIR } from "../../config/constants.js";
|
|
4
|
+
import { getAppBuildExecutor } from "../../build/build-adapter.js";
|
|
5
5
|
import { fileSystem } from "@ecopages/file-system";
|
|
6
|
-
import { HmrStrategyType } from "../../hmr/hmr-strategy";
|
|
7
|
-
import { DefaultHmrStrategy } from "../../hmr/strategies/default-hmr-strategy";
|
|
8
|
-
import { JsHmrStrategy } from "../../hmr/strategies/js-hmr-strategy";
|
|
9
|
-
import { appLogger } from "../../global/app-logger";
|
|
6
|
+
import { HmrStrategyType } from "../../hmr/hmr-strategy.js";
|
|
7
|
+
import { DefaultHmrStrategy } from "../../hmr/strategies/default-hmr-strategy.js";
|
|
8
|
+
import { JsHmrStrategy } from "../../hmr/strategies/js-hmr-strategy.js";
|
|
9
|
+
import { appLogger } from "../../global/app-logger.js";
|
|
10
|
+
import { HmrEntrypointRegistrar } from "../shared/hmr-entrypoint-registrar.js";
|
|
11
|
+
import { BrowserBundleService } from "../../services/assets/browser-bundle.service.js";
|
|
12
|
+
import { getAppServerModuleTranspiler } from "../../services/module-loading/app-server-module-transpiler.service.js";
|
|
13
|
+
import {
|
|
14
|
+
getAppEntrypointDependencyGraph,
|
|
15
|
+
NoopEntrypointDependencyGraph,
|
|
16
|
+
setAppEntrypointDependencyGraph
|
|
17
|
+
} from "../../services/runtime-state/entrypoint-dependency-graph.service.js";
|
|
18
|
+
import { resolveInternalExecutionDir, resolveInternalWorkDir } from "../../utils/resolve-work-dir.js";
|
|
10
19
|
class HmrManager {
|
|
20
|
+
static entrypointRegistrationTimeoutMs = 4e3;
|
|
11
21
|
appConfig;
|
|
12
22
|
bridge;
|
|
13
23
|
/** Keep track of watchers */
|
|
14
24
|
watchers = /* @__PURE__ */ new Map();
|
|
15
25
|
/** entrypoint -> output path */
|
|
16
26
|
watchedFiles = /* @__PURE__ */ new Map();
|
|
17
|
-
|
|
18
|
-
specifierMap = /* @__PURE__ */ new Map();
|
|
27
|
+
entrypointRegistrations = /* @__PURE__ */ new Map();
|
|
19
28
|
distDir;
|
|
20
29
|
plugins = [];
|
|
21
30
|
enabled = true;
|
|
22
31
|
strategies = [];
|
|
32
|
+
entrypointRegistrar;
|
|
33
|
+
browserBundleService;
|
|
34
|
+
entrypointDependencyGraph;
|
|
35
|
+
serverModuleTranspiler;
|
|
23
36
|
wsHandler;
|
|
24
37
|
constructor({ appConfig, bridge }) {
|
|
25
38
|
this.appConfig = appConfig;
|
|
26
39
|
this.bridge = bridge;
|
|
27
|
-
this.distDir = path.join(this.appConfig
|
|
40
|
+
this.distDir = path.join(resolveInternalWorkDir(this.appConfig), RESOLVED_ASSETS_DIR, "_hmr");
|
|
41
|
+
this.entrypointRegistrar = new HmrEntrypointRegistrar({
|
|
42
|
+
srcDir: this.appConfig.absolutePaths.srcDir,
|
|
43
|
+
distDir: this.distDir,
|
|
44
|
+
entrypointRegistrations: this.entrypointRegistrations,
|
|
45
|
+
watchedFiles: this.watchedFiles,
|
|
46
|
+
clearFailedRegistration: (entrypointPath) => this.clearFailedEntrypointRegistration(entrypointPath),
|
|
47
|
+
registrationTimeoutMs: HmrManager.entrypointRegistrationTimeoutMs
|
|
48
|
+
});
|
|
49
|
+
this.browserBundleService = new BrowserBundleService(appConfig);
|
|
50
|
+
const existingEntrypointDependencyGraph = getAppEntrypointDependencyGraph(appConfig);
|
|
51
|
+
this.entrypointDependencyGraph = existingEntrypointDependencyGraph instanceof NoopEntrypointDependencyGraph ? existingEntrypointDependencyGraph : new NoopEntrypointDependencyGraph();
|
|
52
|
+
setAppEntrypointDependencyGraph(this.appConfig, this.entrypointDependencyGraph);
|
|
53
|
+
this.serverModuleTranspiler = getAppServerModuleTranspiler(this.appConfig);
|
|
28
54
|
this.cleanDistDir();
|
|
29
55
|
this.initializeStrategies();
|
|
30
56
|
}
|
|
@@ -37,6 +63,27 @@ class HmrManager {
|
|
|
37
63
|
cleanDistDir() {
|
|
38
64
|
fileSystem.ensureDir(this.distDir);
|
|
39
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns whether the generic JS strategy may rebuild an entrypoint.
|
|
68
|
+
*
|
|
69
|
+
* @remarks
|
|
70
|
+
* Integration-owned page entrypoints are excluded so a shared dependency
|
|
71
|
+
* invalidation cannot replace framework-owned browser output with a generic JS
|
|
72
|
+
* rebuild.
|
|
73
|
+
*/
|
|
74
|
+
shouldJsStrategyProcessEntrypoint(entrypointPath) {
|
|
75
|
+
return !this.strategies.some((strategy) => {
|
|
76
|
+
if (strategy.type !== HmrStrategyType.INTEGRATION || strategy.priority <= HmrStrategyType.SCRIPT) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
return strategy.matches(entrypointPath);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
appLogger.error(error);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
40
87
|
/**
|
|
41
88
|
* Initializes core HMR strategies.
|
|
42
89
|
* Strategies are evaluated in priority order (highest first).
|
|
@@ -44,10 +91,15 @@ class HmrManager {
|
|
|
44
91
|
initializeStrategies() {
|
|
45
92
|
const jsContext = {
|
|
46
93
|
getWatchedFiles: () => this.watchedFiles,
|
|
47
|
-
getSpecifierMap: () => this.specifierMap,
|
|
48
94
|
getDistDir: () => this.distDir,
|
|
49
95
|
getPlugins: () => this.plugins,
|
|
50
|
-
getSrcDir: () => this.appConfig.absolutePaths.srcDir
|
|
96
|
+
getSrcDir: () => this.appConfig.absolutePaths.srcDir,
|
|
97
|
+
getPagesDir: () => this.appConfig.absolutePaths.pagesDir,
|
|
98
|
+
getLayoutsDir: () => this.appConfig.absolutePaths.layoutsDir,
|
|
99
|
+
getTemplateExtensions: () => this.appConfig.templatesExt,
|
|
100
|
+
getBrowserBundleService: () => this.browserBundleService,
|
|
101
|
+
getEntrypointDependencyGraph: () => this.entrypointDependencyGraph,
|
|
102
|
+
shouldProcessEntrypoint: (entrypointPath) => this.shouldJsStrategyProcessEntrypoint(entrypointPath)
|
|
51
103
|
};
|
|
52
104
|
this.strategies = [new JsHmrStrategy(jsContext), new DefaultHmrStrategy()];
|
|
53
105
|
}
|
|
@@ -68,16 +120,6 @@ class HmrManager {
|
|
|
68
120
|
isEnabled() {
|
|
69
121
|
return this.enabled;
|
|
70
122
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Registers a mapping from bare specifiers to vendor URLs.
|
|
73
|
-
* Used by integrations to provide their module resolution mappings.
|
|
74
|
-
* @param map - Object mapping bare specifiers to vendor URLs
|
|
75
|
-
*/
|
|
76
|
-
registerSpecifierMap(map) {
|
|
77
|
-
for (const [specifier, url] of Object.entries(map)) {
|
|
78
|
-
this.specifierMap.set(specifier, url);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
123
|
getWebSocketHandler() {
|
|
82
124
|
const open = (ws) => {
|
|
83
125
|
this.bridge.subscribe(ws);
|
|
@@ -101,12 +143,12 @@ class HmrManager {
|
|
|
101
143
|
*/
|
|
102
144
|
async buildRuntime() {
|
|
103
145
|
const runtimeSource = path.resolve(import.meta.dirname, "../../hmr/client/hmr-runtime.js");
|
|
104
|
-
const result = await
|
|
146
|
+
const result = await this.browserBundleService.bundle({
|
|
147
|
+
profile: "hmr-runtime",
|
|
105
148
|
entrypoints: [runtimeSource],
|
|
106
149
|
outdir: this.distDir,
|
|
107
150
|
naming: "_hmr_runtime.js",
|
|
108
151
|
minify: false,
|
|
109
|
-
...defaultBuildAdapter.getTranspileOptions("hmr-runtime"),
|
|
110
152
|
plugins: this.plugins
|
|
111
153
|
});
|
|
112
154
|
if (!result.success) {
|
|
@@ -122,30 +164,13 @@ class HmrManager {
|
|
|
122
164
|
);
|
|
123
165
|
this.bridge.broadcast(event);
|
|
124
166
|
}
|
|
125
|
-
|
|
126
|
-
const sorted = [...this.strategies].sort((a, b) => b.priority - a.priority);
|
|
127
|
-
const strategy = sorted.find((candidate) => {
|
|
128
|
-
try {
|
|
129
|
-
return candidate.matches(filePath);
|
|
130
|
-
} catch (err) {
|
|
131
|
-
appLogger.error(`[HmrManager] Error checking match for ${candidate.constructor.name}:`, err);
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
return strategy !== void 0 && strategy.type !== HmrStrategyType.FALLBACK;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Handles file changes using registered HMR strategies.
|
|
139
|
-
* Strategies are evaluated in priority order until one matches.
|
|
140
|
-
* @param filePath - Absolute path to the changed file
|
|
141
|
-
*/
|
|
142
|
-
async handleFileChange(filePath) {
|
|
167
|
+
async handleFileChange(filePath, options = {}) {
|
|
143
168
|
const sorted = [...this.strategies].sort((a, b) => b.priority - a.priority);
|
|
144
169
|
const strategy = sorted.find((s) => {
|
|
145
170
|
try {
|
|
146
171
|
return s.matches(filePath);
|
|
147
172
|
} catch (err) {
|
|
148
|
-
appLogger.error(
|
|
173
|
+
appLogger.error(err);
|
|
149
174
|
return false;
|
|
150
175
|
}
|
|
151
176
|
});
|
|
@@ -155,7 +180,8 @@ class HmrManager {
|
|
|
155
180
|
}
|
|
156
181
|
appLogger.debug(`[HmrManager] Selected strategy: ${strategy.constructor.name}`);
|
|
157
182
|
const action = await strategy.process(filePath);
|
|
158
|
-
|
|
183
|
+
const shouldBroadcast = options.broadcast ?? true;
|
|
184
|
+
if (shouldBroadcast && action.type === "broadcast") {
|
|
159
185
|
if (action.events) {
|
|
160
186
|
for (const event of action.events) {
|
|
161
187
|
this.broadcast(event);
|
|
@@ -163,18 +189,12 @@ class HmrManager {
|
|
|
163
189
|
}
|
|
164
190
|
}
|
|
165
191
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Registers a client entrypoint to be built and watched by Bun.
|
|
168
|
-
*/
|
|
169
192
|
getOutputUrl(entrypointPath) {
|
|
170
193
|
return this.watchedFiles.get(entrypointPath);
|
|
171
194
|
}
|
|
172
195
|
getWatchedFiles() {
|
|
173
196
|
return this.watchedFiles;
|
|
174
197
|
}
|
|
175
|
-
getSpecifierMap() {
|
|
176
|
-
return this.specifierMap;
|
|
177
|
-
}
|
|
178
198
|
getDistDir() {
|
|
179
199
|
return this.distDir;
|
|
180
200
|
}
|
|
@@ -184,55 +204,107 @@ class HmrManager {
|
|
|
184
204
|
getDefaultContext() {
|
|
185
205
|
return {
|
|
186
206
|
getWatchedFiles: () => this.watchedFiles,
|
|
187
|
-
getSpecifierMap: () => this.specifierMap,
|
|
188
207
|
getDistDir: () => this.distDir,
|
|
189
208
|
getPlugins: () => this.plugins,
|
|
190
209
|
getSrcDir: () => this.appConfig.absolutePaths.srcDir,
|
|
191
210
|
getLayoutsDir: () => this.appConfig.absolutePaths.layoutsDir,
|
|
192
|
-
getPagesDir: () => this.appConfig.absolutePaths.pagesDir
|
|
211
|
+
getPagesDir: () => this.appConfig.absolutePaths.pagesDir,
|
|
212
|
+
getBuildExecutor: () => getAppBuildExecutor(this.appConfig),
|
|
213
|
+
getBrowserBundleService: () => this.browserBundleService,
|
|
214
|
+
importServerModule: async (filePath) => await this.serverModuleTranspiler.importModule({
|
|
215
|
+
filePath,
|
|
216
|
+
outdir: path.join(resolveInternalExecutionDir(this.appConfig), ".server-modules"),
|
|
217
|
+
externalPackages: true
|
|
218
|
+
})
|
|
193
219
|
};
|
|
194
220
|
}
|
|
221
|
+
clearFailedEntrypointRegistration(entrypointPath) {
|
|
222
|
+
this.watchedFiles.delete(entrypointPath);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Registers one integration-owned page entrypoint.
|
|
226
|
+
*
|
|
227
|
+
* @remarks
|
|
228
|
+
* Concurrent callers share one in-flight registration. The registration is
|
|
229
|
+
* cleared from the dedupe map when it settles so later callers cannot inherit a
|
|
230
|
+
* stale promise.
|
|
231
|
+
*/
|
|
195
232
|
async registerEntrypoint(entrypointPath) {
|
|
196
|
-
|
|
197
|
-
|
|
233
|
+
return await this.entrypointRegistrar.registerEntrypoint(entrypointPath, {
|
|
234
|
+
emit: async (normalizedEntrypoint) => await this.emitStrictEntrypoint(normalizedEntrypoint),
|
|
235
|
+
getMissingOutputError: (normalizedEntrypoint, outputPath) => new Error(
|
|
236
|
+
`[HMR] Integration failed to emit entrypoint ${normalizedEntrypoint} to ${outputPath}. Page entrypoints must be produced by their owning integration.`
|
|
237
|
+
)
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Registers one generic script entrypoint.
|
|
242
|
+
*
|
|
243
|
+
* @remarks
|
|
244
|
+
* This explicit path keeps the page-entrypoint contract strict while still
|
|
245
|
+
* allowing generic script assets to use the fallback build path.
|
|
246
|
+
*/
|
|
247
|
+
async registerScriptEntrypoint(entrypointPath) {
|
|
248
|
+
return await this.entrypointRegistrar.registerEntrypoint(entrypointPath, {
|
|
249
|
+
emit: async (normalizedEntrypoint, outputPath) => await this.emitScriptEntrypoint(normalizedEntrypoint, outputPath),
|
|
250
|
+
getMissingOutputError: (normalizedEntrypoint) => new Error(`[HMR] Failed to register script entrypoint: ${normalizedEntrypoint}`)
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Performs strict integration-owned registration for one normalized path.
|
|
255
|
+
*
|
|
256
|
+
* @remarks
|
|
257
|
+
* The manager reserves the output URL, removes any stale emitted file, runs
|
|
258
|
+
* strategy processing without broadcasting, and then verifies that the owning
|
|
259
|
+
* integration emitted the expected file.
|
|
260
|
+
*/
|
|
261
|
+
async emitStrictEntrypoint(entrypointPath) {
|
|
262
|
+
await this.handleFileChange(entrypointPath, { broadcast: false });
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Performs registration for a generic script asset.
|
|
266
|
+
*
|
|
267
|
+
* @remarks
|
|
268
|
+
* This path performs a targeted browser bundle for the requested script
|
|
269
|
+
* entrypoint only. The resulting dependency graph is retained so later file
|
|
270
|
+
* changes can invalidate just the affected script entrypoints.
|
|
271
|
+
*/
|
|
272
|
+
async emitScriptEntrypoint(entrypointPath, outputPath) {
|
|
273
|
+
const naming = path.relative(this.distDir, outputPath).split(path.sep).join("/");
|
|
274
|
+
const buildResult = await this.browserBundleService.bundle({
|
|
275
|
+
profile: "hmr-entrypoint",
|
|
276
|
+
entrypoints: [entrypointPath],
|
|
277
|
+
outdir: this.distDir,
|
|
278
|
+
naming,
|
|
279
|
+
minify: false,
|
|
280
|
+
plugins: this.plugins
|
|
281
|
+
});
|
|
282
|
+
if (!buildResult.success) {
|
|
283
|
+
appLogger.error(`[HMR] Generic script entrypoint build failed for ${entrypointPath}:`, buildResult.logs);
|
|
284
|
+
return;
|
|
198
285
|
}
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const encodedPathJs = this.encodeDynamicSegments(relativePathJs);
|
|
203
|
-
const urlPath = encodedPathJs.split(path.sep).join("/");
|
|
204
|
-
const outputUrl = `/${path.join(RESOLVED_ASSETS_DIR, "_hmr", urlPath)}`;
|
|
205
|
-
const outputPath = path.join(this.distDir, urlPath);
|
|
206
|
-
this.watchedFiles.set(entrypointPath, outputUrl);
|
|
207
|
-
await this.handleFileChange(entrypointPath);
|
|
208
|
-
if (!fileSystem.exists(outputPath)) {
|
|
209
|
-
const fallback = await defaultBuildAdapter.build({
|
|
210
|
-
entrypoints: [entrypointPath],
|
|
211
|
-
outdir: this.distDir,
|
|
212
|
-
naming: encodedPathJs,
|
|
213
|
-
minify: false,
|
|
214
|
-
external: Array.from(this.specifierMap.keys()),
|
|
215
|
-
...defaultBuildAdapter.getTranspileOptions("hmr-entrypoint"),
|
|
216
|
-
plugins: this.plugins
|
|
217
|
-
});
|
|
218
|
-
if (!fallback.success) {
|
|
219
|
-
appLogger.error(`[HMR] Fallback build failed for ${entrypointPath}:`, fallback.logs);
|
|
220
|
-
}
|
|
286
|
+
const entrypointDependencies = buildResult.dependencyGraph?.entrypoints?.[entrypointPath];
|
|
287
|
+
if (entrypointDependencies) {
|
|
288
|
+
this.entrypointDependencyGraph.setEntrypointDependencies(entrypointPath, entrypointDependencies);
|
|
221
289
|
}
|
|
222
|
-
return outputUrl;
|
|
223
290
|
}
|
|
224
291
|
/**
|
|
225
|
-
*
|
|
226
|
-
*
|
|
292
|
+
* Stops active watchers and releases retained registration state.
|
|
293
|
+
*
|
|
294
|
+
* @remarks
|
|
295
|
+
* Emitted `_hmr` files remain on disk because parallel app processes may share
|
|
296
|
+
* the same dist directory. The in-memory indexes are cleared so stale
|
|
297
|
+
* entrypoints cannot leak through a reused manager object.
|
|
227
298
|
*/
|
|
228
|
-
encodeDynamicSegments(filepath) {
|
|
229
|
-
return filepath.replace(/\[([^\]]+)\]/g, "_$1_");
|
|
230
|
-
}
|
|
231
299
|
stop() {
|
|
300
|
+
this.entrypointRegistrations.clear();
|
|
232
301
|
for (const watcher of this.watchers.values()) {
|
|
233
302
|
watcher.close();
|
|
234
303
|
}
|
|
235
304
|
this.watchers.clear();
|
|
305
|
+
this.watchedFiles.clear();
|
|
306
|
+
this.entrypointDependencyGraph.reset();
|
|
307
|
+
this.plugins = [];
|
|
236
308
|
}
|
|
237
309
|
}
|
|
238
310
|
export {
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { defineApiHandler, defineGroupHandler } from '
|
|
3
|
-
export type { GroupHandler } from './define-api-handler.js';
|
|
1
|
+
export { BunEcopagesApp, createApp } from './create-app.js';
|
|
2
|
+
export { defineApiHandler, defineGroupHandler, type GroupHandler } from '../shared/define-api-handler.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { defineApiHandler, defineGroupHandler } from "
|
|
1
|
+
import { BunEcopagesApp, createApp } from "./create-app.js";
|
|
2
|
+
import { defineApiHandler, defineGroupHandler } from "../shared/define-api-handler.js";
|
|
3
3
|
export {
|
|
4
|
-
|
|
4
|
+
BunEcopagesApp,
|
|
5
5
|
createApp,
|
|
6
6
|
defineApiHandler,
|
|
7
7
|
defineGroupHandler
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { Server, WebSocketHandler } from 'bun';
|
|
2
|
-
import type { EcoPagesAppConfig } from '../../internal-types.js';
|
|
3
|
-
import type { ApiHandler, ErrorHandler, StaticRoute } from '../../public-types.js';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../../types/internal-types.js';
|
|
3
|
+
import type { ApiHandler, ErrorHandler, StaticRoute } from '../../types/public-types.js';
|
|
4
4
|
import { SharedServerAdapter } from '../shared/server-adapter.js';
|
|
5
5
|
import type { ServerAdapterResult } from '../abstract/server-adapter.js';
|
|
6
6
|
import { ServerRouteHandler, type ServerRouteHandlerParams } from '../shared/server-route-handler.js';
|
|
7
|
-
import { ServerStaticBuilder, type ServerStaticBuilderParams } from '../shared/server-static-builder';
|
|
8
|
-
import { ClientBridge } from './client-bridge';
|
|
9
|
-
import { HmrManager } from './hmr-manager';
|
|
7
|
+
import { ServerStaticBuilder, type ServerStaticBuilderParams } from '../shared/server-static-builder.js';
|
|
8
|
+
import { ClientBridge } from './client-bridge.js';
|
|
9
|
+
import { HmrManager } from './hmr-manager.js';
|
|
10
10
|
import { ServerLifecycle } from './server-lifecycle.js';
|
|
11
11
|
type BunServerInstance = Server<unknown>;
|
|
12
12
|
type BunNativeServeOptions = Bun.Serve.Options<unknown>;
|