@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.
Files changed (623) hide show
  1. package/README.md +42 -13
  2. package/package.json +361 -58
  3. package/src/adapters/README.md +6 -2
  4. package/src/adapters/abstract/application-adapter.d.ts +57 -5
  5. package/src/adapters/abstract/application-adapter.js +261 -203
  6. package/src/adapters/abstract/router-adapter.js +12 -4
  7. package/src/adapters/abstract/segment-path-matcher.d.ts +6 -0
  8. package/src/adapters/abstract/segment-path-matcher.js +147 -0
  9. package/src/adapters/abstract/server-adapter.d.ts +13 -2
  10. package/src/adapters/abstract/server-adapter.js +22 -14
  11. package/src/adapters/abstract/ws-pattern-matcher.d.ts +2 -50
  12. package/src/adapters/abstract/ws-pattern-matcher.js +24 -57
  13. package/src/adapters/bun/bun-user-websocket-lifecycle.js +93 -0
  14. package/src/adapters/bun/client-bridge.js +51 -50
  15. package/src/adapters/bun/create-app.d.ts +4 -6
  16. package/src/adapters/bun/create-app.js +169 -154
  17. package/src/adapters/bun/hmr-manager.d.ts +2 -3
  18. package/src/adapters/bun/hmr-manager.js +62 -57
  19. package/src/adapters/bun/index.d.ts +1 -1
  20. package/src/adapters/bun/index.js +2 -8
  21. package/src/adapters/bun/runtime-host.d.ts +1 -1
  22. package/src/adapters/bun/runtime-host.js +61 -54
  23. package/src/adapters/bun/server-adapter.d.ts +34 -53
  24. package/src/adapters/bun/server-adapter.js +557 -637
  25. package/src/adapters/bun/static-preview-host.d.ts +1 -1
  26. package/src/adapters/bun/static-preview-host.js +43 -41
  27. package/src/adapters/create-app.d.ts +1 -12
  28. package/src/adapters/create-app.js +11 -72
  29. package/src/adapters/index.d.ts +2 -2
  30. package/src/adapters/index.js +2 -8
  31. package/src/adapters/node/create-app.d.ts +4 -3
  32. package/src/adapters/node/create-app.js +123 -98
  33. package/src/adapters/node/http-request-bridge.js +147 -106
  34. package/src/adapters/node/node-client-bridge.js +62 -64
  35. package/src/adapters/node/node-hmr-manager.d.ts +2 -3
  36. package/src/adapters/node/node-hmr-manager.js +58 -48
  37. package/src/adapters/node/runtime-host.d.ts +1 -1
  38. package/src/adapters/node/runtime-host.js +96 -89
  39. package/src/adapters/node/server-adapter-dependencies.js +18 -17
  40. package/src/adapters/node/server-adapter.d.ts +28 -8
  41. package/src/adapters/node/server-adapter.js +349 -302
  42. package/src/adapters/node/static-content-server.js +172 -186
  43. package/src/adapters/node/static-preview-host.d.ts +1 -1
  44. package/src/adapters/node/static-preview-host.js +88 -64
  45. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.d.ts +16 -0
  46. package/src/adapters/shared/hmr/dev-transform-entrypoint-registry.js +32 -0
  47. package/src/adapters/shared/{hmr-html-response.d.ts → hmr/hmr-html-response.d.ts} +2 -2
  48. package/src/adapters/shared/hmr/hmr-html-response.js +50 -0
  49. package/src/adapters/shared/hmr/shared-hmr-manager.d.ts +92 -0
  50. package/src/adapters/shared/hmr/shared-hmr-manager.js +446 -0
  51. package/src/adapters/shared/http/api-request-pipeline.d.ts +23 -0
  52. package/src/adapters/shared/http/api-request-pipeline.js +132 -0
  53. package/src/adapters/shared/{api-response.d.ts → http/api-response.d.ts} +1 -1
  54. package/src/adapters/shared/http/api-response.js +79 -0
  55. package/src/adapters/shared/http/create-body-response.d.ts +12 -0
  56. package/src/adapters/shared/http/create-body-response.js +26 -0
  57. package/src/adapters/shared/http/define-api-handler.d.ts +90 -0
  58. package/src/adapters/shared/http/define-api-handler.js +49 -0
  59. package/src/adapters/shared/{explicit-static-render-preparation.d.ts → http/explicit-static-render-preparation.d.ts} +3 -3
  60. package/src/adapters/shared/http/explicit-static-render-preparation.js +29 -0
  61. package/src/adapters/shared/{explicit-static-route-matcher.d.ts → http/explicit-static-route-matcher.d.ts} +3 -9
  62. package/src/adapters/shared/http/explicit-static-route-matcher.js +59 -0
  63. package/src/adapters/shared/{file-route-middleware-pipeline.d.ts → http/file-route-middleware-pipeline.d.ts} +2 -2
  64. package/src/adapters/shared/http/file-route-middleware-pipeline.js +84 -0
  65. package/src/adapters/shared/{fs-server-response-factory.d.ts → http/fs-server-response-factory.d.ts} +7 -2
  66. package/src/adapters/shared/http/fs-server-response-factory.js +106 -0
  67. package/src/adapters/shared/{fs-server-response-matcher.d.ts → http/fs-server-response-matcher.d.ts} +25 -5
  68. package/src/adapters/shared/http/fs-server-response-matcher.js +260 -0
  69. package/src/adapters/shared/http/run-middleware-chain.d.ts +5 -0
  70. package/src/adapters/shared/http/run-middleware-chain.js +17 -0
  71. package/src/adapters/shared/{application-adapter.d.ts → runtime/application-adapter.d.ts} +2 -2
  72. package/src/adapters/shared/runtime/application-adapter.js +75 -0
  73. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.d.ts +11 -0
  74. package/src/adapters/shared/runtime/collect-dev-prewarm-plan.js +29 -0
  75. package/src/adapters/shared/runtime/copy-runtime-public-dir.js +27 -0
  76. package/src/adapters/shared/runtime/dev-static-route-prewarm.d.ts +16 -0
  77. package/src/adapters/shared/runtime/dev-static-route-prewarm.js +66 -0
  78. package/src/adapters/shared/runtime/port-manager.d.ts +116 -0
  79. package/src/adapters/shared/runtime/port-manager.js +226 -0
  80. package/src/adapters/shared/{render-context.d.ts → runtime/render-context.d.ts} +2 -2
  81. package/src/adapters/shared/runtime/render-context.js +99 -0
  82. package/src/adapters/shared/{runtime-app-bootstrap.d.ts → runtime/runtime-app-bootstrap.d.ts} +4 -2
  83. package/src/adapters/shared/runtime/runtime-app-bootstrap.js +38 -0
  84. package/src/adapters/shared/runtime/runtime-server-lifecycle.d.ts +45 -0
  85. package/src/adapters/shared/runtime/runtime-server-lifecycle.js +71 -0
  86. package/src/adapters/shared/{server-adapter.d.ts → runtime/server-adapter.d.ts} +31 -50
  87. package/src/adapters/shared/runtime/server-adapter.js +301 -0
  88. package/src/adapters/shared/{server-route-handler.d.ts → runtime/server-route-handler.d.ts} +6 -33
  89. package/src/adapters/shared/runtime/server-route-handler.js +77 -0
  90. package/src/adapters/shared/{server-static-builder.d.ts → runtime/server-static-builder.d.ts} +26 -31
  91. package/src/adapters/shared/runtime/server-static-builder.js +172 -0
  92. package/src/adapters/shared/{static-preview-host.d.ts → runtime/static-preview-host.d.ts} +6 -1
  93. package/src/adapters/shared/{node-http-websocket-upgrades.d.ts → ws/node-http-websocket-upgrades.d.ts} +1 -1
  94. package/src/adapters/shared/ws/node-http-websocket-upgrades.js +109 -0
  95. package/src/adapters/shared/ws/websocket-lifecycle.d.ts +24 -0
  96. package/src/adapters/shared/ws/websocket-lifecycle.js +62 -0
  97. package/src/build/README.md +165 -45
  98. package/src/build/app-build-manifest-runtime.d.ts +39 -0
  99. package/src/build/app-build-manifest-runtime.js +145 -0
  100. package/src/build/{browser-runtime-manifest.d.ts → browser/browser-runtime-manifest.d.ts} +4 -0
  101. package/src/build/browser/browser-runtime-manifest.js +65 -0
  102. package/src/build/{browser-runtime-plugin-helpers.d.ts → browser/browser-runtime-plugin-helpers.d.ts} +3 -5
  103. package/src/build/browser/browser-runtime-plugin-helpers.js +32 -0
  104. package/src/build/{browser-runtime-plugin.d.ts → browser/browser-runtime-plugin.d.ts} +12 -13
  105. package/src/build/browser/browser-runtime-plugin.js +218 -0
  106. package/src/build/browser/jsx-ownership-plugins.d.ts +24 -0
  107. package/src/build/browser/jsx-ownership-plugins.js +55 -0
  108. package/src/build/browser/lit-static-render-worker-context.d.ts +2 -0
  109. package/src/build/browser/lit-static-render-worker-context.js +4 -0
  110. package/src/build/build-adapter.d.ts +29 -340
  111. package/src/build/build-adapter.js +258 -260
  112. package/src/build/{build-input-fingerprint.d.ts → cache/build-input-fingerprint.d.ts} +3 -3
  113. package/src/build/cache/build-input-fingerprint.js +33 -0
  114. package/src/build/cache/cache-constants.d.ts +4 -0
  115. package/src/build/cache/cache-constants.js +4 -0
  116. package/src/build/cache/cache-keys.d.ts +22 -0
  117. package/src/build/cache/cache-keys.js +71 -0
  118. package/src/build/{pages-unified-graph-build.d.ts → cache/pages-unified-graph-build.d.ts} +1 -1
  119. package/src/build/cache/pages-unified-graph-build.js +199 -0
  120. package/src/build/cache/production-build-cache.d.ts +21 -0
  121. package/src/build/cache/production-build-cache.js +56 -0
  122. package/src/build/{server-entry-build-cache.d.ts → cache/server-entry-build-cache.d.ts} +3 -4
  123. package/src/build/cache/server-entry-build-cache.js +153 -0
  124. package/src/build/contracts/build-contracts.d.ts +96 -0
  125. package/src/build/contracts/build-contracts.js +1 -0
  126. package/src/build/contracts/build-manifest.d.ts +90 -0
  127. package/src/build/contracts/build-manifest.js +64 -0
  128. package/src/build/contracts/build-types.js +1 -0
  129. package/src/build/contracts/content-virtual-modules.d.ts +12 -0
  130. package/src/build/contracts/content-virtual-modules.js +29 -0
  131. package/src/build/{rolldown-adapter-helpers.d.ts → rolldown/rolldown-adapter-helpers.d.ts} +32 -9
  132. package/src/build/rolldown/rolldown-adapter-helpers.js +463 -0
  133. package/src/build/{rolldown-build-adapter.d.ts → rolldown/rolldown-build-adapter.d.ts} +3 -7
  134. package/src/build/rolldown/rolldown-build-adapter.js +57 -0
  135. package/src/build/{rolldown-build-invocation-metrics.d.ts → rolldown/rolldown-build-invocation-metrics.d.ts} +1 -1
  136. package/src/build/rolldown/rolldown-build-invocation-metrics.js +39 -0
  137. package/src/build/{rolldown-plugin-bridge.d.ts → rolldown/rolldown-plugin-bridge.d.ts} +16 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/rolldown/rolldown-source-transform-pass.d.ts +15 -0
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +253 -0
  142. package/src/build/rolldown/server-side-css-shim-plugin.js +58 -0
  143. package/src/build/runtime/build-profile-options.d.ts +7 -0
  144. package/src/build/runtime/build-profile-options.js +37 -0
  145. package/src/build/runtime/build-request-identity.d.ts +17 -0
  146. package/src/build/runtime/build-request-identity.js +79 -0
  147. package/src/build/runtime/build-request-policy.d.ts +58 -0
  148. package/src/build/runtime/build-request-policy.js +84 -0
  149. package/src/build/runtime/build-runtime.d.ts +28 -0
  150. package/src/build/runtime/build-runtime.js +75 -0
  151. package/src/build/runtime/deduping-build-executor.d.ts +21 -0
  152. package/src/build/runtime/deduping-build-executor.js +40 -0
  153. package/src/build/{parallel-build-executor.d.ts → runtime/parallel-build-executor.d.ts} +1 -1
  154. package/src/build/runtime/parallel-build-executor.js +60 -0
  155. package/src/build/{serialized-build-executor.d.ts → runtime/serialized-build-executor.d.ts} +1 -1
  156. package/src/build/runtime/serialized-build-executor.js +79 -0
  157. package/src/cache/index.d.ts +2 -1
  158. package/src/cache/index.js +7 -6
  159. package/src/cache/module-parse-cache.d.ts +5 -0
  160. package/src/cache/module-parse-cache.js +122 -67
  161. package/src/cache/module-transform-profiler.d.ts +8 -0
  162. package/src/cache/module-transform-profiler.js +8 -0
  163. package/src/client/navigation-scripts/classification.d.ts +16 -0
  164. package/src/client/navigation-scripts/classification.js +49 -0
  165. package/src/client/navigation-scripts/index.d.ts +3 -0
  166. package/src/client/navigation-scripts/index.js +3 -0
  167. package/src/client/navigation-scripts/navigation-scripts.test.browser.d.ts +1 -0
  168. package/src/client/navigation-scripts/navigation-scripts.test.browser.js +61 -0
  169. package/src/client/navigation-scripts/registry.d.ts +11 -0
  170. package/src/client/navigation-scripts/registry.js +16 -0
  171. package/src/client/navigation-scripts/rerun-queue.d.ts +37 -0
  172. package/src/client/navigation-scripts/rerun-queue.js +90 -0
  173. package/src/client/scroll.d.ts +17 -0
  174. package/src/client/scroll.js +33 -0
  175. package/src/client/scroll.test.browser.d.ts +1 -0
  176. package/src/client/scroll.test.browser.js +31 -0
  177. package/src/client/view-transitions.d.ts +32 -0
  178. package/src/client/view-transitions.js +120 -0
  179. package/src/client/view-transitions.test.browser.d.ts +1 -0
  180. package/src/client/view-transitions.test.browser.js +56 -0
  181. package/src/config/README.md +1 -1
  182. package/src/config/config-builder.d.ts +42 -12
  183. package/src/config/config-builder.js +645 -600
  184. package/src/config/constants.d.ts +1 -0
  185. package/src/config/constants.js +44 -23
  186. package/src/declarations.d.ts +1 -0
  187. package/src/dev/README.md +24 -0
  188. package/src/dev/client-bridge-registry.d.ts +5 -0
  189. package/src/dev/client-bridge-registry.js +10 -0
  190. package/src/dev/dev-client-ownership.d.ts +7 -0
  191. package/src/dev/dev-client-ownership.js +8 -0
  192. package/src/dev/hmr-manager-registry.d.ts +8 -0
  193. package/src/dev/hmr-manager-registry.js +10 -0
  194. package/src/dev/host-runtime.d.ts +3 -0
  195. package/src/dev/host-runtime.js +25 -23
  196. package/src/dev/runtime-server-started-message.d.ts +2 -0
  197. package/src/dev/runtime-server-started-message.js +3 -0
  198. package/src/dev/sc-server.js +106 -103
  199. package/src/dev/transform-server/dev-transform-bundler.d.ts +24 -0
  200. package/src/dev/transform-server/dev-transform-bundler.js +79 -0
  201. package/src/dev/transform-server/dev-transform-externalize-plugin.d.ts +12 -0
  202. package/src/dev/transform-server/dev-transform-externalize-plugin.js +29 -0
  203. package/src/dev/transform-server/dev-transform-import-rewriter.d.ts +16 -0
  204. package/src/dev/transform-server/dev-transform-import-rewriter.js +127 -0
  205. package/src/dev/transform-server/dev-transform-module-kind.d.ts +13 -0
  206. package/src/dev/transform-server/dev-transform-module-kind.js +17 -0
  207. package/src/dev/transform-server/dev-transform-runtime-specifiers.d.ts +5 -0
  208. package/src/dev/transform-server/dev-transform-runtime-specifiers.js +16 -0
  209. package/src/dev/transform-server/dev-transform-server.d.ts +41 -0
  210. package/src/dev/transform-server/dev-transform-server.js +191 -0
  211. package/src/dev/transform-server/dev-transform-url.d.ts +13 -0
  212. package/src/dev/transform-server/dev-transform-url.js +58 -0
  213. package/src/dev/transform-server/dev-transform-vendor-registry.d.ts +28 -0
  214. package/src/dev/transform-server/dev-transform-vendor-registry.js +166 -0
  215. package/src/dev/transform-server/index.d.ts +6 -0
  216. package/src/dev/transform-server/index.js +4 -0
  217. package/src/dev/transform-server/types.d.ts +15 -0
  218. package/src/dev/transform-server/types.js +1 -0
  219. package/src/dev-toolbar/README.md +52 -0
  220. package/src/dev-toolbar/define-dev-tool.d.ts +21 -0
  221. package/src/dev-toolbar/define-dev-tool.js +9 -0
  222. package/src/dev-toolbar/dev-toolbar-config.d.ts +25 -0
  223. package/src/dev-toolbar/dev-toolbar-config.js +19 -0
  224. package/src/dev-toolbar/dev-toolbar-host.d.ts +49 -0
  225. package/src/dev-toolbar/dev-toolbar-host.js +117 -0
  226. package/src/dev-toolbar/dev-toolbar-html-response.d.ts +11 -0
  227. package/src/dev-toolbar/dev-toolbar-html-response.js +14 -0
  228. package/src/dev-toolbar/dev-toolbar-manifest-contract.d.ts +22 -0
  229. package/src/dev-toolbar/dev-toolbar-manifest-contract.js +2 -0
  230. package/src/dev-toolbar/dev-toolbar-manifest.d.ts +15 -0
  231. package/src/dev-toolbar/dev-toolbar-manifest.js +52 -0
  232. package/src/dev-toolbar/dev-toolbar-package.d.ts +34 -0
  233. package/src/dev-toolbar/dev-toolbar-package.js +78 -0
  234. package/src/dev-toolbar/dev-toolbar-runtime-paths.d.ts +10 -0
  235. package/src/dev-toolbar/dev-toolbar-runtime-paths.js +13 -0
  236. package/src/diagnostics/request-build-dedupe.d.ts +18 -0
  237. package/src/diagnostics/request-build-dedupe.js +39 -0
  238. package/src/diagnostics/request-pipeline-metrics.d.ts +38 -0
  239. package/src/diagnostics/request-pipeline-metrics.js +121 -0
  240. package/src/diagnostics/startup-trace.d.ts +81 -0
  241. package/src/diagnostics/startup-trace.js +281 -0
  242. package/src/eco/README.md +17 -0
  243. package/src/eco/component-identity.d.ts +13 -0
  244. package/src/eco/component-identity.js +18 -0
  245. package/src/eco/eco-declared-component.d.ts +15 -0
  246. package/src/eco/eco-declared-component.js +23 -0
  247. package/src/eco/eco.browser.js +63 -70
  248. package/src/eco/eco.js +163 -97
  249. package/src/eco/eco.types.d.ts +47 -8
  250. package/src/eco/eco.types.js +5 -0
  251. package/src/eco/eco.utils.d.ts +1 -1
  252. package/src/eco/eco.utils.js +1 -10
  253. package/src/eco/global-injector-map.js +55 -41
  254. package/src/eco/lazy-injector-map.js +90 -60
  255. package/src/eco/module-dependencies.js +52 -44
  256. package/src/eco/page-layout-normalization.d.ts +21 -0
  257. package/src/eco/page-layout-normalization.js +69 -0
  258. package/src/env.d.ts +2 -0
  259. package/src/errors/http-error.d.ts +8 -0
  260. package/src/errors/http-error.js +66 -49
  261. package/src/errors/index.d.ts +1 -0
  262. package/src/errors/index.js +3 -6
  263. package/src/errors/locals-access-error.js +5 -8
  264. package/src/errors/undeclared-component-dependency-error.d.ts +11 -0
  265. package/src/errors/undeclared-component-dependency-error.js +17 -0
  266. package/src/global/app-logger.js +3 -6
  267. package/src/hmr/README.md +21 -0
  268. package/src/hmr/client/hmr-runtime.js +119 -110
  269. package/src/hmr/client/module-update.d.ts +13 -0
  270. package/src/hmr/client/module-update.js +39 -0
  271. package/src/hmr/hmr-asset-paths.d.ts +14 -0
  272. package/src/hmr/hmr-asset-paths.js +22 -0
  273. package/src/hmr/hmr-entrypoint-output.d.ts +21 -0
  274. package/src/hmr/hmr-entrypoint-output.js +34 -0
  275. package/src/hmr/hmr-file-change-prep.d.ts +10 -0
  276. package/src/hmr/hmr-file-change-prep.js +14 -0
  277. package/src/hmr/hmr-registered-entrypoints-context.d.ts +7 -0
  278. package/src/hmr/hmr-registered-entrypoints-context.js +1 -0
  279. package/src/hmr/hmr-runtime-paths.d.ts +10 -0
  280. package/src/hmr/hmr-runtime-paths.js +13 -0
  281. package/src/hmr/hmr-strategy.d.ts +9 -0
  282. package/src/hmr/hmr-strategy.js +113 -42
  283. package/src/hmr/strategies/default-hmr-strategy.js +55 -33
  284. package/src/hmr/strategies/js-hmr-strategy.d.ts +6 -97
  285. package/src/hmr/strategies/js-hmr-strategy.js +107 -167
  286. package/src/hmr/strategies/server-rendered-template-hmr-strategy.d.ts +17 -0
  287. package/src/hmr/strategies/server-rendered-template-hmr-strategy.js +35 -0
  288. package/src/index.browser.d.ts +1 -0
  289. package/src/index.browser.js +2 -4
  290. package/src/index.d.ts +4 -1
  291. package/src/index.js +7 -21
  292. package/src/islands/README.md +25 -0
  293. package/src/islands/island-host.d.ts +37 -0
  294. package/src/islands/island-host.js +55 -0
  295. package/src/plugins/README.md +2 -1
  296. package/src/plugins/alias-resolver-cache.d.ts +6 -9
  297. package/src/plugins/alias-resolver-cache.js +114 -97
  298. package/src/plugins/alias-resolver-plugin.d.ts +3 -3
  299. package/src/plugins/alias-resolver-plugin.js +35 -62
  300. package/src/plugins/define-integration.d.ts +26 -0
  301. package/src/plugins/define-integration.js +20 -0
  302. package/src/plugins/eco-component-meta-plugin.d.ts +6 -102
  303. package/src/plugins/eco-component-meta-plugin.js +123 -162
  304. package/src/plugins/foreign-jsx-override-plugin.d.ts +1 -1
  305. package/src/plugins/foreign-jsx-override-plugin.js +49 -37
  306. package/src/plugins/integration-plugin.d.ts +24 -6
  307. package/src/plugins/integration-plugin.js +212 -195
  308. package/src/plugins/jsx-import-source.utils.d.ts +8 -0
  309. package/src/plugins/jsx-import-source.utils.js +21 -0
  310. package/src/plugins/package-specifier.d.ts +12 -0
  311. package/src/plugins/package-specifier.js +33 -0
  312. package/src/plugins/processor.d.ts +66 -12
  313. package/src/plugins/processor.js +168 -137
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +32 -1
  316. package/src/plugins/source-transform.js +112 -60
  317. package/src/plugins/tsconfig-import-resolver.d.ts +37 -0
  318. package/src/plugins/tsconfig-import-resolver.js +262 -0
  319. package/src/route-renderer/GRAPH.md +24 -30
  320. package/src/route-renderer/README.md +52 -32
  321. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.d.ts +107 -0
  322. package/src/route-renderer/orchestration/document-shell/document-shell-render.service.js +155 -0
  323. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.d.ts +20 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +37 -0
  325. package/src/route-renderer/orchestration/{component-render-context.d.ts → foreign-child/component-render-context.d.ts} +8 -15
  326. package/src/route-renderer/orchestration/foreign-child/component-render-context.js +196 -0
  327. package/src/route-renderer/orchestration/{render-output.utils.d.ts → foreign-child/foreign-child-output.utils.d.ts} +20 -7
  328. package/src/route-renderer/orchestration/foreign-child/foreign-child-output.utils.js +195 -0
  329. package/src/route-renderer/orchestration/{foreign-subtree-execution.service.d.ts → foreign-child/foreign-subtree-execution.service.d.ts} +64 -34
  330. package/src/route-renderer/orchestration/foreign-child/foreign-subtree-execution.service.js +354 -0
  331. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.d.ts +19 -0
  332. package/src/route-renderer/orchestration/foreign-child/owning-renderer-resolution.js +36 -0
  333. package/src/route-renderer/orchestration/integration-renderer.d.ts +37 -153
  334. package/src/route-renderer/orchestration/integration-renderer.js +803 -1008
  335. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.d.ts +75 -0
  336. package/src/route-renderer/orchestration/integration-renderer.test-fixtures.js +173 -0
  337. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.d.ts +10 -0
  338. package/src/route-renderer/orchestration/ownership-graph/component-graph-collectors.js +132 -0
  339. package/src/route-renderer/orchestration/ownership-graph/component-graph.d.ts +34 -0
  340. package/src/route-renderer/orchestration/ownership-graph/component-graph.js +89 -0
  341. package/src/route-renderer/orchestration/{ownership-validation.service.d.ts → ownership-graph/ownership-validation.service.d.ts} +6 -2
  342. package/src/route-renderer/orchestration/ownership-graph/ownership-validation.service.js +77 -0
  343. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.d.ts +7 -0
  344. package/src/route-renderer/orchestration/page-browser-graph/global-injector-assets.service.js +30 -0
  345. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.d.ts +15 -0
  346. package/src/route-renderer/orchestration/page-browser-graph/grouped-graph-build-plan.js +9 -0
  347. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.d.ts +5 -0
  348. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-contribution.merge.js +30 -0
  349. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.d.ts +12 -0
  350. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-merge.utils.js +32 -0
  351. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.d.ts +126 -0
  352. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph-session.js +542 -0
  353. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.d.ts +47 -0
  354. package/src/route-renderer/orchestration/page-browser-graph/page-browser-graph.service.js +248 -0
  355. package/src/route-renderer/orchestration/{processed-asset-dedupe.d.ts → page-browser-graph/processed-asset-dedupe.d.ts} +1 -1
  356. package/src/route-renderer/orchestration/page-browser-graph/processed-asset-dedupe.js +23 -0
  357. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.d.ts +29 -0
  358. package/src/route-renderer/orchestration/page-browser-graph/route-instance-key.js +54 -0
  359. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.d.ts +38 -0
  360. package/src/route-renderer/orchestration/route-pipeline/integration-route-render-adapter.js +26 -0
  361. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.d.ts +6 -0
  362. package/src/route-renderer/orchestration/route-pipeline/marker-artifact.utils.js +25 -0
  363. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.d.ts +15 -0
  364. package/src/route-renderer/orchestration/route-pipeline/robots-meta.contribution.js +43 -0
  365. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.d.ts +25 -0
  366. package/src/route-renderer/orchestration/route-pipeline/route-html-finalization.service.js +44 -0
  367. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.d.ts +26 -0
  368. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.builder.js +44 -0
  369. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.d.ts +4 -0
  370. package/src/route-renderer/orchestration/route-pipeline/route-prepared-options.utils.js +30 -0
  371. package/src/route-renderer/orchestration/{route-render-orchestrator.d.ts → route-pipeline/route-render-orchestrator.d.ts} +24 -54
  372. package/src/route-renderer/orchestration/route-pipeline/route-render-orchestrator.js +215 -0
  373. package/src/{integrations/ghtml/ghtml-renderer.d.ts → route-renderer/orchestration/string-markup-renderer.d.ts} +8 -10
  374. package/src/route-renderer/orchestration/string-markup-renderer.js +52 -0
  375. package/src/route-renderer/page-loading/component-dependency-collection.js +121 -121
  376. package/src/route-renderer/page-loading/declared-asset-collection.js +66 -94
  377. package/src/route-renderer/page-loading/dependency-resolver.js +101 -104
  378. package/src/route-renderer/page-loading/ecopages-virtual-imports.d.ts +1 -0
  379. package/src/route-renderer/page-loading/ecopages-virtual-imports.js +64 -51
  380. package/src/route-renderer/page-loading/file-scoped-dependency-components.d.ts +42 -0
  381. package/src/route-renderer/page-loading/file-scoped-dependency-components.js +94 -0
  382. package/src/route-renderer/page-loading/lazy-entry-collection.js +75 -98
  383. package/src/route-renderer/page-loading/lazy-trigger-planning.js +47 -36
  384. package/src/route-renderer/page-loading/module-declaration-aggregation.js +39 -28
  385. package/src/route-renderer/page-loading/module-declaration-scripts.js +10 -15
  386. package/src/route-renderer/page-loading/page-dependency-bundling.js +156 -113
  387. package/src/route-renderer/page-loading/page-module-loader.d.ts +2 -1
  388. package/src/route-renderer/page-loading/page-module-loader.js +136 -124
  389. package/src/route-renderer/page-loading/resolved-page-dependencies.d.ts +12 -0
  390. package/src/route-renderer/page-loading/resolved-page-dependencies.js +38 -0
  391. package/src/route-renderer/route-renderer.js +74 -76
  392. package/src/router/README.md +31 -0
  393. package/src/router/client/link-intent.d.ts +11 -21
  394. package/src/router/client/link-intent.js +56 -30
  395. package/src/router/client/link-intent.test.browser.js +50 -39
  396. package/src/router/client/link-navigation-policy.d.ts +45 -0
  397. package/src/router/client/link-navigation-policy.js +122 -0
  398. package/src/router/client/link-navigation-policy.test.browser.d.ts +1 -0
  399. package/src/router/client/link-navigation-policy.test.browser.js +82 -0
  400. package/src/router/client/navigation-coordinator.d.ts +1 -1
  401. package/src/router/client/navigation-coordinator.js +235 -211
  402. package/src/router/client/navigation-lifecycle.d.ts +55 -0
  403. package/src/router/client/navigation-lifecycle.js +50 -0
  404. package/src/router/client/navigation-lifecycle.test.browser.d.ts +1 -0
  405. package/src/router/client/navigation-lifecycle.test.browser.js +118 -0
  406. package/src/router/server/route-registry.js +237 -242
  407. package/src/services/README.md +5 -0
  408. package/src/services/assets/asset-processing-service/asset-dependency-keys.d.ts +13 -0
  409. package/src/services/assets/asset-processing-service/asset-dependency-keys.js +64 -50
  410. package/src/services/assets/asset-processing-service/asset-processing.service.d.ts +12 -1
  411. package/src/services/assets/asset-processing-service/asset-processing.service.js +335 -268
  412. package/src/services/assets/asset-processing-service/asset.factory.js +78 -81
  413. package/src/services/assets/asset-processing-service/assets.types.d.ts +1 -1
  414. package/src/services/assets/asset-processing-service/assets.types.js +1 -0
  415. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.d.ts +1 -1
  416. package/src/services/assets/asset-processing-service/browser-runtime-asset.factory.js +57 -46
  417. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.d.ts +52 -0
  418. package/src/services/assets/asset-processing-service/browser-runtime-entry-resolution.js +115 -0
  419. package/src/services/assets/asset-processing-service/browser-runtime-entry.factory.js +53 -58
  420. package/src/services/assets/asset-processing-service/finalize-processed-asset.d.ts +3 -0
  421. package/src/services/assets/asset-processing-service/finalize-processed-asset.js +5 -0
  422. package/src/services/assets/asset-processing-service/grouped-content-bundles.d.ts +2 -1
  423. package/src/services/assets/asset-processing-service/grouped-content-bundles.js +85 -60
  424. package/src/services/assets/asset-processing-service/index.d.ts +2 -0
  425. package/src/services/assets/asset-processing-service/index.js +8 -6
  426. package/src/services/assets/asset-processing-service/inline-content-script-body.d.ts +11 -0
  427. package/src/services/assets/asset-processing-service/inline-content-script-body.js +23 -0
  428. package/src/services/assets/asset-processing-service/materialize-content-script-asset.d.ts +9 -0
  429. package/src/services/assets/asset-processing-service/materialize-content-script-asset.js +22 -0
  430. package/src/services/assets/asset-processing-service/page-package.js +70 -72
  431. package/src/services/assets/asset-processing-service/processor.interface.js +7 -5
  432. package/src/services/assets/asset-processing-service/processor.registry.js +11 -14
  433. package/src/services/assets/asset-processing-service/processors/base/base-processor.js +59 -62
  434. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.d.ts +0 -2
  435. package/src/services/assets/asset-processing-service/processors/base/base-script-processor.js +102 -130
  436. package/src/services/assets/asset-processing-service/processors/index.js +5 -5
  437. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.d.ts +8 -0
  438. package/src/services/assets/asset-processing-service/processors/script/content-script.processor.js +111 -111
  439. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.d.ts +0 -1
  440. package/src/services/assets/asset-processing-service/processors/script/file-script.processor.js +95 -94
  441. package/src/services/assets/asset-processing-service/processors/script/node-module-script.processor.js +136 -135
  442. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.d.ts +0 -3
  443. package/src/services/assets/asset-processing-service/processors/stylesheet/content-stylesheet.processor.js +26 -57
  444. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.d.ts +0 -3
  445. package/src/services/assets/asset-processing-service/processors/stylesheet/file-stylesheet.processor.js +33 -67
  446. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.d.ts +2 -0
  447. package/src/services/assets/asset-processing-service/processors/stylesheet/stylesheet-processor-pipeline.js +44 -0
  448. package/src/services/assets/asset-processing-service/resolve-integration-plugin.d.ts +4 -0
  449. package/src/services/assets/asset-processing-service/resolve-integration-plugin.js +15 -0
  450. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.d.ts +0 -1
  451. package/src/services/assets/asset-processing-service/ungrouped-dependency-processing.js +27 -44
  452. package/src/services/assets/browser-bundle.service.d.ts +27 -30
  453. package/src/services/assets/browser-bundle.service.js +54 -46
  454. package/src/services/assets/browser-runtime-asset-generation.d.ts +17 -0
  455. package/src/services/assets/browser-runtime-asset-generation.js +28 -0
  456. package/src/services/cache/cache.types.d.ts +4 -2
  457. package/src/services/cache/cache.types.js +5 -0
  458. package/src/services/cache/html-page-cache-dependency-index.d.ts +34 -0
  459. package/src/services/cache/html-page-cache-dependency-index.js +88 -0
  460. package/src/services/cache/index.d.ts +2 -0
  461. package/src/services/cache/index.js +8 -7
  462. package/src/services/cache/memory-cache-store.js +101 -89
  463. package/src/services/cache/page-cache-service.d.ts +31 -1
  464. package/src/services/cache/page-cache-service.js +237 -150
  465. package/src/services/cache/page-request-cache-coordinator.service.d.ts +2 -1
  466. package/src/services/cache/page-request-cache-coordinator.service.js +112 -102
  467. package/src/services/html/html-rewriter-provider.service.js +61 -61
  468. package/src/services/html/html-transformer.service.js +249 -266
  469. package/src/services/invalidation/development-invalidation.service.d.ts +15 -1
  470. package/src/services/invalidation/development-invalidation.service.js +241 -204
  471. package/src/services/module-loading/README.md +9 -6
  472. package/src/services/module-loading/app-module-loader.service.js +1 -0
  473. package/src/services/module-loading/app-server-module-transpiler.service.d.ts +8 -0
  474. package/src/services/module-loading/app-server-module-transpiler.service.js +104 -106
  475. package/src/services/module-loading/collection-server-module-build.service.d.ts +19 -0
  476. package/src/services/module-loading/collection-server-module-build.service.js +83 -0
  477. package/src/services/module-loading/host-module-loader-registry.js +6 -11
  478. package/src/services/module-loading/module-loading-types.js +1 -0
  479. package/src/services/module-loading/page-module-import.service.d.ts +7 -12
  480. package/src/services/module-loading/page-module-import.service.js +232 -206
  481. package/src/services/module-loading/route-module-build-cache-registry.d.ts +2 -0
  482. package/src/services/module-loading/route-module-build-cache-registry.js +59 -33
  483. package/src/services/module-loading/route-module-build-cache.js +3 -38
  484. package/src/services/module-loading/route-module-build-cache.store.d.ts +10 -0
  485. package/src/services/module-loading/route-module-build-cache.store.js +213 -196
  486. package/src/services/module-loading/route-module-build-manifest.d.ts +10 -14
  487. package/src/services/module-loading/route-module-build-manifest.js +54 -118
  488. package/src/services/module-loading/route-module-dependency-hasher.d.ts +2 -2
  489. package/src/services/module-loading/route-module-dependency-hasher.js +136 -109
  490. package/src/services/module-loading/server-module-transpiler.service.d.ts +1 -3
  491. package/src/services/module-loading/server-module-transpiler.service.js +65 -62
  492. package/src/services/module-loading/source-module-support.js +15 -7
  493. package/src/services/runtime-state/dev-graph.service.js +165 -157
  494. package/src/services/runtime-state/entrypoint-dependency-graph.service.js +85 -76
  495. package/src/services/runtime-state/server-invalidation-state.service.js +38 -30
  496. package/src/services/validation/schema-validation-service.d.ts +1 -4
  497. package/src/services/validation/schema-validation-service.js +156 -95
  498. package/src/services/validation/standard-schema.types.d.ts +9 -62
  499. package/src/services/validation/standard-schema.types.js +1 -0
  500. package/src/services/validation/validate-standard-schema.d.ts +7 -0
  501. package/src/services/validation/validate-standard-schema.js +14 -0
  502. package/src/static-site-generator/README.md +10 -2
  503. package/src/static-site-generator/production-page-browser-graph-prebuild.d.ts +32 -0
  504. package/src/static-site-generator/production-page-browser-graph-prebuild.js +57 -0
  505. package/src/static-site-generator/sitemap-routes.d.ts +14 -0
  506. package/src/static-site-generator/sitemap-routes.js +36 -0
  507. package/src/static-site-generator/sitemap.d.ts +15 -0
  508. package/src/static-site-generator/sitemap.js +42 -0
  509. package/src/static-site-generator/static-build-invalidation.d.ts +2 -2
  510. package/src/static-site-generator/static-build-invalidation.js +33 -74
  511. package/src/static-site-generator/static-export-context.d.ts +9 -1
  512. package/src/static-site-generator/static-export-context.js +1 -0
  513. package/src/static-site-generator/static-site-generator.d.ts +27 -6
  514. package/src/static-site-generator/static-site-generator.js +528 -389
  515. package/src/types/internal-types.d.ts +55 -17
  516. package/src/types/internal-types.js +1 -0
  517. package/src/types/public-types.d.ts +236 -95
  518. package/src/types/public-types.js +1 -0
  519. package/src/utils/deep-merge.js +39 -26
  520. package/src/utils/ecopages-route-info.d.ts +26 -0
  521. package/src/utils/ecopages-route-info.js +30 -0
  522. package/src/utils/hash.js +3 -6
  523. package/src/utils/html-escaping.d.ts +7 -0
  524. package/src/utils/html-escaping.js +22 -5
  525. package/src/utils/invariant.js +11 -10
  526. package/src/utils/locals-utils.js +32 -22
  527. package/src/utils/parse-cli-args.d.ts +1 -0
  528. package/src/utils/parse-cli-args.js +73 -62
  529. package/src/utils/path-pattern.d.ts +23 -0
  530. package/src/utils/path-pattern.js +42 -0
  531. package/src/utils/path-utils.module.js +8 -11
  532. package/src/utils/resolve-entry-file.js +70 -38
  533. package/src/utils/resolve-work-dir.js +23 -27
  534. package/src/utils/runtime.js +24 -33
  535. package/src/utils/server-utils.module.d.ts +3 -2
  536. package/src/utils/server-utils.module.js +60 -53
  537. package/src/utils/static-file-extensions.d.ts +12 -0
  538. package/src/utils/static-file-extensions.js +54 -0
  539. package/src/watchers/project-watcher-ignore.d.ts +11 -0
  540. package/src/watchers/project-watcher-ignore.js +17 -0
  541. package/src/watchers/project-watcher.d.ts +21 -6
  542. package/src/watchers/project-watcher.js +402 -277
  543. package/src/watchers/project-watcher.test-helpers.js +45 -50
  544. package/src/adapters/shared/api-response.js +0 -96
  545. package/src/adapters/shared/application-adapter.js +0 -90
  546. package/src/adapters/shared/bun-user-websocket-lifecycle.js +0 -102
  547. package/src/adapters/shared/copy-runtime-public-dir.js +0 -24
  548. package/src/adapters/shared/define-api-handler.d.ts +0 -25
  549. package/src/adapters/shared/define-api-handler.js +0 -15
  550. package/src/adapters/shared/explicit-static-render-preparation.js +0 -26
  551. package/src/adapters/shared/explicit-static-route-matcher.js +0 -101
  552. package/src/adapters/shared/file-route-middleware-pipeline.js +0 -90
  553. package/src/adapters/shared/fs-server-response-factory.js +0 -81
  554. package/src/adapters/shared/fs-server-response-matcher.js +0 -186
  555. package/src/adapters/shared/hmr-entrypoint-registrar.d.ts +0 -55
  556. package/src/adapters/shared/hmr-entrypoint-registrar.js +0 -87
  557. package/src/adapters/shared/hmr-html-response.js +0 -33
  558. package/src/adapters/shared/node-http-websocket-upgrades.js +0 -125
  559. package/src/adapters/shared/render-context.js +0 -93
  560. package/src/adapters/shared/runtime-app-bootstrap.js +0 -41
  561. package/src/adapters/shared/runtime-host.js +0 -0
  562. package/src/adapters/shared/server-adapter.js +0 -436
  563. package/src/adapters/shared/server-route-handler.js +0 -111
  564. package/src/adapters/shared/server-static-builder.js +0 -202
  565. package/src/adapters/shared/shared-hmr-manager.d.ts +0 -61
  566. package/src/adapters/shared/shared-hmr-manager.js +0 -273
  567. package/src/adapters/shared/static-preview-host.js +0 -0
  568. package/src/adapters/shared/websocket-lifecycle.d.ts +0 -3
  569. package/src/adapters/shared/websocket-lifecycle.js +0 -19
  570. package/src/build/browser-runtime-manifest.js +0 -61
  571. package/src/build/browser-runtime-plugin-helpers.js +0 -14
  572. package/src/build/browser-runtime-plugin.js +0 -173
  573. package/src/build/build-input-fingerprint.js +0 -31
  574. package/src/build/build-manifest.d.ts +0 -33
  575. package/src/build/build-manifest.js +0 -49
  576. package/src/build/build-types.js +0 -0
  577. package/src/build/jsx-ownership-plugins.d.ts +0 -10
  578. package/src/build/jsx-ownership-plugins.js +0 -17
  579. package/src/build/pages-unified-graph-build.js +0 -208
  580. package/src/build/parallel-build-executor.js +0 -52
  581. package/src/build/rolldown-adapter-helpers.js +0 -309
  582. package/src/build/rolldown-build-adapter.js +0 -67
  583. package/src/build/rolldown-build-invocation-metrics.js +0 -43
  584. package/src/build/rolldown-dev-build-adapter.d.ts +0 -82
  585. package/src/build/rolldown-dev-build-adapter.js +0 -182
  586. package/src/build/rolldown-plugin-bridge.js +0 -199
  587. package/src/build/runtime-build-executor.d.ts +0 -15
  588. package/src/build/runtime-build-executor.js +0 -43
  589. package/src/build/runtime-build-output-normalizer.js +0 -203
  590. package/src/build/serialized-build-executor.js +0 -63
  591. package/src/build/server-entry-build-cache.js +0 -169
  592. package/src/build/server-side-css-shim-plugin.js +0 -35
  593. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  594. package/src/hmr/hmr.test.e2e.js +0 -54
  595. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  596. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  597. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  598. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  599. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  600. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  601. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  602. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  603. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  604. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  605. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  606. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  607. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  608. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  610. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  611. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  612. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  613. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  614. package/src/utils/html.d.ts +0 -1
  615. package/src/utils/html.js +0 -4
  616. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  617. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  618. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  619. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  620. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  621. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  622. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  623. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -1,197 +1,183 @@
