@ecopages/core 0.2.0-beta.9 → 0.2.0-rc.1

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 (624) hide show
  1. package/README.md +44 -14
  2. package/package.json +368 -57
  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 +5 -7
  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 +48 -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 +25 -355
  111. package/src/build/build-adapter.js +258 -265
  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 +472 -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} +7 -2
  138. package/src/build/rolldown/rolldown-plugin-bridge.js +284 -0
  139. package/src/build/{rolldown-source-transform-pass.d.ts → rolldown/rolldown-source-transform-pass.d.ts} +1 -1
  140. package/src/build/rolldown/rolldown-source-transform-pass.js +70 -0
  141. package/src/build/rolldown/runtime-build-output-normalizer.js +227 -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 +40 -20
  183. package/src/config/config-builder.js +645 -610
  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 +4 -2
  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 +28 -15
  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 +79 -12
  313. package/src/plugins/processor.js +188 -136
  314. package/src/plugins/runtime-capability.js +1 -0
  315. package/src/plugins/source-transform.d.ts +1 -1
  316. package/src/plugins/source-transform.js +109 -79
  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 +32 -0
  324. package/src/route-renderer/orchestration/document-shell/layout-shell-props.service.js +52 -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 +39 -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 +53 -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 -31
  453. package/src/services/assets/browser-bundle.service.js +54 -49
  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 -310
  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 -211
  587. package/src/build/rolldown-source-transform-pass.js +0 -58
  588. package/src/build/runtime-build-executor.d.ts +0 -15
  589. package/src/build/runtime-build-executor.js +0 -43
  590. package/src/build/runtime-build-output-normalizer.js +0 -203
  591. package/src/build/serialized-build-executor.js +0 -63
  592. package/src/build/server-entry-build-cache.js +0 -169
  593. package/src/build/server-side-css-shim-plugin.js +0 -35
  594. package/src/hmr/hmr.postcss.test.e2e.js +0 -31
  595. package/src/hmr/hmr.test.e2e.js +0 -54
  596. package/src/integrations/ghtml/ghtml-renderer.js +0 -57
  597. package/src/integrations/ghtml/ghtml.constants.d.ts +0 -1
  598. package/src/integrations/ghtml/ghtml.constants.js +0 -4
  599. package/src/integrations/ghtml/ghtml.plugin.d.ts +0 -16
  600. package/src/integrations/ghtml/ghtml.plugin.js +0 -20
  601. package/src/route-renderer/orchestration/component-render-context.js +0 -147
  602. package/src/route-renderer/orchestration/declared-ownership-graph.d.ts +0 -18
  603. package/src/route-renderer/orchestration/declared-ownership-graph.js +0 -34
  604. package/src/route-renderer/orchestration/foreign-subtree-execution.service.js +0 -231
  605. package/src/route-renderer/orchestration/ownership-planning.service.d.ts +0 -24
  606. package/src/route-renderer/orchestration/ownership-planning.service.js +0 -63
  607. package/src/route-renderer/orchestration/ownership-validation.service.js +0 -53
  608. package/src/route-renderer/orchestration/processed-asset-dedupe.js +0 -27
  609. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.d.ts +0 -91
  610. package/src/route-renderer/orchestration/queued-foreign-subtree-resolution.service.js +0 -170
  611. package/src/route-renderer/orchestration/render-output.utils.js +0 -175
  612. package/src/route-renderer/orchestration/route-render-orchestrator.js +0 -578
  613. package/src/route-renderer/orchestration/template-serialization.d.ts +0 -38
  614. package/src/route-renderer/orchestration/template-serialization.js +0 -45
  615. package/src/utils/html.d.ts +0 -1
  616. package/src/utils/html.js +0 -4
  617. /package/src/adapters/{shared → bun}/bun-user-websocket-lifecycle.d.ts +0 -0
  618. /package/src/adapters/shared/{copy-runtime-public-dir.d.ts → runtime/copy-runtime-public-dir.d.ts} +0 -0
  619. /package/src/adapters/shared/{runtime-host.d.ts → runtime/runtime-host.d.ts} +0 -0
  620. /package/src/{hmr/hmr.postcss.test.e2e.d.ts → adapters/shared/runtime/runtime-host.js} +0 -0
  621. /package/src/{hmr/hmr.test.e2e.d.ts → adapters/shared/runtime/static-preview-host.js} +0 -0
  622. /package/src/build/{build-types.d.ts → contracts/build-types.d.ts} +0 -0
  623. /package/src/build/{runtime-build-output-normalizer.d.ts → rolldown/runtime-build-output-normalizer.d.ts} +0 -0
  624. /package/src/build/{server-side-css-shim-plugin.d.ts → rolldown/server-side-css-shim-plugin.d.ts} +0 -0
