@ecopages/core 0.2.0-alpha.53 → 0.2.0-alpha.54
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 +2 -3
- package/package.json +97 -182
- package/src/adapters/abstract/application-adapter.test.ts +218 -0
- package/src/adapters/abstract/application-adapter.ts +379 -0
- package/src/adapters/abstract/router-adapter.ts +30 -0
- package/src/adapters/abstract/server-adapter.ts +79 -0
- package/src/adapters/bun/client-bridge.ts +62 -0
- package/src/adapters/bun/create-app.ts +214 -0
- package/src/adapters/bun/hmr-manager.test.ts +265 -0
- package/src/adapters/bun/hmr-manager.ts +88 -0
- package/src/adapters/bun/index.ts +2 -0
- package/src/adapters/bun/runtime-host.ts +76 -0
- package/src/adapters/bun/server-adapter.ts +605 -0
- package/src/adapters/bun/static-preview-host.ts +70 -0
- package/src/adapters/create-app.test.ts +10 -0
- package/src/adapters/create-app.ts +91 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/node/create-app.test.ts +76 -0
- package/src/adapters/node/create-app.ts +116 -0
- package/src/adapters/node/http-request-bridge.test.ts +146 -0
- package/src/adapters/node/http-request-bridge.ts +176 -0
- package/src/adapters/node/node-client-bridge.test.ts +198 -0
- package/src/adapters/node/node-client-bridge.ts +79 -0
- package/src/adapters/node/node-hmr-manager.test.ts +374 -0
- package/src/adapters/node/node-hmr-manager.ts +72 -0
- package/src/adapters/node/runtime-host.test.ts +49 -0
- package/src/adapters/node/runtime-host.ts +113 -0
- package/src/adapters/node/server-adapter-dependencies.ts +28 -0
- package/src/adapters/node/server-adapter.test.ts +84 -0
- package/src/adapters/node/server-adapter.ts +423 -0
- package/src/adapters/node/static-content-server.test.ts +60 -0
- package/src/adapters/node/static-content-server.ts +239 -0
- package/src/adapters/node/static-preview-host.test.ts +89 -0
- package/src/adapters/node/static-preview-host.ts +101 -0
- package/src/adapters/shared/api-response.test.ts +97 -0
- package/src/adapters/shared/api-response.ts +104 -0
- package/src/adapters/shared/application-adapter.ts +199 -0
- package/src/adapters/shared/define-api-handler.ts +66 -0
- package/src/adapters/shared/explicit-static-render-preparation.ts +58 -0
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +381 -0
- package/src/adapters/shared/explicit-static-route-matcher.ts +131 -0
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +85 -0
- package/src/adapters/shared/file-route-middleware-pipeline.ts +118 -0
- package/src/adapters/shared/fs-server-response-factory.test.ts +176 -0
- package/src/adapters/shared/fs-server-response-factory.ts +96 -0
- package/src/adapters/shared/fs-server-response-matcher.test.ts +311 -0
- package/src/adapters/shared/fs-server-response-matcher.ts +240 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +149 -0
- package/src/adapters/shared/hmr-html-response.ts +54 -0
- package/src/adapters/shared/hmr-manager.contract.test.ts +228 -0
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +229 -0
- package/src/adapters/shared/render-context.test.ts +244 -0
- package/src/adapters/shared/render-context.ts +161 -0
- package/src/adapters/shared/runtime-app-bootstrap.test.ts +96 -0
- package/src/adapters/shared/runtime-app-bootstrap.ts +72 -0
- package/src/adapters/shared/runtime-host.ts +11 -0
- package/src/adapters/shared/server-adapter.test.ts +130 -0
- package/src/adapters/shared/server-adapter.ts +571 -0
- package/src/adapters/shared/server-route-handler.test.ts +112 -0
- package/src/adapters/shared/server-route-handler.ts +153 -0
- package/src/adapters/shared/server-static-builder.test.ts +338 -0
- package/src/adapters/shared/server-static-builder.ts +170 -0
- package/src/adapters/shared/shared-hmr-manager.ts +298 -0
- package/src/adapters/shared/static-preview-host.ts +12 -0
- package/src/build/README.md +57 -73
- package/src/build/browser-runtime-manifest.test.ts +121 -0
- package/src/build/browser-runtime-manifest.ts +105 -0
- package/src/build/browser-runtime-plugin-helpers.test.ts +49 -0
- package/src/build/browser-runtime-plugin-helpers.ts +37 -0
- package/src/build/browser-runtime-plugin.test.ts +256 -0
- package/src/build/browser-runtime-plugin.ts +306 -0
- package/src/build/build-adapter.test.ts +463 -0
- package/src/build/build-adapter.ts +788 -0
- package/src/build/build-manifest.ts +79 -0
- package/src/build/build-types.ts +83 -0
- package/src/build/rolldown-build-adapter.test.ts +352 -0
- package/src/build/rolldown-build-adapter.ts +363 -0
- package/src/build/rolldown-plugin-bridge.test.ts +256 -0
- package/src/build/rolldown-plugin-bridge.ts +309 -0
- package/src/build/runtime-build-executor.test.ts +130 -0
- package/src/build/runtime-build-executor.ts +37 -0
- package/src/build/runtime-build-output-normalizer.ts +137 -0
- package/src/build/serialized-build-executor.test.ts +96 -0
- package/src/build/serialized-build-executor.ts +90 -0
- package/src/build/server-side-css-shim-plugin.ts +77 -0
- package/src/cache/index.ts +6 -0
- package/src/cache/module-parse-cache.test.ts +73 -0
- package/src/cache/module-parse-cache.ts +137 -0
- package/src/config/README.md +1 -1
- package/src/config/config-builder.test.ts +456 -0
- package/src/config/config-builder.ts +728 -0
- package/src/config/config-builder.typecheck.test.ts +96 -0
- package/src/config/{constants.d.ts → constants.ts} +22 -13
- package/src/dev/host-runtime.ts +34 -0
- package/src/dev/sc-server.ts +143 -0
- package/src/eco/eco.browser.test.ts +43 -0
- package/src/eco/eco.browser.ts +137 -0
- package/src/eco/eco.test.ts +781 -0
- package/src/eco/eco.ts +262 -0
- package/src/eco/eco.types.ts +293 -0
- package/src/eco/eco.utils.test.ts +219 -0
- package/src/eco/eco.utils.ts +5 -0
- package/src/eco/global-injector-map.test.ts +42 -0
- package/src/eco/global-injector-map.ts +112 -0
- package/src/eco/lazy-injector-map.test.ts +66 -0
- package/src/eco/lazy-injector-map.ts +120 -0
- package/src/eco/module-dependencies.test.ts +30 -0
- package/src/eco/module-dependencies.ts +75 -0
- package/src/errors/http-error.test.ts +134 -0
- package/src/errors/http-error.ts +72 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/locals-access-error.ts +7 -0
- package/src/global/app-logger.ts +4 -0
- package/src/global/utils.test.ts +12 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +162 -0
- package/src/hmr/hmr-strategy.test.ts +124 -0
- package/src/hmr/hmr-strategy.ts +177 -0
- package/src/hmr/hmr.postcss.test.e2e.ts +41 -0
- package/src/hmr/hmr.test.e2e.ts +66 -0
- package/src/hmr/strategies/default-hmr-strategy.ts +60 -0
- package/src/hmr/strategies/js-hmr-strategy.test.ts +344 -0
- package/src/hmr/strategies/js-hmr-strategy.ts +307 -0
- package/src/index.browser.ts +3 -0
- package/src/index.ts +15 -0
- package/src/integrations/ghtml/ghtml-renderer.test.ts +253 -0
- package/src/integrations/ghtml/ghtml-renderer.ts +87 -0
- package/src/integrations/ghtml/ghtml.constants.ts +1 -0
- package/src/integrations/ghtml/ghtml.plugin.ts +28 -0
- package/src/plugins/alias-resolver-cache.test.ts +110 -0
- package/src/plugins/alias-resolver-cache.ts +145 -0
- package/src/plugins/alias-resolver-plugin.test.ts +41 -0
- package/src/plugins/alias-resolver-plugin.ts +75 -0
- package/src/plugins/eco-component-meta-plugin.test.ts +421 -0
- package/src/plugins/eco-component-meta-plugin.ts +518 -0
- package/src/plugins/foreign-jsx-override-plugin.test.ts +65 -0
- package/src/plugins/foreign-jsx-override-plugin.ts +76 -0
- package/src/plugins/integration-plugin.test.ts +151 -0
- package/src/plugins/integration-plugin.ts +344 -0
- package/src/plugins/processor.test.ts +148 -0
- package/src/plugins/processor.ts +257 -0
- package/src/plugins/{runtime-capability.d.ts → runtime-capability.ts} +8 -3
- package/src/plugins/source-transform.test.ts +82 -0
- package/src/plugins/source-transform.ts +123 -0
- package/src/route-renderer/orchestration/component-render-context.ts +338 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.ts +62 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +431 -0
- package/src/route-renderer/orchestration/integration-renderer.test.ts +2251 -0
- package/src/route-renderer/orchestration/integration-renderer.ts +1384 -0
- package/src/route-renderer/orchestration/ownership-planning.service.ts +97 -0
- package/src/route-renderer/orchestration/ownership-validation.service.ts +76 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.ts +29 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +435 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +310 -0
- package/src/route-renderer/orchestration/render-output.utils.ts +310 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +1365 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +267 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.ts +879 -0
- package/src/route-renderer/orchestration/template-serialization.test.ts +110 -0
- package/src/route-renderer/orchestration/template-serialization.ts +117 -0
- package/src/route-renderer/page-loading/component-dependency-collection.ts +202 -0
- package/src/route-renderer/page-loading/declared-asset-collection.ts +153 -0
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +761 -0
- package/src/route-renderer/page-loading/dependency-resolver.ts +144 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +75 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.ts +167 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.ts +74 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.ts +60 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.ts +16 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.ts +244 -0
- package/src/route-renderer/page-loading/page-module-loader.test.ts +183 -0
- package/src/route-renderer/page-loading/page-module-loader.ts +184 -0
- package/src/route-renderer/route-renderer.ts +133 -0
- package/src/router/client/link-intent.test.browser.ts +51 -0
- package/src/router/client/link-intent.ts +92 -0
- package/src/router/client/navigation-coordinator.test.ts +237 -0
- package/src/router/client/navigation-coordinator.ts +453 -0
- package/src/router/server/route-registry.test.ts +176 -0
- package/src/router/server/route-registry.ts +382 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +66 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +473 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +344 -0
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +63 -0
- package/src/services/assets/asset-processing-service/asset.factory.ts +105 -0
- package/src/services/assets/asset-processing-service/assets.types.ts +128 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +74 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +98 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +67 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +78 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +104 -0
- package/src/services/assets/asset-processing-service/index.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.test.ts +135 -0
- package/src/services/assets/asset-processing-service/page-package.ts +103 -0
- package/src/services/assets/asset-processing-service/{processor.interface.d.ts → processor.interface.ts} +10 -5
- package/src/services/assets/asset-processing-service/processor.registry.ts +18 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +59 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +83 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +173 -0
- package/src/services/assets/asset-processing-service/processors/index.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +188 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +138 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +326 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +116 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +270 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +145 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +261 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +72 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +83 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +65 -0
- package/src/services/assets/browser-bundle.service.test.ts +66 -0
- package/src/services/assets/browser-bundle.service.ts +109 -0
- package/src/services/cache/cache.types.ts +126 -0
- package/src/services/cache/index.ts +18 -0
- package/src/services/cache/memory-cache-store.test.ts +225 -0
- package/src/services/cache/memory-cache-store.ts +130 -0
- package/src/services/cache/page-cache-service.test.ts +175 -0
- package/src/services/cache/page-cache-service.ts +202 -0
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +79 -0
- package/src/services/cache/page-request-cache-coordinator.service.ts +131 -0
- package/src/services/html/html-rewriter-provider.service.test.ts +183 -0
- package/src/services/html/html-rewriter-provider.service.ts +105 -0
- package/src/services/html/html-transformer.service.test.ts +544 -0
- package/src/services/html/html-transformer.service.ts +369 -0
- package/src/services/invalidation/development-invalidation.service.test.ts +87 -0
- package/src/services/invalidation/development-invalidation.service.ts +262 -0
- package/src/services/module-loading/app-module-loader.service.ts +9 -0
- package/src/services/module-loading/app-server-module-transpiler.service.test.ts +297 -0
- package/src/services/module-loading/app-server-module-transpiler.service.ts +168 -0
- package/src/services/module-loading/host-module-loader-registry.ts +15 -0
- package/src/services/module-loading/{module-loading-types.d.ts → module-loading-types.ts} +1 -0
- package/src/services/module-loading/page-module-import.service.test.ts +652 -0
- package/src/services/module-loading/page-module-import.service.ts +302 -0
- package/src/services/module-loading/server-module-transpiler.service.test.ts +242 -0
- package/src/services/module-loading/server-module-transpiler.service.ts +104 -0
- package/src/services/module-loading/source-module-support.ts +19 -0
- package/src/services/runtime-state/dev-graph.service.ts +217 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +136 -0
- package/src/services/runtime-state/server-invalidation-state.service.ts +68 -0
- package/src/services/validation/schema-validation-service.test.ts +223 -0
- package/src/services/validation/schema-validation-service.ts +204 -0
- package/src/services/validation/{standard-schema.types.d.ts → standard-schema.types.ts} +20 -17
- package/src/static-site-generator/static-site-generator.test.ts +408 -0
- package/src/static-site-generator/static-site-generator.ts +445 -0
- package/src/types/internal-types.ts +243 -0
- package/src/types/public-types.ts +1508 -0
- package/src/utils/deep-merge.test.ts +114 -0
- package/src/utils/deep-merge.ts +47 -0
- package/src/utils/hash.ts +5 -0
- package/src/utils/html-escaping.ts +9 -0
- package/src/utils/invariant.test.ts +22 -0
- package/src/utils/invariant.ts +15 -0
- package/src/utils/locals-utils.ts +37 -0
- package/src/utils/parse-cli-args.test.ts +69 -0
- package/src/utils/parse-cli-args.ts +105 -0
- package/src/utils/path-utils.module.ts +14 -0
- package/src/utils/path-utils.test.ts +15 -0
- package/src/utils/resolve-work-dir.ts +45 -0
- package/src/utils/runtime.ts +44 -0
- package/src/utils/server-utils.module.ts +67 -0
- package/src/utils/server-utils.test.ts +38 -0
- package/src/watchers/project-watcher.integration.test.ts +337 -0
- package/src/watchers/project-watcher.test-helpers.ts +42 -0
- package/src/watchers/project-watcher.test.ts +768 -0
- package/src/watchers/project-watcher.ts +357 -0
- package/src/adapters/abstract/application-adapter.d.ts +0 -194
- package/src/adapters/abstract/application-adapter.js +0 -121
- package/src/adapters/abstract/router-adapter.d.ts +0 -26
- package/src/adapters/abstract/router-adapter.js +0 -5
- package/src/adapters/abstract/server-adapter.d.ts +0 -69
- package/src/adapters/abstract/server-adapter.js +0 -15
- package/src/adapters/bun/client-bridge.d.ts +0 -34
- package/src/adapters/bun/client-bridge.js +0 -48
- package/src/adapters/bun/create-app.d.ts +0 -60
- package/src/adapters/bun/create-app.js +0 -140
- package/src/adapters/bun/hmr-manager.d.ts +0 -47
- package/src/adapters/bun/hmr-manager.js +0 -58
- package/src/adapters/bun/index.d.ts +0 -2
- package/src/adapters/bun/index.js +0 -8
- package/src/adapters/bun/runtime-host.d.ts +0 -52
- package/src/adapters/bun/runtime-host.js +0 -56
- package/src/adapters/bun/server-adapter.d.ts +0 -216
- package/src/adapters/bun/server-adapter.js +0 -445
- package/src/adapters/bun/static-preview-host.d.ts +0 -28
- package/src/adapters/bun/static-preview-host.js +0 -45
- package/src/adapters/create-app.d.ts +0 -20
- package/src/adapters/create-app.js +0 -66
- package/src/adapters/index.d.ts +0 -2
- package/src/adapters/index.js +0 -8
- package/src/adapters/node/create-app.d.ts +0 -24
- package/src/adapters/node/create-app.js +0 -92
- package/src/adapters/node/http-request-bridge.d.ts +0 -57
- package/src/adapters/node/http-request-bridge.js +0 -118
- package/src/adapters/node/node-client-bridge.d.ts +0 -26
- package/src/adapters/node/node-client-bridge.js +0 -66
- package/src/adapters/node/node-hmr-manager.d.ts +0 -52
- package/src/adapters/node/node-hmr-manager.js +0 -49
- package/src/adapters/node/runtime-host.d.ts +0 -57
- package/src/adapters/node/runtime-host.js +0 -92
- package/src/adapters/node/server-adapter-dependencies.d.ts +0 -19
- package/src/adapters/node/server-adapter-dependencies.js +0 -18
- package/src/adapters/node/server-adapter.d.ts +0 -138
- package/src/adapters/node/server-adapter.js +0 -315
- package/src/adapters/node/static-content-server.d.ts +0 -60
- package/src/adapters/node/static-content-server.js +0 -194
- package/src/adapters/node/static-preview-host.d.ts +0 -55
- package/src/adapters/node/static-preview-host.js +0 -68
- package/src/adapters/shared/api-response.d.ts +0 -52
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.d.ts +0 -18
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +0 -25
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +0 -41
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +0 -62
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.d.ts +0 -23
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.d.ts +0 -75
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.d.ts +0 -22
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/render-context.d.ts +0 -16
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +0 -26
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -46
- package/src/adapters/shared/runtime-host.d.ts +0 -12
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.d.ts +0 -108
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.d.ts +0 -89
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.d.ts +0 -71
- package/src/adapters/shared/server-static-builder.js +0 -100
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -59
- package/src/adapters/shared/shared-hmr-manager.js +0 -241
- package/src/adapters/shared/static-preview-host.d.ts +0 -10
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/build/browser-runtime-import-rewrite-plugin.d.ts +0 -26
- package/src/build/browser-runtime-import-rewrite-plugin.js +0 -165
- package/src/build/browser-runtime-manifest.d.ts +0 -31
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/build-adapter.d.ts +0 -247
- package/src/build/build-adapter.js +0 -671
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -52
- package/src/build/build-types.d.ts +0 -57
- package/src/build/build-types.js +0 -0
- package/src/build/dev-build-coordinator.d.ts +0 -72
- package/src/build/dev-build-coordinator.js +0 -154
- package/src/build/esbuild-build-adapter.d.ts +0 -79
- package/src/build/esbuild-build-adapter.js +0 -521
- package/src/build/runtime-build-executor.d.ts +0 -14
- package/src/build/runtime-build-executor.js +0 -22
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/config/config-builder.d.ts +0 -252
- package/src/config/config-builder.js +0 -598
- package/src/config/constants.js +0 -25
- package/src/dev/host-runtime.d.ts +0 -10
- package/src/dev/host-runtime.js +0 -24
- package/src/dev/sc-server.d.ts +0 -30
- package/src/dev/sc-server.js +0 -111
- package/src/eco/eco.browser.d.ts +0 -2
- package/src/eco/eco.browser.js +0 -88
- package/src/eco/eco.d.ts +0 -9
- package/src/eco/eco.js +0 -119
- package/src/eco/eco.types.d.ts +0 -233
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +0 -1
- package/src/eco/eco.utils.js +0 -10
- package/src/eco/global-injector-map.d.ts +0 -16
- package/src/eco/global-injector-map.js +0 -80
- package/src/eco/lazy-injector-map.d.ts +0 -8
- package/src/eco/lazy-injector-map.js +0 -70
- package/src/eco/module-dependencies.d.ts +0 -18
- package/src/eco/module-dependencies.js +0 -49
- package/src/errors/http-error.d.ts +0 -31
- package/src/errors/http-error.js +0 -50
- package/src/errors/index.d.ts +0 -3
- package/src/errors/index.js +0 -6
- package/src/errors/locals-access-error.d.ts +0 -4
- package/src/errors/locals-access-error.js +0 -9
- package/src/global/app-logger.d.ts +0 -2
- package/src/global/app-logger.js +0 -6
- package/src/hmr/client/hmr-runtime.d.ts +0 -5
- package/src/hmr/client/hmr-runtime.js +0 -117
- package/src/hmr/hmr-strategy.d.ts +0 -162
- package/src/hmr/hmr-strategy.js +0 -44
- package/src/hmr/hmr.postcss.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.d.ts +0 -1
- package/src/hmr/hmr.test.e2e.js +0 -43
- package/src/hmr/strategies/default-hmr-strategy.d.ts +0 -43
- package/src/hmr/strategies/default-hmr-strategy.js +0 -34
- package/src/hmr/strategies/js-hmr-strategy.d.ts +0 -134
- package/src/hmr/strategies/js-hmr-strategy.js +0 -173
- package/src/index.browser.d.ts +0 -3
- package/src/index.browser.js +0 -4
- package/src/index.d.ts +0 -6
- package/src/index.js +0 -21
- package/src/integrations/ghtml/ghtml-renderer.d.ts +0 -16
- package/src/integrations/ghtml/ghtml-renderer.js +0 -57
- package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
- package/src/integrations/ghtml/ghtml.constants.js +0 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
- package/src/integrations/ghtml/ghtml.plugin.js +0 -20
- package/src/plugins/alias-resolver-plugin.d.ts +0 -3
- package/src/plugins/alias-resolver-plugin.js +0 -61
- package/src/plugins/eco-component-meta-plugin.d.ts +0 -108
- package/src/plugins/eco-component-meta-plugin.js +0 -175
- package/src/plugins/foreign-jsx-override-plugin.d.ts +0 -33
- package/src/plugins/foreign-jsx-override-plugin.js +0 -41
- package/src/plugins/integration-plugin.d.ts +0 -230
- package/src/plugins/integration-plugin.js +0 -201
- package/src/plugins/processor.d.ts +0 -97
- package/src/plugins/processor.js +0 -141
- package/src/plugins/runtime-capability.js +0 -0
- package/src/plugins/source-transform.d.ts +0 -46
- package/src/plugins/source-transform.js +0 -71
- package/src/route-renderer/orchestration/component-render-context.d.ts +0 -97
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +0 -110
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -233
- package/src/route-renderer/orchestration/integration-renderer.d.ts +0 -534
- package/src/route-renderer/orchestration/integration-renderer.js +0 -991
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +0 -29
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +0 -3
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/render-output.utils.d.ts +0 -66
- package/src/route-renderer/orchestration/render-output.utils.js +0 -171
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +0 -156
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -577
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +0 -37
- package/src/route-renderer/page-loading/component-dependency-collection.js +0 -132
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +0 -24
- package/src/route-renderer/page-loading/declared-asset-collection.js +0 -106
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +0 -35
- package/src/route-renderer/page-loading/dependency-resolver.js +0 -115
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +0 -11
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +0 -57
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +0 -45
- package/src/route-renderer/page-loading/lazy-entry-collection.js +0 -105
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +0 -19
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +0 -40
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +0 -5
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +0 -33
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +0 -3
- package/src/route-renderer/page-loading/module-declaration-scripts.js +0 -18
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +0 -13
- package/src/route-renderer/page-loading/page-dependency-bundling.js +0 -137
- package/src/route-renderer/page-loading/page-module-loader.d.ts +0 -90
- package/src/route-renderer/page-loading/page-module-loader.js +0 -127
- package/src/route-renderer/route-renderer.d.ts +0 -69
- package/src/route-renderer/route-renderer.js +0 -80
- package/src/router/client/link-intent.js +0 -34
- package/src/router/client/link-intent.test.browser.d.ts +0 -1
- package/src/router/client/link-intent.test.browser.js +0 -43
- package/src/router/client/navigation-coordinator.d.ts +0 -169
- package/src/router/client/navigation-coordinator.js +0 -215
- package/src/router/server/route-registry.d.ts +0 -78
- package/src/router/server/route-registry.js +0 -262
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +0 -3
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +0 -56
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +0 -103
- package/src/services/assets/asset-processing-service/asset-processing.service.js +0 -285
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +0 -17
- package/src/services/assets/asset-processing-service/asset.factory.js +0 -82
- package/src/services/assets/asset-processing-service/assets.types.d.ts +0 -103
- 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 +0 -57
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +0 -49
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +0 -20
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +0 -41
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +0 -30
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +0 -65
- package/src/services/assets/asset-processing-service/index.d.ts +0 -6
- package/src/services/assets/asset-processing-service/index.js +0 -6
- package/src/services/assets/asset-processing-service/page-package.d.ts +0 -6
- package/src/services/assets/asset-processing-service/page-package.js +0 -80
- package/src/services/assets/asset-processing-service/processor.interface.js +0 -6
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +0 -8
- package/src/services/assets/asset-processing-service/processor.registry.js +0 -15
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +0 -24
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +0 -65
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -22
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +0 -136
- package/src/services/assets/asset-processing-service/processors/index.d.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/index.js +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +0 -6
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +0 -120
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -9
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +0 -97
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +0 -42
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +0 -126
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -8
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +0 -59
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -9
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +0 -69
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -18
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +0 -45
- package/src/services/assets/browser-bundle.service.d.ts +0 -73
- package/src/services/assets/browser-bundle.service.js +0 -41
- package/src/services/cache/cache.types.d.ts +0 -107
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +0 -7
- package/src/services/cache/index.js +0 -7
- package/src/services/cache/memory-cache-store.d.ts +0 -42
- package/src/services/cache/memory-cache-store.js +0 -98
- package/src/services/cache/page-cache-service.d.ts +0 -70
- package/src/services/cache/page-cache-service.js +0 -152
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +0 -75
- package/src/services/cache/page-request-cache-coordinator.service.js +0 -109
- package/src/services/html/html-rewriter-provider.service.d.ts +0 -40
- package/src/services/html/html-rewriter-provider.service.js +0 -68
- package/src/services/html/html-transformer.service.d.ts +0 -96
- package/src/services/html/html-transformer.service.js +0 -287
- package/src/services/invalidation/development-invalidation.service.d.ts +0 -74
- package/src/services/invalidation/development-invalidation.service.js +0 -190
- package/src/services/module-loading/app-module-loader.service.d.ts +0 -7
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +0 -24
- package/src/services/module-loading/app-server-module-transpiler.service.js +0 -151
- package/src/services/module-loading/host-module-loader-registry.d.ts +0 -4
- package/src/services/module-loading/host-module-loader-registry.js +0 -15
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/node-bootstrap-plugin.d.ts +0 -38
- package/src/services/module-loading/node-bootstrap-plugin.js +0 -215
- package/src/services/module-loading/page-module-import.service.d.ts +0 -95
- package/src/services/module-loading/page-module-import.service.js +0 -191
- package/src/services/module-loading/server-module-transpiler.service.d.ts +0 -63
- package/src/services/module-loading/server-module-transpiler.service.js +0 -64
- package/src/services/module-loading/source-module-support.d.ts +0 -5
- package/src/services/module-loading/source-module-support.js +0 -8
- package/src/services/runtime-state/dev-graph.service.d.ts +0 -118
- package/src/services/runtime-state/dev-graph.service.js +0 -162
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +0 -41
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +0 -85
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +0 -26
- package/src/services/runtime-state/server-invalidation-state.service.js +0 -35
- package/src/services/validation/schema-validation-service.d.ts +0 -122
- package/src/services/validation/schema-validation-service.js +0 -101
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +0 -104
- package/src/static-site-generator/static-site-generator.js +0 -316
- package/src/types/internal-types.d.ts +0 -232
- package/src/types/internal-types.js +0 -0
- package/src/types/public-types.d.ts +0 -1307
- package/src/types/public-types.js +0 -0
- package/src/utils/deep-merge.d.ts +0 -14
- package/src/utils/deep-merge.js +0 -32
- package/src/utils/hash.d.ts +0 -1
- package/src/utils/hash.js +0 -7
- package/src/utils/html-escaping.d.ts +0 -7
- package/src/utils/html-escaping.js +0 -6
- package/src/utils/html.js +0 -4
- package/src/utils/invariant.d.ts +0 -5
- package/src/utils/invariant.js +0 -11
- package/src/utils/locals-utils.d.ts +0 -15
- package/src/utils/locals-utils.js +0 -24
- package/src/utils/parse-cli-args.d.ts +0 -27
- package/src/utils/parse-cli-args.js +0 -62
- package/src/utils/path-utils.module.d.ts +0 -5
- package/src/utils/path-utils.module.js +0 -14
- package/src/utils/resolve-work-dir.d.ts +0 -11
- package/src/utils/resolve-work-dir.js +0 -31
- package/src/utils/runtime.d.ts +0 -11
- package/src/utils/runtime.js +0 -40
- package/src/utils/server-utils.module.d.ts +0 -19
- package/src/utils/server-utils.module.js +0 -56
- package/src/watchers/project-watcher.d.ts +0 -136
- package/src/watchers/project-watcher.js +0 -275
- package/src/watchers/project-watcher.test-helpers.d.ts +0 -4
- package/src/watchers/project-watcher.test-helpers.js +0 -52
- /package/src/utils/{html.d.ts → html.ts} +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'vitest';
|
|
3
|
+
import { SerializedBuildExecutor } from './serialized-build-executor.ts';
|
|
4
|
+
import type { BuildExecutor, BuildOptions, BuildResult } from './build-adapter.ts';
|
|
5
|
+
|
|
6
|
+
function createFakeExecutor(): BuildExecutor & { callOrder: number[]; active: number; maxActive: number } {
|
|
7
|
+
const state = { callOrder: [] as number[], active: 0, maxActive: 0 };
|
|
8
|
+
let counter = 0;
|
|
9
|
+
return {
|
|
10
|
+
get callOrder() {
|
|
11
|
+
return state.callOrder;
|
|
12
|
+
},
|
|
13
|
+
get active() {
|
|
14
|
+
return state.active;
|
|
15
|
+
},
|
|
16
|
+
get maxActive() {
|
|
17
|
+
return state.maxActive;
|
|
18
|
+
},
|
|
19
|
+
async build(options: BuildOptions): Promise<BuildResult> {
|
|
20
|
+
const id = ++counter;
|
|
21
|
+
state.callOrder.push(id);
|
|
22
|
+
state.active += 1;
|
|
23
|
+
state.maxActive = Math.max(state.maxActive, state.active);
|
|
24
|
+
try {
|
|
25
|
+
const delay = typeof options.naming === 'string' ? Number.parseInt(options.naming, 10) || 10 : 10;
|
|
26
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
27
|
+
return { success: true, logs: [], outputs: [{ path: `/out/${id}.js` }] };
|
|
28
|
+
} finally {
|
|
29
|
+
state.active -= 1;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
test('SerializedBuildExecutor returns the inner executor via unwrap', () => {
|
|
36
|
+
const inner = createFakeExecutor();
|
|
37
|
+
const serialized = new SerializedBuildExecutor(inner);
|
|
38
|
+
assert.equal(serialized.unwrap(), inner);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test('SerializedBuildExecutor runs a single build through the inner executor', async () => {
|
|
42
|
+
const inner = createFakeExecutor();
|
|
43
|
+
const serialized = new SerializedBuildExecutor(inner);
|
|
44
|
+
const result = await serialized.build({ entrypoints: ['/in/index.ts'] });
|
|
45
|
+
assert.equal(result.success, true);
|
|
46
|
+
assert.equal(inner.callOrder.length, 1);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('SerializedBuildExecutor runs concurrent builds in order, never overlapping', async () => {
|
|
50
|
+
const inner = createFakeExecutor();
|
|
51
|
+
const serialized = new SerializedBuildExecutor(inner);
|
|
52
|
+
const builds = [
|
|
53
|
+
serialized.build({ entrypoints: ['/in/a.ts'], naming: '20' }),
|
|
54
|
+
serialized.build({ entrypoints: ['/in/b.ts'], naming: '10' }),
|
|
55
|
+
serialized.build({ entrypoints: ['/in/c.ts'], naming: '5' }),
|
|
56
|
+
];
|
|
57
|
+
const results = await Promise.all(builds);
|
|
58
|
+
assert.deepEqual(
|
|
59
|
+
results.map((result) => result.outputs[0]?.path),
|
|
60
|
+
['/out/1.js', '/out/2.js', '/out/3.js'],
|
|
61
|
+
);
|
|
62
|
+
assert.equal(inner.callOrder.length, 3);
|
|
63
|
+
assert.equal(inner.maxActive, 1, 'no two inner builds ever ran concurrently');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test('SerializedBuildExecutor releases the queue on failure so the next build can run', async () => {
|
|
67
|
+
let shouldFail = true;
|
|
68
|
+
const inner: BuildExecutor = {
|
|
69
|
+
async build(_options) {
|
|
70
|
+
if (shouldFail) {
|
|
71
|
+
shouldFail = false;
|
|
72
|
+
throw new Error('synthetic build failure');
|
|
73
|
+
}
|
|
74
|
+
return { success: true, logs: [], outputs: [{ path: '/out/recovered.js' }] };
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const serialized = new SerializedBuildExecutor(inner);
|
|
78
|
+
|
|
79
|
+
await assert.rejects(() => serialized.build({ entrypoints: ['/in/a.ts'] }), /synthetic build failure/);
|
|
80
|
+
const result = await serialized.build({ entrypoints: ['/in/b.ts'] });
|
|
81
|
+
assert.equal(result.success, true);
|
|
82
|
+
assert.equal(result.outputs[0]?.path, '/out/recovered.js');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('SerializedBuildExecutor.resetForTests clears the queue tail', async () => {
|
|
86
|
+
const inner = createFakeExecutor();
|
|
87
|
+
const serialized = new SerializedBuildExecutor(inner);
|
|
88
|
+
|
|
89
|
+
const pending = serialized.build({ entrypoints: ['/in/a.ts'] });
|
|
90
|
+
serialized.resetForTests();
|
|
91
|
+
const result = await pending;
|
|
92
|
+
assert.equal(result.success, true);
|
|
93
|
+
|
|
94
|
+
const followUp = await serialized.build({ entrypoints: ['/in/b.ts'] });
|
|
95
|
+
assert.equal(followUp.outputs[0]?.path, '/out/2.js');
|
|
96
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { BuildExecutor, BuildOptions, BuildResult } from './build-adapter.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* FIFO-serialized build executor wrapper.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* Wraps any `BuildExecutor` and ensures that no two builds run
|
|
8
|
+
* concurrently. The next build waits for the previous one to finish
|
|
9
|
+
* (success or failure) before starting.
|
|
10
|
+
*
|
|
11
|
+
* This is a bundler-agnostic primitive. It is unaware of bundler
|
|
12
|
+
* lifecycle events and exists purely to enforce one build at a time.
|
|
13
|
+
* Use it from the dev watch pipeline, the static preview path, or any
|
|
14
|
+
* caller that issues builds concurrently.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* FIFO-serialized wrapper around a {@link BuildExecutor}.
|
|
19
|
+
*
|
|
20
|
+
* Every `build()` call enqueues onto the wrapper's internal queue. A
|
|
21
|
+
* build only starts after the previous build's promise has settled.
|
|
22
|
+
*/
|
|
23
|
+
export class SerializedBuildExecutor implements BuildExecutor {
|
|
24
|
+
private readonly inner: BuildExecutor;
|
|
25
|
+
private tail: Promise<unknown> = Promise.resolve();
|
|
26
|
+
|
|
27
|
+
constructor(inner: BuildExecutor) {
|
|
28
|
+
this.inner = inner;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Run a build through the serialized queue. The returned promise
|
|
33
|
+
* resolves with the inner executor's `BuildResult`. A rejected
|
|
34
|
+
* inner build does not block the queue — the next caller can
|
|
35
|
+
* proceed.
|
|
36
|
+
*/
|
|
37
|
+
build(options: BuildOptions): Promise<BuildResult> {
|
|
38
|
+
return this.run(() => this.inner.build(options));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Run an arbitrary async operation through the serialized queue.
|
|
43
|
+
*
|
|
44
|
+
* Use this when the work is not a `build()` call against a wrapped
|
|
45
|
+
* executor (e.g. when composing with a coordinator that needs to
|
|
46
|
+
* inject recovery around the inner call). The returned promise
|
|
47
|
+
* resolves with the operation's result. A rejected operation does
|
|
48
|
+
* not block the queue.
|
|
49
|
+
*/
|
|
50
|
+
run<T>(operation: () => Promise<T>): Promise<T> {
|
|
51
|
+
const next = this.tail.catch(() => undefined).then(() => operation());
|
|
52
|
+
|
|
53
|
+
this.tail = next.catch(() => undefined);
|
|
54
|
+
return next;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Returns the wrapped executor. Tests use this to assert the
|
|
59
|
+
* delegation chain.
|
|
60
|
+
*/
|
|
61
|
+
unwrap(): BuildExecutor {
|
|
62
|
+
return this.inner;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reset the queue to an empty state. Tests use this to recover
|
|
67
|
+
* from a poisoned tail.
|
|
68
|
+
*/
|
|
69
|
+
resetForTests(): void {
|
|
70
|
+
this.tail = Promise.resolve();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Overrides the internal queue tail for fault-recovery tests. The
|
|
75
|
+
* supplied promise is awaited before the next enqueued operation
|
|
76
|
+
* starts.
|
|
77
|
+
*/
|
|
78
|
+
setBuildQueueForTests(queue: Promise<unknown>): void {
|
|
79
|
+
this.tail = queue;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Returns the current internal queue tail for fault-recovery
|
|
84
|
+
* tests. Tests await this to assert that recovery has cleared a
|
|
85
|
+
* wedged queue.
|
|
86
|
+
*/
|
|
87
|
+
getBuildQueueForTests(): Promise<unknown> {
|
|
88
|
+
return this.tail;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side CSS shim plugin for the bundler adapter.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Page modules imported by the server (so the framework can read
|
|
6
|
+
* `getStaticProps` / `staticPaths` / page metadata) commonly have
|
|
7
|
+
* `import './style.css'` at the top. The bundler does not bundle
|
|
8
|
+
* CSS, and the server only needs the JS exports — the CSS itself
|
|
9
|
+
* is delivered to the browser via the page's `dependencies.stylesheets`
|
|
10
|
+
* declarations. This plugin:
|
|
11
|
+
*
|
|
12
|
+
* - Resolves `.css` imports to the absolute on-disk path.
|
|
13
|
+
* - Loads them and returns an empty ESM module with
|
|
14
|
+
* `moduleSideEffects: true` so the bundler keeps the import in
|
|
15
|
+
* the dependency graph without trying to bundle the bytes.
|
|
16
|
+
*
|
|
17
|
+
* The plugin is added by the adapter on every server-side build.
|
|
18
|
+
* Browser-side builds that want real CSS bundling should keep using
|
|
19
|
+
* a dedicated CSS pipeline (e.g. the postcss processor's output)
|
|
20
|
+
* and continue to declare stylesheets in `dependencies.stylesheets`
|
|
21
|
+
* — the shim is intentionally inert for those flows.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
25
|
+
import path from 'node:path';
|
|
26
|
+
|
|
27
|
+
type RolldownPluginLike = {
|
|
28
|
+
name: string;
|
|
29
|
+
resolveId: (source: string, importer: string | undefined) => Promise<string | null> | string | null;
|
|
30
|
+
load: (id: string) =>
|
|
31
|
+
| Promise<{ code: string; moduleType: 'js'; moduleSideEffects: boolean } | null>
|
|
32
|
+
| {
|
|
33
|
+
code: string;
|
|
34
|
+
moduleType: 'js';
|
|
35
|
+
moduleSideEffects: boolean;
|
|
36
|
+
}
|
|
37
|
+
| null;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const CSS_PATH = /\.css$/u;
|
|
41
|
+
const CSS_QUERY = '?ecopages-css-shim';
|
|
42
|
+
|
|
43
|
+
function stripShimQuery(id: string): string {
|
|
44
|
+
const queryIndex = id.indexOf('?');
|
|
45
|
+
return queryIndex === -1 ? id : id.slice(0, queryIndex);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Builds a Rolldown plugin that turns `.css` imports into no-op ESM
|
|
50
|
+
* modules while preserving the dependency graph.
|
|
51
|
+
*/
|
|
52
|
+
export function createServerSideCssShimPlugin(): RolldownPluginLike {
|
|
53
|
+
return {
|
|
54
|
+
name: 'ecopages:server-side-css-shim',
|
|
55
|
+
async resolveId(source, importer) {
|
|
56
|
+
if (!CSS_PATH.test(source)) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
|
|
61
|
+
return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
|
|
62
|
+
},
|
|
63
|
+
async load(id) {
|
|
64
|
+
if (!id.endsWith(CSS_QUERY)) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const realPath = stripShimQuery(id);
|
|
69
|
+
readFileSync(realPath, 'utf-8');
|
|
70
|
+
return {
|
|
71
|
+
code: 'export default "";',
|
|
72
|
+
moduleType: 'js',
|
|
73
|
+
moduleSideEffects: true,
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ModuleParseCache, moduleParseCache, cachedParseSync } from './module-parse-cache.ts';
|
|
3
|
+
|
|
4
|
+
describe('ModuleParseCache', () => {
|
|
5
|
+
it('returns the same result for identical (path, source, options)', () => {
|
|
6
|
+
const cache = new ModuleParseCache();
|
|
7
|
+
const source = 'export const x = 1;';
|
|
8
|
+
const first = cache.getOrParse('/a.ts', source, { sourceType: 'module' });
|
|
9
|
+
const second = cache.getOrParse('/a.ts', source, { sourceType: 'module' });
|
|
10
|
+
expect(second).toBe(first);
|
|
11
|
+
expect(cache.stats().hits).toBe(1);
|
|
12
|
+
expect(cache.stats().misses).toBe(1);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('re-parses when source changes', () => {
|
|
16
|
+
const cache = new ModuleParseCache();
|
|
17
|
+
const a = cache.getOrParse('/a.ts', 'export const x = 1;');
|
|
18
|
+
const b = cache.getOrParse('/a.ts', 'export const x = 2;');
|
|
19
|
+
expect(b).not.toBe(a);
|
|
20
|
+
expect(cache.stats().misses).toBe(2);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('re-parses when options differ', () => {
|
|
24
|
+
const cache = new ModuleParseCache();
|
|
25
|
+
const source = 'export const x = 1;';
|
|
26
|
+
const a = cache.getOrParse('/a.ts', source, { sourceType: 'module' });
|
|
27
|
+
const b = cache.getOrParse('/a.ts', source, { sourceType: 'script' });
|
|
28
|
+
expect(b).not.toBe(a);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('does not cross-contaminate across file paths', () => {
|
|
32
|
+
const cache = new ModuleParseCache();
|
|
33
|
+
const source = 'export const x = 1;';
|
|
34
|
+
const a = cache.getOrParse('/a.ts', source);
|
|
35
|
+
const b = cache.getOrParse('/b.ts', source);
|
|
36
|
+
expect(b).not.toBe(a);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('evicts oldest entry when capacity exceeded', () => {
|
|
40
|
+
const cache = new ModuleParseCache(2);
|
|
41
|
+
cache.getOrParse('/a.ts', 'a');
|
|
42
|
+
cache.getOrParse('/b.ts', 'b');
|
|
43
|
+
cache.getOrParse('/c.ts', 'c');
|
|
44
|
+
expect(cache.size).toBe(2);
|
|
45
|
+
// /a.ts should have been evicted
|
|
46
|
+
const d = cache.getOrParse('/a.ts', 'a');
|
|
47
|
+
expect(d).toBeDefined();
|
|
48
|
+
expect(cache.size).toBe(2);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('clear() resets state', () => {
|
|
52
|
+
const cache = new ModuleParseCache();
|
|
53
|
+
cache.getOrParse('/a.ts', 'export const x = 1;');
|
|
54
|
+
cache.clear();
|
|
55
|
+
expect(cache.size).toBe(0);
|
|
56
|
+
expect(cache.stats().hits).toBe(0);
|
|
57
|
+
expect(cache.stats().misses).toBe(0);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('cachedParseSync uses the shared default cache', () => {
|
|
61
|
+
const source = 'export const y = 1;';
|
|
62
|
+
const a = cachedParseSync('/y.ts', source);
|
|
63
|
+
const b = cachedParseSync('/y.ts', source);
|
|
64
|
+
expect(b).toBe(a);
|
|
65
|
+
// Re-touching hits the same instance, so its stats reflect our call.
|
|
66
|
+
const stats = moduleParseCache.stats();
|
|
67
|
+
expect(stats.hits).toBeGreaterThanOrEqual(1);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('throws on invalid maxEntries', () => {
|
|
71
|
+
expect(() => new ModuleParseCache(0)).toThrow();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process-wide parse cache for `oxc-parser.parseSync`.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Several build plugins (eco-component-meta, client-graph-boundary,
|
|
6
|
+
* browser-runtime) each call `parseSync` on the same source file with
|
|
7
|
+
* overlapping options. This cache memoizes the parse result keyed by
|
|
8
|
+
* `(absolute path, source, options)`. When the source is unchanged,
|
|
9
|
+
* subsequent calls return the cached result without re-parsing.
|
|
10
|
+
*
|
|
11
|
+
* The cache is LRU-bounded (10 000 entries) and key-stable across a
|
|
12
|
+
* single HMR session. It is **content-hashed** rather than
|
|
13
|
+
* mtime-hashed so that `touch`/`utimes` does not invalidate a
|
|
14
|
+
* still-valid parse.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { parseSync, type ParseResult, type ParserOptions } from 'oxc-parser';
|
|
18
|
+
import { rapidhash } from '../utils/hash.ts';
|
|
19
|
+
|
|
20
|
+
const DEFAULT_MAX_ENTRIES = 10_000;
|
|
21
|
+
|
|
22
|
+
export type ModuleParseOptions = ParserOptions & {
|
|
23
|
+
/**
|
|
24
|
+
* Optional parser language override. If omitted, derived from the file
|
|
25
|
+
* extension at lookup time. Set this explicitly if your caller already
|
|
26
|
+
* computed the language (avoids re-deriving inside the cache).
|
|
27
|
+
*/
|
|
28
|
+
lang?: ParserOptions['lang'];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type CacheKey = string;
|
|
32
|
+
|
|
33
|
+
type CacheEntry = {
|
|
34
|
+
hash: number | bigint;
|
|
35
|
+
result: ParseResult;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* LRU-bounded module parse cache.
|
|
40
|
+
*
|
|
41
|
+
* Single instance shared across the process. Constructed lazily; use
|
|
42
|
+
* {@link moduleParseCache} for the default shared instance.
|
|
43
|
+
*/
|
|
44
|
+
export class ModuleParseCache {
|
|
45
|
+
private readonly entries = new Map<CacheKey, CacheEntry>();
|
|
46
|
+
private readonly maxEntries: number;
|
|
47
|
+
private hits = 0;
|
|
48
|
+
private misses = 0;
|
|
49
|
+
|
|
50
|
+
constructor(maxEntries: number = DEFAULT_MAX_ENTRIES) {
|
|
51
|
+
if (maxEntries <= 0) {
|
|
52
|
+
throw new Error(`ModuleParseCache: maxEntries must be > 0, got ${maxEntries}`);
|
|
53
|
+
}
|
|
54
|
+
this.maxEntries = maxEntries;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Parse `source` for `filePath`, memoizing by (filePath, source, options).
|
|
59
|
+
*
|
|
60
|
+
* @returns the {@link ParseResult} from `oxc-parser.parseSync`.
|
|
61
|
+
*/
|
|
62
|
+
getOrParse(filePath: string, source: string, options: ModuleParseOptions = {}): ParseResult {
|
|
63
|
+
const hash = rapidhash(source);
|
|
64
|
+
const key = makeKey(filePath, hash, options);
|
|
65
|
+
|
|
66
|
+
const existing = this.entries.get(key);
|
|
67
|
+
if (existing && existing.hash === hash) {
|
|
68
|
+
this.hits += 1;
|
|
69
|
+
// Refresh LRU position.
|
|
70
|
+
this.entries.delete(key);
|
|
71
|
+
this.entries.set(key, existing);
|
|
72
|
+
return existing.result;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.misses += 1;
|
|
76
|
+
const result = parseSync(filePath, source, options);
|
|
77
|
+
this.entries.set(key, { hash, result });
|
|
78
|
+
|
|
79
|
+
if (this.entries.size > this.maxEntries) {
|
|
80
|
+
// Map iteration order is insertion order; the first key is the
|
|
81
|
+
// least recently used (we delete-then-set on hits, so the
|
|
82
|
+
// oldest still-present entry is the LRU one).
|
|
83
|
+
const oldestKey = this.entries.keys().next().value;
|
|
84
|
+
if (oldestKey !== undefined) {
|
|
85
|
+
this.entries.delete(oldestKey);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Clear all cached entries. Useful in tests and on full-rebuild signals. */
|
|
93
|
+
clear(): void {
|
|
94
|
+
this.entries.clear();
|
|
95
|
+
this.hits = 0;
|
|
96
|
+
this.misses = 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Current cache size (for observability). */
|
|
100
|
+
get size(): number {
|
|
101
|
+
return this.entries.size;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Cumulative hit/miss counters (for observability). */
|
|
105
|
+
stats(): { hits: number; misses: number; size: number; hitRate: number } {
|
|
106
|
+
const total = this.hits + this.misses;
|
|
107
|
+
return {
|
|
108
|
+
hits: this.hits,
|
|
109
|
+
misses: this.misses,
|
|
110
|
+
size: this.entries.size,
|
|
111
|
+
hitRate: total === 0 ? 0 : this.hits / total,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Default shared cache. Use this from plugin code so the cache is
|
|
118
|
+
* amortized across plugins and build invocations.
|
|
119
|
+
*/
|
|
120
|
+
export const moduleParseCache = new ModuleParseCache();
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Drop-in replacement for `oxc-parser.parseSync` that uses the shared
|
|
124
|
+
* {@link moduleParseCache}. Use everywhere we currently call `parseSync`
|
|
125
|
+
* on user/source files during a build.
|
|
126
|
+
*/
|
|
127
|
+
export function cachedParseSync(filePath: string, source: string, options: ModuleParseOptions = {}): ParseResult {
|
|
128
|
+
return moduleParseCache.getOrParse(filePath, source, options);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function makeKey(filePath: string, sourceHash: number | bigint, options: ModuleParseOptions): CacheKey {
|
|
132
|
+
// Stringify only the option keys we actually use; `parseSync` does
|
|
133
|
+
// not deeply equal-check options so any extra keys would be noise.
|
|
134
|
+
const lang = options.lang ?? '';
|
|
135
|
+
const sourceType = options.sourceType ?? '';
|
|
136
|
+
return `${filePath} ${sourceHash.toString(36)} ${lang} ${sourceType}`;
|
|
137
|
+
}
|
package/src/config/README.md
CHANGED
|
@@ -27,7 +27,7 @@ It is responsible for:
|
|
|
27
27
|
- `ConfigBuilder.build()` decides ordering, validates compatibility, and seals build ownership for the finalized app config.
|
|
28
28
|
- Runtime startup reuses finalized config/build state; it should not recompute manifest ownership.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
App-owned is the default ownership path. Host-owned is explicit and should be selected during config construction when a host-driven compatibility flow must avoid silently falling back to app build execution.
|
|
31
31
|
|
|
32
32
|
## Output
|
|
33
33
|
|