@ecopages/core 0.2.0-alpha.4 → 0.2.0-alpha.40
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 +268 -14
- package/package.json +84 -110
- 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 +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +30 -68
- package/src/adapters/bun/hmr-manager.js +30 -212
- package/src/adapters/bun/index.d.ts +2 -3
- package/src/adapters/bun/index.js +3 -3
- 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 +93 -32
- package/src/adapters/bun/server-adapter.js +166 -89
- 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 +2 -6
- package/src/adapters/index.js +2 -8
- 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 +38 -49
- package/src/adapters/node/node-hmr-manager.js +31 -219
- 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 +20 -72
- package/src/adapters/node/server-adapter.js +99 -203
- package/src/adapters/node/static-content-server.d.ts +37 -1
- package/src/adapters/node/static-content-server.js +29 -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/{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 +33 -0
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +27 -3
- 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 +33 -12
- package/src/adapters/shared/server-adapter.js +215 -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/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +239 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +107 -0
- package/src/build/build-adapter.d.ts +176 -3
- package/src/build/build-adapter.js +619 -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 +16 -6
- package/src/build/esbuild-build-adapter.js +202 -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 +256 -50
- 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 +88 -0
- package/src/eco/eco.js +63 -54
- package/src/eco/eco.types.d.ts +69 -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 +60 -75
- 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.d.ts +1 -0
- package/src/plugins/alias-resolver-plugin.js +27 -5
- package/src/plugins/eco-component-meta-plugin.d.ts +14 -1
- package/src/plugins/eco-component-meta-plugin.js +42 -24
- 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 +147 -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 +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 +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +986 -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 +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 +134 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +437 -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/assets.types.js +0 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +55 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +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 +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -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/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- 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 +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -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-module-loader.service.js +0 -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 +151 -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 +297 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +191 -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} +239 -35
- 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/CHANGELOG.md +0 -91
- 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.d.ts +0 -52
- package/src/adapters/bun/server-lifecycle.js +0 -120
- 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/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.d.ts +0 -7
- package/src/services/asset-processing-service/processors/script/node-module-script.processor.js +0 -74
- package/src/services/asset-processing-service/processors/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 → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{services/asset-processing-service/assets.types.js → plugins/runtime-capability.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/services/{schema-validation-service.js → validation/schema-validation-service.js} +0 -0
|
@@ -2,6 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import chokidar, {} from "chokidar";
|
|
3
3
|
import { fileSystem } from "@ecopages/file-system";
|
|
4
4
|
import { appLogger } from "../global/app-logger.js";
|
|
5
|
+
import { DevelopmentInvalidationService } from "../services/invalidation/development-invalidation.service.js";
|
|
5
6
|
class ProjectWatcher {
|
|
6
7
|
/**
|
|
7
8
|
* Duplicate identical watcher events within this window are ignored.
|
|
@@ -15,13 +16,16 @@ class ProjectWatcher {
|
|
|
15
16
|
refreshRouterRoutesCallback;
|
|
16
17
|
hmrManager;
|
|
17
18
|
bridge;
|
|
19
|
+
invalidationService;
|
|
18
20
|
watcher = null;
|
|
19
21
|
lastHandledChange = /* @__PURE__ */ new Map();
|
|
22
|
+
changeQueue = Promise.resolve();
|
|
20
23
|
constructor({ config, refreshRouterRoutesCallback, hmrManager, bridge }) {
|
|
21
24
|
this.appConfig = config;
|
|
22
25
|
this.refreshRouterRoutesCallback = refreshRouterRoutesCallback;
|
|
23
26
|
this.hmrManager = hmrManager;
|
|
24
27
|
this.bridge = bridge;
|
|
28
|
+
this.invalidationService = new DevelopmentInvalidationService(config);
|
|
25
29
|
this.triggerRouterRefresh = this.triggerRouterRefresh.bind(this);
|
|
26
30
|
this.handleError = this.handleError.bind(this);
|
|
27
31
|
this.handleFileChange = this.handleFileChange.bind(this);
|
|
@@ -41,6 +45,12 @@ class ProjectWatcher {
|
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
}
|
|
48
|
+
isRouteSourceFile(filePath) {
|
|
49
|
+
return this.invalidationService.isRouteSourceFile(filePath);
|
|
50
|
+
}
|
|
51
|
+
isIncludeSourceFile(filePath) {
|
|
52
|
+
return this.invalidationService.isIncludeSourceFile(filePath);
|
|
53
|
+
}
|
|
44
54
|
/**
|
|
45
55
|
* Handles public directory file changes by copying only the changed file.
|
|
46
56
|
* @param filePath - Absolute path of the changed file
|
|
@@ -60,19 +70,33 @@ class ProjectWatcher {
|
|
|
60
70
|
this.bridge.reload();
|
|
61
71
|
}
|
|
62
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Serializes file change handling so that concurrent chokidar events are
|
|
75
|
+
* processed one at a time, preventing overlapping builds and race conditions.
|
|
76
|
+
*/
|
|
77
|
+
enqueueChange(task) {
|
|
78
|
+
const queuedTask = this.changeQueue.then(task, task);
|
|
79
|
+
this.changeQueue = queuedTask.catch(() => void 0);
|
|
80
|
+
}
|
|
63
81
|
/**
|
|
64
82
|
* Handles file changes by uncaching modules, refreshing routes, and delegating appropriately.
|
|
65
|
-
* Follows
|
|
66
|
-
* 0. Public directory match?
|
|
67
|
-
* 1. additionalWatchPaths match?
|
|
68
|
-
* 2.
|
|
69
|
-
* 3.
|
|
83
|
+
* Follows 5-rule priority:
|
|
84
|
+
* 0. Public directory match? -> copy file and reload
|
|
85
|
+
* 1. additionalWatchPaths match? -> reload
|
|
86
|
+
* 2. Include template source? -> reload after processor notifications
|
|
87
|
+
* 3. Processor-owned asset? -> processor already handled it via notification, skip HMR
|
|
88
|
+
* 4. Otherwise -> HMR strategies
|
|
89
|
+
*
|
|
90
|
+
* Processors that watch a file extension as a dependency (e.g. PostCSS watching
|
|
91
|
+
* .tsx for Tailwind class scanning) are always notified first, but do not
|
|
92
|
+
* prevent the file from flowing through the normal HMR strategy pipeline.
|
|
70
93
|
*
|
|
71
94
|
* Duplicate identical watcher events for the same file are coalesced within a
|
|
72
95
|
* short window before any of the priority rules run.
|
|
73
96
|
* @param rawPath - Path of the changed file
|
|
97
|
+
* @param event - The type of file system event
|
|
74
98
|
*/
|
|
75
|
-
async handleFileChange(rawPath) {
|
|
99
|
+
async handleFileChange(rawPath, event = "change") {
|
|
76
100
|
const filePath = path.resolve(rawPath);
|
|
77
101
|
const now = Date.now();
|
|
78
102
|
const lastHandledAt = this.lastHandledChange.get(filePath);
|
|
@@ -81,27 +105,33 @@ class ProjectWatcher {
|
|
|
81
105
|
}
|
|
82
106
|
this.lastHandledChange.set(filePath, now);
|
|
83
107
|
try {
|
|
84
|
-
|
|
108
|
+
const plan = this.invalidationService.planFileChange(filePath);
|
|
109
|
+
if (plan.category === "public-asset") {
|
|
85
110
|
await this.handlePublicDirFileChange(filePath);
|
|
86
111
|
return;
|
|
87
112
|
}
|
|
88
113
|
this.uncacheModules();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.refreshRouterRoutesCallback();
|
|
114
|
+
if (plan.invalidateServerModules) {
|
|
115
|
+
this.invalidationService.invalidateServerModules([filePath]);
|
|
92
116
|
}
|
|
93
|
-
if (
|
|
117
|
+
if (plan.refreshRoutes) {
|
|
118
|
+
await this.refreshRouterRoutesCallback();
|
|
119
|
+
}
|
|
120
|
+
if (plan.category === "additional-watch") {
|
|
94
121
|
this.bridge.reload();
|
|
95
122
|
return;
|
|
96
123
|
}
|
|
97
|
-
|
|
124
|
+
await this.notifyProcessors(filePath, event);
|
|
125
|
+
if (plan.category === "include-source") {
|
|
126
|
+
this.bridge.reload();
|
|
98
127
|
return;
|
|
99
128
|
}
|
|
100
|
-
if (
|
|
101
|
-
this.hmrManager.broadcast({ type: "layout-update" });
|
|
129
|
+
if (plan.processorHandledAsset) {
|
|
102
130
|
return;
|
|
103
131
|
}
|
|
104
|
-
|
|
132
|
+
if (plan.delegateToHmr) {
|
|
133
|
+
await this.hmrManager.handleFileChange(filePath);
|
|
134
|
+
}
|
|
105
135
|
} catch (error) {
|
|
106
136
|
if (error instanceof Error) {
|
|
107
137
|
this.bridge.error(error.message);
|
|
@@ -109,65 +139,56 @@ class ProjectWatcher {
|
|
|
109
139
|
}
|
|
110
140
|
}
|
|
111
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Notifies all processors whose watch config matches the given file extension.
|
|
144
|
+
* This is called before checking processor ownership so that dependency-only
|
|
145
|
+
* processors (e.g. PostCSS watching .tsx for class scanning) receive their
|
|
146
|
+
* notifications regardless of whether they own the file.
|
|
147
|
+
*/
|
|
148
|
+
async notifyProcessors(filePath, event) {
|
|
149
|
+
const ctx = { path: filePath, bridge: this.bridge };
|
|
150
|
+
for (const processor of this.appConfig.processors.values()) {
|
|
151
|
+
const watchConfig = processor.getWatchConfig();
|
|
152
|
+
if (!watchConfig) continue;
|
|
153
|
+
const { extensions = [] } = watchConfig;
|
|
154
|
+
if (extensions.length && !extensions.some((ext) => filePath.endsWith(ext))) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const handler = this.getProcessorHandler(watchConfig, event);
|
|
158
|
+
if (handler) {
|
|
159
|
+
await handler(ctx);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
getProcessorHandler(watchConfig, event) {
|
|
164
|
+
switch (event) {
|
|
165
|
+
case "change":
|
|
166
|
+
return watchConfig.onChange;
|
|
167
|
+
case "add":
|
|
168
|
+
return watchConfig.onCreate;
|
|
169
|
+
case "unlink":
|
|
170
|
+
return watchConfig.onDelete;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
112
173
|
/**
|
|
113
174
|
* Checks if a file is in the public directory.
|
|
114
175
|
*/
|
|
115
176
|
isPublicDirFile(filePath) {
|
|
116
|
-
return
|
|
177
|
+
return this.invalidationService.isPublicDirFile(filePath);
|
|
117
178
|
}
|
|
118
179
|
/**
|
|
119
180
|
* Checks if file path matches any additionalWatchPaths patterns.
|
|
120
181
|
*/
|
|
121
182
|
matchesAdditionalWatchPaths(filePath) {
|
|
122
|
-
|
|
123
|
-
if (!patterns.length) return false;
|
|
124
|
-
for (const pattern of patterns) {
|
|
125
|
-
if (pattern.includes("*")) {
|
|
126
|
-
const ext = pattern.replace(/\*\*?\/\*/, "");
|
|
127
|
-
if (filePath.endsWith(ext)) return true;
|
|
128
|
-
} else {
|
|
129
|
-
if (filePath.endsWith(pattern) || filePath === path.resolve(pattern)) return true;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Checks whether a file is watched by any processor, even if that processor
|
|
136
|
-
* does not own the file as a primary asset.
|
|
137
|
-
*/
|
|
138
|
-
isWatchedByProcessor(filePath) {
|
|
139
|
-
for (const processor of this.appConfig.processors.values()) {
|
|
140
|
-
const watchConfig = processor.getWatchConfig();
|
|
141
|
-
if (!watchConfig) continue;
|
|
142
|
-
const { extensions = [] } = watchConfig;
|
|
143
|
-
if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return false;
|
|
183
|
+
return this.invalidationService.matchesAdditionalWatchPaths(filePath);
|
|
148
184
|
}
|
|
149
185
|
/**
|
|
150
186
|
* Checks if a file is handled by a processor.
|
|
151
|
-
* Processors that declare
|
|
187
|
+
* Processors that declare asset capabilities own those file types.
|
|
188
|
+
* Processors without capabilities fall back to checking watch extensions.
|
|
152
189
|
*/
|
|
153
190
|
isHandledByProcessor(filePath) {
|
|
154
|
-
|
|
155
|
-
const capabilities = processor.getAssetCapabilities?.() ?? [];
|
|
156
|
-
if (capabilities.length > 0) {
|
|
157
|
-
const matchesConfiguredAsset = typeof processor.matchesFileFilter !== "function" || processor.matchesFileFilter(filePath);
|
|
158
|
-
if (matchesConfiguredAsset && capabilities.some((capability) => processor.canProcessAsset?.(capability.kind, filePath))) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
const watchConfig = processor.getWatchConfig();
|
|
164
|
-
if (!watchConfig) continue;
|
|
165
|
-
const { extensions = [] } = watchConfig;
|
|
166
|
-
if (extensions.length && extensions.some((ext) => filePath.endsWith(ext))) {
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return false;
|
|
191
|
+
return this.invalidationService.isProcessorOwnedAsset(filePath);
|
|
171
192
|
}
|
|
172
193
|
/**
|
|
173
194
|
* Triggers router refresh for page directory changes.
|
|
@@ -175,10 +196,11 @@ class ProjectWatcher {
|
|
|
175
196
|
*
|
|
176
197
|
* @param {string} path - Path of the changed directory
|
|
177
198
|
*/
|
|
178
|
-
triggerRouterRefresh(
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
199
|
+
async triggerRouterRefresh(changedPath) {
|
|
200
|
+
const resolvedPath = path.resolve(changedPath);
|
|
201
|
+
const isPageDir = resolvedPath.startsWith(this.appConfig.absolutePaths.pagesDir) && path.extname(resolvedPath) === "";
|
|
202
|
+
if (isPageDir || this.isRouteSourceFile(resolvedPath)) {
|
|
203
|
+
await this.refreshRouterRoutesCallback();
|
|
182
204
|
}
|
|
183
205
|
}
|
|
184
206
|
/**
|
|
@@ -192,71 +214,59 @@ class ProjectWatcher {
|
|
|
192
214
|
}
|
|
193
215
|
appLogger.error(`Watcher error: ${error}`);
|
|
194
216
|
}
|
|
195
|
-
/**
|
|
196
|
-
* Processes file changes for specific file extensions.
|
|
197
|
-
* Used by processors to handle their specific file types.
|
|
198
|
-
*
|
|
199
|
-
* @private
|
|
200
|
-
* @param {string} path - Path of the changed file
|
|
201
|
-
* @param {string[]} extensions - File extensions to process
|
|
202
|
-
* @param {(ctx: ProcessorWatchContext) => void} handler - Handler function for the file change
|
|
203
|
-
*/
|
|
204
|
-
shouldProcess(path2, extensions, handler) {
|
|
205
|
-
if (!extensions.length || extensions.some((ext) => path2.endsWith(ext))) {
|
|
206
|
-
handler({ path: path2, bridge: this.bridge });
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
217
|
/**
|
|
210
218
|
* Creates and configures the file system watcher.
|
|
211
219
|
* This sets up:
|
|
212
|
-
* 1.
|
|
213
|
-
* 2.
|
|
214
|
-
* 3.
|
|
215
|
-
*
|
|
220
|
+
* 1. Page file watching
|
|
221
|
+
* 2. Directory watching
|
|
222
|
+
* 3. Error handling
|
|
223
|
+
*
|
|
224
|
+
* Processor notifications are dispatched inside handleFileChange, ensuring
|
|
225
|
+
* a single unified event pipeline with no parallel chokidar bindings.
|
|
216
226
|
*
|
|
217
227
|
* Uses chokidar's built-in debouncing through `awaitWriteFinish` to handle
|
|
218
228
|
* rapid file changes efficiently.
|
|
219
229
|
*/
|
|
220
230
|
async createWatcherSubscription() {
|
|
221
|
-
if (
|
|
222
|
-
|
|
223
|
-
for (const processor of this.appConfig.processors.values()) {
|
|
224
|
-
const watchConfig = processor.getWatchConfig();
|
|
225
|
-
if (!watchConfig) continue;
|
|
226
|
-
processorPaths.push(...watchConfig.paths);
|
|
227
|
-
}
|
|
228
|
-
if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
|
|
229
|
-
processorPaths.push(this.appConfig.absolutePaths.pagesDir);
|
|
230
|
-
}
|
|
231
|
-
if (fileSystem.exists(this.appConfig.absolutePaths.publicDir)) {
|
|
232
|
-
processorPaths.push(this.appConfig.absolutePaths.publicDir);
|
|
233
|
-
}
|
|
234
|
-
if (this.appConfig.additionalWatchPaths.length) {
|
|
235
|
-
processorPaths.push(...this.appConfig.additionalWatchPaths);
|
|
236
|
-
}
|
|
237
|
-
this.watcher = chokidar.watch(processorPaths, {
|
|
238
|
-
ignoreInitial: true,
|
|
239
|
-
ignorePermissionErrors: true,
|
|
240
|
-
awaitWriteFinish: {
|
|
241
|
-
stabilityThreshold: 50,
|
|
242
|
-
pollInterval: 50
|
|
243
|
-
}
|
|
244
|
-
});
|
|
231
|
+
if (this.watcher) {
|
|
232
|
+
return this.watcher;
|
|
245
233
|
}
|
|
234
|
+
const processorPaths = [];
|
|
246
235
|
for (const processor of this.appConfig.processors.values()) {
|
|
247
236
|
const watchConfig = processor.getWatchConfig();
|
|
248
237
|
if (!watchConfig) continue;
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
238
|
+
processorPaths.push(...watchConfig.paths);
|
|
239
|
+
}
|
|
240
|
+
if (fileSystem.exists(this.appConfig.absolutePaths.includesDir)) {
|
|
241
|
+
processorPaths.push(this.appConfig.absolutePaths.includesDir);
|
|
242
|
+
}
|
|
243
|
+
if (fileSystem.exists(this.appConfig.absolutePaths.srcDir)) {
|
|
244
|
+
processorPaths.push(this.appConfig.absolutePaths.srcDir);
|
|
245
|
+
}
|
|
246
|
+
if (fileSystem.exists(this.appConfig.absolutePaths.pagesDir)) {
|
|
247
|
+
processorPaths.push(this.appConfig.absolutePaths.pagesDir);
|
|
248
|
+
}
|
|
249
|
+
if (fileSystem.exists(this.appConfig.absolutePaths.publicDir)) {
|
|
250
|
+
processorPaths.push(this.appConfig.absolutePaths.publicDir);
|
|
251
|
+
}
|
|
252
|
+
if (this.appConfig.additionalWatchPaths.length) {
|
|
253
|
+
processorPaths.push(...this.appConfig.additionalWatchPaths);
|
|
254
|
+
}
|
|
255
|
+
this.watcher = chokidar.watch(processorPaths, {
|
|
256
|
+
ignoreInitial: true,
|
|
257
|
+
ignorePermissionErrors: true,
|
|
258
|
+
awaitWriteFinish: {
|
|
259
|
+
stabilityThreshold: 50,
|
|
260
|
+
pollInterval: 50
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
this.watcher.on("change", (p) => this.enqueueChange(() => this.handleFileChange(p, "change"))).on("add", (p) => this.enqueueChange(() => this.handleFileChange(p, "add"))).on("addDir", (p) => this.enqueueChange(() => this.triggerRouterRefresh(p))).on("unlink", (p) => this.enqueueChange(() => this.handleFileChange(p, "unlink"))).on("unlinkDir", (p) => this.enqueueChange(() => this.triggerRouterRefresh(p))).on("error", (error) => this.handleError(error));
|
|
264
|
+
for (const processor of this.appConfig.processors.values()) {
|
|
265
|
+
const watchConfig = processor.getWatchConfig();
|
|
266
|
+
if (watchConfig?.onError) {
|
|
267
|
+
this.watcher.on("error", watchConfig.onError);
|
|
268
|
+
}
|
|
254
269
|
}
|
|
255
|
-
this.watcher.add(this.appConfig.absolutePaths.srcDir);
|
|
256
|
-
this.watcher.on("change", (path2) => this.handleFileChange(path2)).on("add", (path2) => {
|
|
257
|
-
this.handleFileChange(path2);
|
|
258
|
-
this.triggerRouterRefresh(path2);
|
|
259
|
-
}).on("addDir", (path2) => this.triggerRouterRefresh(path2)).on("unlink", (path2) => this.triggerRouterRefresh(path2)).on("unlinkDir", (path2) => this.triggerRouterRefresh(path2)).on("error", (error) => this.handleError(error));
|
|
260
270
|
return this.watcher;
|
|
261
271
|
}
|
|
262
272
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IHmrManager } from '../internal-types';
|
|
2
|
-
import type { ClientBridge } from '../adapters/bun/client-bridge';
|
|
1
|
+
import type { IHmrManager } from '../types/internal-types.js';
|
|
2
|
+
import type { ClientBridge } from '../adapters/bun/client-bridge.js';
|
|
3
3
|
export declare const createMockHmrManager: () => IHmrManager;
|
|
4
4
|
export declare const createMockBridge: () => ClientBridge;
|
|
@@ -9,24 +9,24 @@ const createMockHmrManager = () => ({
|
|
|
9
9
|
setPlugins: vi.fn(() => {
|
|
10
10
|
}),
|
|
11
11
|
registerEntrypoint: vi.fn(async () => ""),
|
|
12
|
-
|
|
13
|
-
}),
|
|
12
|
+
registerScriptEntrypoint: vi.fn(async () => ""),
|
|
14
13
|
registerStrategy: vi.fn(() => {
|
|
15
14
|
}),
|
|
16
15
|
isEnabled: vi.fn(() => true),
|
|
17
|
-
canHandleFileChange: vi.fn(() => true),
|
|
18
16
|
getOutputUrl: vi.fn(() => void 0),
|
|
19
17
|
getWatchedFiles: vi.fn(() => /* @__PURE__ */ new Map()),
|
|
20
|
-
getSpecifierMap: vi.fn(() => /* @__PURE__ */ new Map()),
|
|
21
18
|
getDistDir: vi.fn(() => ""),
|
|
22
19
|
getPlugins: vi.fn(() => []),
|
|
23
20
|
getDefaultContext: vi.fn(() => ({
|
|
24
21
|
getWatchedFiles: () => /* @__PURE__ */ new Map(),
|
|
25
|
-
getSpecifierMap: () => /* @__PURE__ */ new Map(),
|
|
26
22
|
getDistDir: () => "",
|
|
27
23
|
getPlugins: () => [],
|
|
28
24
|
getSrcDir: () => "",
|
|
29
|
-
getLayoutsDir: () => ""
|
|
25
|
+
getLayoutsDir: () => "",
|
|
26
|
+
getPagesDir: () => "",
|
|
27
|
+
getBuildExecutor: () => ({ build: vi.fn(async () => ({ success: true, logs: [], outputs: [] })) }),
|
|
28
|
+
getBrowserBundleService: () => ({ bundle: vi.fn(async () => ({ success: true, logs: [], outputs: [] })) }),
|
|
29
|
+
importServerModule: vi.fn(async () => ({}))
|
|
30
30
|
}))
|
|
31
31
|
});
|
|
32
32
|
const createMockBridge = () => ({
|
package/CHANGELOG.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to `@ecopages/core` are documented here.
|
|
4
|
-
|
|
5
|
-
> **Note:** Changelog tracking begins at version `0.2.0`. Changes prior to this release are not recorded here but are available in the git history.
|
|
6
|
-
|
|
7
|
-
## [UNRELEASED] — TBD
|
|
8
|
-
|
|
9
|
-
### Features
|
|
10
|
-
|
|
11
|
-
#### Node.js Runtime Support
|
|
12
|
-
|
|
13
|
-
- **Node server adapter** — Full HTTP server adapter for Node.js via `packages/core/src/adapters/node/`, including request bridging, route handling, static content serving, and graceful shutdown.
|
|
14
|
-
- **Node static build pipeline** — Static-site build and preview server for Node.js runtime (`ab22f167`, `a47b4da3`, `435dc250`).
|
|
15
|
-
- **Node API handler pipeline** — `define-api-handler` now works cross-runtime; Node adapter wires API handler execution end-to-end (`73e57d87`, `f46aa528`).
|
|
16
|
-
- **Node client bridge** — `NodeClientBridge` with SSE-based HMR stream and heartbeat mechanism for connection health (`3361445f`).
|
|
17
|
-
- **Node HMR manager** — `NodeHmrManager` that mirrors Bun HMR capabilities on the Node runtime.
|
|
18
|
-
- **`createApp` universal factory** — Top-level `createApp` export that selects the correct adapter (Bun or Node) at runtime (`ce691bdf`, `2f1b1109`).
|
|
19
|
-
|
|
20
|
-
#### Build System
|
|
21
|
-
|
|
22
|
-
- **`EsbuildBuildAdapter`** — A new build backend backed by esbuild, replacing the Bun-only transpilation path. Includes module resolution routing, plugin registration, and transpilation defaults (`f503e86e`, `94c37d38`, `e4e124a1`).
|
|
23
|
-
- **Build dependency graph** — `BuildDependencyGraph` interface for tracking entrypoints and their asset dependencies, enabling more accurate HMR invalidation (`e7653c9b`).
|
|
24
|
-
- **Build adapter abstraction** — `build-adapter.ts` and `build-types.ts` decouple build and plugin contracts from Bun-specific types (`11b03bcc`).
|
|
25
|
-
|
|
26
|
-
#### Rendering & Orchestration
|
|
27
|
-
|
|
28
|
-
- **Boundary rendering policy** — Cross-integration component boundaries are now explicitly enforced (`ec1e4d66`).
|
|
29
|
-
- **Full orchestration mode** — Legacy rendering mode branches removed; the engine always runs in unified orchestration mode (`f652fa0a`).
|
|
30
|
-
- **Extracted render services** — The render pipeline is decomposed into focused services:
|
|
31
|
-
- `RenderExecutionService`
|
|
32
|
-
- `HtmlPostProcessingService`
|
|
33
|
-
- `RenderPreparationService`
|
|
34
|
-
- `MarkerGraphResolver`
|
|
35
|
-
- `FileRouteMiddlewarePipeline`
|
|
36
|
-
- `PageRequestCacheCoordinator`
|
|
37
|
-
- `PageModuleImportService`
|
|
38
|
-
- **Component render context** — New `ComponentRenderContext` consolidates component-level state during rendering (`eco/component-render-context.ts`).
|
|
39
|
-
- **Worker-tools HTML rewriter fallback** — `html-transformer` adopts `@worker-tools/html-rewriter` as a fallback for non-Bun environments (`54056d4f`).
|
|
40
|
-
|
|
41
|
-
#### Dependency & Injection
|
|
42
|
-
|
|
43
|
-
- **Global injector map** — `GlobalInjectorMap` and `LazyInjectorMap` provide structured, testable dependency injection for global and lazy assets (`c3a25072`).
|
|
44
|
-
- **Lazy dependency resolution** — SSR lazy script resolution now uses dedicated utility functions for dependency entry attributes and content generation (`71ce2f4f`).
|
|
45
|
-
- **Dependency entry type refactor** — Unified types for script and stylesheet dependency entries, with improved error messages (`1e02dba6`).
|
|
46
|
-
- **Module dependencies** — New `module-dependencies.ts` tracks explicit module-level asset relationships.
|
|
47
|
-
- **Eco utils extraction** — Shared utilities moved to `eco.utils.ts` to remove runtime metadata fallbacks (`bdc60d50`).
|
|
48
|
-
|
|
49
|
-
#### API Handlers
|
|
50
|
-
|
|
51
|
-
- **Unified typed API handler context** — `defineApiHandler` now exposes a fully typed, runtime-agnostic context object. The Bun-specific adapter is slimmed down to a thin wrapper (`2f1b1109`, `08e194b4`).
|
|
52
|
-
- **Portable root runtime API** — Core exposes a portable API surface that avoids runtime escape hatches (`ce691bdf`, `1ec42c02`).
|
|
53
|
-
|
|
54
|
-
### Refactoring
|
|
55
|
-
|
|
56
|
-
- **Bun adapter isolation** — Bun-specific types (`serve` options, file reads, env access, argv/hash helpers) are routed through dedicated helpers, making the remaining adapter code portable (`73668f52`, `0c90ced1`, `73fb904a`, `5eb0957b`, `4bdc74a9`, `e9ce163c`, `22f9de4a`, `f7b3d95e`).
|
|
57
|
-
- **Shared server adapter** — Common server adapter logic extracted to `adapters/shared/application-adapter.ts` and `adapters/shared/server-adapter.ts`, shared between Bun and Node adapters (`5a872eda`).
|
|
58
|
-
- **Route assets isolation** — Route-level assets are now isolated per-request, hardening dependency processing (`3fd76a12`).
|
|
59
|
-
- **Shared matcher error constants** — Matcher error strings are now constants shared across test and source (`ff4db106`).
|
|
60
|
-
- **App registration & fetch pipeline** — App creation and request handling consolidated into a single unified pipeline (`86e20a3d`).
|
|
61
|
-
- **Adapter escape hatch surface** trimmed — Public adapter API is narrowed to reduce surface area (`1ec42c02`).
|
|
62
|
-
|
|
63
|
-
### Bug Fixes
|
|
64
|
-
|
|
65
|
-
- Fixed invariant checks for route paths with improved error messaging in `AbstractApplicationAdapter` (`9c2a6242`).
|
|
66
|
-
- Fixed dependency import name extraction in `extractEcopagesVirtualImports` (`39bbc472`).
|
|
67
|
-
- Removed an invalid npm export entry that pointed to a non-existent `utils/ecopages-url-resolver` declaration target.
|
|
68
|
-
- Kept source module HMR active when stylesheet processors also watch TSX and JSX files for Tailwind-driven CSS rebuilds.
|
|
69
|
-
- Triggered HMR current-page refreshes instead of fallback reload suppression for processor-watched TSX and JSX changes that are not client entrypoints.
|
|
70
|
-
|
|
71
|
-
### Tests
|
|
72
|
-
|
|
73
|
-
- Added node static content server test coverage (`435dc250`).
|
|
74
|
-
- Strengthened HTML transformer mode matrix coverage (`286c1253`).
|
|
75
|
-
- Aligned integration and dependency processing tests to new orchestration model (`7cc73316`).
|
|
76
|
-
- Added `EsbuildBuildAdapter` test suite with 500+ lines (`build-adapter.test.ts`).
|
|
77
|
-
- Added `file-route-middleware-pipeline` tests.
|
|
78
|
-
|
|
79
|
-
### Documentation
|
|
80
|
-
|
|
81
|
-
- Updated rendering graph documentation to cover extracted rendering services (`8bfcfd21`).
|
|
82
|
-
- Refreshed server handler and module dependency guidance (`3494f44d`).
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Migration Notes
|
|
87
|
-
|
|
88
|
-
- **`createApp`** is now the recommended entrypoint (previously `EcopagesApp`). Import from `@ecopages/core`.
|
|
89
|
-
- **`defineApiHandler`** signature is unchanged but the handler context object now carries explicit runtime-agnostic types. No breaking changes for existing handlers.
|
|
90
|
-
- Bun adapter still works as before; the new Node adapter is additive.
|
|
91
|
-
- The old explicit `renderingMode` config option has been removed — full orchestration is always active.
|