@ecopages/core 0.2.0-alpha.9 → 0.2.1-beta.0
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 +79 -28
- package/package.json +94 -116
- package/src/adapters/README.md +2 -2
- 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 +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +19 -115
- package/src/adapters/bun/hmr-manager.js +25 -301
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +100 -32
- package/src/adapters/bun/server-adapter.js +142 -65
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- 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 +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +22 -103
- package/src/adapters/node/node-hmr-manager.js +26 -289
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +19 -42
- package/src/adapters/node/server-adapter.js +94 -139
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/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 -16
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +2 -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 +18 -18
- package/src/adapters/shared/fs-server-response-matcher.js +72 -46
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/hmr-html-response.js +4 -3
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +24 -1
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +22 -11
- package/src/adapters/shared/server-adapter.js +183 -133
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +4 -4
- package/src/adapters/shared/server-static-builder.d.ts +8 -7
- package/src/adapters/shared/server-static-builder.js +6 -5
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +241 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +57 -67
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
- package/src/build/browser-runtime-plugin-helpers.js +14 -0
- package/src/build/browser-runtime-plugin.d.ts +78 -0
- package/src/build/browser-runtime-plugin.js +173 -0
- package/src/build/build-adapter.d.ts +384 -63
- package/src/build/build-adapter.js +129 -54
- package/src/build/build-manifest.d.ts +6 -0
- package/src/build/build-manifest.js +21 -2
- package/src/build/build-types.d.ts +2 -2
- package/src/build/rolldown-adapter-helpers.d.ts +58 -0
- package/src/build/rolldown-adapter-helpers.js +265 -0
- package/src/build/rolldown-build-adapter.d.ts +28 -0
- package/src/build/rolldown-build-adapter.js +65 -0
- package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
- package/src/build/rolldown-dev-build-adapter.js +166 -0
- package/src/build/rolldown-plugin-bridge.d.ts +59 -0
- package/src/build/rolldown-plugin-bridge.js +199 -0
- package/src/build/runtime-build-executor.d.ts +15 -7
- package/src/build/runtime-build-executor.js +8 -9
- package/src/build/runtime-build-output-normalizer.d.ts +3 -0
- package/src/build/runtime-build-output-normalizer.js +111 -0
- package/src/build/serialized-build-executor.d.ts +64 -0
- package/src/build/serialized-build-executor.js +63 -0
- package/src/build/server-side-css-shim-plugin.d.ts +41 -0
- package/src/build/server-side-css-shim-plugin.js +35 -0
- package/src/cache/index.d.ts +6 -0
- package/src/cache/index.js +6 -0
- package/src/cache/module-parse-cache.d.ts +65 -0
- package/src/cache/module-parse-cache.js +75 -0
- package/src/config/README.md +5 -2
- package/src/config/config-builder.d.ts +41 -13
- package/src/config/config-builder.js +62 -24
- package/src/declarations.d.ts +1 -1
- 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/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +50 -45
- package/src/eco/eco.types.d.ts +60 -8
- 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/client/hmr-runtime.js +9 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- 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 +4 -9
- package/src/hmr/strategies/js-hmr-strategy.js +5 -10
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
- package/src/integrations/ghtml/ghtml-renderer.js +24 -29
- 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 +1 -0
- package/src/plugins/alias-resolver-cache.d.ts +68 -0
- package/src/plugins/alias-resolver-cache.js +106 -0
- package/src/plugins/alias-resolver-plugin.d.ts +5 -1
- package/src/plugins/alias-resolver-plugin.js +19 -7
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +43 -25
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +136 -42
- package/src/plugins/integration-plugin.js +99 -31
- package/src/plugins/processor.d.ts +4 -2
- package/src/plugins/processor.js +8 -3
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +80 -318
- package/src/route-renderer/README.md +74 -78
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -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 +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
- package/src/route-renderer/orchestration/integration-renderer.js +660 -258
- 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 +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -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 +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -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/page-loading/dependency-resolver.d.ts +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
- 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 +7 -4
- package/src/route-renderer/page-loading/page-module-loader.js +8 -5
- package/src/route-renderer/route-renderer.d.ts +31 -23
- package/src/route-renderer/route-renderer.js +17 -24
- package/src/router/README.md +76 -8
- package/src/router/client/navigation-coordinator.d.ts +20 -0
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +1 -2
- 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 +3 -20
- package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -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 -5
- package/src/services/assets/asset-processing-service/index.js +6 -5
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/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 +66 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
- package/src/services/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 +39 -5
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
- 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 +44 -3
- package/src/services/assets/browser-bundle.service.js +15 -7
- package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +22 -3
- package/src/services/html/html-transformer.service.js +101 -35
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
- 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/page-module-import.service.d.ts +32 -8
- package/src/services/module-loading/page-module-import.service.js +83 -22
- package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
- package/src/services/module-loading/server-module-transpiler.service.js +5 -2
- 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 +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +23 -28
- package/src/static-site-generator/static-site-generator.js +119 -156
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
- 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.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +35 -41
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/CHANGELOG.md +0 -31
- 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/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.d.ts +0 -63
- package/src/adapters/bun/server-lifecycle.js +0 -92
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
- package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
- package/src/adapters/shared/runtime-bootstrap.js +0 -43
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.d.ts +0 -74
- package/src/build/dev-build-coordinator.js +0 -161
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.d.ts +0 -72
- package/src/build/esbuild-build-adapter.js +0 -422
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- 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 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- 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/hmr-runtime.ts +0 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- 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 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
- package/src/route-renderer/orchestration/render-execution.service.js +0 -121
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
- package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.ts +0 -433
- package/src/router/server/fs-router-scanner.d.ts +0 -41
- package/src/router/server/fs-router-scanner.js +0 -156
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.d.ts +0 -26
- package/src/router/server/fs-router.js +0 -100
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- 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/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
- package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/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 -462
- 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/resolve-work-dir.ts +0 -45
- 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 -363
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
package/src/hmr/hmr.test.e2e.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { test, expect } from '@playwright/test';
|
|
2
|
-
import { readFileSync } from 'node:fs';
|
|
3
|
-
import { writeFile } from 'node:fs/promises';
|
|
4
|
-
import { resolve } from 'node:path';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* HMR E2E Tests
|
|
8
|
-
*
|
|
9
|
-
* True end-to-end tests for Hot Module Replacement using Playwright.
|
|
10
|
-
* These tests modify actual source files and verify the browser updates.
|
|
11
|
-
*
|
|
12
|
-
* Run with: bunx playwright test packages/core/src/hmr/hmr.e2e.test.ts
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const FIXTURE_DIR = resolve(process.cwd(), 'packages/core/__fixtures__/app');
|
|
16
|
-
const TEST_CSS_FILE = resolve(FIXTURE_DIR, 'src/pages/index.css');
|
|
17
|
-
|
|
18
|
-
test.describe('HMR E2E', () => {
|
|
19
|
-
test('should load page with .main-title element', async ({ page }) => {
|
|
20
|
-
await page.goto('/', { waitUntil: 'networkidle' });
|
|
21
|
-
const title = page.locator('.main-title').first();
|
|
22
|
-
await expect(title).toBeVisible();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test('should connect to HMR WebSocket', async ({ page }) => {
|
|
26
|
-
const socketPromise = page.waitForEvent('websocket', {
|
|
27
|
-
predicate: (socket) => socket.url().endsWith('/_hmr'),
|
|
28
|
-
timeout: 10000,
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
await page.goto('/', { waitUntil: 'networkidle' });
|
|
32
|
-
const socket = await socketPromise;
|
|
33
|
-
|
|
34
|
-
expect(socket.url()).toMatch(/\/_hmr$/);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('should fall back to a full page reload when raw CSS file changes', async ({ page }) => {
|
|
38
|
-
const originalCss = readFileSync(TEST_CSS_FILE, 'utf-8');
|
|
39
|
-
const title = page.locator('.main-title').first();
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
await page.goto('/', { waitUntil: 'networkidle' });
|
|
43
|
-
await expect(title).toBeVisible();
|
|
44
|
-
|
|
45
|
-
const initialColor = await title.evaluate((el) => getComputedStyle(el).color);
|
|
46
|
-
expect(initialColor).toBeTruthy();
|
|
47
|
-
|
|
48
|
-
const modifiedCss = originalCss.replace('.main-title {', '.main-title {\n\tcolor: rgb(255, 0, 0);');
|
|
49
|
-
const reloadPromise = page.waitForEvent('framenavigated', {
|
|
50
|
-
predicate: (frame) => frame === page.mainFrame(),
|
|
51
|
-
timeout: 10000,
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
await writeFile(TEST_CSS_FILE, modifiedCss, { flush: true });
|
|
55
|
-
|
|
56
|
-
await reloadPromise;
|
|
57
|
-
await page.waitForLoadState('networkidle');
|
|
58
|
-
|
|
59
|
-
await expect
|
|
60
|
-
.poll(async () => title.evaluate((el) => getComputedStyle(el).color), { timeout: 10000 })
|
|
61
|
-
.toBe('rgb(255, 0, 0)');
|
|
62
|
-
} finally {
|
|
63
|
-
await writeFile(TEST_CSS_FILE, originalCss, { flush: true });
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Default HMR Strategy
|
|
3
|
-
*
|
|
4
|
-
* Fallback strategy for file types that don't have specialized handling.
|
|
5
|
-
* Triggers a full page reload to ensure changes are reflected.
|
|
6
|
-
*
|
|
7
|
-
* @module
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Default fallback strategy for unhandled file types.
|
|
14
|
-
*
|
|
15
|
-
* This strategy matches all files and triggers a full page reload.
|
|
16
|
-
* It has the lowest priority (FALLBACK) and acts as a catch-all when
|
|
17
|
-
* no other strategy matches the changed file.
|
|
18
|
-
*
|
|
19
|
-
* @remarks
|
|
20
|
-
* This strategy ensures that all file changes result in some action,
|
|
21
|
-
* even if we don't have specialized handling for that file type.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* const strategy = new DefaultHmrStrategy();
|
|
26
|
-
* const action = await strategy.process('/path/to/unknown.file');
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export class DefaultHmrStrategy extends HmrStrategy {
|
|
30
|
-
readonly type = HmrStrategyType.FALLBACK;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Matches all file paths.
|
|
34
|
-
*
|
|
35
|
-
* @param _filePath - Absolute path to the changed file (unused)
|
|
36
|
-
* @returns Always returns true as this is a catch-all strategy
|
|
37
|
-
*/
|
|
38
|
-
matches(_filePath: string): boolean {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Processes a file change by triggering a full page reload.
|
|
44
|
-
*
|
|
45
|
-
* @param filePath - Absolute path to the changed file
|
|
46
|
-
* @returns Action to broadcast a reload event
|
|
47
|
-
*/
|
|
48
|
-
async process(filePath: string): Promise<HmrAction> {
|
|
49
|
-
return {
|
|
50
|
-
type: 'broadcast',
|
|
51
|
-
events: [
|
|
52
|
-
{
|
|
53
|
-
type: 'reload',
|
|
54
|
-
path: filePath,
|
|
55
|
-
message: 'fallback-strategy',
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JavaScript HMR Strategy
|
|
3
|
-
*
|
|
4
|
-
* Handles hot module replacement for JavaScript and TypeScript entrypoints.
|
|
5
|
-
* Bundles files, inspects the emitted output, and decides whether the browser
|
|
6
|
-
* can hot-accept the change or must reload.
|
|
7
|
-
*
|
|
8
|
-
* @module
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import path from 'node:path';
|
|
12
|
-
import { fileSystem } from '@ecopages/file-system';
|
|
13
|
-
import { HmrStrategy, HmrStrategyType, type HmrAction } from '../hmr-strategy';
|
|
14
|
-
import { appLogger } from '../../global/app-logger';
|
|
15
|
-
import type { EcoBuildPlugin } from '../../build/build-types.ts';
|
|
16
|
-
import type { BrowserBundleExecutor } from '../../services/assets/browser-bundle.service.ts';
|
|
17
|
-
import type { EntrypointDependencyGraph } from '../../services/runtime-state/entrypoint-dependency-graph.service.ts';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Context interface providing access to HmrManager state.
|
|
21
|
-
* Required for JsHmrStrategy to access registered entrypoints and configuration.
|
|
22
|
-
*/
|
|
23
|
-
export interface JsHmrContext {
|
|
24
|
-
/**
|
|
25
|
-
* Map of registered entrypoints to their output URLs.
|
|
26
|
-
*/
|
|
27
|
-
getWatchedFiles(): Map<string, string>;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Map of bare specifiers to vendor URLs for import resolution.
|
|
31
|
-
*/
|
|
32
|
-
getSpecifierMap(): Map<string, string>;
|
|
33
|
-
|
|
34
|
-
getEntrypointDependencyGraph(): EntrypointDependencyGraph;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Directory where HMR bundles are written.
|
|
38
|
-
*/
|
|
39
|
-
getDistDir(): string;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Build plugins to use during bundling.
|
|
43
|
-
*/
|
|
44
|
-
getPlugins(): EcoBuildPlugin[];
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Absolute path to the source directory.
|
|
48
|
-
*/
|
|
49
|
-
getSrcDir(): string;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Absolute path to the pages directory.
|
|
53
|
-
*/
|
|
54
|
-
getPagesDir(): string;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Absolute path to the layouts directory.
|
|
58
|
-
*/
|
|
59
|
-
getLayoutsDir(): string;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* All configured route-template extensions across integrations.
|
|
63
|
-
*/
|
|
64
|
-
getTemplateExtensions(): string[];
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Browser bundler used to rebuild changed entrypoints.
|
|
68
|
-
*/
|
|
69
|
-
getBrowserBundleService(): BrowserBundleExecutor;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Returns whether a watched entrypoint should be rebuilt by the generic JS strategy.
|
|
73
|
-
*
|
|
74
|
-
* @remarks
|
|
75
|
-
* Integrations with higher-priority HMR strategies can use this to keep the
|
|
76
|
-
* generic JS strategy from overwriting their emitted entrypoints when a shared
|
|
77
|
-
* dependency changes.
|
|
78
|
-
*/
|
|
79
|
-
shouldProcessEntrypoint?(entrypointPath: string): boolean;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Strategy for handling JavaScript/TypeScript file changes with hot reloading.
|
|
84
|
-
*
|
|
85
|
-
* The processing steps are:
|
|
86
|
-
* 1. Check if any entrypoints are registered
|
|
87
|
-
* 2. Rebuild impacted entrypoints, or all watched entrypoints when no runtime
|
|
88
|
-
* dependency graph is available
|
|
89
|
-
* 3. Emit rebuilt entrypoint bundles for browser delivery
|
|
90
|
-
* 4. Inject generic HMR boilerplate
|
|
91
|
-
* 5. Broadcast update events for each rebuilt entrypoint
|
|
92
|
-
*
|
|
93
|
-
* @remarks
|
|
94
|
-
* Node can provide dependency-graph metadata, so this strategy can rebuild only
|
|
95
|
-
* the entrypoints impacted by a changed dependency. Runtimes that do not expose
|
|
96
|
-
* that metadata intentionally keep the rebuild-all fallback.
|
|
97
|
-
*
|
|
98
|
-
* @see https://bun.sh/docs/runtime/transpiler
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```typescript
|
|
102
|
-
* const context = {
|
|
103
|
-
* getWatchedFiles: () => watchedFilesMap,
|
|
104
|
-
* getSpecifierMap: () => specifierMap,
|
|
105
|
-
* getDistDir: () => '/path/to/dist/_hmr',
|
|
106
|
-
* getPlugins: () => [],
|
|
107
|
-
* getSrcDir: () => '/path/to/src'
|
|
108
|
-
* };
|
|
109
|
-
* const strategy = new JsHmrStrategy(context);
|
|
110
|
-
* ```
|
|
111
|
-
*/
|
|
112
|
-
export class JsHmrStrategy extends HmrStrategy {
|
|
113
|
-
readonly type = HmrStrategyType.SCRIPT;
|
|
114
|
-
private context: JsHmrContext;
|
|
115
|
-
|
|
116
|
-
constructor(context: JsHmrContext) {
|
|
117
|
-
super();
|
|
118
|
-
this.context = context;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Determines if the file is a JS/TS file that could affect registered entrypoints.
|
|
123
|
-
*
|
|
124
|
-
* Matches if:
|
|
125
|
-
* 1. There are registered entrypoints to rebuild
|
|
126
|
-
* 2. The changed file is a JS/TS file in the src directory
|
|
127
|
-
*
|
|
128
|
-
* @param filePath - Absolute path to the changed file
|
|
129
|
-
* @returns True if this file should trigger entrypoint rebuilds
|
|
130
|
-
*/
|
|
131
|
-
matches(filePath: string): boolean {
|
|
132
|
-
const watchedFiles = this.context.getWatchedFiles();
|
|
133
|
-
const isJsTs = /\.(ts|tsx|js|jsx)$/.test(filePath);
|
|
134
|
-
const isInSrc = filePath.startsWith(this.context.getSrcDir());
|
|
135
|
-
const isRouteTemplate =
|
|
136
|
-
filePath.startsWith(this.context.getPagesDir()) || filePath.startsWith(this.context.getLayoutsDir());
|
|
137
|
-
const isIntegrationTemplate =
|
|
138
|
-
isRouteTemplate && this.context.getTemplateExtensions().some((extension) => filePath.endsWith(extension));
|
|
139
|
-
|
|
140
|
-
if (watchedFiles.size === 0) {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (!isJsTs || !isInSrc) {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (isIntegrationTemplate) {
|
|
149
|
-
return false;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (watchedFiles.has(filePath)) {
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const entrypointDependencyGraph = this.context.getEntrypointDependencyGraph();
|
|
157
|
-
if (entrypointDependencyGraph.supportsSelectiveInvalidation()) {
|
|
158
|
-
return entrypointDependencyGraph.getDependencyEntrypoints(filePath).size > 0;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Processes a file change by rebuilding affected entrypoints.
|
|
166
|
-
*
|
|
167
|
-
* @param filePath - Absolute path to the changed file
|
|
168
|
-
*
|
|
169
|
-
* @remarks
|
|
170
|
-
* If runtime-specific dependency graph hooks are unavailable, this strategy
|
|
171
|
-
* falls back to rebuilding all watched entrypoints.
|
|
172
|
-
* When multiple entrypoints are impacted they are bundled in a single esbuild
|
|
173
|
-
* invocation to share AST parsing and chunk deduplication.
|
|
174
|
-
* @returns Action to broadcast update events
|
|
175
|
-
*/
|
|
176
|
-
async process(filePath: string): Promise<HmrAction> {
|
|
177
|
-
appLogger.debug(`[JsHmrStrategy] Processing ${filePath}`);
|
|
178
|
-
const watchedFiles = this.context.getWatchedFiles();
|
|
179
|
-
|
|
180
|
-
if (watchedFiles.size === 0) {
|
|
181
|
-
appLogger.debug(`[JsHmrStrategy] No watched files to rebuild`);
|
|
182
|
-
return { type: 'none' };
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
const dependencyHits = this.context.getEntrypointDependencyGraph().getDependencyEntrypoints(filePath);
|
|
186
|
-
const hasDependencyHit = dependencyHits.size > 0;
|
|
187
|
-
const impactedEntrypoints = hasDependencyHit
|
|
188
|
-
? Array.from(dependencyHits).filter((entrypoint) => watchedFiles.has(entrypoint))
|
|
189
|
-
: Array.from(watchedFiles.keys());
|
|
190
|
-
const buildableEntrypoints = impactedEntrypoints.filter(
|
|
191
|
-
(entrypoint) => this.context.shouldProcessEntrypoint?.(entrypoint) ?? true,
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
if (!hasDependencyHit) {
|
|
195
|
-
appLogger.debug('[JsHmrStrategy] Dependency graph miss, rebuilding all watched entrypoints');
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (buildableEntrypoints.length === 0) {
|
|
199
|
-
return { type: 'none' };
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const buildResult = await this.bundleEntrypoints(buildableEntrypoints);
|
|
203
|
-
|
|
204
|
-
if (!buildResult.success) {
|
|
205
|
-
return { type: 'none' };
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const updates: string[] = [];
|
|
209
|
-
let reloadRequired = false;
|
|
210
|
-
|
|
211
|
-
for (const entrypoint of buildableEntrypoints) {
|
|
212
|
-
const outputUrl = watchedFiles.get(entrypoint);
|
|
213
|
-
if (!outputUrl) continue;
|
|
214
|
-
|
|
215
|
-
if (buildResult.dependencies) {
|
|
216
|
-
const entrypointDeps = buildResult.dependencies.get(path.resolve(entrypoint)) ?? [];
|
|
217
|
-
this.context.getEntrypointDependencyGraph().setEntrypointDependencies(entrypoint, entrypointDeps);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
const srcDir = this.context.getSrcDir();
|
|
221
|
-
const relativePath = path.relative(srcDir, entrypoint);
|
|
222
|
-
const relativePathJs = relativePath.replace(/\.(tsx?|jsx?|mdx?)$/, '.js');
|
|
223
|
-
const outputPath = path.join(this.context.getDistDir(), relativePathJs);
|
|
224
|
-
|
|
225
|
-
const result = await this.processOutput(outputPath, outputUrl);
|
|
226
|
-
if (result.success) {
|
|
227
|
-
updates.push(outputUrl);
|
|
228
|
-
if (result.requiresReload) {
|
|
229
|
-
reloadRequired = true;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (updates.length > 0) {
|
|
235
|
-
if (reloadRequired) {
|
|
236
|
-
appLogger.debug(`[JsHmrStrategy] Full reload required (no HMR accept found)`);
|
|
237
|
-
return {
|
|
238
|
-
type: 'broadcast',
|
|
239
|
-
events: [{ type: 'reload' }],
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
return {
|
|
244
|
-
type: 'broadcast',
|
|
245
|
-
events: updates.map((p) => ({
|
|
246
|
-
type: 'update',
|
|
247
|
-
path: p,
|
|
248
|
-
timestamp: Date.now(),
|
|
249
|
-
})),
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return { type: 'none' };
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Bundles one or more entrypoints in a single esbuild invocation.
|
|
258
|
-
* Uses the source directory as the output base so that the directory structure
|
|
259
|
-
* is preserved under the HMR dist folder.
|
|
260
|
-
*/
|
|
261
|
-
private async bundleEntrypoints(
|
|
262
|
-
entrypoints: string[],
|
|
263
|
-
): Promise<{ success: boolean; dependencies?: Map<string, string[]> }> {
|
|
264
|
-
try {
|
|
265
|
-
const result = await this.context.getBrowserBundleService().bundle({
|
|
266
|
-
profile: 'hmr-entrypoint',
|
|
267
|
-
entrypoints,
|
|
268
|
-
outdir: this.context.getDistDir(),
|
|
269
|
-
outbase: this.context.getSrcDir(),
|
|
270
|
-
naming: '[dir]/[name]',
|
|
271
|
-
plugins: this.context.getPlugins(),
|
|
272
|
-
minify: false,
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
if (!result.success) {
|
|
276
|
-
appLogger.error('[JsHmrStrategy] Batched build failed:', result.logs);
|
|
277
|
-
return { success: false };
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const dependencies = new Map<string, string[]>();
|
|
281
|
-
if (result.dependencyGraph?.entrypoints) {
|
|
282
|
-
for (const [entrypoint, deps] of Object.entries(result.dependencyGraph.entrypoints)) {
|
|
283
|
-
dependencies.set(path.resolve(entrypoint), deps);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
return { success: true, dependencies };
|
|
288
|
-
} catch (error) {
|
|
289
|
-
appLogger.error('[JsHmrStrategy] Error in batched build:', error as Error);
|
|
290
|
-
return { success: false };
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Processes bundled output and determines whether the browser can hot-accept
|
|
296
|
-
* the update or must fall back to a full reload.
|
|
297
|
-
*
|
|
298
|
-
* @param filepath - Path to the bundled output file
|
|
299
|
-
* @param url - URL path for the bundled file
|
|
300
|
-
* @returns True if processing was successful and update should be broadcast
|
|
301
|
-
*/
|
|
302
|
-
private async processOutput(filepath: string, url: string): Promise<{ success: boolean; requiresReload: boolean }> {
|
|
303
|
-
try {
|
|
304
|
-
const code = await fileSystem.readFile(filepath);
|
|
305
|
-
|
|
306
|
-
if (code.includes('/* [ecopages] hmr */')) {
|
|
307
|
-
// Legacy safety: previously processed bundles already carry the marker.
|
|
308
|
-
return { success: true, requiresReload: !code.includes('import.meta.hot.accept') };
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
appLogger.debug(`[JsHmrStrategy] Processed ${url}`);
|
|
312
|
-
|
|
313
|
-
const hasHmrAccept = code.includes('import.meta.hot.accept');
|
|
314
|
-
return { success: true, requiresReload: !hasHmrAccept };
|
|
315
|
-
} catch (error) {
|
|
316
|
-
appLogger.error(`[JsHmrStrategy] Error processing output for ${url}:`, error as Error);
|
|
317
|
-
return { success: false, requiresReload: false };
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
package/src/index.browser.ts
DELETED
package/src/index.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export type * from './public-types.ts';
|
|
2
|
-
export type * from './eco/eco.types.ts';
|
|
3
|
-
export { eco } from './eco/eco.ts';
|
|
4
|
-
export { EcopagesApp, createApp, type EcopagesAppOptions } from './create-app.ts';
|
|
5
|
-
export { defineApiHandler, defineGroupHandler, type GroupHandler } from './adapters/shared/define-api-handler.ts';
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This module contains the ghtml renderer
|
|
3
|
-
* @module
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type {
|
|
7
|
-
EcoComponent,
|
|
8
|
-
EcoPagesElement,
|
|
9
|
-
IntegrationRendererRenderOptions,
|
|
10
|
-
PageMetadataProps,
|
|
11
|
-
RouteRendererBody,
|
|
12
|
-
} from '../../public-types.ts';
|
|
13
|
-
import {
|
|
14
|
-
IntegrationRenderer,
|
|
15
|
-
type RenderToResponseContext,
|
|
16
|
-
} from '../../route-renderer/orchestration/integration-renderer.ts';
|
|
17
|
-
import { GHTML_PLUGIN_NAME } from './ghtml.plugin.ts';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* A renderer for the ghtml integration.
|
|
21
|
-
* It renders a page using the HtmlTemplate and Page components.
|
|
22
|
-
*/
|
|
23
|
-
export class GhtmlRenderer extends IntegrationRenderer<EcoPagesElement> {
|
|
24
|
-
name = GHTML_PLUGIN_NAME;
|
|
25
|
-
|
|
26
|
-
async render({
|
|
27
|
-
params,
|
|
28
|
-
query,
|
|
29
|
-
props,
|
|
30
|
-
locals,
|
|
31
|
-
pageLocals,
|
|
32
|
-
metadata,
|
|
33
|
-
Page,
|
|
34
|
-
Layout,
|
|
35
|
-
HtmlTemplate,
|
|
36
|
-
}: IntegrationRendererRenderOptions): Promise<RouteRendererBody> {
|
|
37
|
-
try {
|
|
38
|
-
const pageContent = await Page({ params, query, ...props, locals: pageLocals });
|
|
39
|
-
const children =
|
|
40
|
-
Layout && typeof Layout === 'function' ? await Layout({ children: pageContent, locals }) : pageContent;
|
|
41
|
-
const body = await HtmlTemplate({
|
|
42
|
-
metadata,
|
|
43
|
-
children,
|
|
44
|
-
pageProps: props || {},
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
return this.DOC_TYPE + body;
|
|
48
|
-
} catch (error) {
|
|
49
|
-
throw this.createRenderError('Error rendering page', error);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async renderToResponse<P = Record<string, unknown>>(
|
|
54
|
-
view: EcoComponent<P>,
|
|
55
|
-
props: P,
|
|
56
|
-
ctx: RenderToResponseContext,
|
|
57
|
-
): Promise<Response> {
|
|
58
|
-
try {
|
|
59
|
-
const Layout = view.config?.layout as
|
|
60
|
-
| ((props: { children: EcoPagesElement } & Record<string, unknown>) => Promise<EcoPagesElement>)
|
|
61
|
-
| undefined;
|
|
62
|
-
|
|
63
|
-
const viewFn = view as (props: P) => Promise<EcoPagesElement>;
|
|
64
|
-
const pageContent = await viewFn(props);
|
|
65
|
-
|
|
66
|
-
let body: string;
|
|
67
|
-
if (ctx.partial) {
|
|
68
|
-
body = pageContent as string;
|
|
69
|
-
} else {
|
|
70
|
-
const children = Layout ? await Layout({ children: pageContent }) : pageContent;
|
|
71
|
-
|
|
72
|
-
const HtmlTemplate = await this.getHtmlTemplate();
|
|
73
|
-
const metadata: PageMetadataProps = view.metadata
|
|
74
|
-
? await view.metadata({
|
|
75
|
-
params: {},
|
|
76
|
-
query: {},
|
|
77
|
-
props: props as Record<string, unknown>,
|
|
78
|
-
appConfig: this.appConfig,
|
|
79
|
-
})
|
|
80
|
-
: this.appConfig.defaultMetadata;
|
|
81
|
-
|
|
82
|
-
body =
|
|
83
|
-
this.DOC_TYPE +
|
|
84
|
-
(await HtmlTemplate({
|
|
85
|
-
metadata,
|
|
86
|
-
children: children as EcoPagesElement,
|
|
87
|
-
pageProps: props as Record<string, unknown>,
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return this.createHtmlResponse(body, ctx);
|
|
92
|
-
} catch (error) {
|
|
93
|
-
throw this.createRenderError('Error rendering view', error);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { IntegrationPlugin, type IntegrationPluginConfig } from '../../plugins/integration-plugin';
|
|
2
|
-
import { GhtmlRenderer } from './ghtml-renderer';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The name of the ghtml plugin
|
|
6
|
-
*/
|
|
7
|
-
export const GHTML_PLUGIN_NAME = 'ghtml';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* The Ghtml plugin class
|
|
11
|
-
* This plugin provides support for ghtml components in Ecopages
|
|
12
|
-
*/
|
|
13
|
-
export class GhtmlPlugin extends IntegrationPlugin {
|
|
14
|
-
renderer = GhtmlRenderer;
|
|
15
|
-
|
|
16
|
-
constructor(options?: Omit<IntegrationPluginConfig, 'name'>) {
|
|
17
|
-
super({
|
|
18
|
-
name: GHTML_PLUGIN_NAME,
|
|
19
|
-
extensions: ['.ghtml.ts', '.ghtml.tsx', '.ghtml'],
|
|
20
|
-
...options,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Factory function to create a Ghtml plugin instance
|
|
27
|
-
* @param options Configuration options for the Ghtml plugin
|
|
28
|
-
* @returns A new GhtmlPlugin instance
|
|
29
|
-
*/
|
|
30
|
-
export function ghtmlPlugin(options?: Omit<IntegrationPluginConfig, 'name'>): GhtmlPlugin {
|
|
31
|
-
return new GhtmlPlugin(options);
|
|
32
|
-
}
|