@ecopages/core 0.2.0-alpha.8 → 0.2.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -28
- package/package.json +94 -116
- package/src/adapters/README.md +2 -2
- package/src/adapters/abstract/application-adapter.d.ts +28 -2
- package/src/adapters/abstract/application-adapter.js +14 -2
- package/src/adapters/abstract/router-adapter.d.ts +1 -1
- package/src/adapters/abstract/server-adapter.d.ts +2 -2
- package/src/adapters/bun/client-bridge.d.ts +1 -1
- package/src/adapters/bun/create-app.d.ts +12 -12
- package/src/adapters/bun/create-app.js +64 -41
- package/src/adapters/bun/hmr-manager.d.ts +19 -115
- package/src/adapters/bun/hmr-manager.js +25 -301
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -2
- package/src/adapters/bun/runtime-host.d.ts +52 -0
- package/src/adapters/bun/runtime-host.js +56 -0
- package/src/adapters/bun/server-adapter.d.ts +100 -32
- package/src/adapters/bun/server-adapter.js +142 -65
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/{create-app.d.ts → adapters/create-app.d.ts} +9 -6
- package/src/{create-app.js → adapters/create-app.js} +4 -4
- package/src/adapters/index.d.ts +1 -5
- package/src/adapters/index.js +1 -7
- package/src/adapters/node/create-app.d.ts +15 -12
- package/src/adapters/node/create-app.js +34 -85
- package/src/adapters/node/http-request-bridge.d.ts +57 -0
- package/src/adapters/node/http-request-bridge.js +118 -0
- package/src/adapters/node/node-client-bridge.d.ts +1 -1
- package/src/adapters/node/node-hmr-manager.d.ts +22 -103
- package/src/adapters/node/node-hmr-manager.js +26 -289
- package/src/adapters/node/runtime-host.d.ts +57 -0
- package/src/adapters/node/runtime-host.js +92 -0
- package/src/adapters/node/server-adapter-dependencies.d.ts +19 -0
- package/src/adapters/node/server-adapter-dependencies.js +18 -0
- package/src/adapters/node/server-adapter.d.ts +19 -42
- package/src/adapters/node/server-adapter.js +94 -139
- package/src/adapters/node/static-content-server.d.ts +1 -1
- package/src/adapters/node/static-content-server.js +1 -1
- package/src/adapters/node/static-preview-host.d.ts +55 -0
- package/src/adapters/node/static-preview-host.js +68 -0
- package/src/adapters/shared/application-adapter.d.ts +1 -1
- package/src/adapters/shared/define-api-handler.d.ts +1 -1
- package/src/adapters/shared/explicit-static-render-preparation.d.ts +25 -0
- package/src/adapters/shared/explicit-static-render-preparation.js +26 -0
- package/src/adapters/shared/explicit-static-route-matcher.d.ts +7 -4
- package/src/adapters/shared/explicit-static-route-matcher.js +14 -16
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +7 -10
- package/src/adapters/shared/file-route-middleware-pipeline.js +2 -11
- package/src/adapters/shared/fs-server-response-factory.d.ts +14 -10
- package/src/adapters/shared/fs-server-response-factory.js +11 -27
- package/src/adapters/shared/fs-server-response-matcher.d.ts +18 -18
- package/src/adapters/shared/fs-server-response-matcher.js +72 -46
- package/src/adapters/shared/hmr-entrypoint-registrar.js +1 -1
- package/src/adapters/shared/hmr-html-response.d.ts +1 -1
- package/src/adapters/shared/hmr-html-response.js +4 -3
- package/src/adapters/shared/render-context.d.ts +5 -3
- package/src/adapters/shared/render-context.js +24 -1
- package/src/adapters/shared/runtime-app-bootstrap.d.ts +26 -0
- package/src/adapters/shared/runtime-app-bootstrap.js +46 -0
- package/src/adapters/shared/runtime-host.d.ts +12 -0
- package/src/adapters/shared/server-adapter.d.ts +22 -11
- package/src/adapters/shared/server-adapter.js +183 -133
- package/src/adapters/shared/server-route-handler.d.ts +5 -5
- package/src/adapters/shared/server-route-handler.js +4 -4
- package/src/adapters/shared/server-static-builder.d.ts +8 -7
- package/src/adapters/shared/server-static-builder.js +6 -5
- package/src/adapters/shared/shared-hmr-manager.d.ts +59 -0
- package/src/adapters/shared/shared-hmr-manager.js +241 -0
- package/src/adapters/shared/static-preview-host.d.ts +10 -0
- package/src/build/README.md +57 -67
- package/src/build/browser-runtime-manifest.d.ts +31 -0
- package/src/build/browser-runtime-manifest.js +61 -0
- package/src/build/browser-runtime-plugin-helpers.d.ts +26 -0
- package/src/build/browser-runtime-plugin-helpers.js +14 -0
- package/src/build/browser-runtime-plugin.d.ts +78 -0
- package/src/build/browser-runtime-plugin.js +173 -0
- package/src/build/build-adapter.d.ts +384 -63
- package/src/build/build-adapter.js +129 -54
- package/src/build/build-manifest.d.ts +6 -0
- package/src/build/build-manifest.js +21 -2
- package/src/build/build-types.d.ts +2 -2
- package/src/build/rolldown-adapter-helpers.d.ts +58 -0
- package/src/build/rolldown-adapter-helpers.js +265 -0
- package/src/build/rolldown-build-adapter.d.ts +28 -0
- package/src/build/rolldown-build-adapter.js +65 -0
- package/src/build/rolldown-dev-build-adapter.d.ts +82 -0
- package/src/build/rolldown-dev-build-adapter.js +166 -0
- package/src/build/rolldown-plugin-bridge.d.ts +59 -0
- package/src/build/rolldown-plugin-bridge.js +199 -0
- package/src/build/runtime-build-executor.d.ts +15 -7
- package/src/build/runtime-build-executor.js +8 -9
- package/src/build/runtime-build-output-normalizer.d.ts +3 -0
- package/src/build/runtime-build-output-normalizer.js +111 -0
- package/src/build/serialized-build-executor.d.ts +64 -0
- package/src/build/serialized-build-executor.js +63 -0
- package/src/build/server-side-css-shim-plugin.d.ts +41 -0
- package/src/build/server-side-css-shim-plugin.js +35 -0
- package/src/cache/index.d.ts +6 -0
- package/src/cache/index.js +6 -0
- package/src/cache/module-parse-cache.d.ts +65 -0
- package/src/cache/module-parse-cache.js +75 -0
- package/src/config/README.md +5 -2
- package/src/config/config-builder.d.ts +41 -13
- package/src/config/config-builder.js +62 -24
- package/src/declarations.d.ts +1 -1
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +1 -1
- package/src/dev/sc-server.js +1 -1
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.js +50 -45
- package/src/eco/eco.types.d.ts +60 -8
- package/src/eco/eco.utils.d.ts +1 -40
- package/src/eco/eco.utils.js +5 -35
- package/src/eco/global-injector-map.d.ts +3 -3
- package/src/eco/global-injector-map.js +2 -2
- package/src/eco/lazy-injector-map.d.ts +2 -2
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -1
- package/src/hmr/client/hmr-runtime.js +9 -1
- package/src/hmr/hmr-strategy.d.ts +16 -13
- package/src/hmr/hmr-strategy.js +22 -7
- package/src/hmr/strategies/default-hmr-strategy.d.ts +2 -2
- package/src/hmr/strategies/default-hmr-strategy.js +1 -1
- package/src/hmr/strategies/js-hmr-strategy.d.ts +4 -9
- package/src/hmr/strategies/js-hmr-strategy.js +5 -10
- package/src/index.browser.d.ts +2 -2
- package/src/index.browser.js +1 -1
- package/src/index.d.ts +3 -2
- package/src/index.js +15 -4
- package/src/integrations/ghtml/ghtml-renderer.d.ts +2 -1
- package/src/integrations/ghtml/ghtml-renderer.js +24 -29
- package/src/integrations/ghtml/ghtml.constants.d.ts +1 -0
- package/src/integrations/ghtml/ghtml.constants.js +4 -0
- package/src/integrations/ghtml/ghtml.plugin.d.ts +2 -6
- package/src/integrations/ghtml/ghtml.plugin.js +3 -4
- package/src/plugins/README.md +1 -0
- package/src/plugins/alias-resolver-cache.d.ts +68 -0
- package/src/plugins/alias-resolver-cache.js +106 -0
- package/src/plugins/alias-resolver-plugin.d.ts +5 -1
- package/src/plugins/alias-resolver-plugin.js +19 -7
- package/src/plugins/eco-component-meta-plugin.d.ts +12 -1
- package/src/plugins/eco-component-meta-plugin.js +43 -25
- package/src/plugins/foreign-jsx-override-plugin.d.ts +33 -0
- package/src/plugins/foreign-jsx-override-plugin.js +41 -0
- package/src/plugins/integration-plugin.d.ts +136 -42
- package/src/plugins/integration-plugin.js +99 -31
- package/src/plugins/processor.d.ts +4 -2
- package/src/plugins/processor.js +8 -3
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/GRAPH.md +80 -318
- package/src/route-renderer/README.md +74 -78
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +290 -128
- package/src/route-renderer/orchestration/integration-renderer.js +660 -258
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +156 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.js +577 -0
- package/src/route-renderer/orchestration/template-serialization.d.ts +38 -0
- package/src/route-renderer/orchestration/template-serialization.js +45 -0
- package/src/route-renderer/page-loading/component-dependency-collection.d.ts +37 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +132 -0
- package/src/route-renderer/page-loading/declared-asset-collection.d.ts +24 -0
- package/src/route-renderer/page-loading/declared-asset-collection.js +106 -0
- package/src/route-renderer/page-loading/dependency-resolver.d.ts +2 -2
- package/src/route-renderer/page-loading/dependency-resolver.js +27 -354
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +7 -4
- package/src/route-renderer/page-loading/page-module-loader.js +8 -5
- package/src/route-renderer/route-renderer.d.ts +31 -23
- package/src/route-renderer/route-renderer.js +17 -24
- package/src/router/README.md +76 -8
- package/src/router/client/navigation-coordinator.d.ts +20 -0
- package/src/router/client/navigation-coordinator.js +2 -2
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/README.md +1 -2
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +3 -20
- package/src/services/assets/asset-processing-service/asset-processing.service.js +52 -98
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/asset.factory.js +2 -2
- package/src/services/assets/asset-processing-service/assets.types.d.ts +14 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +2 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +1 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -5
- package/src/services/assets/asset-processing-service/index.js +6 -5
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/assets/asset-processing-service/processor.interface.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +1 -1
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +3 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +10 -5
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +69 -5
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -5
- package/src/services/assets/asset-processing-service/processors/index.js +5 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +3 -2
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +66 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +4 -3
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +27 -6
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +38 -3
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +57 -6
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +5 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +39 -5
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +2 -2
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +5 -2
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +44 -3
- package/src/services/assets/browser-bundle.service.js +15 -7
- package/src/services/html/html-rewriter-provider.service.d.ts +3 -0
- package/src/services/html/html-rewriter-provider.service.js +4 -1
- package/src/services/html/html-transformer.service.d.ts +22 -3
- package/src/services/html/html-transformer.service.js +101 -35
- package/src/services/invalidation/development-invalidation.service.d.ts +1 -1
- package/src/services/invalidation/development-invalidation.service.js +1 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +9 -1
- package/src/services/module-loading/app-server-module-transpiler.service.js +102 -6
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/module-loading-types.d.ts +2 -0
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/page-module-import.service.d.ts +32 -8
- package/src/services/module-loading/page-module-import.service.js +83 -22
- package/src/services/module-loading/server-module-transpiler.service.d.ts +8 -14
- package/src/services/module-loading/server-module-transpiler.service.js +5 -2
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +6 -6
- package/src/services/runtime-state/dev-graph.service.js +10 -10
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +1 -1
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +1 -1
- package/src/static-site-generator/static-site-generator.d.ts +23 -28
- package/src/static-site-generator/static-site-generator.js +119 -156
- package/src/{internal-types.d.ts → types/internal-types.d.ts} +34 -23
- package/src/types/internal-types.js +0 -0
- package/src/{public-types.d.ts → types/public-types.d.ts} +195 -37
- package/src/types/public-types.js +0 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/locals-utils.d.ts +1 -1
- package/src/utils/parse-cli-args.d.ts +4 -1
- package/src/utils/parse-cli-args.js +16 -1
- package/src/utils/resolve-work-dir.js +1 -1
- package/src/watchers/project-watcher.d.ts +4 -4
- package/src/watchers/project-watcher.js +35 -41
- package/src/watchers/project-watcher.test-helpers.d.ts +2 -2
- package/src/watchers/project-watcher.test-helpers.js +5 -5
- package/CHANGELOG.md +0 -31
- package/src/adapters/abstract/application-adapter.ts +0 -337
- package/src/adapters/abstract/router-adapter.ts +0 -30
- package/src/adapters/abstract/server-adapter.ts +0 -79
- package/src/adapters/bun/client-bridge.ts +0 -62
- package/src/adapters/bun/create-app.ts +0 -189
- package/src/adapters/bun/hmr-manager.ts +0 -409
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/server-adapter.ts +0 -499
- package/src/adapters/bun/server-lifecycle.d.ts +0 -63
- package/src/adapters/bun/server-lifecycle.js +0 -92
- package/src/adapters/bun/server-lifecycle.ts +0 -124
- package/src/adapters/index.ts +0 -6
- package/src/adapters/node/bootstrap-dependency-resolver.d.ts +0 -44
- package/src/adapters/node/bootstrap-dependency-resolver.js +0 -172
- package/src/adapters/node/bootstrap-dependency-resolver.ts +0 -301
- package/src/adapters/node/create-app.ts +0 -179
- package/src/adapters/node/index.d.ts +0 -6
- package/src/adapters/node/index.js +0 -11
- package/src/adapters/node/index.ts +0 -16
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.ts +0 -381
- package/src/adapters/node/runtime-adapter.d.ts +0 -46
- package/src/adapters/node/runtime-adapter.js +0 -306
- package/src/adapters/node/runtime-adapter.ts +0 -439
- package/src/adapters/node/server-adapter.ts +0 -488
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/write-runtime-manifest.d.ts +0 -26
- package/src/adapters/node/write-runtime-manifest.js +0 -12
- package/src/adapters/node/write-runtime-manifest.ts +0 -38
- package/src/adapters/shared/api-response.ts +0 -104
- package/src/adapters/shared/application-adapter.ts +0 -199
- package/src/adapters/shared/define-api-handler.ts +0 -66
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -140
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -127
- package/src/adapters/shared/fs-server-response-factory.ts +0 -118
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -205
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -52
- package/src/adapters/shared/render-context.ts +0 -120
- package/src/adapters/shared/runtime-bootstrap.d.ts +0 -38
- package/src/adapters/shared/runtime-bootstrap.js +0 -43
- package/src/adapters/shared/runtime-bootstrap.ts +0 -79
- package/src/adapters/shared/server-adapter.ts +0 -489
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.ts +0 -166
- package/src/build/build-adapter.ts +0 -361
- package/src/build/build-manifest.ts +0 -54
- package/src/build/build-types.ts +0 -83
- package/src/build/dev-build-coordinator.d.ts +0 -74
- package/src/build/dev-build-coordinator.js +0 -161
- package/src/build/dev-build-coordinator.ts +0 -221
- package/src/build/esbuild-build-adapter.d.ts +0 -72
- package/src/build/esbuild-build-adapter.js +0 -422
- package/src/build/esbuild-build-adapter.ts +0 -559
- package/src/build/runtime-build-executor.ts +0 -34
- package/src/build/runtime-specifier-alias-plugin.d.ts +0 -15
- package/src/build/runtime-specifier-alias-plugin.js +0 -31
- package/src/build/runtime-specifier-alias-plugin.ts +0 -58
- package/src/config/config-builder.ts +0 -706
- package/src/constants.ts +0 -54
- package/src/create-app.ts +0 -87
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/component-render-context.d.ts +0 -105
- package/src/eco/component-render-context.js +0 -87
- package/src/eco/component-render-context.ts +0 -224
- package/src/eco/eco.ts +0 -242
- package/src/eco/eco.types.ts +0 -221
- package/src/eco/eco.utils.ts +0 -89
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -2
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/hmr/client/hmr-runtime.ts +0 -152
- package/src/hmr/hmr-strategy.ts +0 -172
- package/src/hmr/hmr.postcss.test.e2e.ts +0 -41
- package/src/hmr/hmr.test.e2e.ts +0 -66
- package/src/hmr/strategies/default-hmr-strategy.ts +0 -60
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -320
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -5
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -96
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -32
- package/src/internal-types.ts +0 -232
- package/src/plugins/alias-resolver-plugin.ts +0 -63
- package/src/plugins/eco-component-meta-plugin.ts +0 -481
- package/src/plugins/integration-plugin.ts +0 -226
- package/src/plugins/processor.ts +0 -240
- package/src/plugins/runtime-capability.ts +0 -14
- package/src/public-types.ts +0 -1317
- package/src/route-renderer/component-graph/component-graph-executor.d.ts +0 -32
- package/src/route-renderer/component-graph/component-graph-executor.js +0 -31
- package/src/route-renderer/component-graph/component-graph-executor.ts +0 -84
- package/src/route-renderer/component-graph/component-graph.d.ts +0 -42
- package/src/route-renderer/component-graph/component-graph.js +0 -72
- package/src/route-renderer/component-graph/component-graph.ts +0 -159
- package/src/route-renderer/component-graph/component-marker.d.ts +0 -52
- package/src/route-renderer/component-graph/component-marker.js +0 -46
- package/src/route-renderer/component-graph/component-marker.ts +0 -117
- package/src/route-renderer/component-graph/component-reference.d.ts +0 -10
- package/src/route-renderer/component-graph/component-reference.js +0 -19
- package/src/route-renderer/component-graph/component-reference.ts +0 -29
- package/src/route-renderer/component-graph/marker-graph-resolver.d.ts +0 -77
- package/src/route-renderer/component-graph/marker-graph-resolver.js +0 -95
- package/src/route-renderer/component-graph/marker-graph-resolver.ts +0 -155
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -790
- package/src/route-renderer/orchestration/render-execution.service.d.ts +0 -103
- package/src/route-renderer/orchestration/render-execution.service.js +0 -121
- package/src/route-renderer/orchestration/render-execution.service.ts +0 -230
- package/src/route-renderer/orchestration/render-preparation.service.d.ts +0 -121
- package/src/route-renderer/orchestration/render-preparation.service.js +0 -332
- package/src/route-renderer/orchestration/render-preparation.service.ts +0 -476
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -612
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -181
- package/src/route-renderer/route-renderer.ts +0 -115
- package/src/router/client/link-intent.test.browser.ts +0 -51
- package/src/router/client/link-intent.ts +0 -92
- package/src/router/client/navigation-coordinator.ts +0 -433
- package/src/router/server/fs-router-scanner.d.ts +0 -41
- package/src/router/server/fs-router-scanner.js +0 -156
- package/src/router/server/fs-router-scanner.ts +0 -219
- package/src/router/server/fs-router.d.ts +0 -26
- package/src/router/server/fs-router.js +0 -100
- package/src/router/server/fs-router.ts +0 -122
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -401
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -113
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -95
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processor.interface.ts +0 -27
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -82
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -95
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -66
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -88
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -85
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -27
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -80
- package/src/services/assets/browser-bundle.service.ts +0 -53
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.ts +0 -103
- package/src/services/html/html-transformer.service.ts +0 -279
- package/src/services/invalidation/development-invalidation.service.ts +0 -261
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -52
- package/src/services/module-loading/page-module-import.service.ts +0 -200
- package/src/services/module-loading/server-loader.service.d.ts +0 -96
- package/src/services/module-loading/server-loader.service.js +0 -32
- package/src/services/module-loading/server-loader.service.ts +0 -130
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -105
- package/src/services/runtime-manifest/node-runtime-manifest.service.d.ts +0 -35
- package/src/services/runtime-manifest/node-runtime-manifest.service.js +0 -60
- package/src/services/runtime-manifest/node-runtime-manifest.service.ts +0 -101
- package/src/services/runtime-state/dev-graph.service.ts +0 -217
- package/src/services/runtime-state/entrypoint-dependency-graph.service.ts +0 -136
- package/src/services/runtime-state/runtime-specifier-registry.service.d.ts +0 -69
- package/src/services/runtime-state/runtime-specifier-registry.service.js +0 -37
- package/src/services/runtime-state/runtime-specifier-registry.service.ts +0 -96
- package/src/services/runtime-state/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/services/validation/standard-schema.types.ts +0 -68
- package/src/static-site-generator/static-site-generator.ts +0 -462
- package/src/utils/css.d.ts +0 -1
- package/src/utils/css.js +0 -7
- package/src/utils/css.ts +0 -5
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html.ts +0 -1
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.ts +0 -83
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/resolve-work-dir.ts +0 -45
- package/src/utils/runtime.ts +0 -44
- package/src/utils/server-utils.module.ts +0 -67
- package/src/watchers/project-watcher.test-helpers.ts +0 -41
- package/src/watchers/project-watcher.ts +0 -363
- /package/src/{internal-types.js → adapters/shared/runtime-host.js} +0 -0
- /package/src/{public-types.js → adapters/shared/static-preview-host.js} +0 -0
- /package/src/{constants.d.ts → config/constants.d.ts} +0 -0
- /package/src/{constants.js → config/constants.js} +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
const corePackageRequire = createRequire(new URL("../../package.json", import.meta.url));
|
|
6
|
+
const appDeclaredPackageCache = /* @__PURE__ */ new Map();
|
|
7
|
+
function tryResolveRuntimeImport(specifier, resolver) {
|
|
8
|
+
try {
|
|
9
|
+
return resolver.resolve(specifier);
|
|
10
|
+
} catch {
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function isBareRuntimeImport(specifier) {
|
|
15
|
+
return !specifier.startsWith(".") && !path.isAbsolute(specifier) && !specifier.startsWith("/") && !specifier.startsWith("node:") && !specifier.startsWith("@/") && !specifier.startsWith("~/") && !specifier.startsWith("#") && !specifier.includes(":");
|
|
16
|
+
}
|
|
17
|
+
function getPackageNameFromSpecifier(specifier) {
|
|
18
|
+
if (specifier.startsWith("@")) {
|
|
19
|
+
return specifier.split("/").slice(0, 2).join("/");
|
|
20
|
+
}
|
|
21
|
+
return specifier.split("/")[0] ?? specifier;
|
|
22
|
+
}
|
|
23
|
+
function getDeclaredAppPackages(rootDir) {
|
|
24
|
+
const cacheKey = path.resolve(rootDir);
|
|
25
|
+
const cached = appDeclaredPackageCache.get(cacheKey);
|
|
26
|
+
if (cached) {
|
|
27
|
+
return cached;
|
|
28
|
+
}
|
|
29
|
+
const packageJsonPath = path.resolve(rootDir, "package.json");
|
|
30
|
+
const declaredPackages = /* @__PURE__ */ new Set();
|
|
31
|
+
try {
|
|
32
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
33
|
+
for (const field of ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"]) {
|
|
34
|
+
const entries = packageJson[field];
|
|
35
|
+
if (!entries || typeof entries !== "object") {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
for (const packageName of Object.keys(entries)) {
|
|
39
|
+
declaredPackages.add(packageName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch {
|
|
43
|
+
appDeclaredPackageCache.set(cacheKey, declaredPackages);
|
|
44
|
+
return declaredPackages;
|
|
45
|
+
}
|
|
46
|
+
appDeclaredPackageCache.set(cacheKey, declaredPackages);
|
|
47
|
+
return declaredPackages;
|
|
48
|
+
}
|
|
49
|
+
function isDeclaredAppPackageImport(specifier, rootDir) {
|
|
50
|
+
return getDeclaredAppPackages(rootDir).has(getPackageNameFromSpecifier(specifier));
|
|
51
|
+
}
|
|
52
|
+
function rewriteRuntimeImportSpecifier(specifier, quote, rootDir) {
|
|
53
|
+
if (!isBareRuntimeImport(specifier)) {
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
if (isDeclaredAppPackageImport(specifier, rootDir)) {
|
|
57
|
+
return void 0;
|
|
58
|
+
}
|
|
59
|
+
const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
|
|
60
|
+
if (!resolvedPath || !/\.(?:[cm]?[jt]s|tsx|jsx)$/u.test(resolvedPath)) {
|
|
61
|
+
return void 0;
|
|
62
|
+
}
|
|
63
|
+
return `${quote}${pathToFileURL(resolvedPath).href}${quote}`;
|
|
64
|
+
}
|
|
65
|
+
function rewriteRuntimeBuildOutputImports(code, rootDir) {
|
|
66
|
+
const rewriteSpecifier = (prefix, quote, specifier) => {
|
|
67
|
+
const rewrittenSpecifier = rewriteRuntimeImportSpecifier(specifier, quote, rootDir);
|
|
68
|
+
return `${prefix}${rewrittenSpecifier ?? `${quote}${specifier}${quote}`}`;
|
|
69
|
+
};
|
|
70
|
+
const withResolvedPackages = code.replace(
|
|
71
|
+
/(\bfrom\s+)(['"])([^'"\\]+)\2/g,
|
|
72
|
+
(_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
|
|
73
|
+
).replace(
|
|
74
|
+
/(\bimport\s+)(['"])([^'"\\]+)\2/g,
|
|
75
|
+
(_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
|
|
76
|
+
).replace(
|
|
77
|
+
/(\bimport\s*\(\s*)(['"])([^'"\\]+)\2/g,
|
|
78
|
+
(_match, prefix, quote, specifier) => rewriteSpecifier(prefix, quote, specifier)
|
|
79
|
+
);
|
|
80
|
+
return withResolvedPackages.replace(
|
|
81
|
+
/(['"])(@oxc-project\/runtime\/(?:helpers(?:\/esm)?\/[^'"\\]+))\1/g,
|
|
82
|
+
(match, quote, specifier) => {
|
|
83
|
+
const resolvedPath = tryResolveRuntimeImport(specifier, corePackageRequire);
|
|
84
|
+
return resolvedPath ? `${quote}${pathToFileURL(resolvedPath).href}${quote}` : match;
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
function normalizeNodeRuntimeBuildOutputFile(filePath, rootDir) {
|
|
89
|
+
if (!/\.(?:[cm]?js)$/u.test(filePath)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const fileSystem = corePackageRequire("node:fs");
|
|
93
|
+
if (!fileSystem.existsSync(filePath)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const code = fileSystem.readFileSync(filePath, "utf-8");
|
|
97
|
+
const rewritten = rewriteRuntimeBuildOutputImports(code, rootDir);
|
|
98
|
+
if (rewritten !== code) {
|
|
99
|
+
fileSystem.writeFileSync(filePath, rewritten);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function normalizeNodeRuntimeBuildOutputs(outputPaths, rootDir) {
|
|
103
|
+
for (const outputPath of outputPaths) {
|
|
104
|
+
normalizeNodeRuntimeBuildOutputFile(outputPath, rootDir);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export {
|
|
108
|
+
isDeclaredAppPackageImport,
|
|
109
|
+
normalizeNodeRuntimeBuildOutputFile,
|
|
110
|
+
normalizeNodeRuntimeBuildOutputs
|
|
111
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { BuildExecutor, BuildOptions, BuildResult } from './build-adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* FIFO-serialized build executor wrapper.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Wraps any `BuildExecutor` and ensures that no two builds run
|
|
7
|
+
* concurrently. The next build waits for the previous one to finish
|
|
8
|
+
* (success or failure) before starting.
|
|
9
|
+
*
|
|
10
|
+
* This is a bundler-agnostic primitive. It is unaware of bundler
|
|
11
|
+
* lifecycle events and exists purely to enforce one build at a time.
|
|
12
|
+
* Use it from the dev watch pipeline, the static preview path, or any
|
|
13
|
+
* caller that issues builds concurrently.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* FIFO-serialized wrapper around a {@link BuildExecutor}.
|
|
17
|
+
*
|
|
18
|
+
* Every `build()` call enqueues onto the wrapper's internal queue. A
|
|
19
|
+
* build only starts after the previous build's promise has settled.
|
|
20
|
+
*/
|
|
21
|
+
export declare class SerializedBuildExecutor implements BuildExecutor {
|
|
22
|
+
private readonly inner;
|
|
23
|
+
private tail;
|
|
24
|
+
constructor(inner: BuildExecutor);
|
|
25
|
+
/**
|
|
26
|
+
* Run a build through the serialized queue. The returned promise
|
|
27
|
+
* resolves with the inner executor's `BuildResult`. A rejected
|
|
28
|
+
* inner build does not block the queue — the next caller can
|
|
29
|
+
* proceed.
|
|
30
|
+
*/
|
|
31
|
+
build(options: BuildOptions): Promise<BuildResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Run an arbitrary async operation through the serialized queue.
|
|
34
|
+
*
|
|
35
|
+
* Use this when the work is not a `build()` call against a wrapped
|
|
36
|
+
* executor (e.g. when composing with a coordinator that needs to
|
|
37
|
+
* inject recovery around the inner call). The returned promise
|
|
38
|
+
* resolves with the operation's result. A rejected operation does
|
|
39
|
+
* not block the queue.
|
|
40
|
+
*/
|
|
41
|
+
run<T>(operation: () => Promise<T>): Promise<T>;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the wrapped executor. Tests use this to assert the
|
|
44
|
+
* delegation chain.
|
|
45
|
+
*/
|
|
46
|
+
unwrap(): BuildExecutor;
|
|
47
|
+
/**
|
|
48
|
+
* Reset the queue to an empty state. Tests use this to recover
|
|
49
|
+
* from a poisoned tail.
|
|
50
|
+
*/
|
|
51
|
+
resetForTests(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Overrides the internal queue tail for fault-recovery tests. The
|
|
54
|
+
* supplied promise is awaited before the next enqueued operation
|
|
55
|
+
* starts.
|
|
56
|
+
*/
|
|
57
|
+
setBuildQueueForTests(queue: Promise<unknown>): void;
|
|
58
|
+
/**
|
|
59
|
+
* Returns the current internal queue tail for fault-recovery
|
|
60
|
+
* tests. Tests await this to assert that recovery has cleared a
|
|
61
|
+
* wedged queue.
|
|
62
|
+
*/
|
|
63
|
+
getBuildQueueForTests(): Promise<unknown>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
class SerializedBuildExecutor {
|
|
2
|
+
inner;
|
|
3
|
+
tail = Promise.resolve();
|
|
4
|
+
constructor(inner) {
|
|
5
|
+
this.inner = inner;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Run a build through the serialized queue. The returned promise
|
|
9
|
+
* resolves with the inner executor's `BuildResult`. A rejected
|
|
10
|
+
* inner build does not block the queue — the next caller can
|
|
11
|
+
* proceed.
|
|
12
|
+
*/
|
|
13
|
+
build(options) {
|
|
14
|
+
return this.run(() => this.inner.build(options));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run an arbitrary async operation through the serialized queue.
|
|
18
|
+
*
|
|
19
|
+
* Use this when the work is not a `build()` call against a wrapped
|
|
20
|
+
* executor (e.g. when composing with a coordinator that needs to
|
|
21
|
+
* inject recovery around the inner call). The returned promise
|
|
22
|
+
* resolves with the operation's result. A rejected operation does
|
|
23
|
+
* not block the queue.
|
|
24
|
+
*/
|
|
25
|
+
run(operation) {
|
|
26
|
+
const next = this.tail.catch(() => void 0).then(() => operation());
|
|
27
|
+
this.tail = next.catch(() => void 0);
|
|
28
|
+
return next;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the wrapped executor. Tests use this to assert the
|
|
32
|
+
* delegation chain.
|
|
33
|
+
*/
|
|
34
|
+
unwrap() {
|
|
35
|
+
return this.inner;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reset the queue to an empty state. Tests use this to recover
|
|
39
|
+
* from a poisoned tail.
|
|
40
|
+
*/
|
|
41
|
+
resetForTests() {
|
|
42
|
+
this.tail = Promise.resolve();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Overrides the internal queue tail for fault-recovery tests. The
|
|
46
|
+
* supplied promise is awaited before the next enqueued operation
|
|
47
|
+
* starts.
|
|
48
|
+
*/
|
|
49
|
+
setBuildQueueForTests(queue) {
|
|
50
|
+
this.tail = queue;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Returns the current internal queue tail for fault-recovery
|
|
54
|
+
* tests. Tests await this to assert that recovery has cleared a
|
|
55
|
+
* wedged queue.
|
|
56
|
+
*/
|
|
57
|
+
getBuildQueueForTests() {
|
|
58
|
+
return this.tail;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
SerializedBuildExecutor
|
|
63
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
type RolldownPluginLike = {
|
|
24
|
+
name: string;
|
|
25
|
+
resolveId: (source: string, importer: string | undefined) => Promise<string | null> | string | null;
|
|
26
|
+
load: (id: string) => Promise<{
|
|
27
|
+
code: string;
|
|
28
|
+
moduleType: 'js';
|
|
29
|
+
moduleSideEffects: boolean;
|
|
30
|
+
} | null> | {
|
|
31
|
+
code: string;
|
|
32
|
+
moduleType: 'js';
|
|
33
|
+
moduleSideEffects: boolean;
|
|
34
|
+
} | null;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Builds a Rolldown plugin that turns `.css` imports into no-op ESM
|
|
38
|
+
* modules while preserving the dependency graph.
|
|
39
|
+
*/
|
|
40
|
+
export declare function createServerSideCssShimPlugin(): RolldownPluginLike;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const CSS_PATH = /\.css$/u;
|
|
4
|
+
const CSS_QUERY = "?ecopages-css-shim";
|
|
5
|
+
function stripShimQuery(id) {
|
|
6
|
+
const queryIndex = id.indexOf("?");
|
|
7
|
+
return queryIndex === -1 ? id : id.slice(0, queryIndex);
|
|
8
|
+
}
|
|
9
|
+
function createServerSideCssShimPlugin() {
|
|
10
|
+
return {
|
|
11
|
+
name: "ecopages:server-side-css-shim",
|
|
12
|
+
async resolveId(source, importer) {
|
|
13
|
+
if (!CSS_PATH.test(source)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const resolved = importer ? path.resolve(path.dirname(importer), source) : path.resolve(source);
|
|
17
|
+
return existsSync(resolved) ? `${resolved}${CSS_QUERY}` : null;
|
|
18
|
+
},
|
|
19
|
+
async load(id) {
|
|
20
|
+
if (!id.endsWith(CSS_QUERY)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const realPath = stripShimQuery(id);
|
|
24
|
+
readFileSync(realPath, "utf-8");
|
|
25
|
+
return {
|
|
26
|
+
code: 'export default "";',
|
|
27
|
+
moduleType: "js",
|
|
28
|
+
moduleSideEffects: true
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
createServerSideCssShimPlugin
|
|
35
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
import { type ParseResult, type ParserOptions } from 'oxc-parser';
|
|
17
|
+
export type ModuleParseOptions = ParserOptions & {
|
|
18
|
+
/**
|
|
19
|
+
* Optional parser language override. If omitted, derived from the file
|
|
20
|
+
* extension at lookup time. Set this explicitly if your caller already
|
|
21
|
+
* computed the language (avoids re-deriving inside the cache).
|
|
22
|
+
*/
|
|
23
|
+
lang?: ParserOptions['lang'];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* LRU-bounded module parse cache.
|
|
27
|
+
*
|
|
28
|
+
* Single instance shared across the process. Constructed lazily; use
|
|
29
|
+
* {@link moduleParseCache} for the default shared instance.
|
|
30
|
+
*/
|
|
31
|
+
export declare class ModuleParseCache {
|
|
32
|
+
private readonly entries;
|
|
33
|
+
private readonly maxEntries;
|
|
34
|
+
private hits;
|
|
35
|
+
private misses;
|
|
36
|
+
constructor(maxEntries?: number);
|
|
37
|
+
/**
|
|
38
|
+
* Parse `source` for `filePath`, memoizing by (filePath, source, options).
|
|
39
|
+
*
|
|
40
|
+
* @returns the {@link ParseResult} from `oxc-parser.parseSync`.
|
|
41
|
+
*/
|
|
42
|
+
getOrParse(filePath: string, source: string, options?: ModuleParseOptions): ParseResult;
|
|
43
|
+
/** Clear all cached entries. Useful in tests and on full-rebuild signals. */
|
|
44
|
+
clear(): void;
|
|
45
|
+
/** Current cache size (for observability). */
|
|
46
|
+
get size(): number;
|
|
47
|
+
/** Cumulative hit/miss counters (for observability). */
|
|
48
|
+
stats(): {
|
|
49
|
+
hits: number;
|
|
50
|
+
misses: number;
|
|
51
|
+
size: number;
|
|
52
|
+
hitRate: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Default shared cache. Use this from plugin code so the cache is
|
|
57
|
+
* amortized across plugins and build invocations.
|
|
58
|
+
*/
|
|
59
|
+
export declare const moduleParseCache: ModuleParseCache;
|
|
60
|
+
/**
|
|
61
|
+
* Drop-in replacement for `oxc-parser.parseSync` that uses the shared
|
|
62
|
+
* {@link moduleParseCache}. Use everywhere we currently call `parseSync`
|
|
63
|
+
* on user/source files during a build.
|
|
64
|
+
*/
|
|
65
|
+
export declare function cachedParseSync(filePath: string, source: string, options?: ModuleParseOptions): ParseResult;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { parseSync } from "oxc-parser";
|
|
2
|
+
import { rapidhash } from "../utils/hash.js";
|
|
3
|
+
const DEFAULT_MAX_ENTRIES = 1e4;
|
|
4
|
+
class ModuleParseCache {
|
|
5
|
+
entries = /* @__PURE__ */ new Map();
|
|
6
|
+
maxEntries;
|
|
7
|
+
hits = 0;
|
|
8
|
+
misses = 0;
|
|
9
|
+
constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
|
|
10
|
+
if (maxEntries <= 0) {
|
|
11
|
+
throw new Error(`ModuleParseCache: maxEntries must be > 0, got ${maxEntries}`);
|
|
12
|
+
}
|
|
13
|
+
this.maxEntries = maxEntries;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse `source` for `filePath`, memoizing by (filePath, source, options).
|
|
17
|
+
*
|
|
18
|
+
* @returns the {@link ParseResult} from `oxc-parser.parseSync`.
|
|
19
|
+
*/
|
|
20
|
+
getOrParse(filePath, source, options = {}) {
|
|
21
|
+
const hash = rapidhash(source);
|
|
22
|
+
const key = makeKey(filePath, hash, options);
|
|
23
|
+
const existing = this.entries.get(key);
|
|
24
|
+
if (existing && existing.hash === hash) {
|
|
25
|
+
this.hits += 1;
|
|
26
|
+
this.entries.delete(key);
|
|
27
|
+
this.entries.set(key, existing);
|
|
28
|
+
return existing.result;
|
|
29
|
+
}
|
|
30
|
+
this.misses += 1;
|
|
31
|
+
const result = parseSync(filePath, source, options);
|
|
32
|
+
this.entries.set(key, { hash, result });
|
|
33
|
+
if (this.entries.size > this.maxEntries) {
|
|
34
|
+
const oldestKey = this.entries.keys().next().value;
|
|
35
|
+
if (oldestKey !== void 0) {
|
|
36
|
+
this.entries.delete(oldestKey);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/** Clear all cached entries. Useful in tests and on full-rebuild signals. */
|
|
42
|
+
clear() {
|
|
43
|
+
this.entries.clear();
|
|
44
|
+
this.hits = 0;
|
|
45
|
+
this.misses = 0;
|
|
46
|
+
}
|
|
47
|
+
/** Current cache size (for observability). */
|
|
48
|
+
get size() {
|
|
49
|
+
return this.entries.size;
|
|
50
|
+
}
|
|
51
|
+
/** Cumulative hit/miss counters (for observability). */
|
|
52
|
+
stats() {
|
|
53
|
+
const total = this.hits + this.misses;
|
|
54
|
+
return {
|
|
55
|
+
hits: this.hits,
|
|
56
|
+
misses: this.misses,
|
|
57
|
+
size: this.entries.size,
|
|
58
|
+
hitRate: total === 0 ? 0 : this.hits / total
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const moduleParseCache = new ModuleParseCache();
|
|
63
|
+
function cachedParseSync(filePath, source, options = {}) {
|
|
64
|
+
return moduleParseCache.getOrParse(filePath, source, options);
|
|
65
|
+
}
|
|
66
|
+
function makeKey(filePath, sourceHash, options) {
|
|
67
|
+
const lang = options.lang ?? "";
|
|
68
|
+
const sourceType = options.sourceType ?? "";
|
|
69
|
+
return `${filePath} ${sourceHash.toString(36)} ${lang} ${sourceType}`;
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
ModuleParseCache,
|
|
73
|
+
cachedParseSync,
|
|
74
|
+
moduleParseCache
|
|
75
|
+
};
|
package/src/config/README.md
CHANGED
|
@@ -12,8 +12,9 @@ It is responsible for:
|
|
|
12
12
|
|
|
13
13
|
- validating integration, processor, and loader registration
|
|
14
14
|
- resolving semantic paths such as `html` and `404` templates
|
|
15
|
-
- creating app-owned runtime state such as the build adapter, build executor, build manifest, dev graph service,
|
|
15
|
+
- selecting explicit build ownership and creating app-owned runtime state such as the build adapter, build executor, build manifest, dev graph service, and remaining compatibility-only runtime state
|
|
16
16
|
- enforcing runtime capability requirements before startup
|
|
17
|
+
- carrying host-injected runtime dependencies only through abstract slots such as host module loaders, never through bundler-specific core defaults
|
|
17
18
|
|
|
18
19
|
## Main Files
|
|
19
20
|
|
|
@@ -23,9 +24,11 @@ It is responsible for:
|
|
|
23
24
|
## Ownership Rules
|
|
24
25
|
|
|
25
26
|
- Integrations and processors declare contributions.
|
|
26
|
-
- `ConfigBuilder.build()` decides ordering and
|
|
27
|
+
- `ConfigBuilder.build()` decides ordering, validates compatibility, and seals build ownership for the finalized app config.
|
|
27
28
|
- Runtime startup reuses finalized config/build state; it should not recompute manifest ownership.
|
|
28
29
|
|
|
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
|
+
|
|
29
32
|
## Output
|
|
30
33
|
|
|
31
34
|
The result of this layer is a built `EcoPagesAppConfig` with resolved absolute paths and app-owned runtime services attached under `appConfig.runtime`.
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
* This module contains the ConfigBuilder class, which is used to build the EcoPagesAppConfig object.
|
|
3
3
|
* @module
|
|
4
4
|
*/
|
|
5
|
+
import { type BuildOwnership } from '../build/build-adapter.js';
|
|
5
6
|
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
6
|
-
import type { EcoPagesAppConfig, RobotsPreference } from '../internal-types.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { EcoPagesAppConfig, RobotsPreference } from '../types/internal-types.js';
|
|
8
|
+
import type { AnyIntegrationPlugin } from '../plugins/integration-plugin.js';
|
|
8
9
|
import type { Processor } from '../plugins/processor.js';
|
|
9
|
-
import type {
|
|
10
|
+
import type { EcoSourceTransform } from '../plugins/source-transform.js';
|
|
11
|
+
import type { PageMetadataProps } from '../types/public-types.js';
|
|
10
12
|
import type { CacheConfig } from '../services/cache/cache.types.js';
|
|
11
13
|
export declare const CONFIG_BUILDER_ERRORS: {
|
|
12
14
|
readonly DUPLICATE_INTEGRATION_NAMES: "Integrations names must be unique";
|
|
@@ -25,15 +27,6 @@ type RuntimeKind = 'node' | 'bun';
|
|
|
25
27
|
* Provides a fluent interface for setting various configuration options and managing
|
|
26
28
|
* application settings.
|
|
27
29
|
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const config = new ConfigBuilder()
|
|
31
|
-
* .setBaseUrl('https://example.com')
|
|
32
|
-
* .setRootDir('./myproject')
|
|
33
|
-
* .setSrcDir('source')
|
|
34
|
-
* .build();
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
30
|
* @remarks
|
|
38
31
|
* The ConfigBuilder follows the builder pattern and allows for:
|
|
39
32
|
* - Setting directory paths for various components (pages, includes, layouts, etc.)
|
|
@@ -51,6 +44,7 @@ type RuntimeKind = 'node' | 'bun';
|
|
|
51
44
|
* @throws {Error} When adding duplicate processors or loaders
|
|
52
45
|
*/
|
|
53
46
|
export declare class ConfigBuilder {
|
|
47
|
+
private buildOwnership;
|
|
54
48
|
config: EcoPagesAppConfig;
|
|
55
49
|
/**
|
|
56
50
|
* Sets the base URL for the application.
|
|
@@ -68,6 +62,29 @@ export declare class ConfigBuilder {
|
|
|
68
62
|
* @returns The ConfigBuilder instance for method chaining
|
|
69
63
|
*/
|
|
70
64
|
setRootDir(rootDir: string): this;
|
|
65
|
+
/**
|
|
66
|
+
* Sets which runtime path owns build execution for the finalized app config.
|
|
67
|
+
*
|
|
68
|
+
* @remarks
|
|
69
|
+
* Three ownership values are accepted:
|
|
70
|
+
*
|
|
71
|
+
* - `'rolldown'` (default): Ecopages runs builds through
|
|
72
|
+
* {@link RolldownBuildAdapter}, creating a new `rolldown()` instance
|
|
73
|
+
* per build. Best for one-shot production builds and benchmarks.
|
|
74
|
+
* - `'rolldown-dev'`: Ecopages runs builds through
|
|
75
|
+
* {@link RolldownDevBuildAdapter}, which wraps Rolldown's experimental
|
|
76
|
+
* `DevEngine` and reuses the cached module graph, resolver, and
|
|
77
|
+
* transform cache across rebuilds. Best for HMR and watch mode where
|
|
78
|
+
* the same entrypoints are rebuilt repeatedly.
|
|
79
|
+
* - `'vite-host'`: a host runtime owns the build. Ecopages exposes a
|
|
80
|
+
* {@link ViteHostBuildAdapter} boundary marker that throws on direct
|
|
81
|
+
* use. Select this only for host-driven compatibility flows where
|
|
82
|
+
* core must not silently fall back to app build execution.
|
|
83
|
+
*
|
|
84
|
+
* Defaults to `'rolldown'` when {@link ConfigBuilder.build} runs
|
|
85
|
+
* without an explicit ownership.
|
|
86
|
+
*/
|
|
87
|
+
setBuildOwnership(buildOwnership: BuildOwnership): this;
|
|
71
88
|
/**
|
|
72
89
|
* Sets the source directory relative to the root directory.
|
|
73
90
|
* This directory contains all the source files for the application.
|
|
@@ -133,7 +150,7 @@ export declare class ConfigBuilder {
|
|
|
133
150
|
* @param integrations - An array of integration plugins
|
|
134
151
|
* @returns The ConfigBuilder instance for method chaining
|
|
135
152
|
*/
|
|
136
|
-
setIntegrations(integrations:
|
|
153
|
+
setIntegrations(integrations: AnyIntegrationPlugin[]): this;
|
|
137
154
|
/**
|
|
138
155
|
* Sets the output directory for the built application.
|
|
139
156
|
*
|
|
@@ -192,6 +209,11 @@ export declare class ConfigBuilder {
|
|
|
192
209
|
* @returns The ConfigBuilder instance for method chaining
|
|
193
210
|
*/
|
|
194
211
|
setLoaders(loaders: EcoBuildPlugin[]): this;
|
|
212
|
+
/**
|
|
213
|
+
* Sets the source transforms to use for transform-first bundlers such as Vite.
|
|
214
|
+
* This replaces any existing source transforms.
|
|
215
|
+
*/
|
|
216
|
+
setSourceTransforms(sourceTransforms: EcoSourceTransform[]): this;
|
|
195
217
|
/**
|
|
196
218
|
* Adds a loader to the application.
|
|
197
219
|
*
|
|
@@ -201,6 +223,12 @@ export declare class ConfigBuilder {
|
|
|
201
223
|
* @throws Error if a loader with the same name already exists
|
|
202
224
|
*/
|
|
203
225
|
addLoader(name: string, loader: EcoBuildPlugin): this;
|
|
226
|
+
/**
|
|
227
|
+
* Adds a source transform to the application.
|
|
228
|
+
*
|
|
229
|
+
* @throws Error if a source transform with the same name already exists.
|
|
230
|
+
*/
|
|
231
|
+
addSourceTransform(name: string, sourceTransform: EcoSourceTransform): this;
|
|
204
232
|
/**
|
|
205
233
|
* Sets the cache configuration for ISR and page caching.
|
|
206
234
|
*
|