@ecopages/core 0.2.0-alpha.54 → 0.2.0-alpha.55
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/package.json +196 -91
- package/src/adapters/abstract/application-adapter.d.ts +194 -0
- package/src/adapters/abstract/application-adapter.js +121 -0
- package/src/adapters/abstract/router-adapter.d.ts +26 -0
- package/src/adapters/abstract/router-adapter.js +5 -0
- package/src/adapters/abstract/server-adapter.d.ts +69 -0
- package/src/adapters/abstract/server-adapter.js +15 -0
- package/src/adapters/bun/client-bridge.d.ts +34 -0
- package/src/adapters/bun/client-bridge.js +48 -0
- package/src/adapters/bun/create-app.d.ts +60 -0
- package/src/adapters/bun/create-app.js +140 -0
- package/src/adapters/bun/hmr-manager.d.ts +47 -0
- package/src/adapters/bun/hmr-manager.js +58 -0
- package/src/adapters/bun/index.d.ts +2 -0
- package/src/adapters/bun/index.js +8 -0
- 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 +223 -0
- package/src/adapters/bun/server-adapter.js +450 -0
- package/src/adapters/bun/static-preview-host.d.ts +28 -0
- package/src/adapters/bun/static-preview-host.js +45 -0
- package/src/adapters/create-app.d.ts +20 -0
- package/src/adapters/create-app.js +66 -0
- package/src/adapters/index.d.ts +2 -0
- package/src/adapters/index.js +8 -0
- package/src/adapters/node/create-app.d.ts +24 -0
- package/src/adapters/node/create-app.js +92 -0
- 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 +26 -0
- package/src/adapters/node/node-client-bridge.js +66 -0
- package/src/adapters/node/node-hmr-manager.d.ts +52 -0
- package/src/adapters/node/node-hmr-manager.js +49 -0
- 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 +138 -0
- package/src/adapters/node/server-adapter.js +313 -0
- package/src/adapters/node/static-content-server.d.ts +60 -0
- package/src/adapters/node/static-content-server.js +194 -0
- 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/api-response.d.ts +52 -0
- package/src/adapters/shared/api-response.js +96 -0
- package/src/adapters/shared/application-adapter.d.ts +18 -0
- package/src/adapters/shared/application-adapter.js +90 -0
- package/src/adapters/shared/define-api-handler.d.ts +25 -0
- package/src/adapters/shared/define-api-handler.js +15 -0
- 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 +41 -0
- package/src/adapters/shared/explicit-static-route-matcher.js +101 -0
- package/src/adapters/shared/file-route-middleware-pipeline.d.ts +62 -0
- package/src/adapters/shared/file-route-middleware-pipeline.js +90 -0
- package/src/adapters/shared/fs-server-response-factory.d.ts +23 -0
- package/src/adapters/shared/fs-server-response-factory.js +81 -0
- package/src/adapters/shared/fs-server-response-matcher.d.ts +75 -0
- package/src/adapters/shared/fs-server-response-matcher.js +186 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +55 -0
- package/src/adapters/shared/hmr-entrypoint-registrar.js +87 -0
- package/src/adapters/shared/hmr-html-response.d.ts +22 -0
- package/src/adapters/shared/hmr-html-response.js +33 -0
- package/src/adapters/shared/render-context.d.ts +16 -0
- package/src/adapters/shared/render-context.js +93 -0
- 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/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.d.ts +108 -0
- package/src/adapters/shared/server-adapter.js +436 -0
- package/src/adapters/shared/server-route-handler.d.ts +89 -0
- package/src/adapters/shared/server-route-handler.js +111 -0
- package/src/adapters/shared/server-static-builder.d.ts +71 -0
- package/src/adapters/shared/server-static-builder.js +100 -0
- 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/adapters/shared/static-preview-host.js +0 -0
- 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.ts → browser-runtime-plugin-helpers.d.ts} +2 -13
- 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 +172 -0
- package/src/build/build-adapter.d.ts +504 -0
- package/src/build/build-adapter.js +240 -0
- package/src/build/build-manifest.d.ts +33 -0
- package/src/build/build-manifest.js +49 -0
- package/src/build/build-types.d.ts +57 -0
- package/src/build/build-types.js +0 -0
- package/src/build/rolldown-build-adapter.d.ts +32 -0
- package/src/build/rolldown-build-adapter.js +260 -0
- package/src/build/rolldown-plugin-bridge.d.ts +50 -0
- package/src/build/rolldown-plugin-bridge.js +194 -0
- package/src/build/{runtime-build-executor.ts → runtime-build-executor.d.ts} +3 -19
- package/src/build/runtime-build-executor.js +19 -0
- 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.ts → index.d.ts} +1 -1
- 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/config-builder.d.ts +252 -0
- package/src/config/config-builder.js +589 -0
- package/src/config/{constants.ts → constants.d.ts} +13 -22
- package/src/config/constants.js +25 -0
- package/src/dev/host-runtime.d.ts +10 -0
- package/src/dev/host-runtime.js +24 -0
- package/src/dev/sc-server.d.ts +30 -0
- package/src/dev/sc-server.js +111 -0
- package/src/eco/eco.browser.d.ts +2 -0
- package/src/eco/eco.browser.js +88 -0
- package/src/eco/eco.d.ts +9 -0
- package/src/eco/eco.js +119 -0
- package/src/eco/eco.types.d.ts +230 -0
- package/src/eco/eco.types.js +0 -0
- package/src/eco/eco.utils.d.ts +1 -0
- package/src/eco/eco.utils.js +10 -0
- package/src/eco/global-injector-map.d.ts +16 -0
- package/src/eco/global-injector-map.js +80 -0
- package/src/eco/lazy-injector-map.d.ts +8 -0
- package/src/eco/lazy-injector-map.js +70 -0
- package/src/eco/module-dependencies.d.ts +18 -0
- package/src/eco/module-dependencies.js +49 -0
- package/src/errors/http-error.d.ts +31 -0
- package/src/errors/http-error.js +50 -0
- package/src/errors/index.d.ts +3 -0
- package/src/errors/index.js +6 -0
- package/src/errors/locals-access-error.d.ts +4 -0
- package/src/errors/locals-access-error.js +9 -0
- package/src/global/app-logger.d.ts +2 -0
- package/src/global/app-logger.js +6 -0
- package/src/hmr/client/hmr-runtime.d.ts +5 -0
- package/src/hmr/client/hmr-runtime.js +117 -0
- package/src/hmr/hmr-strategy.d.ts +162 -0
- package/src/hmr/hmr-strategy.js +44 -0
- package/src/hmr/hmr.postcss.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.postcss.test.e2e.js +31 -0
- package/src/hmr/hmr.test.e2e.d.ts +1 -0
- package/src/hmr/hmr.test.e2e.js +43 -0
- package/src/hmr/strategies/default-hmr-strategy.d.ts +43 -0
- package/src/hmr/strategies/default-hmr-strategy.js +34 -0
- package/src/hmr/strategies/js-hmr-strategy.d.ts +134 -0
- package/src/hmr/strategies/js-hmr-strategy.js +173 -0
- package/src/index.browser.d.ts +3 -0
- package/src/index.browser.js +4 -0
- package/src/index.d.ts +6 -0
- package/src/index.js +21 -0
- package/src/integrations/ghtml/ghtml-renderer.d.ts +16 -0
- package/src/integrations/ghtml/ghtml-renderer.js +57 -0
- 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 +16 -0
- package/src/integrations/ghtml/ghtml.plugin.js +20 -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 +6 -0
- package/src/plugins/alias-resolver-plugin.js +65 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +108 -0
- package/src/plugins/eco-component-meta-plugin.js +175 -0
- 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 +230 -0
- package/src/plugins/integration-plugin.js +201 -0
- package/src/plugins/processor.d.ts +97 -0
- package/src/plugins/processor.js +141 -0
- package/src/plugins/{runtime-capability.ts → runtime-capability.d.ts} +3 -8
- package/src/plugins/runtime-capability.js +0 -0
- package/src/plugins/source-transform.d.ts +46 -0
- package/src/plugins/source-transform.js +71 -0
- package/src/route-renderer/orchestration/component-render-context.d.ts +97 -0
- package/src/route-renderer/orchestration/component-render-context.js +147 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +18 -0
- package/src/route-renderer/orchestration/declared-ownership-graph.js +34 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.d.ts +110 -0
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +233 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +534 -0
- package/src/route-renderer/orchestration/integration-renderer.js +991 -0
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +24 -0
- package/src/route-renderer/orchestration/ownership-planning.service.js +63 -0
- package/src/route-renderer/orchestration/ownership-validation.service.d.ts +29 -0
- package/src/route-renderer/orchestration/ownership-validation.service.js +53 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.d.ts +3 -0
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +27 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +91 -0
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +170 -0
- package/src/route-renderer/orchestration/render-output.utils.d.ts +66 -0
- package/src/route-renderer/orchestration/render-output.utils.js +171 -0
- package/src/route-renderer/orchestration/route-render-orchestrator.d.ts +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 +35 -0
- package/src/route-renderer/page-loading/dependency-resolver.js +115 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +11 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +57 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.d.ts +45 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +105 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.d.ts +19 -0
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +40 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.d.ts +5 -0
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +33 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.d.ts +3 -0
- package/src/route-renderer/page-loading/module-declaration-scripts.js +18 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.d.ts +13 -0
- package/src/route-renderer/page-loading/page-dependency-bundling.js +137 -0
- package/src/route-renderer/page-loading/page-module-loader.d.ts +90 -0
- package/src/route-renderer/page-loading/page-module-loader.js +127 -0
- package/src/route-renderer/route-renderer.d.ts +69 -0
- package/src/route-renderer/route-renderer.js +80 -0
- package/src/router/client/link-intent.js +34 -0
- package/src/router/client/link-intent.test.browser.d.ts +1 -0
- package/src/router/client/link-intent.test.browser.js +43 -0
- package/src/router/client/navigation-coordinator.d.ts +169 -0
- package/src/router/client/navigation-coordinator.js +215 -0
- package/src/router/server/route-registry.d.ts +78 -0
- package/src/router/server/route-registry.js +262 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +3 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +56 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +103 -0
- package/src/services/assets/asset-processing-service/asset-processing.service.js +285 -0
- package/src/services/assets/asset-processing-service/asset.factory.d.ts +17 -0
- package/src/services/assets/asset-processing-service/asset.factory.js +82 -0
- package/src/services/assets/asset-processing-service/assets.types.d.ts +103 -0
- 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 +57 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +49 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.d.ts +20 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +41 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +30 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +65 -0
- package/src/services/assets/asset-processing-service/index.d.ts +6 -0
- package/src/services/assets/asset-processing-service/index.js +6 -0
- package/src/services/assets/asset-processing-service/page-package.d.ts +6 -0
- package/src/services/assets/asset-processing-service/page-package.js +80 -0
- package/src/services/assets/asset-processing-service/{processor.interface.ts → processor.interface.d.ts} +5 -10
- package/src/services/assets/asset-processing-service/processor.interface.js +6 -0
- package/src/services/assets/asset-processing-service/processor.registry.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processor.registry.js +15 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.d.ts +24 -0
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +65 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +22 -0
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +136 -0
- package/src/services/assets/asset-processing-service/processors/index.d.ts +5 -0
- package/src/services/assets/asset-processing-service/processors/index.js +5 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +6 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +120 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +97 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.d.ts +42 -0
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +126 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +8 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +59 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +9 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +69 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +18 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +45 -0
- package/src/services/assets/browser-bundle.service.d.ts +73 -0
- package/src/services/assets/browser-bundle.service.js +41 -0
- package/src/services/cache/cache.types.d.ts +107 -0
- package/src/services/cache/cache.types.js +0 -0
- package/src/services/cache/index.d.ts +7 -0
- package/src/services/cache/index.js +7 -0
- package/src/services/cache/memory-cache-store.d.ts +42 -0
- package/src/services/cache/memory-cache-store.js +98 -0
- package/src/services/cache/page-cache-service.d.ts +70 -0
- package/src/services/cache/page-cache-service.js +152 -0
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +75 -0
- package/src/services/cache/page-request-cache-coordinator.service.js +109 -0
- package/src/services/html/html-rewriter-provider.service.d.ts +40 -0
- package/src/services/html/html-rewriter-provider.service.js +68 -0
- package/src/services/html/html-transformer.service.d.ts +96 -0
- package/src/services/html/html-transformer.service.js +287 -0
- package/src/services/invalidation/development-invalidation.service.d.ts +74 -0
- package/src/services/invalidation/development-invalidation.service.js +190 -0
- package/src/services/module-loading/app-module-loader.service.d.ts +7 -0
- package/src/services/module-loading/app-module-loader.service.js +0 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +24 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +130 -0
- package/src/services/module-loading/host-module-loader-registry.d.ts +4 -0
- package/src/services/module-loading/host-module-loader-registry.js +15 -0
- package/src/services/module-loading/{module-loading-types.ts → module-loading-types.d.ts} +0 -1
- package/src/services/module-loading/module-loading-types.js +0 -0
- package/src/services/module-loading/page-module-import.service.d.ts +95 -0
- package/src/services/module-loading/page-module-import.service.js +193 -0
- package/src/services/module-loading/server-module-transpiler.service.d.ts +63 -0
- package/src/services/module-loading/server-module-transpiler.service.js +64 -0
- package/src/services/module-loading/source-module-support.d.ts +5 -0
- package/src/services/module-loading/source-module-support.js +8 -0
- package/src/services/runtime-state/dev-graph.service.d.ts +118 -0
- package/src/services/runtime-state/dev-graph.service.js +162 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.d.ts +41 -0
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -0
- package/src/services/runtime-state/server-invalidation-state.service.d.ts +26 -0
- package/src/services/runtime-state/server-invalidation-state.service.js +35 -0
- package/src/services/validation/schema-validation-service.d.ts +122 -0
- package/src/services/validation/schema-validation-service.js +101 -0
- package/src/services/validation/{standard-schema.types.ts → standard-schema.types.d.ts} +17 -20
- package/src/services/validation/standard-schema.types.js +0 -0
- package/src/static-site-generator/static-site-generator.d.ts +104 -0
- package/src/static-site-generator/static-site-generator.js +316 -0
- package/src/types/internal-types.d.ts +232 -0
- package/src/types/internal-types.js +0 -0
- package/src/types/public-types.d.ts +1307 -0
- package/src/types/public-types.js +0 -0
- package/src/utils/deep-merge.d.ts +14 -0
- package/src/utils/deep-merge.js +32 -0
- package/src/utils/hash.d.ts +1 -0
- package/src/utils/hash.js +7 -0
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +6 -0
- package/src/utils/html.js +4 -0
- package/src/utils/invariant.d.ts +5 -0
- package/src/utils/invariant.js +11 -0
- package/src/utils/locals-utils.d.ts +15 -0
- package/src/utils/locals-utils.js +24 -0
- package/src/utils/parse-cli-args.d.ts +27 -0
- package/src/utils/parse-cli-args.js +62 -0
- package/src/utils/path-utils.module.d.ts +5 -0
- package/src/utils/path-utils.module.js +14 -0
- package/src/utils/resolve-work-dir.d.ts +11 -0
- package/src/utils/resolve-work-dir.js +31 -0
- package/src/utils/runtime.d.ts +11 -0
- package/src/utils/runtime.js +40 -0
- package/src/utils/server-utils.module.d.ts +19 -0
- package/src/utils/server-utils.module.js +56 -0
- package/src/watchers/project-watcher.d.ts +136 -0
- package/src/watchers/project-watcher.js +275 -0
- package/src/watchers/project-watcher.test-helpers.d.ts +4 -0
- package/src/watchers/project-watcher.test-helpers.js +52 -0
- package/src/adapters/abstract/application-adapter.test.ts +0 -218
- package/src/adapters/abstract/application-adapter.ts +0 -379
- 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 -214
- package/src/adapters/bun/hmr-manager.test.ts +0 -265
- package/src/adapters/bun/hmr-manager.ts +0 -88
- package/src/adapters/bun/index.ts +0 -2
- package/src/adapters/bun/runtime-host.ts +0 -76
- package/src/adapters/bun/server-adapter.ts +0 -605
- package/src/adapters/bun/static-preview-host.ts +0 -70
- package/src/adapters/create-app.test.ts +0 -10
- package/src/adapters/create-app.ts +0 -91
- package/src/adapters/index.ts +0 -2
- package/src/adapters/node/create-app.test.ts +0 -76
- package/src/adapters/node/create-app.ts +0 -116
- package/src/adapters/node/http-request-bridge.test.ts +0 -146
- package/src/adapters/node/http-request-bridge.ts +0 -176
- package/src/adapters/node/node-client-bridge.test.ts +0 -198
- package/src/adapters/node/node-client-bridge.ts +0 -79
- package/src/adapters/node/node-hmr-manager.test.ts +0 -374
- package/src/adapters/node/node-hmr-manager.ts +0 -72
- package/src/adapters/node/runtime-host.test.ts +0 -49
- package/src/adapters/node/runtime-host.ts +0 -113
- package/src/adapters/node/server-adapter-dependencies.ts +0 -28
- package/src/adapters/node/server-adapter.test.ts +0 -84
- package/src/adapters/node/server-adapter.ts +0 -423
- package/src/adapters/node/static-content-server.test.ts +0 -60
- package/src/adapters/node/static-content-server.ts +0 -239
- package/src/adapters/node/static-preview-host.test.ts +0 -89
- package/src/adapters/node/static-preview-host.ts +0 -101
- package/src/adapters/shared/api-response.test.ts +0 -97
- 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-render-preparation.ts +0 -58
- package/src/adapters/shared/explicit-static-route-matcher.test.ts +0 -381
- package/src/adapters/shared/explicit-static-route-matcher.ts +0 -131
- package/src/adapters/shared/file-route-middleware-pipeline.test.ts +0 -85
- package/src/adapters/shared/file-route-middleware-pipeline.ts +0 -118
- package/src/adapters/shared/fs-server-response-factory.test.ts +0 -176
- package/src/adapters/shared/fs-server-response-factory.ts +0 -96
- package/src/adapters/shared/fs-server-response-matcher.test.ts +0 -311
- package/src/adapters/shared/fs-server-response-matcher.ts +0 -240
- package/src/adapters/shared/hmr-entrypoint-registrar.ts +0 -149
- package/src/adapters/shared/hmr-html-response.ts +0 -54
- package/src/adapters/shared/hmr-manager.contract.test.ts +0 -228
- package/src/adapters/shared/hmr-manager.dispatch.test.ts +0 -229
- package/src/adapters/shared/render-context.test.ts +0 -244
- package/src/adapters/shared/render-context.ts +0 -161
- package/src/adapters/shared/runtime-app-bootstrap.test.ts +0 -96
- package/src/adapters/shared/runtime-app-bootstrap.ts +0 -72
- package/src/adapters/shared/runtime-host.ts +0 -11
- package/src/adapters/shared/server-adapter.test.ts +0 -130
- package/src/adapters/shared/server-adapter.ts +0 -571
- package/src/adapters/shared/server-route-handler.test.ts +0 -112
- package/src/adapters/shared/server-route-handler.ts +0 -153
- package/src/adapters/shared/server-static-builder.test.ts +0 -338
- package/src/adapters/shared/server-static-builder.ts +0 -170
- package/src/adapters/shared/shared-hmr-manager.ts +0 -298
- package/src/adapters/shared/static-preview-host.ts +0 -12
- package/src/build/browser-runtime-manifest.test.ts +0 -121
- package/src/build/browser-runtime-manifest.ts +0 -105
- package/src/build/browser-runtime-plugin-helpers.test.ts +0 -49
- package/src/build/browser-runtime-plugin.test.ts +0 -256
- package/src/build/browser-runtime-plugin.ts +0 -306
- package/src/build/build-adapter.test.ts +0 -463
- package/src/build/build-adapter.ts +0 -788
- package/src/build/build-manifest.ts +0 -79
- package/src/build/build-types.ts +0 -83
- package/src/build/rolldown-build-adapter.test.ts +0 -352
- package/src/build/rolldown-build-adapter.ts +0 -363
- package/src/build/rolldown-plugin-bridge.test.ts +0 -256
- package/src/build/rolldown-plugin-bridge.ts +0 -309
- package/src/build/runtime-build-executor.test.ts +0 -130
- package/src/build/runtime-build-output-normalizer.ts +0 -137
- package/src/build/serialized-build-executor.test.ts +0 -96
- package/src/build/serialized-build-executor.ts +0 -90
- package/src/build/server-side-css-shim-plugin.ts +0 -77
- package/src/cache/module-parse-cache.test.ts +0 -73
- package/src/cache/module-parse-cache.ts +0 -137
- package/src/config/config-builder.test.ts +0 -456
- package/src/config/config-builder.ts +0 -728
- package/src/config/config-builder.typecheck.test.ts +0 -96
- package/src/dev/host-runtime.ts +0 -34
- package/src/dev/sc-server.ts +0 -143
- package/src/eco/eco.browser.test.ts +0 -43
- package/src/eco/eco.browser.ts +0 -137
- package/src/eco/eco.test.ts +0 -781
- package/src/eco/eco.ts +0 -262
- package/src/eco/eco.types.ts +0 -293
- package/src/eco/eco.utils.test.ts +0 -219
- package/src/eco/eco.utils.ts +0 -5
- package/src/eco/global-injector-map.test.ts +0 -42
- package/src/eco/global-injector-map.ts +0 -112
- package/src/eco/lazy-injector-map.test.ts +0 -66
- package/src/eco/lazy-injector-map.ts +0 -120
- package/src/eco/module-dependencies.test.ts +0 -30
- package/src/eco/module-dependencies.ts +0 -75
- package/src/errors/http-error.test.ts +0 -134
- package/src/errors/http-error.ts +0 -72
- package/src/errors/index.ts +0 -3
- package/src/errors/locals-access-error.ts +0 -7
- package/src/global/app-logger.ts +0 -4
- package/src/global/utils.test.ts +0 -12
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-have-HMR-script-injected-in-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-HMR-Server-Integration-should-load-fixture-app-page-1.png +0 -0
- package/src/hmr/client/__screenshots__/hmr-runtime.test.browser.ts/HMR-Runtime-WebSocket-Connection-should-connect-to-correct-HMR-endpoint-1.png +0 -0
- package/src/hmr/client/hmr-runtime.ts +0 -162
- package/src/hmr/hmr-strategy.test.ts +0 -124
- package/src/hmr/hmr-strategy.ts +0 -177
- 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.test.ts +0 -344
- package/src/hmr/strategies/js-hmr-strategy.ts +0 -307
- package/src/index.browser.ts +0 -3
- package/src/index.ts +0 -15
- package/src/integrations/ghtml/ghtml-renderer.test.ts +0 -253
- package/src/integrations/ghtml/ghtml-renderer.ts +0 -87
- package/src/integrations/ghtml/ghtml.constants.ts +0 -1
- package/src/integrations/ghtml/ghtml.plugin.ts +0 -28
- package/src/plugins/alias-resolver-cache.test.ts +0 -110
- package/src/plugins/alias-resolver-cache.ts +0 -145
- package/src/plugins/alias-resolver-plugin.test.ts +0 -41
- package/src/plugins/alias-resolver-plugin.ts +0 -75
- package/src/plugins/eco-component-meta-plugin.test.ts +0 -421
- package/src/plugins/eco-component-meta-plugin.ts +0 -518
- package/src/plugins/foreign-jsx-override-plugin.test.ts +0 -65
- package/src/plugins/foreign-jsx-override-plugin.ts +0 -76
- package/src/plugins/integration-plugin.test.ts +0 -151
- package/src/plugins/integration-plugin.ts +0 -344
- package/src/plugins/processor.test.ts +0 -148
- package/src/plugins/processor.ts +0 -257
- package/src/plugins/source-transform.test.ts +0 -82
- package/src/plugins/source-transform.ts +0 -123
- package/src/route-renderer/orchestration/component-render-context.ts +0 -338
- package/src/route-renderer/orchestration/declared-ownership-graph.ts +0 -62
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.ts +0 -431
- package/src/route-renderer/orchestration/integration-renderer.test.ts +0 -2251
- package/src/route-renderer/orchestration/integration-renderer.ts +0 -1384
- package/src/route-renderer/orchestration/ownership-planning.service.ts +0 -97
- package/src/route-renderer/orchestration/ownership-validation.service.ts +0 -76
- package/src/route-renderer/orchestration/processed-asset-dedupe.ts +0 -29
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.test.ts +0 -435
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.ts +0 -310
- package/src/route-renderer/orchestration/render-output.utils.ts +0 -310
- package/src/route-renderer/orchestration/route-render-orchestrator.prepare-render-options.test.ts +0 -1365
- package/src/route-renderer/orchestration/route-render-orchestrator.test.ts +0 -267
- package/src/route-renderer/orchestration/route-render-orchestrator.ts +0 -879
- package/src/route-renderer/orchestration/template-serialization.test.ts +0 -110
- package/src/route-renderer/orchestration/template-serialization.ts +0 -117
- package/src/route-renderer/page-loading/component-dependency-collection.ts +0 -202
- package/src/route-renderer/page-loading/declared-asset-collection.ts +0 -153
- package/src/route-renderer/page-loading/dependency-resolver.test.ts +0 -761
- package/src/route-renderer/page-loading/dependency-resolver.ts +0 -144
- package/src/route-renderer/page-loading/ecopages-virtual-imports.ts +0 -75
- package/src/route-renderer/page-loading/lazy-entry-collection.ts +0 -167
- package/src/route-renderer/page-loading/lazy-trigger-planning.ts +0 -74
- package/src/route-renderer/page-loading/module-declaration-aggregation.ts +0 -60
- package/src/route-renderer/page-loading/module-declaration-scripts.ts +0 -16
- package/src/route-renderer/page-loading/page-dependency-bundling.ts +0 -244
- package/src/route-renderer/page-loading/page-module-loader.test.ts +0 -183
- package/src/route-renderer/page-loading/page-module-loader.ts +0 -184
- package/src/route-renderer/route-renderer.ts +0 -133
- 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.test.ts +0 -237
- package/src/router/client/navigation-coordinator.ts +0 -453
- package/src/router/server/route-registry.test.ts +0 -176
- package/src/router/server/route-registry.ts +0 -382
- package/src/services/assets/asset-processing-service/asset-dependency-keys.ts +0 -66
- package/src/services/assets/asset-processing-service/asset-processing.service.test.ts +0 -473
- package/src/services/assets/asset-processing-service/asset-processing.service.ts +0 -344
- package/src/services/assets/asset-processing-service/asset.factory.test.ts +0 -63
- package/src/services/assets/asset-processing-service/asset.factory.ts +0 -105
- package/src/services/assets/asset-processing-service/assets.types.ts +0 -128
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.test.ts +0 -74
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.ts +0 -98
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.test.ts +0 -67
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.ts +0 -78
- package/src/services/assets/asset-processing-service/grouped-content-bundles.ts +0 -104
- package/src/services/assets/asset-processing-service/index.ts +0 -6
- package/src/services/assets/asset-processing-service/page-package.test.ts +0 -135
- package/src/services/assets/asset-processing-service/page-package.ts +0 -103
- package/src/services/assets/asset-processing-service/processor.registry.ts +0 -18
- package/src/services/assets/asset-processing-service/processors/base/base-processor.test.ts +0 -59
- package/src/services/assets/asset-processing-service/processors/base/base-processor.ts +0 -83
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.ts +0 -173
- package/src/services/assets/asset-processing-service/processors/index.ts +0 -5
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.test.ts +0 -188
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.ts +0 -138
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.test.ts +0 -326
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.ts +0 -116
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.test.ts +0 -270
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.ts +0 -145
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.test.ts +0 -261
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.ts +0 -72
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.ts +0 -83
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.ts +0 -65
- package/src/services/assets/browser-bundle.service.test.ts +0 -66
- package/src/services/assets/browser-bundle.service.ts +0 -109
- package/src/services/cache/cache.types.ts +0 -126
- package/src/services/cache/index.ts +0 -18
- package/src/services/cache/memory-cache-store.test.ts +0 -225
- package/src/services/cache/memory-cache-store.ts +0 -130
- package/src/services/cache/page-cache-service.test.ts +0 -175
- package/src/services/cache/page-cache-service.ts +0 -202
- package/src/services/cache/page-request-cache-coordinator.service.test.ts +0 -79
- package/src/services/cache/page-request-cache-coordinator.service.ts +0 -131
- package/src/services/html/html-rewriter-provider.service.test.ts +0 -183
- package/src/services/html/html-rewriter-provider.service.ts +0 -105
- package/src/services/html/html-transformer.service.test.ts +0 -544
- package/src/services/html/html-transformer.service.ts +0 -369
- package/src/services/invalidation/development-invalidation.service.test.ts +0 -87
- package/src/services/invalidation/development-invalidation.service.ts +0 -262
- package/src/services/module-loading/app-module-loader.service.ts +0 -9
- package/src/services/module-loading/app-server-module-transpiler.service.test.ts +0 -297
- package/src/services/module-loading/app-server-module-transpiler.service.ts +0 -168
- package/src/services/module-loading/host-module-loader-registry.ts +0 -15
- package/src/services/module-loading/page-module-import.service.test.ts +0 -652
- package/src/services/module-loading/page-module-import.service.ts +0 -302
- package/src/services/module-loading/server-module-transpiler.service.test.ts +0 -242
- package/src/services/module-loading/server-module-transpiler.service.ts +0 -104
- package/src/services/module-loading/source-module-support.ts +0 -19
- 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/server-invalidation-state.service.ts +0 -68
- package/src/services/validation/schema-validation-service.test.ts +0 -223
- package/src/services/validation/schema-validation-service.ts +0 -204
- package/src/static-site-generator/static-site-generator.test.ts +0 -408
- package/src/static-site-generator/static-site-generator.ts +0 -445
- package/src/types/internal-types.ts +0 -243
- package/src/types/public-types.ts +0 -1508
- package/src/utils/deep-merge.test.ts +0 -114
- package/src/utils/deep-merge.ts +0 -47
- package/src/utils/hash.ts +0 -5
- package/src/utils/html-escaping.ts +0 -9
- package/src/utils/invariant.test.ts +0 -22
- package/src/utils/invariant.ts +0 -15
- package/src/utils/locals-utils.ts +0 -37
- package/src/utils/parse-cli-args.test.ts +0 -69
- package/src/utils/parse-cli-args.ts +0 -105
- package/src/utils/path-utils.module.ts +0 -14
- package/src/utils/path-utils.test.ts +0 -15
- 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/utils/server-utils.test.ts +0 -38
- package/src/watchers/project-watcher.integration.test.ts +0 -337
- package/src/watchers/project-watcher.test-helpers.ts +0 -42
- package/src/watchers/project-watcher.test.ts +0 -768
- package/src/watchers/project-watcher.ts +0 -357
- /package/src/utils/{html.ts → html.d.ts} +0 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-plugin cache for `@/...` alias resolution.
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* The `ecopages-alias-resolver` plugin resolves project aliases like
|
|
6
|
+
* `@/components/Button` to concrete file paths under the app's `srcDir`.
|
|
7
|
+
* Each resolution can trigger up to 22 `existsSync` calls and (when
|
|
8
|
+
* the resolved path is a barrel) a `readFileSync` to detect
|
|
9
|
+
* `export * from './...'` forwarding.
|
|
10
|
+
*
|
|
11
|
+
* This cache memoizes the result keyed by `(srcDir, specifier)`. It is
|
|
12
|
+
* process-local and not currently invalidated by the file watcher —
|
|
13
|
+
* `srcDir` contents are assumed to be stable for the lifetime of the
|
|
14
|
+
* process.
|
|
15
|
+
*/
|
|
16
|
+
export declare class AliasResolverCache {
|
|
17
|
+
private readonly entries;
|
|
18
|
+
private readonly maxEntries;
|
|
19
|
+
private hits;
|
|
20
|
+
private misses;
|
|
21
|
+
constructor(maxEntries?: number);
|
|
22
|
+
/**
|
|
23
|
+
* Look up a previously-computed resolution for `(srcDir, specifier)`.
|
|
24
|
+
*
|
|
25
|
+
* Returns `{ hit: true, resolved }` on cache hit (resolved may be
|
|
26
|
+
* `undefined` for an unresolvable specifier), or `{ hit: false }` on
|
|
27
|
+
* miss. The caller is responsible for re-running the resolver and
|
|
28
|
+
* calling `set` to store the new entry.
|
|
29
|
+
*/
|
|
30
|
+
get(srcDir: string, specifier: string): {
|
|
31
|
+
hit: true;
|
|
32
|
+
resolved: string | undefined;
|
|
33
|
+
} | {
|
|
34
|
+
hit: false;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Store a resolution result.
|
|
38
|
+
*
|
|
39
|
+
* Pass `undefined` for `resolved` to memoize the negative case
|
|
40
|
+
* (specifier did not resolve) and avoid repeating the FS walk on
|
|
41
|
+
* every `@/...` import.
|
|
42
|
+
*/
|
|
43
|
+
set(srcDir: string, specifier: string, resolved: string | undefined): void;
|
|
44
|
+
/**
|
|
45
|
+
* Drop all entries whose `srcDir` is under `rootDir`. Use this from
|
|
46
|
+
* the file watcher when files are added or removed under the app's
|
|
47
|
+
* source tree.
|
|
48
|
+
*
|
|
49
|
+
* Path comparison is path-aware (handles both POSIX `/` and
|
|
50
|
+
* Windows `\` separators) via `path.relative` so cached entries
|
|
51
|
+
* normalized on one platform still match the watcher's `rootDir`
|
|
52
|
+
* on another. Without this, a Windows build that sees
|
|
53
|
+
* `entry.srcDir === 'C:\app\src'` would miss
|
|
54
|
+
* `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
|
|
55
|
+
*/
|
|
56
|
+
invalidateUnder(rootDir: string): number;
|
|
57
|
+
/** Clear all entries. */
|
|
58
|
+
clear(): void;
|
|
59
|
+
/** Current cache size. */
|
|
60
|
+
get size(): number;
|
|
61
|
+
/** Hit/miss counters for observability. */
|
|
62
|
+
stats(): {
|
|
63
|
+
hits: number;
|
|
64
|
+
misses: number;
|
|
65
|
+
size: number;
|
|
66
|
+
hitRate: number;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const DEFAULT_MAX_ENTRIES = 2e3;
|
|
3
|
+
class AliasResolverCache {
|
|
4
|
+
entries = /* @__PURE__ */ new Map();
|
|
5
|
+
maxEntries;
|
|
6
|
+
hits = 0;
|
|
7
|
+
misses = 0;
|
|
8
|
+
constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
|
|
9
|
+
if (maxEntries <= 0) {
|
|
10
|
+
throw new Error(`AliasResolverCache: maxEntries must be > 0, got ${maxEntries}`);
|
|
11
|
+
}
|
|
12
|
+
this.maxEntries = maxEntries;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Look up a previously-computed resolution for `(srcDir, specifier)`.
|
|
16
|
+
*
|
|
17
|
+
* Returns `{ hit: true, resolved }` on cache hit (resolved may be
|
|
18
|
+
* `undefined` for an unresolvable specifier), or `{ hit: false }` on
|
|
19
|
+
* miss. The caller is responsible for re-running the resolver and
|
|
20
|
+
* calling `set` to store the new entry.
|
|
21
|
+
*/
|
|
22
|
+
get(srcDir, specifier) {
|
|
23
|
+
const key = makeKey(srcDir, specifier);
|
|
24
|
+
const existing = this.entries.get(key);
|
|
25
|
+
if (existing) {
|
|
26
|
+
this.hits += 1;
|
|
27
|
+
this.entries.delete(key);
|
|
28
|
+
this.entries.set(key, existing);
|
|
29
|
+
return { hit: true, resolved: existing.resolved };
|
|
30
|
+
}
|
|
31
|
+
this.misses += 1;
|
|
32
|
+
return { hit: false };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Store a resolution result.
|
|
36
|
+
*
|
|
37
|
+
* Pass `undefined` for `resolved` to memoize the negative case
|
|
38
|
+
* (specifier did not resolve) and avoid repeating the FS walk on
|
|
39
|
+
* every `@/...` import.
|
|
40
|
+
*/
|
|
41
|
+
set(srcDir, specifier, resolved) {
|
|
42
|
+
const key = makeKey(srcDir, specifier);
|
|
43
|
+
this.entries.set(key, { srcDir, resolved });
|
|
44
|
+
if (this.entries.size > this.maxEntries) {
|
|
45
|
+
const oldestKey = this.entries.keys().next().value;
|
|
46
|
+
if (oldestKey !== void 0) {
|
|
47
|
+
this.entries.delete(oldestKey);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Drop all entries whose `srcDir` is under `rootDir`. Use this from
|
|
53
|
+
* the file watcher when files are added or removed under the app's
|
|
54
|
+
* source tree.
|
|
55
|
+
*
|
|
56
|
+
* Path comparison is path-aware (handles both POSIX `/` and
|
|
57
|
+
* Windows `\` separators) via `path.relative` so cached entries
|
|
58
|
+
* normalized on one platform still match the watcher's `rootDir`
|
|
59
|
+
* on another. Without this, a Windows build that sees
|
|
60
|
+
* `entry.srcDir === 'C:\app\src'` would miss
|
|
61
|
+
* `entry.srcDir.startsWith('C:/app/src/')` and leave stale entries.
|
|
62
|
+
*/
|
|
63
|
+
invalidateUnder(rootDir) {
|
|
64
|
+
const normalizedRoot = path.resolve(rootDir);
|
|
65
|
+
let removed = 0;
|
|
66
|
+
for (const [key, entry] of this.entries) {
|
|
67
|
+
if (isUnderDirectory(path.resolve(entry.srcDir), normalizedRoot)) {
|
|
68
|
+
this.entries.delete(key);
|
|
69
|
+
removed += 1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return removed;
|
|
73
|
+
}
|
|
74
|
+
/** Clear all entries. */
|
|
75
|
+
clear() {
|
|
76
|
+
this.entries.clear();
|
|
77
|
+
this.hits = 0;
|
|
78
|
+
this.misses = 0;
|
|
79
|
+
}
|
|
80
|
+
/** Current cache size. */
|
|
81
|
+
get size() {
|
|
82
|
+
return this.entries.size;
|
|
83
|
+
}
|
|
84
|
+
/** Hit/miss counters for observability. */
|
|
85
|
+
stats() {
|
|
86
|
+
const total = this.hits + this.misses;
|
|
87
|
+
return {
|
|
88
|
+
hits: this.hits,
|
|
89
|
+
misses: this.misses,
|
|
90
|
+
size: this.entries.size,
|
|
91
|
+
hitRate: total === 0 ? 0 : this.hits / total
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function makeKey(srcDir, specifier) {
|
|
96
|
+
return `${srcDir} ${specifier}`;
|
|
97
|
+
}
|
|
98
|
+
function isUnderDirectory(candidate, parent) {
|
|
99
|
+
if (candidate === parent) return true;
|
|
100
|
+
const rel = path.relative(parent, candidate);
|
|
101
|
+
if (!rel || rel.startsWith("..") || path.isAbsolute(rel)) return false;
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
AliasResolverCache
|
|
106
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
2
|
+
import { AliasResolverCache } from './alias-resolver-cache.js';
|
|
3
|
+
export declare function resolveAppSourceAliasPath(srcDir: string, specifier: string): string | undefined;
|
|
4
|
+
export declare function createAliasResolverPlugin(srcDir: string, options?: {
|
|
5
|
+
cache?: AliasResolverCache;
|
|
6
|
+
}): EcoBuildPlugin;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { AliasResolverCache } from "./alias-resolver-cache.js";
|
|
4
|
+
const RESOLVABLE_EXTENSIONS = [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mdx", ".css", ".scss", ".sass", ".less"];
|
|
5
|
+
function findResolvablePath(candidate) {
|
|
6
|
+
if (path.extname(candidate)) {
|
|
7
|
+
if (existsSync(candidate)) {
|
|
8
|
+
return candidate;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
for (const extension of RESOLVABLE_EXTENSIONS) {
|
|
12
|
+
const fileCandidate = `${candidate}${extension}`;
|
|
13
|
+
if (existsSync(fileCandidate)) {
|
|
14
|
+
return fileCandidate;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
for (const extension of RESOLVABLE_EXTENSIONS) {
|
|
18
|
+
const indexCandidate = path.join(candidate, `index${extension}`);
|
|
19
|
+
if (existsSync(indexCandidate)) {
|
|
20
|
+
return indexCandidate;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return void 0;
|
|
24
|
+
}
|
|
25
|
+
function resolveAliasedBarrelTarget(resolvedPath) {
|
|
26
|
+
if (!path.basename(resolvedPath).startsWith("index.")) {
|
|
27
|
+
return resolvedPath;
|
|
28
|
+
}
|
|
29
|
+
const source = readFileSync(resolvedPath, "utf8").trim();
|
|
30
|
+
const match = source.match(/^export\s+\*\s+from\s+['"]([^'"]+)['"]\s*;?$/);
|
|
31
|
+
if (!match?.[1]?.startsWith(".")) {
|
|
32
|
+
return resolvedPath;
|
|
33
|
+
}
|
|
34
|
+
const target = findResolvablePath(path.resolve(path.dirname(resolvedPath), match[1]));
|
|
35
|
+
return target ?? resolvedPath;
|
|
36
|
+
}
|
|
37
|
+
function resolveAppSourceAliasPath(srcDir, specifier) {
|
|
38
|
+
if (!specifier.startsWith("@/")) {
|
|
39
|
+
return void 0;
|
|
40
|
+
}
|
|
41
|
+
const candidate = path.join(srcDir, specifier.slice(2));
|
|
42
|
+
const resolved = findResolvablePath(candidate);
|
|
43
|
+
return resolved ? resolveAliasedBarrelTarget(resolved) : void 0;
|
|
44
|
+
}
|
|
45
|
+
function createAliasResolverPlugin(srcDir, options) {
|
|
46
|
+
const cache = options?.cache ?? new AliasResolverCache();
|
|
47
|
+
return {
|
|
48
|
+
name: "ecopages-alias-resolver",
|
|
49
|
+
setup(build) {
|
|
50
|
+
build.onResolve({ filter: /^@\// }, (args) => {
|
|
51
|
+
const cached = cache.get(srcDir, args.path);
|
|
52
|
+
if (cached.hit) {
|
|
53
|
+
return cached.resolved ? { path: cached.resolved } : {};
|
|
54
|
+
}
|
|
55
|
+
const resolved = resolveAppSourceAliasPath(srcDir, args.path);
|
|
56
|
+
cache.set(srcDir, args.path, resolved);
|
|
57
|
+
return resolved ? { path: resolved } : {};
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
createAliasResolverPlugin,
|
|
64
|
+
resolveAppSourceAliasPath
|
|
65
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bun plugin that auto-injects `__eco` metadata into EcoComponent config objects.
|
|
3
|
+
*
|
|
4
|
+
* This plugin uses AST parsing (via oxc-parser) to reliably inject the `__eco` property
|
|
5
|
+
* into EcoComponent config objects at import time. The injected metadata contains:
|
|
6
|
+
* - `dir`: The directory path of the component file (used for dependency resolution)
|
|
7
|
+
* - `integration`: The integration type (e.g., 'react', 'kitajs', 'ghtml', 'lit')
|
|
8
|
+
*
|
|
9
|
+
* The plugin intercepts file loading for all configured integration extensions and
|
|
10
|
+
* transforms component configs before they are executed.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Before transformation:
|
|
15
|
+
* export default eco.page({
|
|
16
|
+
* render: () => '<div>Hello</div>',
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // After transformation:
|
|
20
|
+
* export default eco.page({
|
|
21
|
+
* __eco: { id: "<hash>", file: "/path/to/pages/index.tsx", integration: "react" },
|
|
22
|
+
* render: () => '<div>Hello</div>',
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @module eco-component-meta-plugin
|
|
27
|
+
*/
|
|
28
|
+
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
29
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
30
|
+
import { type EcoSourceTransform, type EcoViteCompatiblePlugin } from './source-transform.js';
|
|
31
|
+
/**
|
|
32
|
+
* Options for creating the eco-component-meta-plugin.
|
|
33
|
+
*/
|
|
34
|
+
export interface EcoComponentDirPluginOptions {
|
|
35
|
+
/** The EcoPages application configuration containing integration settings */
|
|
36
|
+
config: EcoPagesAppConfig;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates the bundler-neutral metadata transform used by Ecopages loaders and
|
|
40
|
+
* Vite-compatible adapters.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createEcoComponentMetaTransform(options: EcoComponentDirPluginOptions): EcoSourceTransform;
|
|
43
|
+
/**
|
|
44
|
+
* Creates a build plugin that auto-injects `__eco` metadata into EcoComponent config objects.
|
|
45
|
+
*
|
|
46
|
+
* This plugin intercepts file loading for all integration-compatible files and:
|
|
47
|
+
* 1. Strips any query string from the file path (for dev mode cache-busting)
|
|
48
|
+
* 2. Reads the file contents
|
|
49
|
+
* 3. Parses the AST using oxc-parser to find injection points
|
|
50
|
+
* 4. Injects `__eco: { id: "...", file: "...", integration: "..." }` into config objects
|
|
51
|
+
* 5. Returns the transformed content with the appropriate loader
|
|
52
|
+
*
|
|
53
|
+
* Supported patterns:
|
|
54
|
+
* - `eco.page({ ... })` - Page component declarations
|
|
55
|
+
* - `eco.component({ ... })` - Reusable component declarations
|
|
56
|
+
* - `eco.html({ ... })` - HTML shell declarations
|
|
57
|
+
* - `eco.layout({ ... })` - Layout declarations
|
|
58
|
+
* - `Component.config = { ... }` - Config assignment pattern
|
|
59
|
+
* - `config: { ... }` - Config property in object literals
|
|
60
|
+
* - `export const config = { ... }` - Exported config declarations
|
|
61
|
+
*
|
|
62
|
+
* @param options - Plugin options containing the EcoPages config
|
|
63
|
+
* @returns A build plugin instance ready for registration
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* import { createEcoComponentMetaPlugin } from '@ecopages/core';
|
|
68
|
+
*
|
|
69
|
+
* const plugin = createEcoComponentMetaPlugin({ config: appConfig });
|
|
70
|
+
* appConfig.loaders.set(plugin.name, plugin);
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
|
|
74
|
+
/**
|
|
75
|
+
* Creates a Vite-compatible metadata injection plugin from the shared
|
|
76
|
+
* Ecopages source-transform primitive.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
|
|
79
|
+
/**
|
|
80
|
+
* Injects `__eco` metadata into EcoComponent config objects in file content.
|
|
81
|
+
*
|
|
82
|
+
* Uses oxc-parser for robust AST-based code analysis, which handles edge cases
|
|
83
|
+
* that regex-based approaches would miss (e.g., complex generics, nested objects,
|
|
84
|
+
* comments, string literals containing similar patterns).
|
|
85
|
+
*
|
|
86
|
+
* The injection is performed by:
|
|
87
|
+
* 1. Parsing the source code into an AST
|
|
88
|
+
* 2. Walking the AST to find all config object patterns
|
|
89
|
+
* 3. Collecting insertion points (sorted in reverse order to preserve positions)
|
|
90
|
+
* 4. Inserting the `__eco` property at each point
|
|
91
|
+
*
|
|
92
|
+
* @param contents - The source code content to transform
|
|
93
|
+
* @param filePath - Absolute path to the file (used to derive the directory)
|
|
94
|
+
* @param integration - The integration identifier for this file type
|
|
95
|
+
* @returns Transformed source code with `__eco` injected, or original if no patterns found
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const result = injectEcoMeta(
|
|
100
|
+
* 'export default eco.page({ render: () => "<div>Hi</div>" });',
|
|
101
|
+
* '/app/src/pages/index.tsx',
|
|
102
|
+
* 'react'
|
|
103
|
+
* );
|
|
104
|
+
* // Result: 'export default eco.page({ __eco: { id: "<hash>", file: "/app/src/pages/index.tsx", integration: "react" }, render: () => "<div>Hi</div>" });'
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export declare function injectEcoMeta(contents: string, filePath: string, integration: string): string;
|
|
108
|
+
export default createEcoComponentMetaPlugin;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { cachedParseSync } from "../cache/module-parse-cache.js";
|
|
2
|
+
import { rapidhash } from "../utils/hash.js";
|
|
3
|
+
import {
|
|
4
|
+
createEcoBuildPluginFromSourceTransform,
|
|
5
|
+
createVitePluginFromSourceTransform
|
|
6
|
+
} from "./source-transform.js";
|
|
7
|
+
const REGEX_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
|
|
8
|
+
const VALID_LOADER_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx"]);
|
|
9
|
+
function hasValidLoaderExtension(ext) {
|
|
10
|
+
for (const validExt of VALID_LOADER_EXTENSIONS) {
|
|
11
|
+
if (ext.endsWith(validExt)) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
function buildExtensionToIntegrationMap(integrations) {
|
|
18
|
+
const mapping = [];
|
|
19
|
+
for (const integration of integrations) {
|
|
20
|
+
for (const ext of integration.extensions) {
|
|
21
|
+
mapping.push([
|
|
22
|
+
ext,
|
|
23
|
+
{
|
|
24
|
+
name: integration.name,
|
|
25
|
+
jsxImportSource: integration.jsxImportSource
|
|
26
|
+
}
|
|
27
|
+
]);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
mapping.sort((a, b) => b[0].length - a[0].length);
|
|
31
|
+
return mapping;
|
|
32
|
+
}
|
|
33
|
+
function detectIntegration(filePath, extensionToIntegration) {
|
|
34
|
+
for (const [ext, integration] of extensionToIntegration) {
|
|
35
|
+
if (filePath.endsWith(ext)) {
|
|
36
|
+
return integration;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return { name: "ghtml" };
|
|
40
|
+
}
|
|
41
|
+
function prependJsxImportSource(code, jsxImportSource) {
|
|
42
|
+
if (!jsxImportSource || code.includes("@jsxImportSource")) {
|
|
43
|
+
return code;
|
|
44
|
+
}
|
|
45
|
+
return `/** @jsxImportSource ${jsxImportSource} */
|
|
46
|
+
${code}`;
|
|
47
|
+
}
|
|
48
|
+
function createExtensionPattern(extensions) {
|
|
49
|
+
if (extensions.length === 0) {
|
|
50
|
+
throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
|
|
51
|
+
}
|
|
52
|
+
const uniqueExtensions = [...new Set(extensions)];
|
|
53
|
+
const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
|
|
54
|
+
return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
|
|
55
|
+
}
|
|
56
|
+
function createEcoComponentMetaTransform(options) {
|
|
57
|
+
const allExtensions = options.config.integrations.flatMap((integration) => integration.extensions).filter(hasValidLoaderExtension);
|
|
58
|
+
if (allExtensions.length === 0) {
|
|
59
|
+
throw new Error("[eco-component-meta-plugin] No extensions configured. At least one integration is required.");
|
|
60
|
+
}
|
|
61
|
+
const extensionPattern = createExtensionPattern(allExtensions);
|
|
62
|
+
const extensionToIntegration = buildExtensionToIntegrationMap(options.config.integrations);
|
|
63
|
+
return {
|
|
64
|
+
name: "eco-component-meta-plugin",
|
|
65
|
+
enforce: "pre",
|
|
66
|
+
filter: extensionPattern,
|
|
67
|
+
transform(code, id) {
|
|
68
|
+
const integration = detectIntegration(id, extensionToIntegration);
|
|
69
|
+
return {
|
|
70
|
+
code: prependJsxImportSource(injectEcoMeta(code, id, integration.name), integration.jsxImportSource)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function createEcoComponentMetaPlugin(options) {
|
|
76
|
+
return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
77
|
+
}
|
|
78
|
+
function createEcoComponentMetaVitePlugin(options) {
|
|
79
|
+
return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
80
|
+
}
|
|
81
|
+
function findInjectionPoints(node, insertions, injection, isInsideEcoComponent = false) {
|
|
82
|
+
if (!node || typeof node !== "object") return;
|
|
83
|
+
const n = node;
|
|
84
|
+
if (n.type === "CallExpression") {
|
|
85
|
+
const callee = n.callee;
|
|
86
|
+
if (callee?.type === "MemberExpression" || callee?.type === "StaticMemberExpression") {
|
|
87
|
+
const obj = callee.object;
|
|
88
|
+
const prop = callee.property;
|
|
89
|
+
if (obj?.type === "Identifier" && obj?.name === "eco" && (prop?.name === "page" || prop?.name === "component" || prop?.name === "html" || prop?.name === "layout")) {
|
|
90
|
+
const args = n.arguments;
|
|
91
|
+
const firstArg = args?.[0];
|
|
92
|
+
if (firstArg?.type === "ObjectExpression") {
|
|
93
|
+
const start = firstArg.start;
|
|
94
|
+
if (typeof start === "number") {
|
|
95
|
+
insertions.push({ position: start + 1, text: injection });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (n.type === "AssignmentExpression") {
|
|
102
|
+
const left = n.left;
|
|
103
|
+
const right = n.right;
|
|
104
|
+
if (left?.type === "MemberExpression" || left?.type === "StaticMemberExpression") {
|
|
105
|
+
const prop = left.property;
|
|
106
|
+
if (prop?.name === "config" && right?.type === "ObjectExpression") {
|
|
107
|
+
const start = right.start;
|
|
108
|
+
if (typeof start === "number") {
|
|
109
|
+
insertions.push({ position: start + 1, text: injection });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (n.type === "ObjectProperty" || n.type === "Property") {
|
|
115
|
+
const key = n.key;
|
|
116
|
+
const value = n.value;
|
|
117
|
+
if ((key?.type === "Identifier" || key?.type === "IdentifierName") && key?.name === "config" && value?.type === "ObjectExpression" && isInsideEcoComponent) {
|
|
118
|
+
const start = value.start;
|
|
119
|
+
if (typeof start === "number") {
|
|
120
|
+
insertions.push({ position: start + 1, text: injection });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let childIsInsideEcoComponent = isInsideEcoComponent;
|
|
125
|
+
if (n.type === "VariableDeclarator") {
|
|
126
|
+
const id = n.id;
|
|
127
|
+
const typeAnnotation = id?.typeAnnotation;
|
|
128
|
+
if (typeAnnotation) {
|
|
129
|
+
const typeStr = JSON.stringify(typeAnnotation);
|
|
130
|
+
if (typeStr.includes("EcoComponent")) {
|
|
131
|
+
childIsInsideEcoComponent = true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
for (const key in n) {
|
|
136
|
+
if (key === "start" || key === "end" || key === "type") continue;
|
|
137
|
+
const value = n[key];
|
|
138
|
+
if (Array.isArray(value)) {
|
|
139
|
+
for (const child of value) {
|
|
140
|
+
findInjectionPoints(child, insertions, injection, childIsInsideEcoComponent);
|
|
141
|
+
}
|
|
142
|
+
} else if (typeof value === "object" && value !== null) {
|
|
143
|
+
findInjectionPoints(value, insertions, injection, childIsInsideEcoComponent);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function injectEcoMeta(contents, filePath, integration) {
|
|
148
|
+
const result = cachedParseSync(filePath, contents);
|
|
149
|
+
if (result.errors.length > 0) {
|
|
150
|
+
console.warn(`[eco-component-meta-plugin] Parse errors in ${filePath}:`, result.errors);
|
|
151
|
+
return contents;
|
|
152
|
+
}
|
|
153
|
+
const ast = result.program;
|
|
154
|
+
const id = rapidhash(filePath).toString(36);
|
|
155
|
+
const injection = ` __eco: { id: "${id}", file: "${filePath}", integration: "${integration}" },`;
|
|
156
|
+
const insertions = [];
|
|
157
|
+
findInjectionPoints(ast, insertions, injection);
|
|
158
|
+
if (insertions.length === 0) {
|
|
159
|
+
return contents;
|
|
160
|
+
}
|
|
161
|
+
insertions.sort((a, b) => b.position - a.position);
|
|
162
|
+
let transformed = contents;
|
|
163
|
+
for (const { position, text } of insertions) {
|
|
164
|
+
transformed = transformed.slice(0, position) + text + transformed.slice(position);
|
|
165
|
+
}
|
|
166
|
+
return transformed;
|
|
167
|
+
}
|
|
168
|
+
var eco_component_meta_plugin_default = createEcoComponentMetaPlugin;
|
|
169
|
+
export {
|
|
170
|
+
createEcoComponentMetaPlugin,
|
|
171
|
+
createEcoComponentMetaTransform,
|
|
172
|
+
createEcoComponentMetaVitePlugin,
|
|
173
|
+
eco_component_meta_plugin_default as default,
|
|
174
|
+
injectEcoMeta
|
|
175
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the shared foreign-JSX override build plugin.
|
|
4
|
+
*/
|
|
5
|
+
export interface ForeignJsxOverrideOptions {
|
|
6
|
+
/** JSX runtime that should own the transformed foreign files. */
|
|
7
|
+
hostJsxImportSource: string;
|
|
8
|
+
/** Extensions claimed by other JSX integrations that may appear in the host graph. */
|
|
9
|
+
foreignExtensions: string[];
|
|
10
|
+
/** More specific owned suffixes that must not be claimed by this override. */
|
|
11
|
+
excludeExtensions?: string[];
|
|
12
|
+
/** Optional plugin name override for debug output. */
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build plugin that prepends a `@jsxImportSource` pragma to foreign integration
|
|
17
|
+
* files bundled into a host integration's client graph.
|
|
18
|
+
*
|
|
19
|
+
* When a host integration (e.g. React) bundles a component file that belongs to
|
|
20
|
+
* another JSX integration (e.g. `.kita.tsx`), that file inherits the project
|
|
21
|
+
* `tsconfig` JSX runtime which produces the wrong output (HTML strings instead
|
|
22
|
+
* of framework elements). This plugin rewrites the source to explicitly target
|
|
23
|
+
* the host's JSX factory so the bundler compiles every JSX expression into the
|
|
24
|
+
* correct element creation calls.
|
|
25
|
+
*
|
|
26
|
+
* The plugin is intentionally framework-agnostic: any integration that does
|
|
27
|
+
* client-side bundling can use it by passing its own `jsxImportSource` and the
|
|
28
|
+
* set of foreign extensions collected from the app config.
|
|
29
|
+
*
|
|
30
|
+
* When no JSX-bearing foreign extensions are present, the returned plugin is a
|
|
31
|
+
* no-op so integrations can register it unconditionally.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createForeignJsxOverridePlugin(options: ForeignJsxOverrideOptions): EcoBuildPlugin;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
function createForeignJsxOverridePlugin(options) {
|
|
4
|
+
const extensions = options.foreignExtensions.filter((ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx"));
|
|
5
|
+
const excludedExtensions = (options.excludeExtensions ?? []).filter(
|
|
6
|
+
(ext) => ext.endsWith(".tsx") || ext.endsWith(".jsx")
|
|
7
|
+
);
|
|
8
|
+
if (extensions.length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
name: options.name ?? "foreign-jsx-override",
|
|
11
|
+
setup() {
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const pragma = `/** @jsxImportSource ${options.hostJsxImportSource} */
|
|
16
|
+
`;
|
|
17
|
+
const filter = new RegExp(`(${extensions.map((e) => e.replace(".", "\\.")).join("|")})$`);
|
|
18
|
+
return {
|
|
19
|
+
name: options.name ?? "foreign-jsx-override",
|
|
20
|
+
setup(build) {
|
|
21
|
+
build.onLoad({ filter }, (args) => {
|
|
22
|
+
if (excludedExtensions.some((extension) => args.path.endsWith(extension))) {
|
|
23
|
+
return void 0;
|
|
24
|
+
}
|
|
25
|
+
const source = readFileSync(args.path, "utf-8");
|
|
26
|
+
const loader = args.path.endsWith(".jsx") ? "jsx" : "tsx";
|
|
27
|
+
if (source.includes("@jsxImportSource")) {
|
|
28
|
+
return void 0;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
contents: pragma + source,
|
|
32
|
+
loader,
|
|
33
|
+
resolveDir: path.dirname(args.path)
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
createForeignJsxOverridePlugin
|
|
41
|
+
};
|