@ecopages/core 0.2.0-beta.8 → 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 +361 -58
- 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 +29 -340
- package/src/build/build-adapter.js +258 -260
- 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} +16 -2
- package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
- package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
- 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 +42 -12
- package/src/config/config-builder.js +645 -600
- 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 +32 -1
- package/src/plugins/source-transform.js +112 -60
- 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 -30
- package/src/services/assets/browser-bundle.service.js +54 -46
- 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 -309
- 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 -199
- 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,166 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
4
|
+
import { RESOLVED_ASSETS_VENDORS_DIR } from '../../config/constants.js';
|
|
5
|
+
import { getAppBrowserBuildPlugins } from '../../build/build-adapter.js';
|
|
6
|
+
import { resolveBarePackageBrowserEntry } from '../../plugins/tsconfig-import-resolver.js';
|
|
7
|
+
import { toPackageRootSpecifier } from '../../plugins/package-specifier.js';
|
|
8
|
+
import { resolveRuntimeSpecifierPublicPath } from '../../build/browser/browser-runtime-manifest.js';
|
|
9
|
+
import { BrowserBundleService } from '../../services/assets/browser-bundle.service.js';
|
|
10
|
+
const BROWSER_FIRST_VENDOR_CONDITIONS = ['browser', 'module', 'import', 'default'];
|
|
11
|
+
const MODULE_FIRST_VENDOR_CONDITIONS = ['module', 'import', 'default'];
|
|
12
|
+
const BROWSER_NODE_BUILTIN_GUARD_MARKER = '[browser-build] Node builtin';
|
|
13
|
+
function getVendorBundleConditions(specifier) {
|
|
14
|
+
return toPackageRootSpecifier(specifier) === '@ecopages/core'
|
|
15
|
+
? BROWSER_FIRST_VENDOR_CONDITIONS
|
|
16
|
+
: MODULE_FIRST_VENDOR_CONDITIONS;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lazily prebundles bare npm imports into cacheable `/assets/vendors/*` chunks.
|
|
20
|
+
*/
|
|
21
|
+
export class DevTransformVendorRegistry {
|
|
22
|
+
appConfig;
|
|
23
|
+
browserBundleService;
|
|
24
|
+
getRuntimeSpecifierMap;
|
|
25
|
+
resolveVendorBundlePlugins;
|
|
26
|
+
vendorsDir;
|
|
27
|
+
cache = new Map();
|
|
28
|
+
inFlight = new Map();
|
|
29
|
+
constructor(options) {
|
|
30
|
+
this.appConfig = options.appConfig;
|
|
31
|
+
this.browserBundleService = new BrowserBundleService(options.appConfig);
|
|
32
|
+
this.getRuntimeSpecifierMap = options.getRuntimeSpecifierMap;
|
|
33
|
+
this.resolveVendorBundlePlugins = options.resolveVendorBundlePlugins;
|
|
34
|
+
const distDir = options.appConfig.absolutePaths?.distDir ?? path.join(options.appConfig.rootDir, '.eco');
|
|
35
|
+
this.vendorsDir = path.join(distDir, RESOLVED_ASSETS_VENDORS_DIR);
|
|
36
|
+
}
|
|
37
|
+
resolveKnownVendorUrl(specifier) {
|
|
38
|
+
return resolveRuntimeSpecifierPublicPath(specifier, this.getRuntimeSpecifierMap());
|
|
39
|
+
}
|
|
40
|
+
async resolveVendorUrl(specifier) {
|
|
41
|
+
const known = this.resolveKnownVendorUrl(specifier);
|
|
42
|
+
if (known && this.resolveExistingVendorPath(known)) {
|
|
43
|
+
return known;
|
|
44
|
+
}
|
|
45
|
+
const cached = this.cache.get(specifier);
|
|
46
|
+
if (cached) {
|
|
47
|
+
return cached.url;
|
|
48
|
+
}
|
|
49
|
+
const pending = this.inFlight.get(specifier);
|
|
50
|
+
if (pending) {
|
|
51
|
+
return (await pending).url;
|
|
52
|
+
}
|
|
53
|
+
const promise = this.prebundleSpecifier(specifier).finally(() => {
|
|
54
|
+
this.inFlight.delete(specifier);
|
|
55
|
+
});
|
|
56
|
+
this.inFlight.set(specifier, promise);
|
|
57
|
+
return (await promise).url;
|
|
58
|
+
}
|
|
59
|
+
tryHandleVendorRequest(pathname) {
|
|
60
|
+
const prefix = `/${RESOLVED_ASSETS_VENDORS_DIR}/`;
|
|
61
|
+
if (!pathname.startsWith(prefix)) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const fileName = pathname.slice(prefix.length);
|
|
65
|
+
if (!fileName || fileName.includes('..')) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const filePath = path.join(this.vendorsDir, fileName);
|
|
69
|
+
if (!fileSystem.exists(filePath)) {
|
|
70
|
+
for (const entry of this.cache.values()) {
|
|
71
|
+
if (entry.url === pathname && fileSystem.exists(entry.filePath)) {
|
|
72
|
+
return this.createVendorResponse(entry.filePath);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return this.createVendorResponse(filePath);
|
|
78
|
+
}
|
|
79
|
+
invalidateAll() {
|
|
80
|
+
this.cache.clear();
|
|
81
|
+
this.inFlight.clear();
|
|
82
|
+
}
|
|
83
|
+
createVendorResponse(filePath) {
|
|
84
|
+
return new Response(fileSystem.readFileSync(filePath), {
|
|
85
|
+
headers: {
|
|
86
|
+
'Content-Type': 'application/javascript',
|
|
87
|
+
'Cache-Control': 'public, max-age=31536000, immutable',
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
resolveExistingVendorPath(url) {
|
|
92
|
+
const prefix = `/${RESOLVED_ASSETS_VENDORS_DIR}/`;
|
|
93
|
+
const pathname = new URL(url, 'http://ecopages.local').pathname;
|
|
94
|
+
if (!pathname.startsWith(prefix)) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const fileName = pathname.slice(prefix.length);
|
|
98
|
+
if (!fileName || fileName.includes('..')) {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
const filePath = path.join(this.vendorsDir, fileName);
|
|
102
|
+
return fileSystem.exists(filePath) ? filePath : undefined;
|
|
103
|
+
}
|
|
104
|
+
async prebundleSpecifier(specifier) {
|
|
105
|
+
const resolvedEntry = this.resolvePackageEntry(specifier);
|
|
106
|
+
fileSystem.ensureDir(this.vendorsDir);
|
|
107
|
+
const fileName = `${sanitizeSpecifierForFileName(specifier)}.${hashVendorEntry(specifier, resolvedEntry)}.js`;
|
|
108
|
+
const outPath = path.join(this.vendorsDir, fileName);
|
|
109
|
+
const url = `/${RESOLVED_ASSETS_VENDORS_DIR}/${fileName}`;
|
|
110
|
+
if (fileSystem.exists(outPath)) {
|
|
111
|
+
const entry = { url, filePath: outPath };
|
|
112
|
+
this.cache.set(specifier, entry);
|
|
113
|
+
return entry;
|
|
114
|
+
}
|
|
115
|
+
const vendorPlugins = this.resolveVendorBundlePlugins ? await this.resolveVendorBundlePlugins() : [];
|
|
116
|
+
const result = await this.browserBundleService.bundle({
|
|
117
|
+
profile: 'browser-script',
|
|
118
|
+
entrypoints: [resolvedEntry],
|
|
119
|
+
outdir: this.vendorsDir,
|
|
120
|
+
naming: fileName,
|
|
121
|
+
minify: false,
|
|
122
|
+
externalPackages: false,
|
|
123
|
+
treeshaking: true,
|
|
124
|
+
splitting: false,
|
|
125
|
+
conditions: [...getVendorBundleConditions(specifier)],
|
|
126
|
+
excludeAppBuildPlugins: getAppBrowserBuildPlugins(this.appConfig).map((plugin) => plugin.name),
|
|
127
|
+
plugins: [...vendorPlugins],
|
|
128
|
+
});
|
|
129
|
+
if (!result.success) {
|
|
130
|
+
const details = result.logs.map((log) => log.message).join('\n');
|
|
131
|
+
throw new Error(formatVendorPrebundleError(specifier, details));
|
|
132
|
+
}
|
|
133
|
+
const outputPath = result.outputs[0]?.path ?? outPath;
|
|
134
|
+
const entry = { url, filePath: outputPath };
|
|
135
|
+
this.cache.set(specifier, entry);
|
|
136
|
+
return entry;
|
|
137
|
+
}
|
|
138
|
+
resolvePackageEntry(specifier) {
|
|
139
|
+
const resolved = resolveBarePackageBrowserEntry(this.appConfig.rootDir, specifier);
|
|
140
|
+
if (!resolved) {
|
|
141
|
+
throw new Error(`[dev-transform] Unable to resolve bare import "${specifier}" for vendor prebundle`);
|
|
142
|
+
}
|
|
143
|
+
return resolved;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function formatVendorPrebundleError(specifier, details) {
|
|
147
|
+
if (details.includes(BROWSER_NODE_BUILTIN_GUARD_MARKER)) {
|
|
148
|
+
return (`[dev-transform] Bare import "${specifier}" resolved to a server-only entry. ` +
|
|
149
|
+
`Import a browser subpath or register the package in the browser runtime manifest.` +
|
|
150
|
+
(details ? `\n${details}` : ''));
|
|
151
|
+
}
|
|
152
|
+
return details
|
|
153
|
+
? `[dev-transform] Vendor prebundle failed for ${specifier}:\n${details}`
|
|
154
|
+
: `[dev-transform] Vendor prebundle failed for ${specifier}`;
|
|
155
|
+
}
|
|
156
|
+
function sanitizeSpecifierForFileName(specifier) {
|
|
157
|
+
return specifier.replaceAll(/^@/gu, '').replaceAll(/[/:@]/gu, '-');
|
|
158
|
+
}
|
|
159
|
+
function hashVendorEntry(specifier, entryPath) {
|
|
160
|
+
return createHash('sha256')
|
|
161
|
+
.update(specifier)
|
|
162
|
+
.update('\0')
|
|
163
|
+
.update(fileSystem.readFileSync(entryPath))
|
|
164
|
+
.digest('hex')
|
|
165
|
+
.slice(0, 8);
|
|
166
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DevTransformServer } from './dev-transform-server.js';
|
|
2
|
+
export type { DevTransformServerOptions } from './dev-transform-server.js';
|
|
3
|
+
export { DevTransformBundler } from './dev-transform-bundler.js';
|
|
4
|
+
export type { DevTransformBundleContributor, DevTransformBundleResult } from './types.js';
|
|
5
|
+
export { DevTransformVendorRegistry } from './dev-transform-vendor-registry.js';
|
|
6
|
+
export { resolveDevTransformModuleUrl, DEV_TRANSFORM_URL_PREFIX } from './dev-transform-url.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DevTransformServer } from './dev-transform-server.js';
|
|
2
|
+
export { DevTransformBundler } from './dev-transform-bundler.js';
|
|
3
|
+
export { DevTransformVendorRegistry } from './dev-transform-vendor-registry.js';
|
|
4
|
+
export { resolveDevTransformModuleUrl, DEV_TRANSFORM_URL_PREFIX } from './dev-transform-url.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EcoBuildPlugin } from '../../build/contracts/build-types.js';
|
|
2
|
+
export type DevTransformBundleResult = {
|
|
3
|
+
code: string;
|
|
4
|
+
dependencies?: string[];
|
|
5
|
+
};
|
|
6
|
+
export type DevTransformBundleContributor = {
|
|
7
|
+
/** Returns whether this contributor owns the source module path. */
|
|
8
|
+
ownsModule(sourcePath: string): boolean;
|
|
9
|
+
/** Integration-owned plugins for one dev-transform module (boundary, MDX, etc.). */
|
|
10
|
+
getModulePlugins(sourcePath: string): Promise<readonly EcoBuildPlugin[]>;
|
|
11
|
+
/** Runtime manifest specifiers already served from `/assets/vendors/*`. */
|
|
12
|
+
getRuntimeSpecifierMap?(): ReadonlyMap<string, string>;
|
|
13
|
+
/** Plugins applied to lazy vendor prebundles (client-graph boundary, runtime rewrites). */
|
|
14
|
+
getVendorBundlePlugins?(): Promise<readonly EcoBuildPlugin[]>;
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Dev toolbar (core)
|
|
2
|
+
|
|
3
|
+
Server-side wiring for the development-only in-browser inspector. Public docs: [Dev toolbar](/docs/core/dev-toolbar).
|
|
4
|
+
|
|
5
|
+
## Boundaries
|
|
6
|
+
|
|
7
|
+
| Layer | Owns |
|
|
8
|
+
| ----------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| **Core** (`DevToolbarHost`) | Enablement, `/_dev_toolbar.js` delivery, per-route `#__ECO_DEV_MANIFEST__`, HTML script injection |
|
|
10
|
+
| **Client package** (`devToolbar.package`) | Dock UI, panels, and any extra apps |
|
|
11
|
+
| **Integrations** | Page rendering and browser assets — not toolbar dock apps |
|
|
12
|
+
|
|
13
|
+
`@ecopages/dev-toolbar` is an optional peer. Core does not import it at runtime unless `devToolbar.package` is configured. The dev manifest contract (`dev-toolbar-manifest-contract.ts`) lives in core so apps and custom toolbar clients can type the payload without installing the reference toolbar package.
|
|
14
|
+
|
|
15
|
+
## Module map
|
|
16
|
+
|
|
17
|
+
| File | Role |
|
|
18
|
+
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `dev-toolbar-host.ts` | Enablement, manifest contribution, runtime bundling, HTML injection |
|
|
20
|
+
| `dev-toolbar-manifest-contract.ts` | `#__ECO_DEV_MANIFEST__` id and payload types (public: `@ecopages/core/dev-toolbar/dev-toolbar-manifest-contract`; mirrored in `@ecopages/dev-toolbar` for browser bundling) |
|
|
21
|
+
| `dev-toolbar-manifest.ts` | Builds and serializes the per-page dev manifest |
|
|
22
|
+
| `dev-toolbar-package.ts` | Resolves `devToolbar.package` bootstrap entry (`bootstrap.js`, then `.ts`) |
|
|
23
|
+
| `dev-toolbar-config.ts` | `isDevToolbarEnabled` — watch mode, env var, package required |
|
|
24
|
+
| `dev-toolbar-html-response.ts` | Adapter helpers for injecting `import '/_dev_toolbar.js'` |
|
|
25
|
+
| `dev-toolbar-runtime-paths.ts` | `/_dev_toolbar.js` URL and work-dir paths |
|
|
26
|
+
| `define-dev-tool.ts` | Config helper for bring-your-own client packages |
|
|
27
|
+
|
|
28
|
+
## Injection order
|
|
29
|
+
|
|
30
|
+
1. Route HTML is finalized with `#__ECO_DEV_MANIFEST__` appended to `<body>` (`route-html-finalization.service.ts`).
|
|
31
|
+
2. The server adapter injects `import '/_dev_toolbar.js'` before `</html>` when the toolbar is enabled (`server-adapter.ts` → `DevToolbarHost.injectHtmlResponse`).
|
|
32
|
+
3. HMR manager copies or bundles the configured client package to `/_dev_toolbar.js` during watch mode (`shared-hmr-manager.ts`).
|
|
33
|
+
|
|
34
|
+
## Config
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { devToolbar } from '@ecopages/dev-toolbar/config';
|
|
38
|
+
|
|
39
|
+
.setDevToolbar(devToolbar())
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Bring-your-own client:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { defineDevTool } from '@ecopages/core/dev-toolbar/define-dev-tool';
|
|
46
|
+
|
|
47
|
+
.setDevToolbar(defineDevTool('@acme/my-dev-toolbar'))
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Disable per project with `devToolbar: { enabled: false }`, or per process with `ECOPAGES_DEV_TOOLBAR=false`.
|
|
51
|
+
|
|
52
|
+
Parent index: [dev/README.md](../dev/README.md).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DevToolbarConfig } from './dev-toolbar-config.js';
|
|
2
|
+
export type DefineDevToolOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Client package resolved from the application project.
|
|
5
|
+
*
|
|
6
|
+
* @example '@ecopages/dev-toolbar'
|
|
7
|
+
*/
|
|
8
|
+
package: string;
|
|
9
|
+
/** @default true */
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Builds a `devToolbar` config block for bring-your-own client packages.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* Prefer importing `devToolbar` from `@ecopages/dev-toolbar/config` for the
|
|
17
|
+
* official toolbar. Keep server config limited to package resolution and
|
|
18
|
+
* enablement; UI preferences stay in the client package.
|
|
19
|
+
*/
|
|
20
|
+
export declare function defineDevTool(packageName: string): DevToolbarConfig;
|
|
21
|
+
export declare function defineDevTool(options: DefineDevToolOptions): DevToolbarConfig;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function defineDevTool(packageNameOrOptions) {
|
|
2
|
+
if (typeof packageNameOrOptions === 'string') {
|
|
3
|
+
return { package: packageNameOrOptions };
|
|
4
|
+
}
|
|
5
|
+
return {
|
|
6
|
+
package: packageNameOrOptions.package,
|
|
7
|
+
...(packageNameOrOptions.enabled === undefined ? {} : { enabled: packageNameOrOptions.enabled }),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
2
|
+
export type DevToolbarConfig = {
|
|
3
|
+
/**
|
|
4
|
+
* Whether the in-browser dev toolbar is enabled during development.
|
|
5
|
+
*
|
|
6
|
+
* @default true when `package` is configured
|
|
7
|
+
*/
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Client package entry resolved from the application project.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Install the package in the app (for example `@ecopages/dev-toolbar`) and
|
|
14
|
+
* point `package` at its browser bootstrap export. Core bundles that module
|
|
15
|
+
* to `/_dev_toolbar.js` during watch mode.
|
|
16
|
+
*/
|
|
17
|
+
package?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Returns whether the dev toolbar should be injected for the current process.
|
|
21
|
+
*/
|
|
22
|
+
export declare function isDevToolbarEnabled(appConfig: Pick<EcoPagesAppConfig, 'devToolbar'>, options: {
|
|
23
|
+
watch: boolean;
|
|
24
|
+
hostOwnsDevClient?: boolean;
|
|
25
|
+
}): boolean;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getDevToolbarPackageSpec } from './dev-toolbar-package.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns whether the dev toolbar should be injected for the current process.
|
|
4
|
+
*/
|
|
5
|
+
export function isDevToolbarEnabled(appConfig, options) {
|
|
6
|
+
if (options.hostOwnsDevClient) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
if (!options.watch) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
if (process.env.ECOPAGES_DEV_TOOLBAR === 'false') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (!getDevToolbarPackageSpec(appConfig)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return appConfig.devToolbar?.enabled !== false;
|
|
19
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { HtmlDocumentContribution } from '../services/html/html-transformer.service.js';
|
|
2
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
3
|
+
import type { PagePackageResult } from '../types/public-types.js';
|
|
4
|
+
export type DevToolbarHostOptions = {
|
|
5
|
+
watch: boolean;
|
|
6
|
+
hostOwnsDevClient?: boolean;
|
|
7
|
+
};
|
|
8
|
+
type DevToolbarBundleService = {
|
|
9
|
+
bundle: (options: {
|
|
10
|
+
profile: 'hmr-runtime';
|
|
11
|
+
entrypoints: string[];
|
|
12
|
+
outdir: string;
|
|
13
|
+
naming: string;
|
|
14
|
+
minify: boolean;
|
|
15
|
+
}) => Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
logs: unknown;
|
|
18
|
+
outputs: Array<{
|
|
19
|
+
path: string;
|
|
20
|
+
}>;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Server-side entry point for dev toolbar config, HTML injection, manifest, and runtime bundling.
|
|
25
|
+
*/
|
|
26
|
+
export declare class DevToolbarHost {
|
|
27
|
+
private readonly appConfig;
|
|
28
|
+
private readonly options;
|
|
29
|
+
constructor(appConfig: EcoPagesAppConfig, options: DevToolbarHostOptions);
|
|
30
|
+
static forApp(appConfig: EcoPagesAppConfig, options: DevToolbarHostOptions): DevToolbarHost;
|
|
31
|
+
isEnabled(): boolean;
|
|
32
|
+
getRuntimeScriptUrl(): string;
|
|
33
|
+
getRuntimeScriptImport(): string;
|
|
34
|
+
resolveRuntimeWorkDir(workDir: string): string;
|
|
35
|
+
shouldInjectHtml(): boolean;
|
|
36
|
+
injectHtmlResponse(response: Response): Promise<Response>;
|
|
37
|
+
buildRouteManifestContribution(input: {
|
|
38
|
+
routeFile: string;
|
|
39
|
+
integrationName: string;
|
|
40
|
+
pagePackage?: PagePackageResult;
|
|
41
|
+
}): HtmlDocumentContribution | undefined;
|
|
42
|
+
bundleClientRuntime(options: {
|
|
43
|
+
browserBundleService: DevToolbarBundleService;
|
|
44
|
+
workDir: string;
|
|
45
|
+
onFailure: (error: unknown) => void;
|
|
46
|
+
}): Promise<boolean>;
|
|
47
|
+
readBundledRuntime(workDir: string): Response | null;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileSystem } from '@ecopages/file-system';
|
|
3
|
+
import { removeStaleHmrEntrypointOutput } from '../hmr/hmr-entrypoint-output.js';
|
|
4
|
+
import { isDevToolbarEnabled } from './dev-toolbar-config.js';
|
|
5
|
+
import { resolveConfiguredDevToolbarClient } from './dev-toolbar-package.js';
|
|
6
|
+
import { buildDevToolbarManifestPayload, serializeDevToolbarManifestScript } from './dev-toolbar-manifest.js';
|
|
7
|
+
import { DEV_TOOLBAR_RUNTIME_IMPORT, DEV_TOOLBAR_RUNTIME_SCRIPT_URL, resolveDevToolbarRuntimeWorkDir, } from './dev-toolbar-runtime-paths.js';
|
|
8
|
+
/**
|
|
9
|
+
* Server-side entry point for dev toolbar config, HTML injection, manifest, and runtime bundling.
|
|
10
|
+
*/
|
|
11
|
+
export class DevToolbarHost {
|
|
12
|
+
appConfig;
|
|
13
|
+
options;
|
|
14
|
+
constructor(appConfig, options) {
|
|
15
|
+
this.appConfig = appConfig;
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
static forApp(appConfig, options) {
|
|
19
|
+
return new DevToolbarHost(appConfig, options);
|
|
20
|
+
}
|
|
21
|
+
isEnabled() {
|
|
22
|
+
return isDevToolbarEnabled(this.appConfig, this.options);
|
|
23
|
+
}
|
|
24
|
+
getRuntimeScriptUrl() {
|
|
25
|
+
return DEV_TOOLBAR_RUNTIME_SCRIPT_URL;
|
|
26
|
+
}
|
|
27
|
+
getRuntimeScriptImport() {
|
|
28
|
+
return DEV_TOOLBAR_RUNTIME_IMPORT;
|
|
29
|
+
}
|
|
30
|
+
resolveRuntimeWorkDir(workDir) {
|
|
31
|
+
return resolveDevToolbarRuntimeWorkDir(workDir);
|
|
32
|
+
}
|
|
33
|
+
shouldInjectHtml() {
|
|
34
|
+
return this.isEnabled();
|
|
35
|
+
}
|
|
36
|
+
async injectHtmlResponse(response) {
|
|
37
|
+
const html = await response.text();
|
|
38
|
+
const headers = new Headers(response.headers);
|
|
39
|
+
headers.set('Cache-Control', 'no-store, must-revalidate');
|
|
40
|
+
headers.delete('Content-Length');
|
|
41
|
+
if (html.includes(this.getRuntimeScriptImport())) {
|
|
42
|
+
return new Response(html, {
|
|
43
|
+
status: response.status,
|
|
44
|
+
statusText: response.statusText,
|
|
45
|
+
headers,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
const script = `<script type="module">${this.getRuntimeScriptImport()};</script>`;
|
|
49
|
+
const updatedHtml = html.replace(/<\/html>/i, `${script}</html>`);
|
|
50
|
+
return new Response(updatedHtml, {
|
|
51
|
+
status: response.status,
|
|
52
|
+
statusText: response.statusText,
|
|
53
|
+
headers,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
buildRouteManifestContribution(input) {
|
|
57
|
+
if (!this.isEnabled()) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const payload = buildDevToolbarManifestPayload({
|
|
61
|
+
routeFile: input.routeFile,
|
|
62
|
+
integrationName: input.integrationName,
|
|
63
|
+
pagePackage: input.pagePackage,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
placement: 'body-append',
|
|
67
|
+
html: serializeDevToolbarManifestScript(payload),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async bundleClientRuntime(options) {
|
|
71
|
+
if (!this.isEnabled()) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const client = resolveConfiguredDevToolbarClient(this.appConfig);
|
|
75
|
+
if (!client) {
|
|
76
|
+
options.onFailure(new Error('[DevToolbar] No client package configured. Set devToolbar.package in your app config.'));
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const runtimePath = path.join(options.workDir, path.basename(DEV_TOOLBAR_RUNTIME_SCRIPT_URL));
|
|
80
|
+
removeStaleHmrEntrypointOutput(runtimePath, 'DevToolbar');
|
|
81
|
+
try {
|
|
82
|
+
const result = await options.browserBundleService.bundle({
|
|
83
|
+
profile: 'hmr-runtime',
|
|
84
|
+
entrypoints: [client.entryPath],
|
|
85
|
+
outdir: options.workDir,
|
|
86
|
+
naming: path.basename(DEV_TOOLBAR_RUNTIME_SCRIPT_URL),
|
|
87
|
+
minify: false,
|
|
88
|
+
});
|
|
89
|
+
if (!result.success) {
|
|
90
|
+
options.onFailure(result.logs);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const emittedRuntime = result.outputs.find((output) => path.resolve(output.path) === path.resolve(runtimePath));
|
|
94
|
+
if (!emittedRuntime || !fileSystem.exists(runtimePath)) {
|
|
95
|
+
options.onFailure(new Error(`[DevToolbar] Runtime bundle missing expected output at ${runtimePath}`));
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
options.onFailure(error);
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
readBundledRuntime(workDir) {
|
|
106
|
+
const runtimePath = path.join(workDir, path.basename(DEV_TOOLBAR_RUNTIME_SCRIPT_URL));
|
|
107
|
+
if (!fileSystem.exists(runtimePath)) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return new Response(fileSystem.readFileAsBuffer(runtimePath), {
|
|
111
|
+
headers: {
|
|
112
|
+
'Content-Type': 'application/javascript',
|
|
113
|
+
'Cache-Control': 'no-store, must-revalidate',
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
2
|
+
import { type DevToolbarHostOptions } from './dev-toolbar-host.js';
|
|
3
|
+
export { DEV_TOOLBAR_RUNTIME_IMPORT } from './dev-toolbar-runtime-paths.js';
|
|
4
|
+
/**
|
|
5
|
+
* Returns whether HTML responses should receive the dev toolbar bootstrap.
|
|
6
|
+
*/
|
|
7
|
+
export declare function shouldInjectDevToolbarHtmlResponse(appConfig: EcoPagesAppConfig, options: DevToolbarHostOptions): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Injects the development dev toolbar runtime script into an HTML response if it is not already present.
|
|
10
|
+
*/
|
|
11
|
+
export declare function injectDevToolbarIntoHtmlResponse(appConfig: EcoPagesAppConfig, options: DevToolbarHostOptions, response: Response): Promise<Response>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DevToolbarHost } from './dev-toolbar-host.js';
|
|
2
|
+
export { DEV_TOOLBAR_RUNTIME_IMPORT } from './dev-toolbar-runtime-paths.js';
|
|
3
|
+
/**
|
|
4
|
+
* Returns whether HTML responses should receive the dev toolbar bootstrap.
|
|
5
|
+
*/
|
|
6
|
+
export function shouldInjectDevToolbarHtmlResponse(appConfig, options) {
|
|
7
|
+
return DevToolbarHost.forApp(appConfig, options).shouldInjectHtml();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Injects the development dev toolbar runtime script into an HTML response if it is not already present.
|
|
11
|
+
*/
|
|
12
|
+
export async function injectDevToolbarIntoHtmlResponse(appConfig, options, response) {
|
|
13
|
+
return DevToolbarHost.forApp(appConfig, options).injectHtmlResponse(response);
|
|
14
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** DOM id core uses when injecting `#__ECO_DEV_MANIFEST__` during watch mode. */
|
|
2
|
+
export declare const DEV_MANIFEST_ELEMENT_ID = "__ECO_DEV_MANIFEST__";
|
|
3
|
+
export type DevManifestAsset = {
|
|
4
|
+
srcUrl?: string;
|
|
5
|
+
kind: 'script' | 'stylesheet';
|
|
6
|
+
packageRole?: string;
|
|
7
|
+
inline?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type DevManifestPageBrowserGraph = {
|
|
10
|
+
entryAssets: DevManifestAsset[];
|
|
11
|
+
chunkAssets: DevManifestAsset[];
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Server-serialized development metadata injected into HTML responses.
|
|
15
|
+
*/
|
|
16
|
+
export type EcoDevManifest = {
|
|
17
|
+
route: string;
|
|
18
|
+
integration?: string;
|
|
19
|
+
pageBrowserGraph?: DevManifestPageBrowserGraph;
|
|
20
|
+
vendorUrls: string[];
|
|
21
|
+
devTransformUrls: string[];
|
|
22
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PagePackageResult } from '../types/public-types.js';
|
|
2
|
+
import { DEV_MANIFEST_ELEMENT_ID, type DevManifestAsset, type EcoDevManifest } from './dev-toolbar-manifest-contract.js';
|
|
3
|
+
export { DEV_MANIFEST_ELEMENT_ID, type DevManifestAsset as DevToolbarManifestAsset, type EcoDevManifest as DevToolbarManifestPayload, };
|
|
4
|
+
/**
|
|
5
|
+
* Builds the dev toolbar manifest payload for one rendered page.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildDevToolbarManifestPayload(input: {
|
|
8
|
+
routeFile: string;
|
|
9
|
+
integrationName?: string;
|
|
10
|
+
pagePackage?: PagePackageResult;
|
|
11
|
+
}): EcoDevManifest;
|
|
12
|
+
/**
|
|
13
|
+
* Serializes the dev toolbar manifest as an HTML contribution snippet.
|
|
14
|
+
*/
|
|
15
|
+
export declare function serializeDevToolbarManifestScript(payload: EcoDevManifest): string;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DEV_TRANSFORM_URL_PREFIX, VENDOR_URL_PREFIX } from '../hmr/hmr-asset-paths.js';
|
|
2
|
+
import { DEV_MANIFEST_ELEMENT_ID, } from './dev-toolbar-manifest-contract.js';
|
|
3
|
+
export { DEV_MANIFEST_ELEMENT_ID, };
|
|
4
|
+
function serializeAsset(asset) {
|
|
5
|
+
if (!asset.srcUrl) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
srcUrl: asset.srcUrl,
|
|
10
|
+
kind: asset.kind,
|
|
11
|
+
packageRole: asset.packageRole,
|
|
12
|
+
inline: asset.inline,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function collectUrlsFromAssets(assets, prefix) {
|
|
16
|
+
const urls = new Set();
|
|
17
|
+
for (const asset of assets) {
|
|
18
|
+
if (asset.srcUrl?.startsWith(prefix)) {
|
|
19
|
+
urls.add(asset.srcUrl);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return [...urls];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Builds the dev toolbar manifest payload for one rendered page.
|
|
26
|
+
*/
|
|
27
|
+
export function buildDevToolbarManifestPayload(input) {
|
|
28
|
+
const assets = input.pagePackage?.assets ?? [];
|
|
29
|
+
const graph = input.pagePackage?.pageBrowserGraph;
|
|
30
|
+
return {
|
|
31
|
+
route: input.routeFile,
|
|
32
|
+
integration: input.integrationName,
|
|
33
|
+
pageBrowserGraph: graph
|
|
34
|
+
? {
|
|
35
|
+
entryAssets: graph.entryAssets
|
|
36
|
+
.map((asset) => serializeAsset(asset))
|
|
37
|
+
.filter((asset) => asset !== undefined),
|
|
38
|
+
chunkAssets: graph.chunkAssets
|
|
39
|
+
.map((asset) => serializeAsset(asset))
|
|
40
|
+
.filter((asset) => asset !== undefined),
|
|
41
|
+
}
|
|
42
|
+
: undefined,
|
|
43
|
+
vendorUrls: collectUrlsFromAssets(assets, VENDOR_URL_PREFIX),
|
|
44
|
+
devTransformUrls: collectUrlsFromAssets(assets, DEV_TRANSFORM_URL_PREFIX),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Serializes the dev toolbar manifest as an HTML contribution snippet.
|
|
49
|
+
*/
|
|
50
|
+
export function serializeDevToolbarManifestScript(payload) {
|
|
51
|
+
return `<script type="application/json" id="${DEV_MANIFEST_ELEMENT_ID}">${JSON.stringify(payload)}</script>`;
|
|
52
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { EcoPagesAppConfig } from '../types/internal-types.js';
|
|
2
|
+
export type DevToolbarClientResolution = {
|
|
3
|
+
entryPath: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Returns the configured dev-toolbar client package specifier, if any.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDevToolbarPackageSpec(appConfig: Pick<EcoPagesAppConfig, 'devToolbar'>): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the dev-toolbar package root from an application project directory.
|
|
11
|
+
*
|
|
12
|
+
* @remarks Walks up from the package entry rather than resolving `package.json`
|
|
13
|
+
* directly so packages with strict `exports` (no `./package.json` subpath) still work.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveDevToolbarPackageRoot(rootDir: string, packageSpec: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves the browser entrypoint core bundles into `/_dev_toolbar.js`.
|
|
18
|
+
*
|
|
19
|
+
* @remarks Prefers `src/bootstrap.js` when present (published npm or `file:` to
|
|
20
|
+
* `dist`), then `bootstrap.ts` for workspace source checkouts.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveDevToolbarClient(rootDir: string, packageSpec: string): DevToolbarClientResolution | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Resolves the configured dev-toolbar client for an app config, when present.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveConfiguredDevToolbarClient(appConfig: EcoPagesAppConfig): DevToolbarClientResolution | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Resolves a dev-toolbar client entry module from the application project root.
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveDevToolbarPackageEntry(rootDir: string, packageSpec: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Resolves the configured dev-toolbar entry for an app config, when present.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveConfiguredDevToolbarEntry(appConfig: EcoPagesAppConfig): string | undefined;
|