@@ -0,0 +1,82 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getLinkNavigationDecision, getNavigableHrefFromClick, isHtmlPageResponse, isSamePageHashNavigationHref, shouldPrefetchLink, } from './link-navigation-policy.js';
3
+ function createLink(href, attributes = {}) {
4
+ const link = document.createElement('a');
5
+ link.href = href;
6
+ for (const [key, value] of Object.entries(attributes)) {
7
+ link.setAttribute(key, value);
8
+ }
9
+ document.body.append(link);
10
+ return link;
11
+ }
12
+ function createMouseEvent(button = 0, modifiers = {}) {
13
+ return new MouseEvent('click', { bubbles: true, cancelable: true, button, ...modifiers });
14
+ }
15
+ const policy = { reloadAttribute: 'data-eco-reload', noPrefetchAttribute: 'data-eco-no-prefetch' };
16
+ describe('isSamePageHashNavigationHref', () => {
17
+ it('returns true for same pathname with a new hash', () => {
18
+ history.replaceState({}, '', '/docs/page');
19
+ expect(isSamePageHashNavigationHref('/docs/page#section')).toBe(true);
20
+ });
21
+ });
22
+ describe('getLinkNavigationDecision', () => {
23
+ it('allows same-origin page links', () => {
24
+ const link = createLink('/page');
25
+ const decision = getLinkNavigationDecision(createMouseEvent(), link, policy);
26
+ expect(decision).toEqual({ shouldIntercept: true, href: '/page' });
27
+ });
28
+ it('rejects static asset links', () => {
29
+ const link = createLink('/skill.txt');
30
+ expect(getLinkNavigationDecision(createMouseEvent(), link, policy)).toEqual({
31
+ shouldIntercept: false,
32
+ reason: 'static-asset',
33
+ });
34
+ });
35
+ it('rejects explicit reload links', () => {
36
+ const link = createLink('/logout', { 'data-eco-reload': '' });
37
+ expect(getLinkNavigationDecision(createMouseEvent(), link, policy)).toEqual({
38
+ shouldIntercept: false,
39
+ reason: 'explicit-reload',
40
+ });
41
+ });
42
+ });
43
+ describe('getNavigableHrefFromClick', () => {
44
+ it('returns href when navigation should be intercepted', () => {
45
+ const link = createLink('/page');
46
+ expect(getNavigableHrefFromClick(createMouseEvent(), link, policy)).toBe('/page');
47
+ });
48
+ it('returns null for static assets', () => {
49
+ const link = createLink('/llms.txt');
50
+ expect(getNavigableHrefFromClick(createMouseEvent(), link, policy)).toBeNull();
51
+ });
52
+ });
53
+ describe('shouldPrefetchLink', () => {
54
+ it('prefetches internal page links', () => {
55
+ history.replaceState({}, '', '/');
56
+ const link = createLink('/docs/intro');
57
+ expect(shouldPrefetchLink(link, policy)).toBe(true);
58
+ });
59
+ it('skips static assets and opt-outs', () => {
60
+ history.replaceState({}, '', '/');
61
+ expect(shouldPrefetchLink(createLink('/skill.txt'), policy)).toBe(false);
62
+ expect(shouldPrefetchLink(createLink('/page', { 'data-eco-no-prefetch': '' }), policy)).toBe(false);
63
+ });
64
+ });
65
+ describe('isHtmlPageResponse', () => {
66
+ it('accepts html content types', () => {
67
+ expect(isHtmlPageResponse(new Response('', { headers: { 'Content-Type': 'text/html; charset=utf-8' } }))).toBe(true);
68
+ });
69
+ it('rejects plain text responses', () => {
70
+ expect(isHtmlPageResponse(new Response('', { headers: { 'Content-Type': 'text/plain' } }))).toBe(false);
71
+ });
72
+ });
73
+ describe('isHtmlPageResponse', () => {
74
+ it('accepts html and xhtml content types', () => {
75
+ expect(isHtmlPageResponse(new Response('', { headers: { 'Content-Type': 'text/html' } }))).toBe(true);
76
+ expect(isHtmlPageResponse(new Response('', { headers: { 'Content-Type': 'application/xhtml+xml' } }))).toBe(true);
77
+ });
78
+ it('rejects plain text and markdown responses', () => {
79
+ expect(isHtmlPageResponse(new Response('text', { headers: { 'Content-Type': 'text/plain' } }))).toBe(false);
80
+ expect(isHtmlPageResponse(new Response('# doc', { headers: { 'Content-Type': 'text/markdown' } }))).toBe(false);
81
+ });
82
+ });
@@ -96,7 +96,7 @@ export type EcoNavigationRuntimeRegistration = {
96
96
  * Implementations may honor `request.moduleUrl` to force a specific page entry
97
97
  * and `request.clearCache` to discard persisted runtime state before reloading.
98
98
  */
99
- reloadCurrentPage?: (request?: EcoReloadRequest) => Promise<void>;
99
+ reloadCurrentPage?: (request?: EcoReloadRequest) => Promise<boolean | void>;
100
100
  /**
101
101
  * Releases runtime-owned client state before another runtime commits a new
102
102
  * document.
@@ -1,225 +1,249 @@
1
- const ECO_DOCUMENT_OWNER_ATTRIBUTE = "data-eco-document-owner";
2
- function getEcoDocumentOwner(doc) {
3
- const owner = doc.documentElement.getAttribute(ECO_DOCUMENT_OWNER_ATTRIBUTE);
4
- return owner && owner.length > 0 ? owner : null;
1
+ /**
2
+ * Shared browser-side navigation coordinator.
3
+ *
4
+ * This module is the client runtime contract used by browser-router,
5
+ * react-router, and HMR code to coordinate ownership, cross-runtime handoff,
6
+ * current-page reloads, and stale-navigation cancellation.
7
+ *
8
+ * The coordinator stays framework-agnostic: browser runtimes register their
9
+ * capabilities here, and the coordinator arbitrates which runtime currently
10
+ * owns the document and which navigation transaction is still current.
11
+ *
12
+ * @module
13
+ */
14
+ /** HTML attribute used to persist the rendered document owner across navigations. */
15
+ export const ECO_DOCUMENT_OWNER_ATTRIBUTE = 'data-eco-document-owner';
16
+ /**
17
+ * Reads the explicit browser document owner marker from a rendered HTML document.
18
+ *
19
+ * Documents without a marker return `null`, allowing runtimes to fall back to
20
+ * their local default behavior without scanning hydration scripts.
21
+ */
22
+ export function getEcoDocumentOwner(doc) {
23
+ const owner = doc.documentElement.getAttribute(ECO_DOCUMENT_OWNER_ATTRIBUTE);
24
+ return owner && owner.length > 0 ? owner : null;
5
25
  }
6
26
  function getCandidateOwners(currentOwner, registrations, excludedOwner) {
7
- const owners = [];
8
- if (currentOwner !== "none" && currentOwner !== excludedOwner) {
9
- owners.push(currentOwner);
10
- }
11
- for (const owner of registrations.keys()) {
12
- if (owner === currentOwner || owner === excludedOwner) {
13
- continue;
27
+ const owners = [];
28
+ if (currentOwner !== 'none' && currentOwner !== excludedOwner) {
29
+ owners.push(currentOwner);
14
30
  }
15
- owners.push(owner);
16
- }
17
- return owners;
31
+ for (const owner of registrations.keys()) {
32
+ if (owner === currentOwner || owner === excludedOwner) {
33
+ continue;
34
+ }
35
+ owners.push(owner);
36
+ }
37
+ return owners;
18
38
  }
19
39
  function createEcoNavigationRuntime() {
20
- const registrations = /* @__PURE__ */ new Map();
21
- const listeners = /* @__PURE__ */ new Set();
22
- let owner = "none";
23
- let navigationSequence = 0;
24
- let navigationAbortController = null;
25
- const emit = (event) => {
26
- for (const listener of listeners) {
27
- listener(event);
28
- }
29
- };
30
- const updateOwner = (nextOwner, reason) => {
31
- if (owner === nextOwner) {
32
- return;
33
- }
34
- const previousOwner = owner;
35
- owner = nextOwner;
36
- emit({
37
- type: "owner-change",
38
- owner: nextOwner,
39
- previousOwner,
40
- reason
41
- });
42
- };
43
- const cancelNavigationTransaction = (navigationId, abortController) => {
44
- if (navigationSequence !== navigationId || navigationAbortController !== abortController) {
45
- return;
46
- }
47
- navigationSequence += 1;
48
- navigationAbortController = null;
49
- abortController.abort();
50
- };
51
- const completeNavigationTransaction = (navigationId, abortController) => {
52
- if (navigationSequence !== navigationId || navigationAbortController !== abortController) {
53
- return;
54
- }
55
- navigationAbortController = null;
56
- };
57
- const runtime = {
58
- getOwnerState() {
59
- const activeRuntime = registrations.get(owner);
60
- return {
61
- owner,
62
- canHandleSpaNavigation: typeof activeRuntime?.navigate === "function"
63
- };
64
- },
65
- hasPendingNavigationTransaction() {
66
- return navigationAbortController !== null;
67
- },
68
- beginNavigationTransaction() {
69
- navigationAbortController?.abort();
70
- const abortController = new AbortController();
71
- const navigationId = ++navigationSequence;
72
- navigationAbortController = abortController;
73
- return {
74
- id: navigationId,
75
- signal: abortController.signal,
76
- isCurrent: () => navigationSequence === navigationId && navigationAbortController === abortController,
77
- cancel: () => {
78
- cancelNavigationTransaction(navigationId, abortController);
79
- },
80
- complete: () => {
81
- completeNavigationTransaction(navigationId, abortController);
40
+ const registrations = new Map();
41
+ const listeners = new Set();
42
+ let owner = 'none';
43
+ let navigationSequence = 0;
44
+ let navigationAbortController = null;
45
+ const emit = (event) => {
46
+ for (const listener of listeners) {
47
+ listener(event);
82
48
  }
83
- };
84
- },
85
- cancelCurrentNavigationTransaction() {
86
- if (!navigationAbortController) {
87
- return;
88
- }
89
- cancelNavigationTransaction(navigationSequence, navigationAbortController);
90
- },
91
- setOwner(nextOwner) {
92
- updateOwner(nextOwner, "set");
93
- },
94
- claimOwnership(nextOwner) {
95
- updateOwner(nextOwner, "claim");
96
- },
97
- releaseOwnership(currentOwner) {
98
- if (owner !== currentOwner) {
99
- return;
100
- }
101
- updateOwner("none", "release");
102
- },
103
- resolveDocumentOwner(doc, fallbackOwner = "none") {
104
- return getEcoDocumentOwner(doc) ?? fallbackOwner;
105
- },
106
- adoptDocumentOwner(doc, fallbackOwner = "none") {
107
- const nextOwner = runtime.resolveDocumentOwner(doc, fallbackOwner);
108
- updateOwner(nextOwner, "document");
109
- return nextOwner;
110
- },
111
- isOwnedByAnotherRuntime(candidateOwner) {
112
- return owner !== "none" && owner !== candidateOwner;
113
- },
114
- subscribe(listener) {
115
- listeners.add(listener);
116
- return () => {
117
- listeners.delete(listener);
118
- };
119
- },
120
- register(registration) {
121
- registrations.set(registration.owner, registration);
122
- emit({
123
- type: "registration-change",
124
- owner: registration.owner,
125
- status: "registered"
126
- });
127
- return () => {
128
- const currentRegistration = registrations.get(registration.owner);
129
- if (currentRegistration !== registration) {
130
- return;
49
+ };
50
+ const updateOwner = (nextOwner, reason) => {
51
+ if (owner === nextOwner) {
52
+ return;
131
53
  }
132
- registrations.delete(registration.owner);
54
+ const previousOwner = owner;
55
+ owner = nextOwner;
133
56
  emit({
134
- type: "registration-change",
135
- owner: registration.owner,
136
- status: "unregistered"
57
+ type: 'owner-change',
58
+ owner: nextOwner,
59
+ previousOwner,
60
+ reason,
137
61
  });
138
- if (owner === registration.owner) {
139
- updateOwner("none", "unregister");
140
- }
141
- };
142
- },
143
- async requestNavigation(request) {
144
- for (const candidateOwner of getCandidateOwners(owner, registrations, request.source)) {
145
- const registration = registrations.get(candidateOwner);
146
- if (!registration?.navigate) {
147
- continue;
62
+ };
63
+ const cancelNavigationTransaction = (navigationId, abortController) => {
64
+ if (navigationSequence !== navigationId || navigationAbortController !== abortController) {
65
+ return;
148
66
  }
149
- const handled = await registration.navigate(request);
150
- if (handled !== false) {
151
- return true;
67
+ navigationSequence += 1;
68
+ navigationAbortController = null;
69
+ abortController.abort();
70
+ };
71
+ const completeNavigationTransaction = (navigationId, abortController) => {
72
+ if (navigationSequence !== navigationId || navigationAbortController !== abortController) {
73
+ return;
152
74
  }
153
- }
154
- return false;
155
- },
156
- async requestHandoff(request) {
157
- if (request.targetOwner === "none") {
158
- return false;
159
- }
160
- if (request.isStaleSourceNavigation?.()) {
161
- return true;
162
- }
163
- const registration = registrations.get(request.targetOwner);
164
- if (!registration?.handoffNavigation) {
165
- return false;
166
- }
167
- if (request.isStaleSourceNavigation?.()) {
168
- return true;
169
- }
170
- const handled = await registration.handoffNavigation(request);
171
- return handled !== false;
172
- },
173
- async reloadCurrentPage(request) {
174
- for (const candidateOwner of getCandidateOwners(owner, registrations)) {
175
- const registration = registrations.get(candidateOwner);
176
- if (!registration?.reloadCurrentPage) {
177
- continue;
178
- }
179
- await registration.reloadCurrentPage(request);
180
- return true;
181
- }
182
- return false;
183
- },
184
- async cleanupOwner(targetOwner) {
185
- if (targetOwner === "none") {
186
- return;
187
- }
188
- const registration = registrations.get(targetOwner);
189
- if (!registration?.cleanupBeforeHandoff) {
190
- return;
191
- }
192
- await registration.cleanupBeforeHandoff();
193
- if (owner === targetOwner) {
194
- updateOwner("none", "release");
195
- }
196
- },
197
- async cleanupCurrentOwner() {
198
- await runtime.cleanupOwner(owner);
75
+ navigationAbortController = null;
76
+ };
77
+ const runtime = {
78
+ getOwnerState() {
79
+ const activeRuntime = registrations.get(owner);
80
+ return {
81
+ owner,
82
+ canHandleSpaNavigation: typeof activeRuntime?.navigate === 'function',
83
+ };
84
+ },
85
+ hasPendingNavigationTransaction() {
86
+ return navigationAbortController !== null;
87
+ },
88
+ beginNavigationTransaction() {
89
+ navigationAbortController?.abort();
90
+ const abortController = new AbortController();
91
+ const navigationId = ++navigationSequence;
92
+ navigationAbortController = abortController;
93
+ return {
94
+ id: navigationId,
95
+ signal: abortController.signal,
96
+ isCurrent: () => navigationSequence === navigationId && navigationAbortController === abortController,
97
+ cancel: () => {
98
+ cancelNavigationTransaction(navigationId, abortController);
99
+ },
100
+ complete: () => {
101
+ completeNavigationTransaction(navigationId, abortController);
102
+ },
103
+ };
104
+ },
105
+ cancelCurrentNavigationTransaction() {
106
+ if (!navigationAbortController) {
107
+ return;
108
+ }
109
+ cancelNavigationTransaction(navigationSequence, navigationAbortController);
110
+ },
111
+ setOwner(nextOwner) {
112
+ updateOwner(nextOwner, 'set');
113
+ },
114
+ claimOwnership(nextOwner) {
115
+ updateOwner(nextOwner, 'claim');
116
+ },
117
+ releaseOwnership(currentOwner) {
118
+ if (owner !== currentOwner) {
119
+ return;
120
+ }
121
+ updateOwner('none', 'release');
122
+ },
123
+ resolveDocumentOwner(doc, fallbackOwner = 'none') {
124
+ return getEcoDocumentOwner(doc) ?? fallbackOwner;
125
+ },
126
+ adoptDocumentOwner(doc, fallbackOwner = 'none') {
127
+ const nextOwner = runtime.resolveDocumentOwner(doc, fallbackOwner);
128
+ updateOwner(nextOwner, 'document');
129
+ return nextOwner;
130
+ },
131
+ isOwnedByAnotherRuntime(candidateOwner) {
132
+ return owner !== 'none' && owner !== candidateOwner;
133
+ },
134
+ subscribe(listener) {
135
+ listeners.add(listener);
136
+ return () => {
137
+ listeners.delete(listener);
138
+ };
139
+ },
140
+ register(registration) {
141
+ registrations.set(registration.owner, registration);
142
+ emit({
143
+ type: 'registration-change',
144
+ owner: registration.owner,
145
+ status: 'registered',
146
+ });
147
+ return () => {
148
+ const currentRegistration = registrations.get(registration.owner);
149
+ if (currentRegistration !== registration) {
150
+ return;
151
+ }
152
+ registrations.delete(registration.owner);
153
+ emit({
154
+ type: 'registration-change',
155
+ owner: registration.owner,
156
+ status: 'unregistered',
157
+ });
158
+ if (owner === registration.owner) {
159
+ updateOwner('none', 'unregister');
160
+ }
161
+ };
162
+ },
163
+ async requestNavigation(request) {
164
+ for (const candidateOwner of getCandidateOwners(owner, registrations, request.source)) {
165
+ const registration = registrations.get(candidateOwner);
166
+ if (!registration?.navigate) {
167
+ continue;
168
+ }
169
+ const handled = await registration.navigate(request);
170
+ if (handled !== false) {
171
+ return true;
172
+ }
173
+ }
174
+ return false;
175
+ },
176
+ async requestHandoff(request) {
177
+ if (request.targetOwner === 'none') {
178
+ return false;
179
+ }
180
+ if (request.isStaleSourceNavigation?.()) {
181
+ return true;
182
+ }
183
+ const registration = registrations.get(request.targetOwner);
184
+ if (!registration?.handoffNavigation) {
185
+ return false;
186
+ }
187
+ if (request.isStaleSourceNavigation?.()) {
188
+ return true;
189
+ }
190
+ const handled = await registration.handoffNavigation(request);
191
+ return handled !== false;
192
+ },
193
+ async reloadCurrentPage(request) {
194
+ for (const candidateOwner of getCandidateOwners(owner, registrations)) {
195
+ const registration = registrations.get(candidateOwner);
196
+ if (!registration?.reloadCurrentPage) {
197
+ continue;
198
+ }
199
+ const handled = await registration.reloadCurrentPage(request);
200
+ return handled !== false;
201
+ }
202
+ return false;
203
+ },
204
+ async cleanupOwner(targetOwner) {
205
+ if (targetOwner === 'none') {
206
+ return;
207
+ }
208
+ const registration = registrations.get(targetOwner);
209
+ if (!registration?.cleanupBeforeHandoff) {
210
+ return;
211
+ }
212
+ await registration.cleanupBeforeHandoff();
213
+ if (owner === targetOwner) {
214
+ updateOwner('none', 'release');
215
+ }
216
+ },
217
+ async cleanupCurrentOwner() {
218
+ await runtime.cleanupOwner(owner);
219
+ },
220
+ };
221
+ if (typeof window !== 'undefined') {
222
+ window.addEventListener('pageshow', (event) => {
223
+ if (event.persisted) {
224
+ runtime.cancelCurrentNavigationTransaction();
225
+ }
226
+ });
227
+ window.addEventListener('pagehide', () => {
228
+ runtime.cancelCurrentNavigationTransaction();
229
+ });
199
230
  }
200
- };
201
- if (typeof window !== "undefined") {
202
- window.addEventListener("pageshow", (event) => {
203
- if (event.persisted) {
204
- runtime.cancelCurrentNavigationTransaction();
205
- }
206
- });
207
- window.addEventListener("pagehide", () => {
208
- runtime.cancelCurrentNavigationTransaction();
209
- });
210
- }
211
- return runtime;
231
+ return runtime;
212
232
  }
213
- function getEcoNavigationRuntime(windowObject = window) {
214
- const runtimeWindow = windowObject;
215
- runtimeWindow.__ECO_PAGES__ = runtimeWindow.__ECO_PAGES__ || {};
216
- if (!runtimeWindow.__ECO_PAGES__.navigation) {
217
- runtimeWindow.__ECO_PAGES__.navigation = createEcoNavigationRuntime();
218
- }
219
- return runtimeWindow.__ECO_PAGES__.navigation;
233
+ /**
234
+ * Returns the singleton browser-side navigation coordinator.
235
+ *
236
+ * The coordinator centralizes ownership, handoff, and current-page reload
237
+ * requests across browser runtimes through one internal protocol.
238
+ *
239
+ * @param windowObject - Window-like object that stores the singleton runtime.
240
+ * @returns The shared browser navigation coordinator.
241
+ */
242
+ export function getEcoNavigationRuntime(windowObject = window) {
243
+ const runtimeWindow = windowObject;
244
+ runtimeWindow.__ECO_PAGES__ = runtimeWindow.__ECO_PAGES__ || {};
245
+ if (!runtimeWindow.__ECO_PAGES__.navigation) {
246
+ runtimeWindow.__ECO_PAGES__.navigation = createEcoNavigationRuntime();
247
+ }
248
+ return runtimeWindow.__ECO_PAGES__.navigation;
220
249
  }
221
- export {
222
- ECO_DOCUMENT_OWNER_ATTRIBUTE,
223
- getEcoDocumentOwner,
224
- getEcoNavigationRuntime
225
- };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared document navigation lifecycle events for browser runtimes.
3
+ *
4
+ * @remarks
5
+ * `eco:before-swap`, `eco:after-swap`, and `eco:page-load` are the public
6
+ * contract consumed by dev tooling, global injectors, and layout scripts.
7
+ * Dispatch helpers live here so browser-router and react-router stay aligned.
8
+ *
9
+ * @module
10
+ */
11
+ import type { EcoNavigationDirection } from './navigation-coordinator.js';
12
+ export declare const ECO_NAVIGATION_LIFECYCLE_EVENTS: {
13
+ readonly BEFORE_SWAP: "eco:before-swap";
14
+ readonly AFTER_SWAP: "eco:after-swap";
15
+ readonly PAGE_LOAD: "eco:page-load";
16
+ };
17
+ /** Base detail shared by navigation lifecycle events. */
18
+ export interface EcoNavigationEvent {
19
+ url: URL;
20
+ direction: EcoNavigationDirection;
21
+ }
22
+ /** Detail for the pre-commit lifecycle event. */
23
+ export interface EcoBeforeSwapEvent extends EcoNavigationEvent {
24
+ newDocument: Document;
25
+ reload: () => void;
26
+ }
27
+ /** Detail for the post-commit lifecycle event. */
28
+ export interface EcoAfterSwapEvent extends EcoNavigationEvent {
29
+ }
30
+ /** Typed document event map for navigation lifecycle listeners. */
31
+ export interface EcoNavigationLifecycleEventMap {
32
+ 'eco:before-swap': CustomEvent<EcoBeforeSwapEvent>;
33
+ 'eco:after-swap': CustomEvent<EcoAfterSwapEvent>;
34
+ 'eco:page-load': CustomEvent<EcoNavigationEvent>;
35
+ }
36
+ export type DispatchBeforeSwapResult = {
37
+ requestedReload: boolean;
38
+ };
39
+ export type SchedulePageLoadOptions = {
40
+ isStale?: () => boolean;
41
+ schedule?: (callback: FrameRequestCallback) => number;
42
+ };
43
+ /**
44
+ * Dispatches `eco:before-swap` and reports whether a listener requested reload.
45
+ */
46
+ export declare function dispatchBeforeSwap(doc: Document, input: Omit<EcoBeforeSwapEvent, 'reload'>): DispatchBeforeSwapResult;
47
+ /** Dispatches `eco:after-swap`. */
48
+ export declare function dispatchAfterSwap(doc: Document, detail: EcoAfterSwapEvent): void;
49
+ export type CompleteNavigationLifecycleOptions = SchedulePageLoadOptions;
50
+ /** Dispatches `eco:after-swap` and schedules `eco:page-load`. */
51
+ export declare function completeNavigationLifecycle(doc: Document, detail: EcoNavigationEvent, options?: CompleteNavigationLifecycleOptions): void;
52
+ /**
53
+ * Schedules `eco:page-load` on the next animation frame unless navigation is stale.
54
+ */
55
+ export declare function schedulePageLoad(doc: Document, detail: EcoNavigationEvent, options?: SchedulePageLoadOptions): void;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shared document navigation lifecycle events for browser runtimes.
3
+ *
4
+ * @remarks
5
+ * `eco:before-swap`, `eco:after-swap`, and `eco:page-load` are the public
6
+ * contract consumed by dev tooling, global injectors, and layout scripts.
7
+ * Dispatch helpers live here so browser-router and react-router stay aligned.
8
+ *
9
+ * @module
10
+ */
11
+ export const ECO_NAVIGATION_LIFECYCLE_EVENTS = {
12
+ BEFORE_SWAP: 'eco:before-swap',
13
+ AFTER_SWAP: 'eco:after-swap',
14
+ PAGE_LOAD: 'eco:page-load',
15
+ };
16
+ /**
17
+ * Dispatches `eco:before-swap` and reports whether a listener requested reload.
18
+ */
19
+ export function dispatchBeforeSwap(doc, input) {
20
+ let requestedReload = false;
21
+ const detail = {
22
+ ...input,
23
+ reload: () => {
24
+ requestedReload = true;
25
+ },
26
+ };
27
+ doc.dispatchEvent(new CustomEvent(ECO_NAVIGATION_LIFECYCLE_EVENTS.BEFORE_SWAP, { detail }));
28
+ return { requestedReload };
29
+ }
30
+ /** Dispatches `eco:after-swap`. */
31
+ export function dispatchAfterSwap(doc, detail) {
32
+ doc.dispatchEvent(new CustomEvent(ECO_NAVIGATION_LIFECYCLE_EVENTS.AFTER_SWAP, { detail }));
33
+ }
34
+ /** Dispatches `eco:after-swap` and schedules `eco:page-load`. */
35
+ export function completeNavigationLifecycle(doc, detail, options = {}) {
36
+ dispatchAfterSwap(doc, detail);
37
+ schedulePageLoad(doc, detail, options);
38
+ }
39
+ /**
40
+ * Schedules `eco:page-load` on the next animation frame unless navigation is stale.
41
+ */
42
+ export function schedulePageLoad(doc, detail, options = {}) {
43
+ const schedule = options.schedule ?? ((callback) => requestAnimationFrame(callback));
44
+ schedule(() => {
45
+ if (options.isStale?.()) {
46
+ return;
47
+ }
48
+ doc.dispatchEvent(new CustomEvent(ECO_NAVIGATION_LIFECYCLE_EVENTS.PAGE_LOAD, { detail }));
49
+ });
50
+ }