1
- import { createServer } from "node:http";
2
- import { extname, join, normalize, sep } from "node:path";
3
- import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT, STATUS_MESSAGE } from "../../config/constants.js";
4
- import { fileSystem } from "@ecopages/file-system";
5
- import { ServerUtils } from "../../utils/server-utils.module.js";
6
- class NodeStaticContentServer {
7
- appConfig;
8
- options;
9
- server = null;
10
- /**
11
- * Creates the Node static-content server for one built app output directory.
12
- */
13
- constructor({ appConfig, options }) {
14
- this.appConfig = appConfig;
15
- this.options = {
16
- hostname: options?.hostname ?? DEFAULT_ECOPAGES_HOSTNAME,
17
- port: options?.port ?? DEFAULT_ECOPAGES_PORT
18
- };
19
- }
20
- /**
21
- * Returns whether the given content type should be served from a pre-gzipped
22
- * companion file when available.
23
- */
24
- shouldServeGzip(contentType) {
25
- return ["text/javascript", "text/css"].includes(contentType);
26
- }
27
- /**
28
- * Normalizes a request pathname and rejects directory traversal attempts.
29
- */
30
- sanitizePath(pathname) {
31
- const withoutLeadingSlash = pathname.replace(/^\/+/, "");
32
- const normalizedPath = normalize(withoutLeadingSlash);
33
- if (normalizedPath.startsWith("..") || normalizedPath.includes(`..${sep}`)) {
34
- return null;
1
+ import { createServer } from 'node:http';
2
+ import { extname, join, normalize, sep } from 'node:path';
3
+ import { DEFAULT_ECOPAGES_HOSTNAME, DEFAULT_ECOPAGES_PORT, STATUS_MESSAGE } from '../../config/constants.js';
4
+ import { fileSystem } from '@ecopages/file-system';
5
+ import { ServerUtils } from '../../utils/server-utils.module.js';
6
+ /**
7
+ * Serves prebuilt static Ecopages output through Node's HTTP server.
8
+ *
9
+ * @remarks
10
+ * This server is used by the Node preview/build path once the app has already
11
+ * emitted its static output. It intentionally stays small: path sanitization,
12
+ * content-type selection, optional gzip serving, and 404 handling.
13
+ */
14
+ export class NodeStaticContentServer {
15
+ appConfig;
16
+ options;
17
+ server = null;
18
+ /**
19
+ * Creates the Node static-content server for one built app output directory.
20
+ */
21
+ constructor({ appConfig, options }) {
22
+ this.appConfig = appConfig;
23
+ this.options = {
24
+ hostname: options?.hostname ?? DEFAULT_ECOPAGES_HOSTNAME,
25
+ port: options?.port ?? DEFAULT_ECOPAGES_PORT,
26
+ };
35
27
  }
36
- return normalizedPath;
37
- }
38
- /**
39
- * Writes one HTTP response with the provided headers and optional body.
40
- */
41
- sendResponse(res, status, headers, body) {
42
- res.statusCode = status;
43
- for (const [key, value] of Object.entries(headers)) {
44
- res.setHeader(key, value);
28
+ /**
29
+ * Returns whether the given content type should be served from a pre-gzipped
30
+ * companion file when available.
31
+ */
32
+ shouldServeGzip(contentType) {
33
+ return ['text/javascript', 'text/css'].includes(contentType);
45
34
  }
46
- if (!body) {
47
- res.end();
48
- return;
49
- }
50
- res.end(body);
51
- }
52
- /**
53
- * Serves the generated 404 page when present, or a plain-text fallback.
54
- */
55
- sendNotFoundPage(req, res) {
56
- const error404TemplatePath = join(this.appConfig.absolutePaths.distDir, "404.html");
57
- const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
58
- if (!fileSystem.exists(error404TemplatePath)) {
59
- this.sendResponse(
60
- res,
61
- 404,
62
- { "Content-Type": "text/plain" },
63
- isHead ? void 0 : Buffer.from(STATUS_MESSAGE[404])
64
- );
65
- return;
66
- }
67
- const file = fileSystem.readFileAsBuffer(error404TemplatePath);
68
- this.sendResponse(res, 404, { "Content-Type": "text/html" }, isHead ? void 0 : file);
69
- }
70
- /**
71
- * Serves one concrete file path, honoring gzip and HEAD semantics.
72
- */
73
- serveFile(req, res, filePath, status = 200) {
74
- const contentType = ServerUtils.getContentType(extname(filePath));
75
- const acceptsGzip = req.headers["accept-encoding"]?.includes("gzip");
76
- const isHead = (req.method ?? "GET").toUpperCase() === "HEAD";
77
- if (acceptsGzip && this.shouldServeGzip(contentType)) {
78
- const gzipPath = `${filePath}.gz`;
79
- if (fileSystem.exists(gzipPath)) {
80
- const file2 = fileSystem.readFileAsBuffer(gzipPath);
81
- this.sendResponse(
82
- res,
83
- status,
84
- {
85
- "Content-Type": contentType,
86
- "Content-Encoding": "gzip",
87
- Vary: "Accept-Encoding"
88
- },
89
- isHead ? void 0 : file2
90
- );
91
- return;
92
- }
93
- }
94
- if (!fileSystem.exists(filePath)) {
95
- this.sendNotFoundPage(req, res);
96
- return;
35
+ /**
36
+ * Normalizes a request pathname and rejects directory traversal attempts.
37
+ */
38
+ sanitizePath(pathname) {
39
+ const withoutLeadingSlash = pathname.replace(/^\/+/, '');
40
+ const normalizedPath = normalize(withoutLeadingSlash);
41
+ if (normalizedPath.startsWith('..') || normalizedPath.includes(`..${sep}`)) {
42
+ return null;
43
+ }
44
+ return normalizedPath;
97
45
  }
98
- const file = fileSystem.readFileAsBuffer(filePath);
99
- this.sendResponse(res, status, { "Content-Type": contentType }, isHead ? void 0 : file);
100
- }
101
- /**
102
- * Handles one incoming Node HTTP request against the built static output tree.
103
- */
104
- handleRequest(req, res) {
105
- const method = (req.method ?? "GET").toUpperCase();
106
- const isHead = method === "HEAD";
107
- if (method !== "GET" && method !== "HEAD") {
108
- this.sendResponse(
109
- res,
110
- 405,
111
- { Allow: "GET, HEAD", "Content-Type": "text/plain" },
112
- isHead ? void 0 : Buffer.from("Method Not Allowed")
113
- );
114
- return;
46
+ /**
47
+ * Writes one HTTP response with the provided headers and optional body.
48
+ */
49
+ sendResponse(res, status, headers, body) {
50
+ res.statusCode = status;
51
+ for (const [key, value] of Object.entries(headers)) {
52
+ res.setHeader(key, value);
53
+ }
54
+ if (!body) {
55
+ res.end();
56
+ return;
57
+ }
58
+ res.end(body);
115
59
  }
116
- const url = new URL(req.url ?? "/", "http://localhost");
117
- let decodedPathname = "/";
118
- try {
119
- decodedPathname = decodeURIComponent(url.pathname);
120
- } catch {
121
- this.sendResponse(
122
- res,
123
- 400,
124
- { "Content-Type": "text/plain" },
125
- isHead ? void 0 : Buffer.from("Invalid path")
126
- );
127
- return;
60
+ /**
61
+ * Serves the generated 404 page when present, or a plain-text fallback.
62
+ */
63
+ sendNotFoundPage(req, res) {
64
+ const error404TemplatePath = join(this.appConfig.absolutePaths.distDir, '404.html');
65
+ const isHead = (req.method ?? 'GET').toUpperCase() === 'HEAD';
66
+ if (!fileSystem.exists(error404TemplatePath)) {
67
+ this.sendResponse(res, 404, { 'Content-Type': 'text/plain' }, isHead ? undefined : Buffer.from(STATUS_MESSAGE[404]));
68
+ return;
69
+ }
70
+ const file = fileSystem.readFileAsBuffer(error404TemplatePath);
71
+ this.sendResponse(res, 404, { 'Content-Type': 'text/html' }, isHead ? undefined : file);
128
72
  }
129
- const pathname = decodedPathname === "/" ? "/index.html" : decodedPathname;
130
- const relativePath = this.sanitizePath(pathname);
131
- if (!relativePath) {
132
- this.sendResponse(
133
- res,
134
- 400,
135
- { "Content-Type": "text/plain" },
136
- isHead ? void 0 : Buffer.from("Invalid path")
137
- );
138
- return;
73
+ /**
74
+ * Serves one concrete file path, honoring gzip and HEAD semantics.
75
+ */
76
+ serveFile(req, res, filePath, status = 200) {
77
+ const contentType = ServerUtils.getContentType(extname(filePath));
78
+ const acceptsGzip = req.headers['accept-encoding']?.includes('gzip');
79
+ const isHead = (req.method ?? 'GET').toUpperCase() === 'HEAD';
80
+ if (acceptsGzip && this.shouldServeGzip(contentType)) {
81
+ const gzipPath = `${filePath}.gz`;
82
+ if (fileSystem.exists(gzipPath)) {
83
+ const file = fileSystem.readFileAsBuffer(gzipPath);
84
+ this.sendResponse(res, status, {
85
+ 'Content-Type': contentType,
86
+ 'Content-Encoding': 'gzip',
87
+ Vary: 'Accept-Encoding',
88
+ }, isHead ? undefined : file);
89
+ return;
90
+ }
91
+ }
92
+ if (!fileSystem.exists(filePath)) {
93
+ this.sendNotFoundPage(req, res);
94
+ return;
95
+ }
96
+ const file = fileSystem.readFileAsBuffer(filePath);
97
+ this.sendResponse(res, status, { 'Content-Type': contentType }, isHead ? undefined : file);
139
98
  }
140
- const basePath = join(this.appConfig.absolutePaths.distDir, relativePath);
141
- if (pathname.includes(".")) {
142
- this.serveFile(req, res, basePath);
143
- return;
99
+ /**
100
+ * Handles one incoming Node HTTP request against the built static output tree.
101
+ */
102
+ handleRequest(req, res) {
103
+ const method = (req.method ?? 'GET').toUpperCase();
104
+ const isHead = method === 'HEAD';
105
+ if (method !== 'GET' && method !== 'HEAD') {
106
+ this.sendResponse(res, 405, { Allow: 'GET, HEAD', 'Content-Type': 'text/plain' }, isHead ? undefined : Buffer.from('Method Not Allowed'));
107
+ return;
108
+ }
109
+ const url = new URL(req.url ?? '/', 'http://localhost');
110
+ let decodedPathname = '/';
111
+ try {
112
+ decodedPathname = decodeURIComponent(url.pathname);
113
+ }
114
+ catch {
115
+ this.sendResponse(res, 400, { 'Content-Type': 'text/plain' }, isHead ? undefined : Buffer.from('Invalid path'));
116
+ return;
117
+ }
118
+ const pathname = decodedPathname === '/' ? '/index.html' : decodedPathname;
119
+ const relativePath = this.sanitizePath(pathname);
120
+ if (!relativePath) {
121
+ this.sendResponse(res, 400, { 'Content-Type': 'text/plain' }, isHead ? undefined : Buffer.from('Invalid path'));
122
+ return;
123
+ }
124
+ const basePath = join(this.appConfig.absolutePaths.distDir, relativePath);
125
+ if (pathname.includes('.')) {
126
+ this.serveFile(req, res, basePath);
127
+ return;
128
+ }
129
+ const htmlCandidates = [`${basePath}.html`, join(basePath, 'index.html')];
130
+ for (const candidate of htmlCandidates) {
131
+ if (fileSystem.exists(candidate)) {
132
+ this.serveFile(req, res, candidate);
133
+ return;
134
+ }
135
+ }
136
+ this.sendNotFoundPage(req, res);
144
137
  }
145
- const htmlCandidates = [`${basePath}.html`, join(basePath, "index.html")];
146
- for (const candidate of htmlCandidates) {
147
- if (fileSystem.exists(candidate)) {
148
- this.serveFile(req, res, candidate);
149
- return;
150
- }
138
+ /**
139
+ * Starts the static preview server.
140
+ */
141
+ async start() {
142
+ if (this.server) {
143
+ return this.server;
144
+ }
145
+ this.server = createServer(this.handleRequest.bind(this));
146
+ const hostname = this.options.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
147
+ const port = this.options.port ?? DEFAULT_ECOPAGES_PORT;
148
+ await new Promise((resolve, reject) => {
149
+ const activeServer = this.server;
150
+ activeServer.once('error', reject);
151
+ activeServer.listen(port, hostname, () => {
152
+ activeServer.off('error', reject);
153
+ resolve();
154
+ });
155
+ });
156
+ return this.server;
151
157
  }
152
- this.sendNotFoundPage(req, res);
153
- }
154
- /**
155
- * Starts the static preview server.
156
- */
157
- async start() {
158
- if (this.server) {
159
- return this.server;
158
+ /**
159
+ * Stops the static preview server and optionally closes active connections.
160
+ */
161
+ async stop(force = true) {
162
+ if (!this.server) {
163
+ return;
164
+ }
165
+ const activeServer = this.server;
166
+ this.server = null;
167
+ await new Promise((resolve, reject) => {
168
+ activeServer.close((error) => {
169
+ if (error) {
170
+ reject(error);
171
+ return;
172
+ }
173
+ resolve();
174
+ });
175
+ if (force) {
176
+ activeServer.closeAllConnections();
177
+ }
178
+ });
160
179
  }
161
- this.server = createServer(this.handleRequest.bind(this));
162
- const hostname = this.options.hostname ?? DEFAULT_ECOPAGES_HOSTNAME;
163
- const port = this.options.port ?? DEFAULT_ECOPAGES_PORT;
164
- await new Promise((resolve) => {
165
- this.server.listen(port, hostname, () => resolve());
166
- });
167
- return this.server;
168
- }
169
- /**
170
- * Stops the static preview server and optionally closes active connections.
171
- */
172
- async stop(force = true) {
173
- if (!this.server) {
174
- return;
180
+ async [Symbol.asyncDispose]() {
181
+ await this.stop();
175
182
  }
176
- const activeServer = this.server;
177
- this.server = null;
178
- await new Promise((resolve, reject) => {
179
- activeServer.close((error) => {
180
- if (error) {
181
- reject(error);
182
- return;
183
- }
184
- resolve();
185
- });
186
- if (force) {
187
- activeServer.closeAllConnections();
188
- }
189
- });
190
- }
191
- async [Symbol.asyncDispose]() {
192
- await this.stop();
193
- }
194
183
  }
195
- export {
196
- NodeStaticContentServer
197
- };
@@ -1,6 +1,6 @@
1
1
  import type { AddressInfo } from 'node:net';
2
2
  import type { EcoPagesAppConfig } from '../../types/internal-types.js';
3
- import type { StaticPreviewHost, StaticPreviewHostStartOptions } from '../shared/static-preview-host.js';
3
+ import type { StaticPreviewHost, StaticPreviewHostStartOptions } from '../shared/runtime/static-preview-host.js';
4
4
  type NodeStaticPreviewServer = {
5
5
  start(): Promise<{
6
6
  address(): AddressInfo | string | null;
@@ -1,68 +1,92 @@
1
- import { NodeStaticContentServer } from "./static-content-server.js";
2
- class NodeStaticPreviewHost {
3
- /**
4
- * Creates the preview host with an injectable preview-server constructor.
5
- */
6
- constructor(previewServerFactory = NodeStaticContentServer) {
7
- this.previewServerFactory = previewServerFactory;
8
- }
9
- previewServerFactory;
10
- previewServer = null;
11
- stopPromise = null;
12
- /**
13
- * Starts the Node preview host after fully draining any previous preview server
14
- * shutdown that may still be in flight.
15
- *
16
- * @remarks
17
- * The host only publishes a new preview server after `start()` succeeds. That
18
- * keeps failed startup attempts from replacing the last known-good server with a
19
- * half-initialized instance.
20
- */
21
- async start(options) {
22
- await this.stop();
23
- const previewServer = new this.previewServerFactory({
24
- appConfig: options.appConfig,
25
- options: {
26
- hostname: options.hostname,
27
- port: options.port
28
- }
29
- });
30
- const server = await previewServer.start();
31
- this.previewServer = previewServer;
32
- const address = server.address();
33
- if (address && typeof address === "object") {
34
- return address.port;
1
+ import { appLogger } from '../../global/app-logger.js';
2
+ import { PortManager } from '../shared/runtime/port-manager.js';
3
+ import { NodeStaticContentServer } from './static-content-server.js';
4
+ /**
5
+ * Node preview-host wrapper that manages the lifecycle of the static preview
6
+ * server used after a build.
7
+ *
8
+ * @remarks
9
+ * The host separates preview-server construction from lifecycle control so the
10
+ * Node server adapter can restart preview serving safely across repeated build
11
+ * and preview flows.
12
+ */
13
+ export class NodeStaticPreviewHost {
14
+ previewServerFactory;
15
+ previewServer = null;
16
+ stopPromise = null;
17
+ /**
18
+ * Creates the preview host with an injectable preview-server constructor.
19
+ */
20
+ constructor(previewServerFactory = NodeStaticContentServer) {
21
+ this.previewServerFactory = previewServerFactory;
35
22
  }
36
- return options.port;
37
- }
38
- /**
39
- * Stops the active preview server and coalesces overlapping stop requests onto
40
- * the same shutdown promise.
41
- *
42
- * @remarks
43
- * The host keeps the server reference until shutdown succeeds. If shutdown
44
- * fails, callers can still retry `stop()` or inspect the same live instance
45
- * instead of losing the handle during a rejected async stop.
46
- */
47
- async stop(force = true) {
48
- if (this.stopPromise) {
49
- await this.stopPromise;
50
- return;
23
+ /**
24
+ * Starts the Node preview host after fully draining any previous preview server
25
+ * shutdown that may still be in flight.
26
+ *
27
+ * @remarks
28
+ * The host only publishes a new preview server after `start()` succeeds. That
29
+ * keeps failed startup attempts from replacing the last known-good server with a
30
+ * half-initialized instance.
31
+ */
32
+ async start(options) {
33
+ await this.stop();
34
+ const portManager = new PortManager({
35
+ startOnPort: async (port) => {
36
+ const previewServer = new this.previewServerFactory({
37
+ appConfig: options.appConfig,
38
+ options: {
39
+ hostname: options.hostname,
40
+ port,
41
+ },
42
+ });
43
+ const server = await previewServer.start();
44
+ this.previewServer = previewServer;
45
+ const address = server.address();
46
+ if (address && typeof address === 'object') {
47
+ return address.port;
48
+ }
49
+ return port;
50
+ },
51
+ warn: (message) => appLogger.warn(message),
52
+ });
53
+ const previewPort = await portManager.bind({
54
+ preferredPort: options.port,
55
+ allowPortFallback: options.allowPortFallback === true,
56
+ });
57
+ if (!previewPort) {
58
+ this.previewServer = null;
59
+ }
60
+ return previewPort;
51
61
  }
52
- if (!this.previewServer) {
53
- return;
62
+ /**
63
+ * Stops the active preview server and coalesces overlapping stop requests onto
64
+ * the same shutdown promise.
65
+ *
66
+ * @remarks
67
+ * The host keeps the server reference until shutdown succeeds. If shutdown
68
+ * fails, callers can still retry `stop()` or inspect the same live instance
69
+ * instead of losing the handle during a rejected async stop.
70
+ */
71
+ async stop(force = true) {
72
+ if (this.stopPromise) {
73
+ await this.stopPromise;
74
+ return;
75
+ }
76
+ if (!this.previewServer) {
77
+ return;
78
+ }
79
+ const activePreviewServer = this.previewServer;
80
+ this.stopPromise = activePreviewServer
81
+ .stop(force)
82
+ .then(() => {
83
+ if (this.previewServer === activePreviewServer) {
84
+ this.previewServer = null;
85
+ }
86
+ })
87
+ .finally(() => {
88
+ this.stopPromise = null;
89
+ });
90
+ await this.stopPromise;
54
91
  }
55
- const activePreviewServer = this.previewServer;
56
- this.stopPromise = activePreviewServer.stop(force).then(() => {
57
- if (this.previewServer === activePreviewServer) {
58
- this.previewServer = null;
59
- }
60
- }).finally(() => {
61
- this.stopPromise = null;
62
- });
63
- await this.stopPromise;
64
- }
65
92
  }
66
- export {
67
- NodeStaticPreviewHost
68
- };
@@ -0,0 +1,16 @@
1
+ import type { ResolvedHmrEntrypoint } from '../../../hmr/hmr-entrypoint-output.js';
2
+ /**
3
+ * Tracks dev-transform entrypoints registered for HMR invalidation.
4
+ */
5
+ export declare class DevTransformEntrypointRegistry {
6
+ private readonly registered;
7
+ getRegisteredEntrypoints(): ReadonlyMap<string, ResolvedHmrEntrypoint>;
8
+ getWatchedOutputUrls(): Map<string, string>;
9
+ clearRegistration(entrypointPath: string): void;
10
+ registerTransformModule(sourcePath: string, outputUrl: string, options: {
11
+ role: 'page';
12
+ } | {
13
+ role: 'script';
14
+ }): void;
15
+ clearAll(): void;
16
+ }
@@ -0,0 +1,32 @@
1
+ import path from 'node:path';
2
+ /**
3
+ * Tracks dev-transform entrypoints registered for HMR invalidation.
4
+ */
5
+ export class DevTransformEntrypointRegistry {
6
+ registered = new Map();
7
+ getRegisteredEntrypoints() {
8
+ return this.registered;
9
+ }
10
+ getWatchedOutputUrls() {
11
+ const watchedFiles = new Map();
12
+ for (const [sourcePath, entrypoint] of this.registered) {
13
+ watchedFiles.set(sourcePath, entrypoint.outputUrl);
14
+ }
15
+ return watchedFiles;
16
+ }
17
+ clearRegistration(entrypointPath) {
18
+ this.registered.delete(path.resolve(entrypointPath));
19
+ }
20
+ registerTransformModule(sourcePath, outputUrl, options) {
21
+ const normalized = path.resolve(sourcePath);
22
+ this.registered.set(normalized, {
23
+ sourcePath: normalized,
24
+ outputPath: normalized,
25
+ outputUrl,
26
+ role: options.role,
27
+ });
28
+ }
29
+ clearAll() {
30
+ this.registered.clear();
31
+ }
32
+ }
@@ -1,4 +1,4 @@
1
- import type { IHmrManager } from '../../types/public-types.js';
1
+ import type { IHmrManager } from '../../../types/public-types.js';
2
2
  /**
3
3
  * Returns whether a response is HTML and therefore eligible for development HMR
4
4
  * runtime injection.
@@ -11,7 +11,7 @@ export declare function isHtmlResponse(response: Response): boolean;
11
11
  * responses flow through different layers, but both need identical injection
12
12
  * behavior in watch mode.
13
13
  */
14
- export declare function shouldInjectHmrHtmlResponse(watch: boolean, hmrManager?: Pick<IHmrManager, 'isEnabled'>): boolean;
14
+ export declare function shouldInjectHmrHtmlResponse(watch: boolean, hmrManager?: Pick<IHmrManager, 'isEnabled'>, hostOwnsDevClient?: boolean): boolean;
15
15
  /**
16
16
  * Injects the development HMR runtime script into an HTML response if it is not
17
17
  * already present.
@@ -0,0 +1,50 @@
1
+ import { HMR_RUNTIME_SCRIPT_URL } from '../../../hmr/hmr-runtime-paths.js';
2
+ const HMR_RUNTIME_IMPORT = `import '${HMR_RUNTIME_SCRIPT_URL}'`;
3
+ const HMR_RUNTIME_SCRIPT = `<script type="module">${HMR_RUNTIME_IMPORT};</script>`;
4
+ /**
5
+ * Returns whether a response is HTML and therefore eligible for development HMR
6
+ * runtime injection.
7
+ */
8
+ export function isHtmlResponse(response) {
9
+ const contentType = response.headers.get('Content-Type');
10
+ return contentType !== null && contentType.startsWith('text/html');
11
+ }
12
+ /**
13
+ * Returns whether HTML responses should receive the HMR runtime bootstrap.
14
+ *
15
+ * This is shared because filesystem page responses and adapter-level HTML
16
+ * responses flow through different layers, but both need identical injection
17
+ * behavior in watch mode.
18
+ */
19
+ export function shouldInjectHmrHtmlResponse(watch, hmrManager, hostOwnsDevClient = false) {
20
+ if (hostOwnsDevClient) {
21
+ return false;
22
+ }
23
+ return watch && hmrManager?.isEnabled() === true;
24
+ }
25
+ /**
26
+ * Injects the development HMR runtime script into an HTML response if it is not
27
+ * already present.
28
+ *
29
+ * The check is intentionally idempotent because an HTML response can pass
30
+ * through more than one development-layer wrapper before reaching the client.
31
+ */
32
+ export async function injectHmrRuntimeIntoHtmlResponse(response) {
33
+ const html = await response.text();
34
+ const headers = new Headers(response.headers);
35
+ headers.set('Cache-Control', 'no-store, must-revalidate');
36
+ headers.delete('Content-Length');
37
+ if (html.includes(HMR_RUNTIME_IMPORT)) {
38
+ return new Response(html, {
39
+ status: response.status,
40
+ statusText: response.statusText,
41
+ headers,
42
+ });
43
+ }
44
+ const updatedHtml = html.replace(/<\/html>/i, `${HMR_RUNTIME_SCRIPT}</html>`);
45
+ return new Response(updatedHtml, {
46
+ status: response.status,
47
+ statusText: response.statusText,
48
+ headers,
49
+ });
50
+ }