@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.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 +42 -13
- package/package.json +360 -57
- package/src/adapters/README.md +6 -2
- package/src/adapters/abstract/application-adapter.d.ts +57 -5
- package/src/adapters/abstract/application-adapter.js +261 -203
- package/src/adapters/abstract/router-adapter.js +12 -4
- package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
- package/src/adapters/abstract/segment-path-matcher.js +147 -0
- package/src/adapters/abstract/server-adapter.d.ts +13 -2
- package/src/adapters/abstract/server-adapter.js +22 -14
- package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
- package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
- package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
- package/src/adapters/bun/client-bridge.js +51 -50
- package/src/adapters/bun/create-app.d.ts +4 -6
- package/src/adapters/bun/create-app.js +169 -154
- package/src/adapters/bun/hmr-manager.d.ts +2 -3
- package/src/adapters/bun/hmr-manager.js +62 -57
- package/src/adapters/bun/index.d.ts +1 -1
- package/src/adapters/bun/index.js +2 -8
- package/src/adapters/bun/runtime-host.d.ts +1 -1
- package/src/adapters/bun/runtime-host.js +61 -54
- package/src/adapters/bun/server-adapter.d.ts +34 -53
- package/src/adapters/bun/server-adapter.js +557 -637
- package/src/adapters/bun/static-preview-host.d.ts +1 -1
- package/src/adapters/bun/static-preview-host.js +43 -41
- package/src/adapters/create-app.d.ts +1 -12
- package/src/adapters/create-app.js +11 -72
- package/src/adapters/index.d.ts +2 -2
- package/src/adapters/index.js +2 -8
- package/src/adapters/node/create-app.d.ts +4 -3
- package/src/adapters/node/create-app.js +123 -98
- package/src/adapters/node/http-request-bridge.js +147 -106
- package/src/adapters/node/node-client-bridge.js +62 -64
- package/src/adapters/node/node-hmr-manager.d.ts +2 -3
- package/src/adapters/node/node-hmr-manager.js +58 -48
- package/src/adapters/node/runtime-host.d.ts +1 -1
- package/src/adapters/node/runtime-host.js +96 -89
- package/src/adapters/node/server-adapter-dependencies.js +18 -17
- package/src/adapters/node/server-adapter.d.ts +28 -8
- package/src/adapters/node/server-adapter.js +349 -302
- package/src/adapters/node/static-content-server.js +172 -186
- package/src/adapters/node/static-preview-host.d.ts +1 -1
- package/src/adapters/node/static-preview-host.js +88 -64
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
- package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
- package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
- package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
- package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
- package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
- package/src/adapters/shared/http/api-request-pipeline.js +132 -0
- package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
- package/src/adapters/shared/http/api-response.js +79 -0
- package/src/adapters/shared/http/create-body-response.d.ts +12 -0
- package/src/adapters/shared/http/create-body-response.js +26 -0
- package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
- package/src/adapters/shared/http/define-api-handler.js +49 -0
- package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
- package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
- package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
- package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
- package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
- package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
- package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
- package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
- package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
- package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
- package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
- package/src/adapters/shared/http/run-middleware-chain.js +17 -0
- package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
- package/src/adapters/shared/runtime/application-adapter.js +75 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
- package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
- package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
- package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
- package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
- package/src/adapters/shared/runtime/port-manager.js +226 -0
- package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
- package/src/adapters/shared/runtime/render-context.js +99 -0
- package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
- package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
- package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
- package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
- package/src/adapters/shared/runtime/server-adapter.js +301 -0
- package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
- package/src/adapters/shared/runtime/server-route-handler.js +77 -0
- package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
- package/src/adapters/shared/runtime/server-static-builder.js +172 -0
- package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
- package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
- package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
- package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
- package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
- package/src/build/README.md +165 -45
- package/src/build/app-build-manifest-runtime.d.ts +39 -0
- package/src/build/app-build-manifest-runtime.js +145 -0
- package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
- package/src/build/browser/browser-runtime-manifest.js +65 -0
- package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
- package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
- package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
- package/src/build/browser/browser-runtime-plugin.js +218 -0
- package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
- package/src/build/browser/jsx-ownership-plugins.js +55 -0
- package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
- package/src/build/browser/lit-static-render-worker-context.js +4 -0
- package/src/build/build-adapter.d.ts +25 -355
- package/src/build/build-adapter.js +258 -265
- package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
- package/src/build/cache/build-input-fingerprint.js +33 -0
- package/src/build/cache/cache-constants.d.ts +4 -0
- package/src/build/cache/cache-constants.js +4 -0
- package/src/build/cache/cache-keys.d.ts +22 -0
- package/src/build/cache/cache-keys.js +71 -0
- package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
- package/src/build/cache/pages-unified-graph-build.js +199 -0
- package/src/build/cache/production-build-cache.d.ts +21 -0
- package/src/build/cache/production-build-cache.js +56 -0
- package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
- package/src/build/cache/server-entry-build-cache.js +153 -0
- package/src/build/contracts/build-contracts.d.ts +96 -0
- package/src/build/contracts/build-contracts.js +1 -0
- package/src/build/contracts/build-manifest.d.ts +90 -0
- package/src/build/contracts/build-manifest.js +64 -0
- package/src/build/contracts/build-types.js +1 -0
- package/src/build/contracts/content-virtual-modules.d.ts +12 -0
- package/src/build/contracts/content-virtual-modules.js +29 -0
- package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
- package/src/build/rolldown/rolldown-adapter-helpers.js +463 -0
- package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
- package/src/build/rolldown/rolldown-build-adapter.js +57 -0
- package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
- package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
- package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +7 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
- package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
- package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
- package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
- package/src/build/runtime/build-profile-options.d.ts +7 -0
- package/src/build/runtime/build-profile-options.js +37 -0
- package/src/build/runtime/build-request-identity.d.ts +17 -0
- package/src/build/runtime/build-request-identity.js +79 -0
- package/src/build/runtime/build-request-policy.d.ts +58 -0
- package/src/build/runtime/build-request-policy.js +84 -0
- package/src/build/runtime/build-runtime.d.ts +28 -0
- package/src/build/runtime/build-runtime.js +75 -0
- package/src/build/runtime/deduping-build-executor.d.ts +21 -0
- package/src/build/runtime/deduping-build-executor.js +40 -0
- package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
- package/src/build/runtime/parallel-build-executor.js +60 -0
- package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
- package/src/build/runtime/serialized-build-executor.js +79 -0
- package/src/cache/index.d.ts +2 -1
- package/src/cache/index.js +7 -6
- package/src/cache/module-parse-cache.d.ts +5 -0
- package/src/cache/module-parse-cache.js +122 -67
- package/src/cache/module-transform-profiler.d.ts +8 -0
- package/src/cache/module-transform-profiler.js +8 -0
- package/src/client/navigation-scripts/classification.d.ts +16 -0
- package/src/client/navigation-scripts/classification.js +49 -0
- package/src/client/navigation-scripts/index.d.ts +3 -0
- package/src/client/navigation-scripts/index.js +3 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
- package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
- package/src/client/navigation-scripts/registry.d.ts +11 -0
- package/src/client/navigation-scripts/registry.js +16 -0
- package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
- package/src/client/navigation-scripts/rerun-queue.js +90 -0
- package/src/client/scroll.d.ts +17 -0
- package/src/client/scroll.js +33 -0
- package/src/client/scroll.test.browser.d.ts +1 -0
- package/src/client/scroll.test.browser.js +31 -0
- package/src/client/view-transitions.d.ts +32 -0
- package/src/client/view-transitions.js +120 -0
- package/src/client/view-transitions.test.browser.d.ts +1 -0
- package/src/client/view-transitions.test.browser.js +56 -0
- package/src/config/README.md +1 -1
- package/src/config/config-builder.d.ts +40 -20
- package/src/config/config-builder.js +645 -610
- package/src/config/constants.d.ts +1 -0
- package/src/config/constants.js +44 -23
- package/src/declarations.d.ts +1 -0
- package/src/dev/README.md +24 -0
- package/src/dev/client-bridge-registry.d.ts +5 -0
- package/src/dev/client-bridge-registry.js +10 -0
- package/src/dev/dev-client-ownership.d.ts +7 -0
- package/src/dev/dev-client-ownership.js +8 -0
- package/src/dev/hmr-manager-registry.d.ts +8 -0
- package/src/dev/hmr-manager-registry.js +10 -0
- package/src/dev/host-runtime.d.ts +3 -0
- package/src/dev/host-runtime.js +25 -23
- package/src/dev/runtime-server-started-message.d.ts +2 -0
- package/src/dev/runtime-server-started-message.js +3 -0
- package/src/dev/sc-server.js +106 -103
- package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
- package/src/dev/transform-server/dev-transform-bundler.js +79 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
- package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
- package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
- package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
- package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
- package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
- package/src/dev/transform-server/dev-transform-server.js +191 -0
- package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
- package/src/dev/transform-server/dev-transform-url.js +58 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
- package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
- package/src/dev/transform-server/index.d.ts +6 -0
- package/src/dev/transform-server/index.js +4 -0
- package/src/dev/transform-server/types.d.ts +15 -0
- package/src/dev/transform-server/types.js +1 -0
- package/src/dev-toolbar/README.md +52 -0
- package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
- package/src/dev-toolbar/define-dev-tool.js +9 -0
- package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
- package/src/dev-toolbar/dev-toolbar-config.js +19 -0
- package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
- package/src/dev-toolbar/dev-toolbar-host.js +117 -0
- package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
- package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
- package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
- package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
- package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
- package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
- package/src/dev-toolbar/dev-toolbar-package.js +78 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
- package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
- package/src/diagnostics/request-build-dedupe.d.ts +18 -0
- package/src/diagnostics/request-build-dedupe.js +39 -0
- package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
- package/src/diagnostics/request-pipeline-metrics.js +121 -0
- package/src/diagnostics/startup-trace.d.ts +81 -0
- package/src/diagnostics/startup-trace.js +281 -0
- package/src/eco/README.md +17 -0
- package/src/eco/component-identity.d.ts +13 -0
- package/src/eco/component-identity.js +18 -0
- package/src/eco/eco-declared-component.d.ts +15 -0
- package/src/eco/eco-declared-component.js +23 -0
- package/src/eco/eco.browser.js +63 -70
- package/src/eco/eco.js +163 -97
- package/src/eco/eco.types.d.ts +47 -8
- package/src/eco/eco.types.js +5 -0
- package/src/eco/eco.utils.d.ts +1 -1
- package/src/eco/eco.utils.js +1 -10
- package/src/eco/global-injector-map.js +55 -41
- package/src/eco/lazy-injector-map.js +90 -60
- package/src/eco/module-dependencies.js +52 -44
- package/src/eco/page-layout-normalization.d.ts +21 -0
- package/src/eco/page-layout-normalization.js +69 -0
- package/src/env.d.ts +2 -0
- package/src/errors/http-error.d.ts +8 -0
- package/src/errors/http-error.js +66 -49
- package/src/errors/index.d.ts +1 -0
- package/src/errors/index.js +3 -6
- package/src/errors/locals-access-error.js +5 -8
- package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
- package/src/errors/undeclared-component-dependency-error.js +17 -0
- package/src/global/app-logger.js +3 -6
- package/src/hmr/README.md +21 -0
- package/src/hmr/client/hmr-runtime.js +119 -110
- package/src/hmr/client/module-update.d.ts +13 -0
- package/src/hmr/client/module-update.js +39 -0
- package/src/hmr/hmr-asset-paths.d.ts +14 -0
- package/src/hmr/hmr-asset-paths.js +22 -0
- package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
- package/src/hmr/hmr-entrypoint-output.js +34 -0
- package/src/hmr/hmr-file-change-prep.d.ts +10 -0
- package/src/hmr/hmr-file-change-prep.js +14 -0
- package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
- package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
- package/src/hmr/hmr-runtime-paths.d.ts +10 -0
- package/src/hmr/hmr-runtime-paths.js +13 -0
- package/src/hmr/hmr-strategy.d.ts +9 -0
- package/src/hmr/hmr-strategy.js +113 -42
- package/src/hmr/strategies/default-hmr-strategy.js +55 -33
- package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
- package/src/hmr/strategies/js-hmr-strategy.js +107 -167
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
- package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
- package/src/index.browser.d.ts +1 -0
- package/src/index.browser.js +2 -4
- package/src/index.d.ts +4 -1
- package/src/index.js +7 -21
- package/src/islands/README.md +25 -0
- package/src/islands/island-host.d.ts +37 -0
- package/src/islands/island-host.js +55 -0
- package/src/plugins/README.md +2 -1
- package/src/plugins/alias-resolver-cache.d.ts +6 -9
- package/src/plugins/alias-resolver-cache.js +114 -97
- package/src/plugins/alias-resolver-plugin.d.ts +3 -3
- package/src/plugins/alias-resolver-plugin.js +35 -62
- package/src/plugins/define-integration.d.ts +26 -0
- package/src/plugins/define-integration.js +20 -0
- package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
- package/src/plugins/eco-component-meta-plugin.js +123 -162
- package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
- package/src/plugins/foreign-jsx-override-plugin.js +49 -37
- package/src/plugins/integration-plugin.d.ts +24 -6
- package/src/plugins/integration-plugin.js +212 -195
- package/src/plugins/jsx-import-source.utils.d.ts +8 -0
- package/src/plugins/jsx-import-source.utils.js +21 -0
- package/src/plugins/package-specifier.d.ts +12 -0
- package/src/plugins/package-specifier.js +33 -0
- package/src/plugins/processor.d.ts +66 -12
- package/src/plugins/processor.js +168 -137
- package/src/plugins/runtime-capability.js +1 -0
- package/src/plugins/source-transform.d.ts +1 -1
- package/src/plugins/source-transform.js +109 -79
- package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
- package/src/plugins/tsconfig-import-resolver.js +262 -0
- package/src/route-renderer/GRAPH.md +24 -30
- package/src/route-renderer/README.md +52 -32
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
- package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
- package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
- package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
- package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
- package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
- package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
- package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
- package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
- package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
- package/src/route-renderer/orchestration/integration-renderer.d.ts +37 -153
- package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
- package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
- package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
- package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
- package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
- package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
- package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
- package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
- package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
- package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
- package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
- package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
- package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
- package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
- package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
- package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
- package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
- package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
- package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
- package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
- package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
- package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
- package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
- package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
- package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
- package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
- package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
- package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
- package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
- package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
- package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
- package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
- package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
- package/src/route-renderer/page-loading/page-module-loader.js +136 -124
- package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
- package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
- package/src/route-renderer/route-renderer.js +74 -76
- package/src/router/README.md +31 -0
- package/src/router/client/link-intent.d.ts +11 -21
- package/src/router/client/link-intent.js +56 -30
- package/src/router/client/link-intent.test.browser.js +50 -39
- package/src/router/client/link-navigation-policy.d.ts +45 -0
- package/src/router/client/link-navigation-policy.js +122 -0
- package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
- package/src/router/client/link-navigation-policy.test.browser.js +82 -0
- package/src/router/client/navigation-coordinator.d.ts +1 -1
- package/src/router/client/navigation-coordinator.js +235 -211
- package/src/router/client/navigation-lifecycle.d.ts +55 -0
- package/src/router/client/navigation-lifecycle.js +50 -0
- package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
- package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
- package/src/router/server/route-registry.js +237 -242
- package/src/services/README.md +5 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
- package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
- package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
- package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
- package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
- package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
- package/src/services/assets/asset-processing-service/assets.types.js +1 -0
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
- package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
- package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
- package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
- package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
- package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
- package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
- package/src/services/assets/asset-processing-service/index.d.ts +2 -0
- package/src/services/assets/asset-processing-service/index.js +8 -6
- package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
- package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
- package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
- package/src/services/assets/asset-processing-service/page-package.js +70 -72
- package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
- package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
- package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
- package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
- 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 +8 -0
- package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
- package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
- package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
- package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
- package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
- package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
- package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
- package/src/services/assets/browser-bundle.service.d.ts +27 -31
- package/src/services/assets/browser-bundle.service.js +54 -49
- package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
- package/src/services/assets/browser-runtime-asset-generation.js +28 -0
- package/src/services/cache/cache.types.d.ts +4 -2
- package/src/services/cache/cache.types.js +5 -0
- package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
- package/src/services/cache/html-page-cache-dependency-index.js +88 -0
- package/src/services/cache/index.d.ts +2 -0
- package/src/services/cache/index.js +8 -7
- package/src/services/cache/memory-cache-store.js +101 -89
- package/src/services/cache/page-cache-service.d.ts +31 -1
- package/src/services/cache/page-cache-service.js +237 -150
- package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
- package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
- package/src/services/html/html-rewriter-provider.service.js +61 -61
- package/src/services/html/html-transformer.service.js +249 -266
- package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
- package/src/services/invalidation/development-invalidation.service.js +241 -204
- package/src/services/module-loading/README.md +9 -6
- package/src/services/module-loading/app-module-loader.service.js +1 -0
- package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
- package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
- package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
- package/src/services/module-loading/collection-server-module-build.service.js +83 -0
- package/src/services/module-loading/host-module-loader-registry.js +6 -11
- package/src/services/module-loading/module-loading-types.js +1 -0
- package/src/services/module-loading/page-module-import.service.d.ts +7 -12
- package/src/services/module-loading/page-module-import.service.js +232 -206
- package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
- package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
- package/src/services/module-loading/route-module-build-cache.js +3 -38
- package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
- package/src/services/module-loading/route-module-build-cache.store.js +213 -196
- package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
- package/src/services/module-loading/route-module-build-manifest.js +54 -118
- package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
- package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
- package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
- package/src/services/module-loading/server-module-transpiler.service.js +65 -62
- package/src/services/module-loading/source-module-support.js +15 -7
- package/src/services/runtime-state/dev-graph.service.js +165 -157
- package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
- package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
- package/src/services/validation/schema-validation-service.d.ts +1 -4
- package/src/services/validation/schema-validation-service.js +156 -95
- package/src/services/validation/standard-schema.types.d.ts +9 -62
- package/src/services/validation/standard-schema.types.js +1 -0
- package/src/services/validation/validate-standard-schema.d.ts +7 -0
- package/src/services/validation/validate-standard-schema.js +14 -0
- package/src/static-site-generator/README.md +10 -2
- package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
- package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
- package/src/static-site-generator/sitemap-routes.d.ts +14 -0
- package/src/static-site-generator/sitemap-routes.js +36 -0
- package/src/static-site-generator/sitemap.d.ts +15 -0
- package/src/static-site-generator/sitemap.js +42 -0
- package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
- package/src/static-site-generator/static-build-invalidation.js +33 -74
- package/src/static-site-generator/static-export-context.d.ts +9 -1
- package/src/static-site-generator/static-export-context.js +1 -0
- package/src/static-site-generator/static-site-generator.d.ts +27 -6
- package/src/static-site-generator/static-site-generator.js +528 -389
- package/src/types/internal-types.d.ts +55 -17
- package/src/types/internal-types.js +1 -0
- package/src/types/public-types.d.ts +236 -95
- package/src/types/public-types.js +1 -0
- package/src/utils/deep-merge.js +39 -26
- package/src/utils/ecopages-route-info.d.ts +26 -0
- package/src/utils/ecopages-route-info.js +30 -0
- package/src/utils/hash.js +3 -6
- package/src/utils/html-escaping.d.ts +7 -0
- package/src/utils/html-escaping.js +22 -5
- package/src/utils/invariant.js +11 -10
- package/src/utils/locals-utils.js +32 -22
- package/src/utils/parse-cli-args.d.ts +1 -0
- package/src/utils/parse-cli-args.js +73 -62
- package/src/utils/path-pattern.d.ts +23 -0
- package/src/utils/path-pattern.js +42 -0
- package/src/utils/path-utils.module.js +8 -11
- package/src/utils/resolve-entry-file.js +70 -38
- package/src/utils/resolve-work-dir.js +23 -27
- package/src/utils/runtime.js +24 -33
- package/src/utils/server-utils.module.d.ts +3 -2
- package/src/utils/server-utils.module.js +60 -53
- package/src/utils/static-file-extensions.d.ts +12 -0
- package/src/utils/static-file-extensions.js +54 -0
- package/src/watchers/project-watcher-ignore.d.ts +11 -0
- package/src/watchers/project-watcher-ignore.js +17 -0
- package/src/watchers/project-watcher.d.ts +21 -6
- package/src/watchers/project-watcher.js +402 -277
- package/src/watchers/project-watcher.test-helpers.js +45 -50
- package/src/adapters/shared/api-response.js +0 -96
- package/src/adapters/shared/application-adapter.js +0 -90
- package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
- package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
- package/src/adapters/shared/define-api-handler.d.ts +0 -25
- package/src/adapters/shared/define-api-handler.js +0 -15
- package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
- package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
- package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
- package/src/adapters/shared/fs-server-response-factory.js +0 -81
- package/src/adapters/shared/fs-server-response-matcher.js +0 -186
- package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
- package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
- package/src/adapters/shared/hmr-html-response.js +0 -33
- package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
- package/src/adapters/shared/render-context.js +0 -93
- package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
- package/src/adapters/shared/runtime-host.js +0 -0
- package/src/adapters/shared/server-adapter.js +0 -436
- package/src/adapters/shared/server-route-handler.js +0 -111
- package/src/adapters/shared/server-static-builder.js +0 -202
- package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
- package/src/adapters/shared/shared-hmr-manager.js +0 -273
- package/src/adapters/shared/static-preview-host.js +0 -0
- package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
- package/src/adapters/shared/websocket-lifecycle.js +0 -19
- package/src/build/browser-runtime-manifest.js +0 -61
- package/src/build/browser-runtime-plugin-helpers.js +0 -14
- package/src/build/browser-runtime-plugin.js +0 -173
- package/src/build/build-input-fingerprint.js +0 -31
- package/src/build/build-manifest.d.ts +0 -33
- package/src/build/build-manifest.js +0 -49
- package/src/build/build-types.js +0 -0
- package/src/build/jsx-ownership-plugins.d.ts +0 -10
- package/src/build/jsx-ownership-plugins.js +0 -17
- package/src/build/pages-unified-graph-build.js +0 -208
- package/src/build/parallel-build-executor.js +0 -52
- package/src/build/rolldown-adapter-helpers.js +0 -310
- package/src/build/rolldown-build-adapter.js +0 -67
- package/src/build/rolldown-build-invocation-metrics.js +0 -43
- package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
- package/src/build/rolldown-dev-build-adapter.js +0 -182
- package/src/build/rolldown-plugin-bridge.js +0 -211
- package/src/build/rolldown-source-transform-pass.js +0 -58
- package/src/build/runtime-build-executor.d.ts +0 -15
- package/src/build/runtime-build-executor.js +0 -43
- package/src/build/runtime-build-output-normalizer.js +0 -203
- package/src/build/serialized-build-executor.js +0 -63
- package/src/build/server-entry-build-cache.js +0 -169
- package/src/build/server-side-css-shim-plugin.js +0 -35
- package/src/hmr/hmr.postcss.test.e2e.js +0 -31
- package/src/hmr/hmr.test.e2e.js +0 -54
- package/src/integrations/ghtml/ghtml-renderer.js +0 -57
- package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
- package/src/integrations/ghtml/ghtml.constants.js +0 -4
- package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
- package/src/integrations/ghtml/ghtml.plugin.js +0 -20
- package/src/route-renderer/orchestration/component-render-context.js +0 -147
- package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
- package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
- package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
- package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
- package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
- package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
- package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
- package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
- package/src/route-renderer/orchestration/render-output.utils.js +0 -175
- package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
- package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
- package/src/route-renderer/orchestration/template-serialization.js +0 -45
- package/src/utils/html.d.ts +0 -1
- package/src/utils/html.js +0 -4
- /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
- /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
- /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
- /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
- /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
- /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
- /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
- /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IntegrationPlugin } from './integration-plugin.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a typed integration plugin factory for integrations that only need
|
|
4
|
+
* declarative config and a renderer class.
|
|
5
|
+
*/
|
|
6
|
+
export function defineIntegration(definition) {
|
|
7
|
+
const { renderer, ...defaultConfig } = definition;
|
|
8
|
+
class DefinedIntegrationPlugin extends IntegrationPlugin {
|
|
9
|
+
renderer = renderer;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super({
|
|
12
|
+
...defaultConfig,
|
|
13
|
+
...options,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const factory = ((options) => new DefinedIntegrationPlugin(options));
|
|
18
|
+
factory.Plugin = DefinedIntegrationPlugin;
|
|
19
|
+
return factory;
|
|
20
|
+
}
|
|
@@ -1,108 +1,12 @@
|
|
|
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
1
|
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
30
|
-
import {
|
|
31
|
-
|
|
32
|
-
* Options for creating the eco-component-meta-plugin.
|
|
33
|
-
*/
|
|
2
|
+
import type { EcoSourceTransform, EcoViteCompatiblePlugin } from './source-transform.js';
|
|
3
|
+
import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
|
|
34
4
|
export interface EcoComponentDirPluginOptions {
|
|
35
|
-
/** The EcoPages application configuration containing integration settings */
|
|
36
5
|
config: EcoPagesAppConfig;
|
|
37
6
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
* Vite-compatible adapters.
|
|
41
|
-
*/
|
|
7
|
+
/** Attributes real `eco.*()` factory calls with canonical component identity. */
|
|
8
|
+
export declare function attributeComponentIdentity(contents: string, filePath: string, integration: string): string;
|
|
42
9
|
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
10
|
export declare function createEcoComponentMetaVitePlugin(options: EcoComponentDirPluginOptions): EcoViteCompatiblePlugin;
|
|
79
|
-
|
|
80
|
-
|
|
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;
|
|
11
|
+
export declare function createEcoComponentMetaPlugin(options: EcoComponentDirPluginOptions): EcoBuildPlugin;
|
|
12
|
+
export default createEcoComponentMetaTransform;
|
|
@@ -1,175 +1,136 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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;
|
|
1
|
+
import { prependJsxImportSourceIfMissing } from './jsx-import-source.utils.js';
|
|
2
|
+
import { createEcoBuildPluginFromSourceTransform, createVitePluginFromSourceTransform } from './source-transform.js';
|
|
3
|
+
import { cachedParseSync } from '../cache/module-parse-cache.js';
|
|
4
|
+
import { rapidhash } from '../utils/hash.js';
|
|
5
|
+
function integrationForFile(filePath, config) {
|
|
6
|
+
const candidates = config.integrations
|
|
7
|
+
.flatMap((integration) => integration.extensions.map((extension) => [extension, integration]))
|
|
8
|
+
.sort(([left], [right]) => right.length - left.length);
|
|
9
|
+
const match = candidates.find(([extension]) => filePath.endsWith(extension));
|
|
10
|
+
return match ? { name: match[1].name, jsxImportSource: match[1].jsxImportSource } : undefined;
|
|
32
11
|
}
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
if (filePath.endsWith(ext)) {
|
|
36
|
-
return integration;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return { name: "ghtml" };
|
|
12
|
+
function isAstNode(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null;
|
|
40
14
|
}
|
|
41
|
-
function
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
15
|
+
function isEcoFactoryCall(node) {
|
|
16
|
+
if (node.type !== 'CallExpression' || !isAstNode(node.callee))
|
|
17
|
+
return false;
|
|
18
|
+
const callee = node.callee;
|
|
19
|
+
if (callee.type !== 'MemberExpression' && callee.type !== 'StaticMemberExpression')
|
|
20
|
+
return false;
|
|
21
|
+
if (!isAstNode(callee.object) || callee.object.type !== 'Identifier' || callee.object.name !== 'eco')
|
|
22
|
+
return false;
|
|
23
|
+
if (!isAstNode(callee.property) || callee.property.type !== 'Identifier')
|
|
24
|
+
return false;
|
|
25
|
+
return ['page', 'component', 'layout', 'html'].includes(String(callee.property.name));
|
|
47
26
|
}
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const uniqueExtensions = [...new Set(extensions)];
|
|
53
|
-
const escaped = uniqueExtensions.map((ext) => ext.replace(REGEX_SPECIAL_CHARS, "\\$&"));
|
|
54
|
-
return new RegExp(`(${escaped.join("|")})(\\?.*)?$`);
|
|
27
|
+
function isIdentityBinding(node) {
|
|
28
|
+
if (!isAstNode(node) || node.type !== 'CallExpression' || !isAstNode(node.callee))
|
|
29
|
+
return false;
|
|
30
|
+
return node.callee.type === 'Identifier' && node.callee.name === 'bindComponentIdentity';
|
|
55
31
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
};
|
|
32
|
+
function walkAst(node, visit) {
|
|
33
|
+
if (Array.isArray(node)) {
|
|
34
|
+
for (const child of node)
|
|
35
|
+
walkAst(child, visit);
|
|
36
|
+
return;
|
|
72
37
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
function createEcoComponentMetaVitePlugin(options) {
|
|
79
|
-
return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
38
|
+
if (!isAstNode(node))
|
|
39
|
+
return;
|
|
40
|
+
visit(node);
|
|
41
|
+
for (const value of Object.values(node))
|
|
42
|
+
walkAst(value, visit);
|
|
80
43
|
}
|
|
81
|
-
function
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (typeof start === "number") {
|
|
95
|
-
insertions.push({ position: start + 1, text: injection });
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
44
|
+
function addIdentityBindingImport(contents, program) {
|
|
45
|
+
const imports = program.body.filter((node) => isAstNode(node) &&
|
|
46
|
+
node.type === 'ImportDeclaration' &&
|
|
47
|
+
isAstNode(node.source) &&
|
|
48
|
+
node.source.value === '@ecopages/core');
|
|
49
|
+
const valueImport = imports.find((node) => node.importKind !== 'type');
|
|
50
|
+
if (!valueImport)
|
|
51
|
+
return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
|
|
52
|
+
const specifiers = Array.isArray(valueImport.specifiers) ? valueImport.specifiers.filter(isAstNode) : [];
|
|
53
|
+
if (specifiers.some((specifier) => specifier.type === 'ImportSpecifier' &&
|
|
54
|
+
isAstNode(specifier.imported) &&
|
|
55
|
+
specifier.imported.name === 'bindComponentIdentity')) {
|
|
56
|
+
return contents;
|
|
99
57
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
}
|
|
58
|
+
const namedSpecifiers = specifiers.filter((specifier) => specifier.type === 'ImportSpecifier');
|
|
59
|
+
if (namedSpecifiers.length > 0) {
|
|
60
|
+
const lastSpecifier = namedSpecifiers[namedSpecifiers.length - 1];
|
|
61
|
+
return `${contents.slice(0, lastSpecifier.end)}, bindComponentIdentity${contents.slice(lastSpecifier.end)}`;
|
|
112
62
|
}
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
}
|
|
63
|
+
if (specifiers.some((specifier) => specifier.type === 'ImportNamespaceSpecifier')) {
|
|
64
|
+
return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
|
|
122
65
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
}
|
|
66
|
+
const defaultSpecifier = specifiers.find((specifier) => specifier.type === 'ImportDefaultSpecifier');
|
|
67
|
+
if (defaultSpecifier) {
|
|
68
|
+
return `${contents.slice(0, defaultSpecifier.end)}, { bindComponentIdentity }${contents.slice(defaultSpecifier.end)}`;
|
|
133
69
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
70
|
+
return `import { bindComponentIdentity } from '@ecopages/core';\n${contents}`;
|
|
71
|
+
}
|
|
72
|
+
/** Attributes real `eco.*()` factory calls with canonical component identity. */
|
|
73
|
+
export function attributeComponentIdentity(contents, filePath, integration) {
|
|
74
|
+
if (!contents.includes('eco.'))
|
|
75
|
+
return contents;
|
|
76
|
+
let program;
|
|
77
|
+
try {
|
|
78
|
+
program = cachedParseSync(filePath, contents, { sourceType: 'module' }).program;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return contents;
|
|
82
|
+
}
|
|
83
|
+
const identityLiteral = `{ id: ${JSON.stringify(rapidhash(filePath).toString(36))}, file: ${JSON.stringify(filePath)}, integration: ${JSON.stringify(integration)} }`;
|
|
84
|
+
const edits = [];
|
|
85
|
+
walkAst(program, (node) => {
|
|
86
|
+
if (!isEcoFactoryCall(node) || !Array.isArray(node.arguments))
|
|
87
|
+
return;
|
|
88
|
+
const firstArgument = node.arguments[0];
|
|
89
|
+
if (!isAstNode(firstArgument) || isIdentityBinding(firstArgument))
|
|
90
|
+
return;
|
|
91
|
+
if (typeof firstArgument.start !== 'number' || typeof firstArgument.end !== 'number')
|
|
92
|
+
return;
|
|
93
|
+
edits.push({
|
|
94
|
+
start: firstArgument.start,
|
|
95
|
+
end: firstArgument.end,
|
|
96
|
+
replacement: `bindComponentIdentity(${identityLiteral}, ${contents.slice(firstArgument.start, firstArgument.end)})`,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
if (edits.length === 0)
|
|
100
|
+
return contents;
|
|
101
|
+
let transformed = contents;
|
|
102
|
+
for (const edit of edits.sort((left, right) => right.start - left.start)) {
|
|
103
|
+
transformed = `${transformed.slice(0, edit.start)}${edit.replacement}${transformed.slice(edit.end)}`;
|
|
144
104
|
}
|
|
145
|
-
|
|
105
|
+
return addIdentityBindingImport(transformed, program);
|
|
106
|
+
}
|
|
107
|
+
export function createEcoComponentMetaTransform(options) {
|
|
108
|
+
const extensions = options.config.integrations
|
|
109
|
+
.flatMap((integration) => integration.extensions)
|
|
110
|
+
.filter((extension) => ['.ts', '.tsx', '.js', '.jsx'].some((suffix) => extension.endsWith(suffix)))
|
|
111
|
+
.map((extension) => extension.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
|
|
112
|
+
const filter = new RegExp(`(${extensions.join('|')})(\\?.*)?$`);
|
|
113
|
+
return {
|
|
114
|
+
name: 'eco-component-identity-attribution',
|
|
115
|
+
enforce: 'pre',
|
|
116
|
+
filter,
|
|
117
|
+
transform(code, id) {
|
|
118
|
+
if (id.endsWith('.mdx'))
|
|
119
|
+
return { code };
|
|
120
|
+
const integration = integrationForFile(id, options.config);
|
|
121
|
+
if (!integration) {
|
|
122
|
+
return { code };
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
code: prependJsxImportSourceIfMissing(attributeComponentIdentity(code, id, integration.name), integration.jsxImportSource),
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export function createEcoComponentMetaVitePlugin(options) {
|
|
131
|
+
return createVitePluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
146
132
|
}
|
|
147
|
-
function
|
|
148
|
-
|
|
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;
|
|
133
|
+
export function createEcoComponentMetaPlugin(options) {
|
|
134
|
+
return createEcoBuildPluginFromSourceTransform(createEcoComponentMetaTransform(options));
|
|
167
135
|
}
|
|
168
|
-
|
|
169
|
-
export {
|
|
170
|
-
createEcoComponentMetaPlugin,
|
|
171
|
-
createEcoComponentMetaTransform,
|
|
172
|
-
createEcoComponentMetaVitePlugin,
|
|
173
|
-
eco_component_meta_plugin_default as default,
|
|
174
|
-
injectEcoMeta
|
|
175
|
-
};
|
|
136
|
+
export default createEcoComponentMetaTransform;
|
|
@@ -1,41 +1,53 @@
|
|
|
1
|
-
import { readFileSync } from
|
|
2
|
-
import path from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const loader = args.path.endsWith(".jsx") ? "jsx" : "tsx";
|
|
27
|
-
if (source.includes("@jsxImportSource")) {
|
|
28
|
-
return void 0;
|
|
29
|
-
}
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { createJsxImportSourcePragma, filterJsxSourceExtensions } from './jsx-import-source.utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build plugin that prepends a `@jsxImportSource` pragma to foreign integration
|
|
6
|
+
* files bundled into a host integration's client graph.
|
|
7
|
+
*
|
|
8
|
+
* When a host integration (e.g. React) bundles a component file that belongs to
|
|
9
|
+
* another JSX integration (e.g. `.kita.tsx`), that file inherits the project
|
|
10
|
+
* `tsconfig` JSX runtime which produces the wrong output (HTML strings instead
|
|
11
|
+
* of framework elements). This plugin rewrites the source to explicitly target
|
|
12
|
+
* the host's JSX factory so the bundler compiles every JSX expression into the
|
|
13
|
+
* correct element creation calls.
|
|
14
|
+
*
|
|
15
|
+
* The plugin is intentionally framework-agnostic: any integration that does
|
|
16
|
+
* client-side bundling can use it by passing its own `jsxImportSource` and the
|
|
17
|
+
* set of foreign extensions collected from the app config.
|
|
18
|
+
*
|
|
19
|
+
* When no JSX-bearing foreign extensions are present, the returned plugin is a
|
|
20
|
+
* no-op so integrations can register it unconditionally.
|
|
21
|
+
*/
|
|
22
|
+
export function createForeignJsxOverridePlugin(options) {
|
|
23
|
+
const extensions = filterJsxSourceExtensions(options.foreignExtensions);
|
|
24
|
+
const excludedExtensions = filterJsxSourceExtensions(options.excludeExtensions ?? []);
|
|
25
|
+
if (extensions.length === 0) {
|
|
30
26
|
return {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
resolveDir: path.dirname(args.path)
|
|
27
|
+
name: options.name ?? 'foreign-jsx-override',
|
|
28
|
+
setup() { },
|
|
34
29
|
};
|
|
35
|
-
});
|
|
36
30
|
}
|
|
37
|
-
|
|
31
|
+
const pragma = createJsxImportSourcePragma(options.hostJsxImportSource);
|
|
32
|
+
const filter = new RegExp(`(${extensions.map((e) => e.replace('.', '\\.')).join('|')})$`);
|
|
33
|
+
return {
|
|
34
|
+
name: options.name ?? 'foreign-jsx-override',
|
|
35
|
+
setup(build) {
|
|
36
|
+
build.onLoad({ filter }, (args) => {
|
|
37
|
+
if (excludedExtensions.some((extension) => args.path.endsWith(extension))) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
const source = readFileSync(args.path, 'utf-8');
|
|
41
|
+
const loader = args.path.endsWith('.jsx') ? 'jsx' : 'tsx';
|
|
42
|
+
if (source.includes('@jsxImportSource')) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
contents: pragma + source,
|
|
47
|
+
loader,
|
|
48
|
+
resolveDir: path.dirname(args.path),
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
};
|
|
38
53
|
}
|
|
39
|
-
export {
|
|
40
|
-
createForeignJsxOverridePlugin
|
|
41
|
-
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EcoBuildPlugin } from '../build/build-types.js';
|
|
2
|
-
import { type BrowserRuntimeManifest } from '../build/browser-runtime-manifest.js';
|
|
1
|
+
import type { EcoBuildPlugin } from '../build/contracts/build-types.js';
|
|
2
|
+
import { type BrowserRuntimeManifest } from '../build/browser/browser-runtime-manifest.js';
|
|
3
3
|
import type { EcoPagesAppConfig, IHmrManager } from '../types/internal-types.js';
|
|
4
4
|
import type { HmrStrategy } from '../hmr/hmr-strategy.js';
|
|
5
5
|
import type { EcoPagesElement } from '../types/public-types.js';
|
|
@@ -9,7 +9,7 @@ import type { AssetDefinition, ProcessedAsset } from '../services/assets/asset-p
|
|
|
9
9
|
import type { StaticExportContext } from '../static-site-generator/static-export-context.js';
|
|
10
10
|
import type { RuntimeCapabilityDeclaration } from './runtime-capability.js';
|
|
11
11
|
export type { RuntimeCapabilityDeclaration, RuntimeCapabilityTag } from './runtime-capability.js';
|
|
12
|
-
export type { EcoBuildLoader, EcoBuildOnLoadArgs, EcoBuildOnLoadResult, EcoBuildOnResolveArgs, EcoBuildOnResolveResult, EcoBuildPlugin, EcoBuildPluginBuilder, } from '../build/build-types.js';
|
|
12
|
+
export type { EcoBuildLoader, EcoBuildOnLoadArgs, EcoBuildOnLoadResult, EcoBuildOnResolveArgs, EcoBuildOnResolveResult, EcoBuildPlugin, EcoBuildPluginBuilder, } from '../build/contracts/build-types.js';
|
|
13
13
|
export type { PageBrowserGraphContribution, PageBrowserGraphContributionContext } from '../types/public-types.js';
|
|
14
14
|
export type { StaticExportContext } from '../static-site-generator/static-export-context.js';
|
|
15
15
|
export type { HtmlDocumentContribution, HtmlDocumentContributionContext, } from '../route-renderer/orchestration/integration-renderer.js';
|
|
@@ -82,8 +82,11 @@ type RendererClass<C> = new (options: {
|
|
|
82
82
|
*
|
|
83
83
|
* Core owns lifecycle ordering. Integrations declare contributions through the
|
|
84
84
|
* hooks on this class, while `ConfigBuilder.build()` and app startup decide when
|
|
85
|
-
* those hooks run.
|
|
86
|
-
*
|
|
85
|
+
* those hooks run. Build plugins map to {@link AppBuildManifest} buckets:
|
|
86
|
+
* `plugins` → `runtimePlugins`, `browserBuildPlugins` → `browserBundlePlugins`,
|
|
87
|
+
* `browserRuntimeManifest` → client import rewrite map. For page-browser and
|
|
88
|
+
* document shaping, integrations should prefer the contribution contracts
|
|
89
|
+
* re-exported from this module:
|
|
87
90
|
* `PageBrowserGraphContribution` / `PageBrowserGraphContributionContext` and
|
|
88
91
|
* `HtmlDocumentContribution` / `HtmlDocumentContributionContext`.
|
|
89
92
|
*/
|
|
@@ -100,6 +103,14 @@ export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
|
|
|
100
103
|
protected assetProcessingService?: AssetProcessingService;
|
|
101
104
|
protected hmrManager?: IHmrManager;
|
|
102
105
|
runtimeOrigin: string;
|
|
106
|
+
/**
|
|
107
|
+
* Returns build plugins shared by server-oriented and browser-oriented builds.
|
|
108
|
+
*
|
|
109
|
+
* @remarks
|
|
110
|
+
* Collected into {@link AppBuildManifest.runtimePlugins} during config finalization.
|
|
111
|
+
* MDX loaders, virtual-module resolvers, and other transforms that must run during
|
|
112
|
+
* route-module transpile belong here—not in {@link browserBuildPlugins}.
|
|
113
|
+
*/
|
|
103
114
|
get plugins(): EcoBuildPlugin[];
|
|
104
115
|
/**
|
|
105
116
|
* Returns build plugins that should only apply to browser-oriented bundles.
|
|
@@ -193,11 +204,18 @@ export declare abstract class IntegrationPlugin<C = EcoPagesElement> {
|
|
|
193
204
|
* Renderers are cheap runtime objects. They receive the finalized app config,
|
|
194
205
|
* a fresh asset-processing service, integration-global processed assets, and
|
|
195
206
|
* any renderer module context supplied by the active runtime.
|
|
196
|
-
renderer.name ||= this.name;
|
|
197
207
|
*/
|
|
198
208
|
initializeRenderer(options?: {
|
|
199
209
|
rendererModules?: unknown;
|
|
200
210
|
}): IntegrationRenderer<C>;
|
|
211
|
+
/**
|
|
212
|
+
* Shapes one dependency batch before core asset processing runs.
|
|
213
|
+
*
|
|
214
|
+
* @remarks
|
|
215
|
+
* Integrations use this to assign grouped-build metadata or other batch-level
|
|
216
|
+
* policy without teaching core about integration-specific asset graphs.
|
|
217
|
+
*/
|
|
218
|
+
prepareAssetDependencies?(dependencies: AssetDefinition[]): AssetDefinition[];
|
|
201
219
|
/**
|
|
202
220
|
* Prepares build-facing contributions before the app build manifest is sealed.
|
|
203
221
|
*
|