everything-dev 1.53.2 → 2.0.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 (713) hide show
  1. package/README.md +2 -11
  2. package/dist/_virtual/_rolldown/runtime.cjs +17 -2
  3. package/dist/_virtual/_rolldown/runtime.mjs +36 -0
  4. package/dist/api/auth-middleware.cjs +161 -0
  5. package/dist/api/auth-middleware.cjs.map +1 -0
  6. package/dist/api/auth-middleware.d.cts +69 -0
  7. package/dist/api/auth-middleware.d.mts +69 -0
  8. package/dist/api/auth-middleware.mjs +160 -0
  9. package/dist/api/auth-middleware.mjs.map +1 -0
  10. package/dist/api-contract.cjs +250 -62
  11. package/dist/api-contract.cjs.map +1 -1
  12. package/dist/api-contract.mjs +246 -65
  13. package/dist/api-contract.mjs.map +1 -1
  14. package/dist/app.cjs +99 -26
  15. package/dist/app.cjs.map +1 -1
  16. package/dist/app.d.cts +3 -0
  17. package/dist/app.d.mts +3 -0
  18. package/dist/app.mjs +100 -27
  19. package/dist/app.mjs.map +1 -1
  20. package/dist/auth-login.cjs +163 -0
  21. package/dist/auth-login.cjs.map +1 -0
  22. package/dist/auth-login.mjs +162 -0
  23. package/dist/auth-login.mjs.map +1 -0
  24. package/dist/auth-session.cjs +64 -0
  25. package/dist/auth-session.cjs.map +1 -0
  26. package/dist/auth-session.mjs +58 -0
  27. package/dist/auth-session.mjs.map +1 -0
  28. package/dist/auth-types-gen.cjs +0 -1
  29. package/dist/auth-types-gen.cjs.map +1 -1
  30. package/dist/build.cjs +37 -173
  31. package/dist/build.cjs.map +1 -1
  32. package/dist/build.mjs +37 -171
  33. package/dist/build.mjs.map +1 -1
  34. package/dist/bundle-cache.cjs +74 -0
  35. package/dist/bundle-cache.cjs.map +1 -0
  36. package/dist/bundle-cache.d.cts +27 -0
  37. package/dist/bundle-cache.d.mts +27 -0
  38. package/dist/bundle-cache.mjs +68 -0
  39. package/dist/bundle-cache.mjs.map +1 -0
  40. package/dist/bundle-fs-resolve.cjs +209 -0
  41. package/dist/bundle-fs-resolve.cjs.map +1 -0
  42. package/dist/bundle-fs-resolve.d.cts +76 -0
  43. package/dist/bundle-fs-resolve.d.mts +76 -0
  44. package/dist/bundle-fs-resolve.mjs +202 -0
  45. package/dist/bundle-fs-resolve.mjs.map +1 -0
  46. package/dist/cdn-deploy.cjs +126 -0
  47. package/dist/cdn-deploy.cjs.map +1 -0
  48. package/dist/cdn-deploy.mjs +124 -0
  49. package/dist/cdn-deploy.mjs.map +1 -0
  50. package/dist/cli/db-doctor.cjs +19 -19
  51. package/dist/cli/db-doctor.cjs.map +1 -1
  52. package/dist/cli/db-doctor.mjs +18 -18
  53. package/dist/cli/db-doctor.mjs.map +1 -1
  54. package/dist/cli/db-repair.cjs +9 -32
  55. package/dist/cli/db-repair.cjs.map +1 -1
  56. package/dist/cli/db-repair.mjs +9 -32
  57. package/dist/cli/db-repair.mjs.map +1 -1
  58. package/dist/cli/framework-version.cjs +7 -3
  59. package/dist/cli/framework-version.cjs.map +1 -1
  60. package/dist/cli/framework-version.mjs +7 -3
  61. package/dist/cli/framework-version.mjs.map +1 -1
  62. package/dist/cli/infra.cjs +159 -251
  63. package/dist/cli/infra.cjs.map +1 -1
  64. package/dist/cli/infra.mjs +154 -242
  65. package/dist/cli/infra.mjs.map +1 -1
  66. package/dist/cli/init.cjs +627 -199
  67. package/dist/cli/init.cjs.map +1 -1
  68. package/dist/cli/init.d.cts +61 -8
  69. package/dist/cli/init.d.mts +61 -8
  70. package/dist/cli/init.mjs +616 -197
  71. package/dist/cli/init.mjs.map +1 -1
  72. package/dist/cli/parse.cjs +8 -7
  73. package/dist/cli/parse.cjs.map +1 -1
  74. package/dist/cli/parse.mjs +9 -7
  75. package/dist/cli/parse.mjs.map +1 -1
  76. package/dist/cli/prompts.cjs +14 -1
  77. package/dist/cli/prompts.cjs.map +1 -1
  78. package/dist/cli/prompts.mjs +14 -1
  79. package/dist/cli/prompts.mjs.map +1 -1
  80. package/dist/cli/prune.cjs +220 -0
  81. package/dist/cli/prune.cjs.map +1 -0
  82. package/dist/cli/prune.mjs +220 -0
  83. package/dist/cli/prune.mjs.map +1 -0
  84. package/dist/cli/snapshot.cjs +2 -1
  85. package/dist/cli/snapshot.cjs.map +1 -1
  86. package/dist/cli/snapshot.mjs +2 -1
  87. package/dist/cli/snapshot.mjs.map +1 -1
  88. package/dist/cli/status.cjs +5 -4
  89. package/dist/cli/status.cjs.map +1 -1
  90. package/dist/cli/status.mjs +6 -5
  91. package/dist/cli/status.mjs.map +1 -1
  92. package/dist/cli/sync.cjs +156 -58
  93. package/dist/cli/sync.cjs.map +1 -1
  94. package/dist/cli/sync.mjs +158 -63
  95. package/dist/cli/sync.mjs.map +1 -1
  96. package/dist/cli/timing.cjs +0 -1
  97. package/dist/cli/timing.cjs.map +1 -1
  98. package/dist/cli/upgrade.cjs +95 -69
  99. package/dist/cli/upgrade.cjs.map +1 -1
  100. package/dist/cli/upgrade.mjs +97 -72
  101. package/dist/cli/upgrade.mjs.map +1 -1
  102. package/dist/cli/utils/helpers.cjs.map +1 -1
  103. package/dist/cli.cjs +320 -72
  104. package/dist/cli.cjs.map +1 -1
  105. package/dist/cli.mjs +316 -68
  106. package/dist/cli.mjs.map +1 -1
  107. package/dist/code-artifacts.cjs +76 -8
  108. package/dist/code-artifacts.cjs.map +1 -1
  109. package/dist/code-artifacts.mjs +76 -10
  110. package/dist/code-artifacts.mjs.map +1 -1
  111. package/dist/commands/build.cjs +65 -0
  112. package/dist/commands/build.cjs.map +1 -0
  113. package/dist/commands/build.mjs +65 -0
  114. package/dist/commands/build.mjs.map +1 -0
  115. package/dist/commands/config.cjs +77 -0
  116. package/dist/commands/config.cjs.map +1 -0
  117. package/dist/commands/config.d.cts +8 -0
  118. package/dist/commands/config.d.mts +8 -0
  119. package/dist/commands/config.mjs +74 -0
  120. package/dist/commands/config.mjs.map +1 -0
  121. package/dist/commands/db.cjs +107 -0
  122. package/dist/commands/db.cjs.map +1 -0
  123. package/dist/commands/db.mjs +107 -0
  124. package/dist/commands/db.mjs.map +1 -0
  125. package/dist/commands/deploy.cjs +336 -0
  126. package/dist/commands/deploy.cjs.map +1 -0
  127. package/dist/commands/deploy.mjs +334 -0
  128. package/dist/commands/deploy.mjs.map +1 -0
  129. package/dist/commands/dev.cjs +75 -0
  130. package/dist/commands/dev.cjs.map +1 -0
  131. package/dist/commands/dev.mjs +73 -0
  132. package/dist/commands/dev.mjs.map +1 -0
  133. package/dist/commands/init.cjs +234 -0
  134. package/dist/commands/init.cjs.map +1 -0
  135. package/dist/commands/init.mjs +231 -0
  136. package/dist/commands/init.mjs.map +1 -0
  137. package/dist/commands/keys.cjs +255 -0
  138. package/dist/commands/keys.cjs.map +1 -0
  139. package/dist/commands/keys.mjs +253 -0
  140. package/dist/commands/keys.mjs.map +1 -0
  141. package/dist/commands/ops.cjs +199 -0
  142. package/dist/commands/ops.cjs.map +1 -0
  143. package/dist/commands/ops.mjs +197 -0
  144. package/dist/commands/ops.mjs.map +1 -0
  145. package/dist/commands/plugins.cjs +211 -0
  146. package/dist/commands/plugins.cjs.map +1 -0
  147. package/dist/commands/plugins.mjs +211 -0
  148. package/dist/commands/plugins.mjs.map +1 -0
  149. package/dist/commands/shared.cjs +8 -0
  150. package/dist/commands/shared.cjs.map +1 -0
  151. package/dist/commands/shared.d.cts +6 -0
  152. package/dist/commands/shared.d.mts +6 -0
  153. package/dist/commands/shared.mjs +8 -0
  154. package/dist/commands/shared.mjs.map +1 -0
  155. package/dist/commands/upgrade.cjs +325 -0
  156. package/dist/commands/upgrade.cjs.map +1 -0
  157. package/dist/commands/upgrade.mjs +323 -0
  158. package/dist/commands/upgrade.mjs.map +1 -0
  159. package/dist/components/dev-render.cjs +340 -0
  160. package/dist/components/dev-render.cjs.map +1 -0
  161. package/dist/components/dev-render.mjs +332 -0
  162. package/dist/components/dev-render.mjs.map +1 -0
  163. package/dist/config.cjs +460 -221
  164. package/dist/config.cjs.map +1 -1
  165. package/dist/config.d.cts +491 -48
  166. package/dist/config.d.mts +491 -48
  167. package/dist/config.mjs +439 -212
  168. package/dist/config.mjs.map +1 -1
  169. package/dist/contract.cjs +327 -50
  170. package/dist/contract.cjs.map +1 -1
  171. package/dist/contract.d.cts +1951 -1062
  172. package/dist/contract.d.mts +1951 -1062
  173. package/dist/contract.meta.cjs +107 -12
  174. package/dist/contract.meta.cjs.map +1 -1
  175. package/dist/contract.meta.d.cts +166 -8
  176. package/dist/contract.meta.d.mts +166 -8
  177. package/dist/contract.meta.mjs +107 -11
  178. package/dist/contract.meta.mjs.map +1 -1
  179. package/dist/contract.mjs +580 -327
  180. package/dist/contract.mjs.map +1 -1
  181. package/dist/dag.cjs +5 -3
  182. package/dist/dag.cjs.map +1 -1
  183. package/dist/dag.mjs +6 -3
  184. package/dist/dag.mjs.map +1 -1
  185. package/dist/db/binding.cjs +80 -0
  186. package/dist/db/binding.cjs.map +1 -0
  187. package/dist/db/binding.d.cts +39 -0
  188. package/dist/db/binding.d.mts +39 -0
  189. package/dist/db/binding.mjs +78 -0
  190. package/dist/db/binding.mjs.map +1 -0
  191. package/dist/db/bindings.cjs +78 -0
  192. package/dist/db/bindings.cjs.map +1 -0
  193. package/dist/db/bindings.d.cts +34 -0
  194. package/dist/db/bindings.d.mts +34 -0
  195. package/dist/db/bindings.mjs +76 -0
  196. package/dist/db/bindings.mjs.map +1 -0
  197. package/dist/db/core.cjs +204 -0
  198. package/dist/db/core.cjs.map +1 -0
  199. package/dist/db/core.d.cts +69 -0
  200. package/dist/db/core.d.mts +69 -0
  201. package/dist/db/core.mjs +192 -0
  202. package/dist/db/core.mjs.map +1 -0
  203. package/dist/db/driver.cjs +167 -0
  204. package/dist/db/driver.cjs.map +1 -0
  205. package/dist/db/driver.d.cts +50 -0
  206. package/dist/db/driver.d.mts +50 -0
  207. package/dist/db/driver.mjs +165 -0
  208. package/dist/db/driver.mjs.map +1 -0
  209. package/dist/db/drizzle-kit.cjs +177 -0
  210. package/dist/db/drizzle-kit.cjs.map +1 -0
  211. package/dist/db/drizzle-kit.d.cts +25 -0
  212. package/dist/db/drizzle-kit.d.mts +25 -0
  213. package/dist/db/drizzle-kit.mjs +175 -0
  214. package/dist/db/drizzle-kit.mjs.map +1 -0
  215. package/dist/db/errors.cjs +27 -0
  216. package/dist/db/errors.cjs.map +1 -0
  217. package/dist/db/errors.d.cts +16 -0
  218. package/dist/db/errors.d.mts +16 -0
  219. package/dist/db/errors.mjs +26 -0
  220. package/dist/db/errors.mjs.map +1 -0
  221. package/dist/db/identity.cjs +55 -0
  222. package/dist/db/identity.cjs.map +1 -0
  223. package/dist/db/identity.d.cts +40 -0
  224. package/dist/db/identity.d.mts +40 -0
  225. package/dist/db/identity.mjs +53 -0
  226. package/dist/db/identity.mjs.map +1 -0
  227. package/dist/db/index.cjs +43 -0
  228. package/dist/db/index.d.cts +9 -0
  229. package/dist/db/index.d.mts +9 -0
  230. package/dist/db/index.mjs +10 -0
  231. package/dist/db/run-migrations.cjs +343 -0
  232. package/dist/db/run-migrations.cjs.map +1 -0
  233. package/dist/db/run-migrations.d.cts +87 -0
  234. package/dist/db/run-migrations.d.mts +87 -0
  235. package/dist/db/run-migrations.mjs +341 -0
  236. package/dist/db/run-migrations.mjs.map +1 -0
  237. package/dist/delegate-signer.cjs +85 -0
  238. package/dist/delegate-signer.cjs.map +1 -0
  239. package/dist/delegate-signer.mjs +84 -0
  240. package/dist/delegate-signer.mjs.map +1 -0
  241. package/dist/deploy-diff.cjs +119 -0
  242. package/dist/deploy-diff.cjs.map +1 -0
  243. package/dist/deploy-diff.mjs +109 -0
  244. package/dist/deploy-diff.mjs.map +1 -0
  245. package/dist/descriptor/constructors.cjs +49 -0
  246. package/dist/descriptor/constructors.cjs.map +1 -0
  247. package/dist/descriptor/constructors.d.cts +27 -0
  248. package/dist/descriptor/constructors.d.mts +27 -0
  249. package/dist/descriptor/constructors.mjs +45 -0
  250. package/dist/descriptor/constructors.mjs.map +1 -0
  251. package/dist/descriptor/index.cjs +24 -0
  252. package/dist/descriptor/index.d.cts +5 -0
  253. package/dist/descriptor/index.d.mts +5 -0
  254. package/dist/descriptor/index.mjs +6 -0
  255. package/dist/descriptor/resolve.cjs +258 -0
  256. package/dist/descriptor/resolve.cjs.map +1 -0
  257. package/dist/descriptor/resolve.d.cts +50 -0
  258. package/dist/descriptor/resolve.d.mts +50 -0
  259. package/dist/descriptor/resolve.mjs +252 -0
  260. package/dist/descriptor/resolve.mjs.map +1 -0
  261. package/dist/descriptor/schema.cjs +109 -0
  262. package/dist/descriptor/schema.cjs.map +1 -0
  263. package/dist/descriptor/schema.d.cts +217 -0
  264. package/dist/descriptor/schema.d.mts +217 -0
  265. package/dist/descriptor/schema.mjs +102 -0
  266. package/dist/descriptor/schema.mjs.map +1 -0
  267. package/dist/descriptor/serialize.cjs +45 -0
  268. package/dist/descriptor/serialize.cjs.map +1 -0
  269. package/dist/descriptor/serialize.d.cts +7 -0
  270. package/dist/descriptor/serialize.d.mts +7 -0
  271. package/dist/descriptor/serialize.mjs +45 -0
  272. package/dist/descriptor/serialize.mjs.map +1 -0
  273. package/dist/dev-log-pipeline.cjs +273 -0
  274. package/dist/dev-log-pipeline.cjs.map +1 -0
  275. package/dist/dev-log-pipeline.mjs +267 -0
  276. package/dist/dev-log-pipeline.mjs.map +1 -0
  277. package/dist/dev-logs.cjs +39 -8
  278. package/dist/dev-logs.cjs.map +1 -1
  279. package/dist/dev-logs.mjs +37 -9
  280. package/dist/dev-logs.mjs.map +1 -1
  281. package/dist/dev-program.cjs +405 -0
  282. package/dist/dev-program.cjs.map +1 -0
  283. package/dist/dev-program.d.cts +10 -0
  284. package/dist/dev-program.d.mts +10 -0
  285. package/dist/dev-program.mjs +395 -0
  286. package/dist/dev-program.mjs.map +1 -0
  287. package/dist/dev-session-data.d.cts +27 -0
  288. package/dist/dev-session-data.d.mts +27 -0
  289. package/dist/dev-session.cjs +178 -105
  290. package/dist/dev-session.cjs.map +1 -1
  291. package/dist/dev-session.mjs +180 -105
  292. package/dist/dev-session.mjs.map +1 -1
  293. package/dist/env/process-env.cjs +16 -0
  294. package/dist/env/process-env.cjs.map +1 -0
  295. package/dist/env/process-env.mjs +13 -0
  296. package/dist/env/process-env.mjs.map +1 -0
  297. package/dist/env/project-env.cjs +144 -0
  298. package/dist/env/project-env.cjs.map +1 -0
  299. package/dist/env/project-env.d.cts +1 -0
  300. package/dist/env/project-env.d.mts +1 -0
  301. package/dist/env/project-env.mjs +132 -0
  302. package/dist/env/project-env.mjs.map +1 -0
  303. package/dist/fastkv.cjs +59 -12
  304. package/dist/fastkv.cjs.map +1 -1
  305. package/dist/fastkv.d.cts +42 -6
  306. package/dist/fastkv.d.mts +42 -6
  307. package/dist/fastkv.mjs +58 -13
  308. package/dist/fastkv.mjs.map +1 -1
  309. package/dist/fingerprint.cjs +57 -0
  310. package/dist/fingerprint.cjs.map +1 -0
  311. package/dist/fingerprint.d.cts +14 -0
  312. package/dist/fingerprint.d.mts +14 -0
  313. package/dist/fingerprint.mjs +55 -0
  314. package/dist/fingerprint.mjs.map +1 -0
  315. package/dist/http-client.cjs +17 -17
  316. package/dist/http-client.cjs.map +1 -1
  317. package/dist/http-client.mjs +17 -17
  318. package/dist/http-client.mjs.map +1 -1
  319. package/dist/image-deploy.cjs +186 -0
  320. package/dist/image-deploy.cjs.map +1 -0
  321. package/dist/image-deploy.mjs +182 -0
  322. package/dist/image-deploy.mjs.map +1 -0
  323. package/dist/index.cjs +66 -18
  324. package/dist/index.d.cts +8 -7
  325. package/dist/index.d.mts +8 -7
  326. package/dist/index.mjs +6 -5
  327. package/dist/infra/docker.cjs +77 -0
  328. package/dist/infra/docker.cjs.map +1 -0
  329. package/dist/infra/docker.d.cts +10 -0
  330. package/dist/infra/docker.d.mts +10 -0
  331. package/dist/infra/docker.mjs +69 -0
  332. package/dist/infra/docker.mjs.map +1 -0
  333. package/dist/infra/materializer.cjs +74 -0
  334. package/dist/infra/materializer.cjs.map +1 -0
  335. package/dist/infra/materializer.mjs +70 -0
  336. package/dist/infra/materializer.mjs.map +1 -0
  337. package/dist/infra/planner.cjs +135 -103
  338. package/dist/infra/planner.cjs.map +1 -1
  339. package/dist/infra/planner.mjs +137 -104
  340. package/dist/infra/planner.mjs.map +1 -1
  341. package/dist/infra/port-ownership.cjs +57 -0
  342. package/dist/infra/port-ownership.cjs.map +1 -0
  343. package/dist/infra/port-ownership.mjs +57 -0
  344. package/dist/infra/port-ownership.mjs.map +1 -0
  345. package/dist/infra/preflight.cjs +45 -33
  346. package/dist/infra/preflight.cjs.map +1 -1
  347. package/dist/infra/preflight.d.cts +1 -0
  348. package/dist/infra/preflight.d.mts +1 -0
  349. package/dist/infra/preflight.mjs +46 -34
  350. package/dist/infra/preflight.mjs.map +1 -1
  351. package/dist/infra/types.cjs.map +1 -1
  352. package/dist/infra/types.d.cts +2 -0
  353. package/dist/infra/types.d.mts +2 -0
  354. package/dist/infra/types.mjs.map +1 -1
  355. package/dist/integrity.cjs +50 -61
  356. package/dist/integrity.cjs.map +1 -1
  357. package/dist/integrity.d.cts +16 -10
  358. package/dist/integrity.d.mts +16 -10
  359. package/dist/integrity.mjs +50 -59
  360. package/dist/integrity.mjs.map +1 -1
  361. package/dist/internal/manifest-normalizer.cjs +8 -2
  362. package/dist/internal/manifest-normalizer.cjs.map +1 -1
  363. package/dist/internal/manifest-normalizer.mjs +9 -3
  364. package/dist/internal/manifest-normalizer.mjs.map +1 -1
  365. package/dist/merge.cjs +19 -1
  366. package/dist/merge.cjs.map +1 -1
  367. package/dist/merge.d.cts +1 -1
  368. package/dist/merge.d.mts +1 -1
  369. package/dist/merge.mjs +19 -2
  370. package/dist/merge.mjs.map +1 -1
  371. package/dist/mf.cjs +190 -3
  372. package/dist/mf.cjs.map +1 -1
  373. package/dist/mf.d.cts +24 -2
  374. package/dist/mf.d.mts +24 -2
  375. package/dist/mf.mjs +189 -4
  376. package/dist/mf.mjs.map +1 -1
  377. package/dist/near-cli.cjs +59 -91
  378. package/dist/near-cli.cjs.map +1 -1
  379. package/dist/near-cli.mjs +58 -90
  380. package/dist/near-cli.mjs.map +1 -1
  381. package/dist/near-signer.cjs +73 -0
  382. package/dist/near-signer.cjs.map +1 -0
  383. package/dist/near-signer.mjs +70 -0
  384. package/dist/near-signer.mjs.map +1 -0
  385. package/dist/network.cjs +0 -1
  386. package/dist/network.cjs.map +1 -1
  387. package/dist/orchestrator.cjs +256 -87
  388. package/dist/orchestrator.cjs.map +1 -1
  389. package/dist/orchestrator.mjs +248 -87
  390. package/dist/orchestrator.mjs.map +1 -1
  391. package/dist/platform-deploy.cjs +81 -0
  392. package/dist/platform-deploy.cjs.map +1 -0
  393. package/dist/platform-deploy.mjs +80 -0
  394. package/dist/platform-deploy.mjs.map +1 -0
  395. package/dist/plugin.cjs +54 -1389
  396. package/dist/plugin.cjs.map +1 -1
  397. package/dist/plugin.d.cts +6 -896
  398. package/dist/plugin.d.mts +6 -896
  399. package/dist/plugin.mjs +53 -1387
  400. package/dist/plugin.mjs.map +1 -1
  401. package/dist/process-kill.cjs +44 -0
  402. package/dist/process-kill.cjs.map +1 -0
  403. package/dist/process-kill.mjs +43 -0
  404. package/dist/process-kill.mjs.map +1 -0
  405. package/dist/process-registry.cjs +64 -9
  406. package/dist/process-registry.cjs.map +1 -1
  407. package/dist/process-registry.mjs +61 -10
  408. package/dist/process-registry.mjs.map +1 -1
  409. package/dist/progress.cjs +45 -0
  410. package/dist/progress.cjs.map +1 -0
  411. package/dist/progress.d.cts +13 -0
  412. package/dist/progress.d.mts +13 -0
  413. package/dist/progress.mjs +42 -0
  414. package/dist/progress.mjs.map +1 -0
  415. package/dist/publish.cjs +513 -79
  416. package/dist/publish.cjs.map +1 -1
  417. package/dist/publish.mjs +515 -82
  418. package/dist/publish.mjs.map +1 -1
  419. package/dist/registry-use.cjs +41 -0
  420. package/dist/registry-use.cjs.map +1 -0
  421. package/dist/registry-use.mjs +40 -0
  422. package/dist/registry-use.mjs.map +1 -0
  423. package/dist/resolution/session.cjs +335 -0
  424. package/dist/resolution/session.cjs.map +1 -0
  425. package/dist/resolution/session.d.cts +105 -0
  426. package/dist/resolution/session.d.mts +105 -0
  427. package/dist/resolution/session.mjs +331 -0
  428. package/dist/resolution/session.mjs.map +1 -0
  429. package/dist/rollback.cjs +131 -0
  430. package/dist/rollback.cjs.map +1 -0
  431. package/dist/rollback.mjs +128 -0
  432. package/dist/rollback.mjs.map +1 -0
  433. package/dist/sdk.cjs +7 -7
  434. package/dist/sdk.d.cts +3 -3
  435. package/dist/sdk.d.mts +3 -3
  436. package/dist/sdk.mjs +2 -2
  437. package/dist/service-descriptor.cjs +67 -34
  438. package/dist/service-descriptor.cjs.map +1 -1
  439. package/dist/service-descriptor.d.cts +4 -1
  440. package/dist/service-descriptor.d.mts +3 -0
  441. package/dist/service-descriptor.mjs +63 -35
  442. package/dist/service-descriptor.mjs.map +1 -1
  443. package/dist/shared-deps.cjs +17 -16
  444. package/dist/shared-deps.cjs.map +1 -1
  445. package/dist/shared-deps.mjs +17 -16
  446. package/dist/shared-deps.mjs.map +1 -1
  447. package/dist/start-config-source.cjs +24 -0
  448. package/dist/start-config-source.cjs.map +1 -0
  449. package/dist/start-config-source.d.cts +29 -0
  450. package/dist/start-config-source.d.mts +29 -0
  451. package/dist/start-config-source.mjs +22 -0
  452. package/dist/start-config-source.mjs.map +1 -0
  453. package/dist/storage-upload.cjs +145 -0
  454. package/dist/storage-upload.cjs.map +1 -0
  455. package/dist/storage-upload.mjs +143 -0
  456. package/dist/storage-upload.mjs.map +1 -0
  457. package/dist/types.cjs +126 -20
  458. package/dist/types.cjs.map +1 -1
  459. package/dist/types.d.cts +867 -585
  460. package/dist/types.d.mts +867 -585
  461. package/dist/types.mjs +307 -208
  462. package/dist/types.mjs.map +1 -1
  463. package/dist/ui/api.cjs +105 -0
  464. package/dist/ui/api.cjs.map +1 -0
  465. package/dist/ui/api.d.cts +31 -0
  466. package/dist/ui/api.d.mts +31 -0
  467. package/dist/ui/api.mjs +99 -0
  468. package/dist/ui/api.mjs.map +1 -0
  469. package/dist/ui/auth-guards.cjs +50 -0
  470. package/dist/ui/auth-guards.cjs.map +1 -0
  471. package/dist/ui/auth-guards.d.cts +39 -0
  472. package/dist/ui/auth-guards.d.mts +39 -0
  473. package/dist/ui/auth-guards.mjs +48 -0
  474. package/dist/ui/auth-guards.mjs.map +1 -0
  475. package/dist/ui/auth.cjs +197 -0
  476. package/dist/ui/auth.cjs.map +1 -0
  477. package/dist/ui/auth.d.cts +56 -0
  478. package/dist/ui/auth.d.mts +56 -0
  479. package/dist/ui/auth.mjs +179 -0
  480. package/dist/ui/auth.mjs.map +1 -0
  481. package/dist/ui/entry.cjs +16 -0
  482. package/dist/ui/entry.cjs.map +1 -0
  483. package/dist/ui/entry.d.cts +12 -0
  484. package/dist/ui/entry.d.mts +12 -0
  485. package/dist/ui/entry.mjs +15 -0
  486. package/dist/ui/entry.mjs.map +1 -0
  487. package/dist/ui/head.cjs +14 -7
  488. package/dist/ui/head.cjs.map +1 -1
  489. package/dist/ui/head.mjs +15 -7
  490. package/dist/ui/head.mjs.map +1 -1
  491. package/dist/ui/hydrate.cjs +265 -0
  492. package/dist/ui/hydrate.cjs.map +1 -0
  493. package/dist/ui/hydrate.d.cts +48 -0
  494. package/dist/ui/hydrate.d.mts +48 -0
  495. package/dist/ui/hydrate.mjs +263 -0
  496. package/dist/ui/hydrate.mjs.map +1 -0
  497. package/dist/ui/i18n.cjs +153 -0
  498. package/dist/ui/i18n.cjs.map +1 -0
  499. package/dist/ui/i18n.d.cts +29 -0
  500. package/dist/ui/i18n.d.mts +29 -0
  501. package/dist/ui/i18n.mjs +140 -0
  502. package/dist/ui/i18n.mjs.map +1 -0
  503. package/dist/ui/index.cjs +19 -1
  504. package/dist/ui/index.d.cts +6 -3
  505. package/dist/ui/index.d.mts +6 -3
  506. package/dist/ui/index.mjs +5 -2
  507. package/dist/ui/locale.cjs +53 -0
  508. package/dist/ui/locale.cjs.map +1 -0
  509. package/dist/ui/locale.d.cts +18 -0
  510. package/dist/ui/locale.d.mts +18 -0
  511. package/dist/ui/locale.mjs +49 -0
  512. package/dist/ui/locale.mjs.map +1 -0
  513. package/dist/ui/manifest/index.cjs +25 -0
  514. package/dist/ui/manifest/index.cjs.map +1 -0
  515. package/dist/ui/manifest/index.d.cts +9 -0
  516. package/dist/ui/manifest/index.d.mts +9 -0
  517. package/dist/ui/manifest/index.mjs +13 -0
  518. package/dist/ui/manifest/index.mjs.map +1 -0
  519. package/dist/ui/manifest-generator.cjs +8 -0
  520. package/dist/ui/manifest-generator.d.cts +1 -0
  521. package/dist/ui/manifest-generator.d.mts +1 -0
  522. package/dist/ui/manifest-generator.mjs +3 -0
  523. package/dist/ui/message-catalogs.cjs +8 -0
  524. package/dist/ui/message-catalogs.cjs.map +1 -0
  525. package/dist/ui/message-catalogs.d.cts +5 -0
  526. package/dist/ui/message-catalogs.d.mts +5 -0
  527. package/dist/ui/message-catalogs.mjs +8 -0
  528. package/dist/ui/message-catalogs.mjs.map +1 -0
  529. package/dist/ui/metadata.cjs +0 -1
  530. package/dist/ui/metadata.cjs.map +1 -1
  531. package/dist/ui/metadata.d.cts +1 -1
  532. package/dist/ui/metadata.d.mts +1 -1
  533. package/dist/ui/plugin-path.cjs +37 -0
  534. package/dist/ui/plugin-path.cjs.map +1 -0
  535. package/dist/ui/plugin-path.d.cts +25 -0
  536. package/dist/ui/plugin-path.d.mts +25 -0
  537. package/dist/ui/plugin-path.mjs +35 -0
  538. package/dist/ui/plugin-path.mjs.map +1 -0
  539. package/dist/ui/router-client.cjs +61 -0
  540. package/dist/ui/router-client.cjs.map +1 -0
  541. package/dist/ui/router-client.d.cts +20 -0
  542. package/dist/ui/router-client.d.mts +20 -0
  543. package/dist/ui/router-client.mjs +60 -0
  544. package/dist/ui/router-client.mjs.map +1 -0
  545. package/dist/ui/router-defaults.cjs +48 -0
  546. package/dist/ui/router-defaults.cjs.map +1 -0
  547. package/dist/ui/router-defaults.d.cts +8 -0
  548. package/dist/ui/router-defaults.d.mts +8 -0
  549. package/dist/ui/router-defaults.mjs +45 -0
  550. package/dist/ui/router-defaults.mjs.map +1 -0
  551. package/dist/ui/router-error.cjs +70 -0
  552. package/dist/ui/router-error.cjs.map +1 -0
  553. package/dist/ui/router-error.d.cts +19 -0
  554. package/dist/ui/router-error.d.mts +19 -0
  555. package/dist/ui/router-error.mjs +69 -0
  556. package/dist/ui/router-error.mjs.map +1 -0
  557. package/dist/ui/router-server.cjs +153 -0
  558. package/dist/ui/router-server.cjs.map +1 -0
  559. package/dist/ui/router-server.d.cts +38 -0
  560. package/dist/ui/router-server.d.mts +38 -0
  561. package/dist/ui/router-server.mjs +152 -0
  562. package/dist/ui/router-server.mjs.map +1 -0
  563. package/dist/ui/router.cjs +4 -16
  564. package/dist/ui/router.cjs.map +1 -1
  565. package/dist/ui/router.mjs +4 -15
  566. package/dist/ui/router.mjs.map +1 -1
  567. package/dist/ui/runtime.cjs +5 -1
  568. package/dist/ui/runtime.cjs.map +1 -1
  569. package/dist/ui/runtime.d.cts +2 -1
  570. package/dist/ui/runtime.d.mts +2 -1
  571. package/dist/ui/runtime.mjs +5 -1
  572. package/dist/ui/runtime.mjs.map +1 -1
  573. package/dist/ui/slot.cjs +34 -0
  574. package/dist/ui/slot.cjs.map +1 -0
  575. package/dist/ui/slot.d.cts +43 -0
  576. package/dist/ui/slot.d.mts +43 -0
  577. package/dist/ui/slot.mjs +34 -0
  578. package/dist/ui/slot.mjs.map +1 -0
  579. package/dist/ui/tenant.cjs +300 -0
  580. package/dist/ui/tenant.cjs.map +1 -0
  581. package/dist/ui/tenant.d.cts +122 -0
  582. package/dist/ui/tenant.d.mts +122 -0
  583. package/dist/ui/tenant.mjs +279 -0
  584. package/dist/ui/tenant.mjs.map +1 -0
  585. package/dist/ui/types.d.cts +32 -2
  586. package/dist/ui/types.d.mts +32 -2
  587. package/dist/ui/version-check.cjs +47 -0
  588. package/dist/ui/version-check.cjs.map +1 -0
  589. package/dist/ui/version-check.d.cts +23 -0
  590. package/dist/ui/version-check.d.mts +23 -0
  591. package/dist/ui/version-check.mjs +46 -0
  592. package/dist/ui/version-check.mjs.map +1 -0
  593. package/dist/utils/banner.cjs +2 -2
  594. package/dist/utils/banner.cjs.map +1 -1
  595. package/dist/utils/banner.mjs +2 -2
  596. package/dist/utils/banner.mjs.map +1 -1
  597. package/dist/utils/linkify.cjs +1 -1
  598. package/dist/utils/linkify.cjs.map +1 -1
  599. package/dist/utils/linkify.mjs +1 -0
  600. package/dist/utils/linkify.mjs.map +1 -1
  601. package/dist/utils/run.cjs +6 -6
  602. package/dist/utils/run.cjs.map +1 -1
  603. package/dist/utils/run.mjs +6 -6
  604. package/dist/utils/run.mjs.map +1 -1
  605. package/dist/utils/save-config.cjs +12 -0
  606. package/dist/utils/save-config.cjs.map +1 -1
  607. package/dist/utils/save-config.mjs +12 -0
  608. package/dist/utils/save-config.mjs.map +1 -1
  609. package/dist/utils/snapshot-hash.cjs +10 -0
  610. package/dist/utils/snapshot-hash.cjs.map +1 -0
  611. package/dist/utils/snapshot-hash.mjs +10 -0
  612. package/dist/utils/snapshot-hash.mjs.map +1 -0
  613. package/dist/utils/string.cjs +0 -1
  614. package/dist/utils/string.cjs.map +1 -1
  615. package/dist/utils/theme.cjs +30 -12
  616. package/dist/utils/theme.cjs.map +1 -1
  617. package/dist/utils/theme.mjs +30 -11
  618. package/dist/utils/theme.mjs.map +1 -1
  619. package/dist/version-manifest-deploy.cjs +50 -0
  620. package/dist/version-manifest-deploy.cjs.map +1 -0
  621. package/dist/version-manifest-deploy.mjs +49 -0
  622. package/dist/version-manifest-deploy.mjs.map +1 -0
  623. package/dist/version-manifest-resolve.cjs +42 -0
  624. package/dist/version-manifest-resolve.cjs.map +1 -0
  625. package/dist/version-manifest-resolve.d.cts +38 -0
  626. package/dist/version-manifest-resolve.d.mts +38 -0
  627. package/dist/version-manifest-resolve.mjs +40 -0
  628. package/dist/version-manifest-resolve.mjs.map +1 -0
  629. package/dist/version-status.cjs +18 -0
  630. package/dist/version-status.cjs.map +1 -0
  631. package/dist/version-status.d.cts +22 -0
  632. package/dist/version-status.d.mts +22 -0
  633. package/dist/version-status.mjs +17 -0
  634. package/dist/version-status.mjs.map +1 -0
  635. package/dist/workspace-catalog.cjs +53 -0
  636. package/dist/workspace-catalog.cjs.map +1 -0
  637. package/dist/workspace-catalog.mjs +51 -0
  638. package/dist/workspace-catalog.mjs.map +1 -0
  639. package/dist/workspace.cjs +237 -0
  640. package/dist/workspace.cjs.map +1 -0
  641. package/dist/workspace.mjs +233 -0
  642. package/dist/workspace.mjs.map +1 -0
  643. package/package.json +179 -27
  644. package/skills/add-a-route/SKILL.md +132 -0
  645. package/skills/api-and-auth/SKILL.md +87 -21
  646. package/skills/api-and-auth/references/middleware.md +1 -1
  647. package/skills/cli-reference/SKILL.md +48 -21
  648. package/skills/code-style/SKILL.md +8 -0
  649. package/skills/dev-workflow/SKILL.md +50 -26
  650. package/skills/extends-config/SKILL.md +31 -19
  651. package/skills/init-upgrade/SKILL.md +29 -16
  652. package/skills/plugin-development/SKILL.md +46 -112
  653. package/skills/plugin-development/references/database.md +82 -0
  654. package/skills/plugin-development/references/request-context.md +67 -0
  655. package/skills/publish-sync/SKILL.md +99 -22
  656. package/skills/registry/SKILL.md +82 -0
  657. package/skills/super-app/SKILL.md +25 -15
  658. package/skills/talk-to-the-app/SKILL.md +138 -0
  659. package/skills/ui-integration/SKILL.md +93 -11
  660. package/dist/cli/db-studio.cjs +0 -131
  661. package/dist/cli/db-studio.cjs.map +0 -1
  662. package/dist/cli/db-studio.mjs +0 -127
  663. package/dist/cli/db-studio.mjs.map +0 -1
  664. package/dist/cli/init.d.cts.map +0 -1
  665. package/dist/cli/init.d.mts.map +0 -1
  666. package/dist/components/dev-view.cjs +0 -309
  667. package/dist/components/dev-view.cjs.map +0 -1
  668. package/dist/components/dev-view.mjs +0 -309
  669. package/dist/components/dev-view.mjs.map +0 -1
  670. package/dist/components/streaming-view.cjs +0 -134
  671. package/dist/components/streaming-view.cjs.map +0 -1
  672. package/dist/components/streaming-view.mjs +0 -132
  673. package/dist/components/streaming-view.mjs.map +0 -1
  674. package/dist/config.d.cts.map +0 -1
  675. package/dist/config.d.mts.map +0 -1
  676. package/dist/contract.d.cts.map +0 -1
  677. package/dist/contract.d.mts.map +0 -1
  678. package/dist/contract.meta.d.cts.map +0 -1
  679. package/dist/contract.meta.d.mts.map +0 -1
  680. package/dist/dag.d.cts.map +0 -1
  681. package/dist/dag.d.mts.map +0 -1
  682. package/dist/db.cjs +0 -81
  683. package/dist/db.cjs.map +0 -1
  684. package/dist/db.d.cts +0 -30
  685. package/dist/db.d.cts.map +0 -1
  686. package/dist/db.d.mts +0 -30
  687. package/dist/db.d.mts.map +0 -1
  688. package/dist/db.mjs +0 -75
  689. package/dist/db.mjs.map +0 -1
  690. package/dist/fastkv.d.cts.map +0 -1
  691. package/dist/fastkv.d.mts.map +0 -1
  692. package/dist/integrity.d.cts.map +0 -1
  693. package/dist/integrity.d.mts.map +0 -1
  694. package/dist/merge.d.cts.map +0 -1
  695. package/dist/merge.d.mts.map +0 -1
  696. package/dist/mf.d.cts.map +0 -1
  697. package/dist/mf.d.mts.map +0 -1
  698. package/dist/plugin.d.cts.map +0 -1
  699. package/dist/plugin.d.mts.map +0 -1
  700. package/dist/service-descriptor.d.cts.map +0 -1
  701. package/dist/service-descriptor.d.mts.map +0 -1
  702. package/dist/types.d.cts.map +0 -1
  703. package/dist/types.d.mts.map +0 -1
  704. package/dist/ui/head.d.cts.map +0 -1
  705. package/dist/ui/head.d.mts.map +0 -1
  706. package/dist/ui/metadata.d.cts.map +0 -1
  707. package/dist/ui/metadata.d.mts.map +0 -1
  708. package/dist/ui/router.d.cts.map +0 -1
  709. package/dist/ui/router.d.mts.map +0 -1
  710. package/dist/ui/runtime.d.cts.map +0 -1
  711. package/dist/ui/runtime.d.mts.map +0 -1
  712. package/dist/ui/types.d.cts.map +0 -1
  713. package/dist/ui/types.d.mts.map +0 -1
@@ -0,0 +1,69 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+
3
+ //#region src/ui/router-error.tsx
4
+ /**
5
+ * Generic router error boundary component — shared by the client and SSR
6
+ * router factories. Dependency-free by design: the framework cannot import
7
+ * the app's UI kit, so primitives are plain markup + semantic tokens.
8
+ */
9
+ function RouterError({ error, reset, messages }) {
10
+ return /* @__PURE__ */ jsx("div", {
11
+ className: "flex min-h-96 flex-1 items-center justify-center bg-background px-4 py-16",
12
+ role: "alert",
13
+ "data-testid": "router-error",
14
+ children: /* @__PURE__ */ jsxs("div", {
15
+ className: "flex max-w-md flex-col items-center gap-6 text-center",
16
+ children: [
17
+ /* @__PURE__ */ jsx("div", {
18
+ className: "flex size-14 items-center justify-center rounded-full bg-destructive-muted text-destructive-muted-foreground",
19
+ children: /* @__PURE__ */ jsx("svg", {
20
+ className: "size-7",
21
+ viewBox: "0 0 256 256",
22
+ fill: "currentColor",
23
+ "aria-hidden": "true",
24
+ children: /* @__PURE__ */ jsx("path", { d: "M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm-8-80V80a8 8 0 0 1 16 0v56a8 8 0 0 1-16 0Zm20 36a12 12 0 1 1-12-12 12 12 0 0 1 12 12Z" })
25
+ })
26
+ }),
27
+ /* @__PURE__ */ jsxs("div", {
28
+ className: "flex flex-col gap-3",
29
+ children: [/* @__PURE__ */ jsx("h1", {
30
+ className: "text-3xl font-semibold text-foreground",
31
+ children: messages?.title ?? "This page didn’t load"
32
+ }), /* @__PURE__ */ jsx("p", {
33
+ className: "text-base text-muted-foreground",
34
+ children: messages?.body ?? "Something went wrong on our side. Try again, or head back home."
35
+ })]
36
+ }),
37
+ /* @__PURE__ */ jsxs("div", {
38
+ className: "flex flex-wrap justify-center gap-3",
39
+ children: [/* @__PURE__ */ jsx("a", {
40
+ href: "/",
41
+ "data-testid": "router-error-home",
42
+ className: "inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground",
43
+ children: messages?.home ?? "Back home"
44
+ }), /* @__PURE__ */ jsx("button", {
45
+ type: "button",
46
+ onClick: () => reset ? reset() : window.location.reload(),
47
+ "data-testid": "router-error-retry",
48
+ className: "inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground",
49
+ children: messages?.retry ?? "Try again"
50
+ })]
51
+ }),
52
+ /* @__PURE__ */ jsxs("details", {
53
+ className: "w-full text-left text-sm text-muted-foreground",
54
+ children: [/* @__PURE__ */ jsx("summary", {
55
+ className: "cursor-pointer text-center",
56
+ children: "Error details"
57
+ }), /* @__PURE__ */ jsx("pre", {
58
+ className: "mt-3 overflow-x-auto whitespace-pre-wrap rounded-lg bg-muted p-4 font-mono text-xs",
59
+ children: error.message
60
+ })]
61
+ })
62
+ ]
63
+ })
64
+ });
65
+ }
66
+
67
+ //#endregion
68
+ export { RouterError };
69
+ //# sourceMappingURL=router-error.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-error.mjs","names":[],"sources":["../../src/ui/router-error.tsx"],"sourcesContent":["/**\n * Generic router error boundary component — shared by the client and SSR\n * router factories. Dependency-free by design: the framework cannot import\n * the app's UI kit, so primitives are plain markup + semantic tokens.\n */\n\nexport function RouterError({\n error,\n reset,\n messages,\n}: {\n error: Error;\n reset?: () => void;\n messages?: { title: string; body: string; home: string; retry: string };\n}) {\n return (\n <div\n className=\"flex min-h-96 flex-1 items-center justify-center bg-background px-4 py-16\"\n role=\"alert\"\n data-testid=\"router-error\"\n >\n <div className=\"flex max-w-md flex-col items-center gap-6 text-center\">\n <div className=\"flex size-14 items-center justify-center rounded-full bg-destructive-muted text-destructive-muted-foreground\">\n <svg className=\"size-7\" viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm-8-80V80a8 8 0 0 1 16 0v56a8 8 0 0 1-16 0Zm20 36a12 12 0 1 1-12-12 12 12 0 0 1 12 12Z\" />\n </svg>\n </div>\n <div className=\"flex flex-col gap-3\">\n <h1 className=\"text-3xl font-semibold text-foreground\">\n {messages?.title ?? \"This page didn’t load\"}\n </h1>\n <p className=\"text-base text-muted-foreground\">\n {messages?.body ?? \"Something went wrong on our side. Try again, or head back home.\"}\n </p>\n </div>\n <div className=\"flex flex-wrap justify-center gap-3\">\n <a\n href=\"/\"\n data-testid=\"router-error-home\"\n className=\"inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground\"\n >\n {messages?.home ?? \"Back home\"}\n </a>\n <button\n type=\"button\"\n onClick={() => (reset ? reset() : window.location.reload())}\n data-testid=\"router-error-retry\"\n className=\"inline-flex h-9 items-center justify-center rounded-md border border-border bg-background px-4 text-sm font-medium text-foreground\"\n >\n {messages?.retry ?? \"Try again\"}\n </button>\n </div>\n <details className=\"w-full text-left text-sm text-muted-foreground\">\n <summary className=\"cursor-pointer text-center\">Error details</summary>\n <pre className=\"mt-3 overflow-x-auto whitespace-pre-wrap rounded-lg bg-muted p-4 font-mono text-xs\">\n {error.message}\n </pre>\n </details>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAMA,SAAgB,YAAY,EAC1B,OACA,OACA,YAKC;CACD,OACE,oBAAC,OAAD;EACE,WAAU;EACV,MAAK;EACL,eAAY;YAEZ,qBAAC,OAAD;GAAK,WAAU;aAAf;IACE,oBAAC,OAAD;KAAK,WAAU;eACb,oBAAC,OAAD;MAAK,WAAU;MAAS,SAAQ;MAAc,MAAK;MAAe,eAAY;gBAC5E,oBAAC,QAAD,EAAM,GAAE,iMAAkM;KACvM;IACF;IACL,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,MAAD;MAAI,WAAU;gBACX,UAAU,SAAS;KAClB,IACJ,oBAAC,KAAD;MAAG,WAAU;gBACV,UAAU,QAAQ;KAClB,EACA;;IACL,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,KAAD;MACE,MAAK;MACL,eAAY;MACZ,WAAU;gBAET,UAAU,QAAQ;KAClB,IACH,oBAAC,UAAD;MACE,MAAK;MACL,eAAgB,QAAQ,MAAM,IAAI,OAAO,SAAS,OAAO;MACzD,eAAY;MACZ,WAAU;gBAET,UAAU,SAAS;KACd,EACL;;IACL,qBAAC,WAAD;KAAS,WAAU;eAAnB,CACE,oBAAC,WAAD;MAAS,WAAU;gBAA6B;KAAsB,IACtE,oBAAC,OAAD;MAAK,WAAU;gBACZ,MAAM;KACJ,EACE;;GACN;;CACF;AAET"}
@@ -0,0 +1,153 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_locale = require('./locale.cjs');
3
+ const require_ui_router = require('./router.cjs');
4
+ const require_ui_api = require('./api.cjs');
5
+ const require_ui_auth = require('./auth.cjs');
6
+ const require_ui_router_defaults = require('./router-defaults.cjs');
7
+ const require_ui_router_error = require('./router-error.cjs');
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ let _tanstack_react_router = require("@tanstack/react-router");
10
+ let _tanstack_react_query = require("@tanstack/react-query");
11
+ let _tanstack_react_router_ssr_server = require("@tanstack/react-router/ssr/server");
12
+
13
+ //#region src/ui/router-server.tsx
14
+ /**
15
+ * SSR router factory — creates request-scoped server routers and server-side
16
+ * API/auth clients per request. Mirrors the client router shape for
17
+ * hydration consistency. The app injects its generated route tree and (for
18
+ * a byte-identical child surface) its error component.
19
+ */
20
+ function createServerRouterModule(options = {}) {
21
+ const defaultRouteTree = options.defaultRouteTree;
22
+ const createRouter = (opts) => {
23
+ const context = opts?.context;
24
+ const queryClient = context?.queryClient ?? require_ui_router_defaults.defaultQueryClient();
25
+ const history = opts?.history ?? (0, _tanstack_react_router.createMemoryHistory)();
26
+ const cspNonce = context?.cspNonce;
27
+ return {
28
+ router: (0, _tanstack_react_router.createRouter)({
29
+ routeTree: opts?.routeTree ?? defaultRouteTree,
30
+ history,
31
+ basepath: opts?.basepath,
32
+ context: {
33
+ queryClient,
34
+ runtimeConfig: context?.runtimeConfig,
35
+ apiClient: context?.apiClient,
36
+ authClient: context?.authClient ?? require_ui_auth.createAuthClient({
37
+ runtimeConfig: context?.runtimeConfig,
38
+ cspNonce: context?.cspNonce
39
+ }),
40
+ session: context?.session,
41
+ cspNonce,
42
+ locale: context?.locale,
43
+ pluginNav: context?.pluginNav
44
+ },
45
+ ...cspNonce ? { ssr: { nonce: cspNonce } } : {},
46
+ defaultPreload: "intent",
47
+ scrollRestoration: true,
48
+ defaultStructuralSharing: true,
49
+ defaultPreloadStaleTime: 0,
50
+ defaultErrorComponent: require_ui_router_error.RouterError,
51
+ defaultOnCatch: (error, errorInfo) => {
52
+ console.error("[SSR] Router error boundary caught:", error, { componentStack: errorInfo.componentStack });
53
+ },
54
+ defaultNotFoundComponent: require_ui_router_defaults.defaultNotFoundComponent,
55
+ defaultPendingComponent: require_ui_router_defaults.defaultPendingComponent,
56
+ defaultPendingMinMs: 0,
57
+ dehydrate: () => {
58
+ if (typeof window === "undefined") return { queryClientState: (0, _tanstack_react_query.dehydrate)(queryClient) };
59
+ return { queryClientState: {} };
60
+ },
61
+ hydrate: (dehydrated) => {
62
+ if (typeof window !== "undefined" && dehydrated?.queryClientState) (0, _tanstack_react_query.hydrate)(queryClient, dehydrated.queryClientState);
63
+ }
64
+ }),
65
+ queryClient
66
+ };
67
+ };
68
+ const buildRouter = options.createRouter ?? createRouter;
69
+ const getRouteHead = async (pathname, context) => {
70
+ const history = (0, _tanstack_react_router.createMemoryHistory)({ initialEntries: [pathname] });
71
+ const queryClient = new _tanstack_react_query.QueryClient();
72
+ const runtimeConfig = context?.runtimeConfig;
73
+ if (!runtimeConfig?.hostUrl || !runtimeConfig.rpcBase) throw new Error("Missing runtime config for route head generation");
74
+ const router = (0, _tanstack_react_router.createRouter)({
75
+ routeTree: context?.routeTree ?? defaultRouteTree,
76
+ history,
77
+ context: {
78
+ queryClient,
79
+ runtimeConfig,
80
+ apiClient: context?.apiClient ?? require_ui_api.createApiClient({
81
+ hostUrl: runtimeConfig.hostUrl,
82
+ rpcBase: runtimeConfig.rpcBase
83
+ }),
84
+ authClient: context?.authClient ?? require_ui_auth.createAuthClient({
85
+ runtimeConfig,
86
+ cspNonce: context?.cspNonce
87
+ }),
88
+ session: context?.session,
89
+ locale: context?.locale
90
+ }
91
+ });
92
+ return require_ui_router.collectHeadData(router);
93
+ };
94
+ const renderToStream = async (request, renderOptions) => {
95
+ const url = new URL(request.url);
96
+ const history = (0, _tanstack_react_router.createMemoryHistory)({ initialEntries: [url.pathname + url.search] });
97
+ let queryClientRef = null;
98
+ const response = await (0, _tanstack_react_router_ssr_server.createRequestHandler)({
99
+ request,
100
+ createRouter: () => {
101
+ const localQueryClient = queryClientRef ?? options.createQueryClient?.() ?? require_ui_router_defaults.defaultQueryClient();
102
+ const built = buildRouter({
103
+ history,
104
+ routeTree: renderOptions.routeTree,
105
+ basepath: renderOptions.basepath,
106
+ context: {
107
+ queryClient: localQueryClient,
108
+ runtimeConfig: renderOptions.runtimeConfig,
109
+ apiClient: renderOptions.apiClient,
110
+ authClient: require_ui_auth.createAuthClient({
111
+ runtimeConfig: renderOptions.runtimeConfig,
112
+ headers: request.headers,
113
+ cspNonce: renderOptions.cspNonce
114
+ }),
115
+ session: renderOptions.session,
116
+ cspNonce: renderOptions.cspNonce,
117
+ pluginNav: renderOptions.pluginNav,
118
+ locale: options.locale ? require_locale.resolveLocale({
119
+ ...options.locale,
120
+ cookie: request.headers.get("cookie") ?? "",
121
+ browserLocales: require_locale.readAcceptLanguage(request.headers.get("accept-language"))
122
+ }) : void 0
123
+ }
124
+ });
125
+ queryClientRef = built.queryClient ?? localQueryClient;
126
+ return built.router;
127
+ }
128
+ })(({ request, responseHeaders, router }) => (0, _tanstack_react_router_ssr_server.renderRouterToStream)({
129
+ request,
130
+ responseHeaders,
131
+ router,
132
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_query.QueryClientProvider, {
133
+ client: queryClientRef,
134
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_router_ssr_server.RouterServer, { router })
135
+ })
136
+ }));
137
+ if (options.locale) response.headers.append("Vary", "Cookie, Accept-Language");
138
+ return {
139
+ stream: response.body,
140
+ statusCode: response.status,
141
+ headers: response.headers
142
+ };
143
+ };
144
+ return {
145
+ createRouter,
146
+ getRouteHead,
147
+ renderToStream
148
+ };
149
+ }
150
+
151
+ //#endregion
152
+ exports.createServerRouterModule = createServerRouterModule;
153
+ //# sourceMappingURL=router-server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-server.cjs","names":["defaultQueryClient","createMemoryHistory","createTanStackRouter","createAuthClient","RouterError","dehydrate","QueryClient","createApiClient","collectHeadData","createRequestHandler","resolveLocale","readAcceptLanguage","renderRouterToStream","QueryClientProvider","RouterServer"],"sources":["../../src/ui/router-server.tsx"],"sourcesContent":["/**\n * SSR router factory — creates request-scoped server routers and server-side\n * API/auth clients per request. Mirrors the client router shape for\n * hydration consistency. The app injects its generated route tree and (for\n * a byte-identical child surface) its error component.\n */\n\nimport { dehydrate, hydrate, QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n type AnyRoute,\n type AnyRouter,\n createMemoryHistory,\n createRouter as createTanStackRouter,\n} from \"@tanstack/react-router\";\nimport {\n createRequestHandler,\n RouterServer,\n renderRouterToStream,\n} from \"@tanstack/react-router/ssr/server\";\nimport { createApiClient } from \"./api\";\nimport { createAuthClient } from \"./auth\";\nimport { type LocaleOptions, readAcceptLanguage, resolveLocale } from \"./locale\";\nimport { collectHeadData } from \"./router\";\nimport {\n defaultNotFoundComponent,\n defaultPendingComponent,\n defaultQueryClient,\n} from \"./router-defaults\";\nimport { RouterError } from \"./router-error\";\nimport type {\n AppRouterFactory,\n CreateRouterOptions,\n HeadData,\n RenderOptionsWithApi,\n RenderResult,\n RouterContextWithApi,\n} from \"./types\";\n\nexport interface ServerRouterModuleOptions<TRouteTree extends AnyRoute = AnyRoute> {\n /** The app's generated route tree — the core-only fallback when no composed tree is passed. */\n defaultRouteTree?: TRouteTree;\n /**\n * The app's authored router factory — SSR parity: each request's router is\n * minted through the same factory the client hydrates with, so notFound/\n * pending/error options match. Absent, the framework's own factory runs.\n */\n createRouter?: AppRouterFactory;\n /** The app's query client factory (staleTime, gcTime, …) — SSR parity with the client hydrator. Absent, the framework default. */\n createQueryClient?: () => QueryClient;\n /** Locale negotiation for SSR — resolves the request-scoped locale into router context. */\n locale?: LocaleOptions;\n}\n\ntype ServerRouterOptions<TRouteTree extends AnyRoute> = CreateRouterOptions & {\n context?: Partial<RouterContextWithApi> & { pluginNav?: unknown };\n routeTree?: TRouteTree;\n};\n\nexport function createServerRouterModule<TRouteTree extends AnyRoute = AnyRoute>(\n options: ServerRouterModuleOptions<TRouteTree> = {},\n) {\n const defaultRouteTree = options.defaultRouteTree;\n\n const createRouter = (\n opts?: ServerRouterOptions<TRouteTree>,\n ): { router: AnyRouter; queryClient: QueryClient } => {\n const context = opts?.context;\n const queryClient = context?.queryClient ?? defaultQueryClient();\n\n const history = opts?.history ?? createMemoryHistory();\n\n const cspNonce = context?.cspNonce;\n // RouterCore's `in out` type parameters reject the framework's loose\n // AnyRouter contract when the tree is typed as the wide AnyRoute — the\n // runtime instance genuinely satisfies it, so the boundary casts once.\n const router = createTanStackRouter({\n routeTree: (opts?.routeTree ?? defaultRouteTree) as TRouteTree,\n history,\n basepath: opts?.basepath,\n context: {\n queryClient,\n runtimeConfig: context?.runtimeConfig,\n apiClient: context?.apiClient,\n authClient:\n context?.authClient ??\n createAuthClient({\n runtimeConfig: context?.runtimeConfig,\n cspNonce: context?.cspNonce,\n }),\n session: context?.session,\n cspNonce,\n locale: context?.locale,\n pluginNav: context?.pluginNav,\n },\n ...(cspNonce ? { ssr: { nonce: cspNonce } } : {}),\n defaultPreload: \"intent\",\n scrollRestoration: true,\n defaultStructuralSharing: true,\n defaultPreloadStaleTime: 0,\n defaultErrorComponent: RouterError,\n defaultOnCatch: (error, errorInfo) => {\n console.error(\"[SSR] Router error boundary caught:\", error, {\n componentStack: errorInfo.componentStack,\n });\n },\n defaultNotFoundComponent,\n defaultPendingComponent,\n defaultPendingMinMs: 0,\n dehydrate: () => {\n if (typeof window === \"undefined\") {\n return { queryClientState: dehydrate(queryClient) };\n }\n\n return { queryClientState: {} };\n },\n hydrate: (dehydrated: { queryClientState?: unknown }) => {\n if (typeof window !== \"undefined\" && dehydrated?.queryClientState) {\n hydrate(queryClient, dehydrated.queryClientState);\n }\n },\n });\n\n return { router, queryClient };\n };\n\n // SSR parity seam: the app's authored factory (client and server mint\n // through the same code) or the framework's own.\n const buildRouter = options.createRouter ?? createRouter;\n\n const getRouteHead = async (\n pathname: string,\n context?: Partial<RouterContextWithApi> & { routeTree?: TRouteTree },\n ): Promise<HeadData> => {\n const history = createMemoryHistory({ initialEntries: [pathname] });\n const queryClient = new QueryClient();\n const runtimeConfig = context?.runtimeConfig;\n if (!runtimeConfig?.hostUrl || !runtimeConfig.rpcBase) {\n throw new Error(\"Missing runtime config for route head generation\");\n }\n\n const router = createTanStackRouter({\n routeTree: context?.routeTree ?? defaultRouteTree,\n history,\n context: {\n queryClient,\n runtimeConfig,\n apiClient:\n context?.apiClient ??\n createApiClient({ hostUrl: runtimeConfig.hostUrl, rpcBase: runtimeConfig.rpcBase }),\n authClient:\n context?.authClient ?? createAuthClient({ runtimeConfig, cspNonce: context?.cspNonce }),\n session: context?.session,\n locale: context?.locale,\n },\n });\n\n return collectHeadData(router);\n };\n\n const renderToStream = async (\n request: Request,\n renderOptions: RenderOptionsWithApi,\n ): Promise<RenderResult> => {\n const url = new URL(request.url);\n const history = createMemoryHistory({ initialEntries: [url.pathname + url.search] });\n let queryClientRef: QueryClient | null = null;\n\n const handler = createRequestHandler({\n request,\n createRouter: () => {\n const localQueryClient =\n queryClientRef ?? options.createQueryClient?.() ?? defaultQueryClient();\n const built = buildRouter({\n history,\n routeTree: renderOptions.routeTree as TRouteTree,\n basepath: renderOptions.basepath,\n context: {\n queryClient: localQueryClient,\n runtimeConfig: renderOptions.runtimeConfig,\n apiClient: renderOptions.apiClient,\n authClient: createAuthClient({\n runtimeConfig: renderOptions.runtimeConfig,\n headers: request.headers,\n cspNonce: renderOptions.cspNonce,\n }),\n session: renderOptions.session,\n cspNonce: renderOptions.cspNonce,\n pluginNav: renderOptions.pluginNav,\n locale: options.locale\n ? resolveLocale({\n ...options.locale,\n cookie: request.headers.get(\"cookie\") ?? \"\",\n browserLocales: readAcceptLanguage(request.headers.get(\"accept-language\")),\n })\n : undefined,\n },\n });\n queryClientRef = built.queryClient ?? localQueryClient;\n return built.router;\n },\n });\n\n const response = await handler(({ request, responseHeaders, router }) =>\n renderRouterToStream({\n request,\n responseHeaders,\n router,\n children: (\n <QueryClientProvider client={queryClientRef!}>\n <RouterServer router={router} />\n </QueryClientProvider>\n ),\n }),\n );\n\n if (options.locale) response.headers.append(\"Vary\", \"Cookie, Accept-Language\");\n\n return {\n stream: response.body!,\n statusCode: response.status,\n headers: response.headers,\n } satisfies RenderResult;\n };\n\n return {\n createRouter,\n getRouteHead,\n renderToStream,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { AppRouterFactory, CreateRouterOptions, HeadData, RenderOptionsWithApi, RenderResult, RouterContextWithApi } from "./types.cjs";
2
+ import { LocaleOptions } from "./locale.cjs";
3
+ import { QueryClient } from "@tanstack/react-query";
4
+ import { AnyRoute, AnyRouter } from "@tanstack/react-router";
5
+ //#region src/ui/router-server.d.ts
6
+ interface ServerRouterModuleOptions<TRouteTree extends AnyRoute = AnyRoute> {
7
+ /** The app's generated route tree — the core-only fallback when no composed tree is passed. */
8
+ defaultRouteTree?: TRouteTree;
9
+ /**
10
+ * The app's authored router factory — SSR parity: each request's router is
11
+ * minted through the same factory the client hydrates with, so notFound/
12
+ * pending/error options match. Absent, the framework's own factory runs.
13
+ */
14
+ createRouter?: AppRouterFactory;
15
+ /** The app's query client factory (staleTime, gcTime, …) — SSR parity with the client hydrator. Absent, the framework default. */
16
+ createQueryClient?: () => QueryClient;
17
+ /** Locale negotiation for SSR — resolves the request-scoped locale into router context. */
18
+ locale?: LocaleOptions;
19
+ }
20
+ type ServerRouterOptions<TRouteTree extends AnyRoute> = CreateRouterOptions & {
21
+ context?: Partial<RouterContextWithApi> & {
22
+ pluginNav?: unknown;
23
+ };
24
+ routeTree?: TRouteTree;
25
+ };
26
+ declare function createServerRouterModule<TRouteTree extends AnyRoute = AnyRoute>(options?: ServerRouterModuleOptions<TRouteTree>): {
27
+ createRouter: (opts?: ServerRouterOptions<TRouteTree>) => {
28
+ router: AnyRouter;
29
+ queryClient: QueryClient;
30
+ };
31
+ getRouteHead: (pathname: string, context?: Partial<RouterContextWithApi> & {
32
+ routeTree?: TRouteTree;
33
+ }) => Promise<HeadData>;
34
+ renderToStream: (request: Request, renderOptions: RenderOptionsWithApi) => Promise<RenderResult>;
35
+ };
36
+ //#endregion
37
+ export { ServerRouterModuleOptions, createServerRouterModule };
38
+ //# sourceMappingURL=router-server.d.cts.map
@@ -0,0 +1,38 @@
1
+ import { AppRouterFactory, CreateRouterOptions, HeadData, RenderOptionsWithApi, RenderResult, RouterContextWithApi } from "./types.mjs";
2
+ import { LocaleOptions } from "./locale.mjs";
3
+ import { AnyRoute, AnyRouter } from "@tanstack/react-router";
4
+ import { QueryClient } from "@tanstack/react-query";
5
+ //#region src/ui/router-server.d.ts
6
+ interface ServerRouterModuleOptions<TRouteTree extends AnyRoute = AnyRoute> {
7
+ /** The app's generated route tree — the core-only fallback when no composed tree is passed. */
8
+ defaultRouteTree?: TRouteTree;
9
+ /**
10
+ * The app's authored router factory — SSR parity: each request's router is
11
+ * minted through the same factory the client hydrates with, so notFound/
12
+ * pending/error options match. Absent, the framework's own factory runs.
13
+ */
14
+ createRouter?: AppRouterFactory;
15
+ /** The app's query client factory (staleTime, gcTime, …) — SSR parity with the client hydrator. Absent, the framework default. */
16
+ createQueryClient?: () => QueryClient;
17
+ /** Locale negotiation for SSR — resolves the request-scoped locale into router context. */
18
+ locale?: LocaleOptions;
19
+ }
20
+ type ServerRouterOptions<TRouteTree extends AnyRoute> = CreateRouterOptions & {
21
+ context?: Partial<RouterContextWithApi> & {
22
+ pluginNav?: unknown;
23
+ };
24
+ routeTree?: TRouteTree;
25
+ };
26
+ declare function createServerRouterModule<TRouteTree extends AnyRoute = AnyRoute>(options?: ServerRouterModuleOptions<TRouteTree>): {
27
+ createRouter: (opts?: ServerRouterOptions<TRouteTree>) => {
28
+ router: AnyRouter;
29
+ queryClient: QueryClient;
30
+ };
31
+ getRouteHead: (pathname: string, context?: Partial<RouterContextWithApi> & {
32
+ routeTree?: TRouteTree;
33
+ }) => Promise<HeadData>;
34
+ renderToStream: (request: Request, renderOptions: RenderOptionsWithApi) => Promise<RenderResult>;
35
+ };
36
+ //#endregion
37
+ export { ServerRouterModuleOptions, createServerRouterModule };
38
+ //# sourceMappingURL=router-server.d.mts.map
@@ -0,0 +1,152 @@
1
+ import { readAcceptLanguage, resolveLocale } from "./locale.mjs";
2
+ import { collectHeadData } from "./router.mjs";
3
+ import { createApiClient } from "./api.mjs";
4
+ import { createAuthClient } from "./auth.mjs";
5
+ import { defaultNotFoundComponent, defaultPendingComponent, defaultQueryClient } from "./router-defaults.mjs";
6
+ import { RouterError } from "./router-error.mjs";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import { createMemoryHistory, createRouter } from "@tanstack/react-router";
9
+ import { QueryClient, QueryClientProvider, dehydrate, hydrate } from "@tanstack/react-query";
10
+ import { RouterServer, createRequestHandler, renderRouterToStream } from "@tanstack/react-router/ssr/server";
11
+
12
+ //#region src/ui/router-server.tsx
13
+ /**
14
+ * SSR router factory — creates request-scoped server routers and server-side
15
+ * API/auth clients per request. Mirrors the client router shape for
16
+ * hydration consistency. The app injects its generated route tree and (for
17
+ * a byte-identical child surface) its error component.
18
+ */
19
+ function createServerRouterModule(options = {}) {
20
+ const defaultRouteTree = options.defaultRouteTree;
21
+ const createRouter$1 = (opts) => {
22
+ const context = opts?.context;
23
+ const queryClient = context?.queryClient ?? defaultQueryClient();
24
+ const history = opts?.history ?? createMemoryHistory();
25
+ const cspNonce = context?.cspNonce;
26
+ return {
27
+ router: createRouter({
28
+ routeTree: opts?.routeTree ?? defaultRouteTree,
29
+ history,
30
+ basepath: opts?.basepath,
31
+ context: {
32
+ queryClient,
33
+ runtimeConfig: context?.runtimeConfig,
34
+ apiClient: context?.apiClient,
35
+ authClient: context?.authClient ?? createAuthClient({
36
+ runtimeConfig: context?.runtimeConfig,
37
+ cspNonce: context?.cspNonce
38
+ }),
39
+ session: context?.session,
40
+ cspNonce,
41
+ locale: context?.locale,
42
+ pluginNav: context?.pluginNav
43
+ },
44
+ ...cspNonce ? { ssr: { nonce: cspNonce } } : {},
45
+ defaultPreload: "intent",
46
+ scrollRestoration: true,
47
+ defaultStructuralSharing: true,
48
+ defaultPreloadStaleTime: 0,
49
+ defaultErrorComponent: RouterError,
50
+ defaultOnCatch: (error, errorInfo) => {
51
+ console.error("[SSR] Router error boundary caught:", error, { componentStack: errorInfo.componentStack });
52
+ },
53
+ defaultNotFoundComponent,
54
+ defaultPendingComponent,
55
+ defaultPendingMinMs: 0,
56
+ dehydrate: () => {
57
+ if (typeof window === "undefined") return { queryClientState: dehydrate(queryClient) };
58
+ return { queryClientState: {} };
59
+ },
60
+ hydrate: (dehydrated) => {
61
+ if (typeof window !== "undefined" && dehydrated?.queryClientState) hydrate(queryClient, dehydrated.queryClientState);
62
+ }
63
+ }),
64
+ queryClient
65
+ };
66
+ };
67
+ const buildRouter = options.createRouter ?? createRouter$1;
68
+ const getRouteHead = async (pathname, context) => {
69
+ const history = createMemoryHistory({ initialEntries: [pathname] });
70
+ const queryClient = new QueryClient();
71
+ const runtimeConfig = context?.runtimeConfig;
72
+ if (!runtimeConfig?.hostUrl || !runtimeConfig.rpcBase) throw new Error("Missing runtime config for route head generation");
73
+ const router = createRouter({
74
+ routeTree: context?.routeTree ?? defaultRouteTree,
75
+ history,
76
+ context: {
77
+ queryClient,
78
+ runtimeConfig,
79
+ apiClient: context?.apiClient ?? createApiClient({
80
+ hostUrl: runtimeConfig.hostUrl,
81
+ rpcBase: runtimeConfig.rpcBase
82
+ }),
83
+ authClient: context?.authClient ?? createAuthClient({
84
+ runtimeConfig,
85
+ cspNonce: context?.cspNonce
86
+ }),
87
+ session: context?.session,
88
+ locale: context?.locale
89
+ }
90
+ });
91
+ return collectHeadData(router);
92
+ };
93
+ const renderToStream = async (request, renderOptions) => {
94
+ const url = new URL(request.url);
95
+ const history = createMemoryHistory({ initialEntries: [url.pathname + url.search] });
96
+ let queryClientRef = null;
97
+ const response = await createRequestHandler({
98
+ request,
99
+ createRouter: () => {
100
+ const localQueryClient = queryClientRef ?? options.createQueryClient?.() ?? defaultQueryClient();
101
+ const built = buildRouter({
102
+ history,
103
+ routeTree: renderOptions.routeTree,
104
+ basepath: renderOptions.basepath,
105
+ context: {
106
+ queryClient: localQueryClient,
107
+ runtimeConfig: renderOptions.runtimeConfig,
108
+ apiClient: renderOptions.apiClient,
109
+ authClient: createAuthClient({
110
+ runtimeConfig: renderOptions.runtimeConfig,
111
+ headers: request.headers,
112
+ cspNonce: renderOptions.cspNonce
113
+ }),
114
+ session: renderOptions.session,
115
+ cspNonce: renderOptions.cspNonce,
116
+ pluginNav: renderOptions.pluginNav,
117
+ locale: options.locale ? resolveLocale({
118
+ ...options.locale,
119
+ cookie: request.headers.get("cookie") ?? "",
120
+ browserLocales: readAcceptLanguage(request.headers.get("accept-language"))
121
+ }) : void 0
122
+ }
123
+ });
124
+ queryClientRef = built.queryClient ?? localQueryClient;
125
+ return built.router;
126
+ }
127
+ })(({ request, responseHeaders, router }) => renderRouterToStream({
128
+ request,
129
+ responseHeaders,
130
+ router,
131
+ children: /* @__PURE__ */ jsx(QueryClientProvider, {
132
+ client: queryClientRef,
133
+ children: /* @__PURE__ */ jsx(RouterServer, { router })
134
+ })
135
+ }));
136
+ if (options.locale) response.headers.append("Vary", "Cookie, Accept-Language");
137
+ return {
138
+ stream: response.body,
139
+ statusCode: response.status,
140
+ headers: response.headers
141
+ };
142
+ };
143
+ return {
144
+ createRouter: createRouter$1,
145
+ getRouteHead,
146
+ renderToStream
147
+ };
148
+ }
149
+
150
+ //#endregion
151
+ export { createServerRouterModule };
152
+ //# sourceMappingURL=router-server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-server.mjs","names":["createRouter","createTanStackRouter"],"sources":["../../src/ui/router-server.tsx"],"sourcesContent":["/**\n * SSR router factory — creates request-scoped server routers and server-side\n * API/auth clients per request. Mirrors the client router shape for\n * hydration consistency. The app injects its generated route tree and (for\n * a byte-identical child surface) its error component.\n */\n\nimport { dehydrate, hydrate, QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport {\n type AnyRoute,\n type AnyRouter,\n createMemoryHistory,\n createRouter as createTanStackRouter,\n} from \"@tanstack/react-router\";\nimport {\n createRequestHandler,\n RouterServer,\n renderRouterToStream,\n} from \"@tanstack/react-router/ssr/server\";\nimport { createApiClient } from \"./api\";\nimport { createAuthClient } from \"./auth\";\nimport { type LocaleOptions, readAcceptLanguage, resolveLocale } from \"./locale\";\nimport { collectHeadData } from \"./router\";\nimport {\n defaultNotFoundComponent,\n defaultPendingComponent,\n defaultQueryClient,\n} from \"./router-defaults\";\nimport { RouterError } from \"./router-error\";\nimport type {\n AppRouterFactory,\n CreateRouterOptions,\n HeadData,\n RenderOptionsWithApi,\n RenderResult,\n RouterContextWithApi,\n} from \"./types\";\n\nexport interface ServerRouterModuleOptions<TRouteTree extends AnyRoute = AnyRoute> {\n /** The app's generated route tree — the core-only fallback when no composed tree is passed. */\n defaultRouteTree?: TRouteTree;\n /**\n * The app's authored router factory — SSR parity: each request's router is\n * minted through the same factory the client hydrates with, so notFound/\n * pending/error options match. Absent, the framework's own factory runs.\n */\n createRouter?: AppRouterFactory;\n /** The app's query client factory (staleTime, gcTime, …) — SSR parity with the client hydrator. Absent, the framework default. */\n createQueryClient?: () => QueryClient;\n /** Locale negotiation for SSR — resolves the request-scoped locale into router context. */\n locale?: LocaleOptions;\n}\n\ntype ServerRouterOptions<TRouteTree extends AnyRoute> = CreateRouterOptions & {\n context?: Partial<RouterContextWithApi> & { pluginNav?: unknown };\n routeTree?: TRouteTree;\n};\n\nexport function createServerRouterModule<TRouteTree extends AnyRoute = AnyRoute>(\n options: ServerRouterModuleOptions<TRouteTree> = {},\n) {\n const defaultRouteTree = options.defaultRouteTree;\n\n const createRouter = (\n opts?: ServerRouterOptions<TRouteTree>,\n ): { router: AnyRouter; queryClient: QueryClient } => {\n const context = opts?.context;\n const queryClient = context?.queryClient ?? defaultQueryClient();\n\n const history = opts?.history ?? createMemoryHistory();\n\n const cspNonce = context?.cspNonce;\n // RouterCore's `in out` type parameters reject the framework's loose\n // AnyRouter contract when the tree is typed as the wide AnyRoute — the\n // runtime instance genuinely satisfies it, so the boundary casts once.\n const router = createTanStackRouter({\n routeTree: (opts?.routeTree ?? defaultRouteTree) as TRouteTree,\n history,\n basepath: opts?.basepath,\n context: {\n queryClient,\n runtimeConfig: context?.runtimeConfig,\n apiClient: context?.apiClient,\n authClient:\n context?.authClient ??\n createAuthClient({\n runtimeConfig: context?.runtimeConfig,\n cspNonce: context?.cspNonce,\n }),\n session: context?.session,\n cspNonce,\n locale: context?.locale,\n pluginNav: context?.pluginNav,\n },\n ...(cspNonce ? { ssr: { nonce: cspNonce } } : {}),\n defaultPreload: \"intent\",\n scrollRestoration: true,\n defaultStructuralSharing: true,\n defaultPreloadStaleTime: 0,\n defaultErrorComponent: RouterError,\n defaultOnCatch: (error, errorInfo) => {\n console.error(\"[SSR] Router error boundary caught:\", error, {\n componentStack: errorInfo.componentStack,\n });\n },\n defaultNotFoundComponent,\n defaultPendingComponent,\n defaultPendingMinMs: 0,\n dehydrate: () => {\n if (typeof window === \"undefined\") {\n return { queryClientState: dehydrate(queryClient) };\n }\n\n return { queryClientState: {} };\n },\n hydrate: (dehydrated: { queryClientState?: unknown }) => {\n if (typeof window !== \"undefined\" && dehydrated?.queryClientState) {\n hydrate(queryClient, dehydrated.queryClientState);\n }\n },\n });\n\n return { router, queryClient };\n };\n\n // SSR parity seam: the app's authored factory (client and server mint\n // through the same code) or the framework's own.\n const buildRouter = options.createRouter ?? createRouter;\n\n const getRouteHead = async (\n pathname: string,\n context?: Partial<RouterContextWithApi> & { routeTree?: TRouteTree },\n ): Promise<HeadData> => {\n const history = createMemoryHistory({ initialEntries: [pathname] });\n const queryClient = new QueryClient();\n const runtimeConfig = context?.runtimeConfig;\n if (!runtimeConfig?.hostUrl || !runtimeConfig.rpcBase) {\n throw new Error(\"Missing runtime config for route head generation\");\n }\n\n const router = createTanStackRouter({\n routeTree: context?.routeTree ?? defaultRouteTree,\n history,\n context: {\n queryClient,\n runtimeConfig,\n apiClient:\n context?.apiClient ??\n createApiClient({ hostUrl: runtimeConfig.hostUrl, rpcBase: runtimeConfig.rpcBase }),\n authClient:\n context?.authClient ?? createAuthClient({ runtimeConfig, cspNonce: context?.cspNonce }),\n session: context?.session,\n locale: context?.locale,\n },\n });\n\n return collectHeadData(router);\n };\n\n const renderToStream = async (\n request: Request,\n renderOptions: RenderOptionsWithApi,\n ): Promise<RenderResult> => {\n const url = new URL(request.url);\n const history = createMemoryHistory({ initialEntries: [url.pathname + url.search] });\n let queryClientRef: QueryClient | null = null;\n\n const handler = createRequestHandler({\n request,\n createRouter: () => {\n const localQueryClient =\n queryClientRef ?? options.createQueryClient?.() ?? defaultQueryClient();\n const built = buildRouter({\n history,\n routeTree: renderOptions.routeTree as TRouteTree,\n basepath: renderOptions.basepath,\n context: {\n queryClient: localQueryClient,\n runtimeConfig: renderOptions.runtimeConfig,\n apiClient: renderOptions.apiClient,\n authClient: createAuthClient({\n runtimeConfig: renderOptions.runtimeConfig,\n headers: request.headers,\n cspNonce: renderOptions.cspNonce,\n }),\n session: renderOptions.session,\n cspNonce: renderOptions.cspNonce,\n pluginNav: renderOptions.pluginNav,\n locale: options.locale\n ? resolveLocale({\n ...options.locale,\n cookie: request.headers.get(\"cookie\") ?? \"\",\n browserLocales: readAcceptLanguage(request.headers.get(\"accept-language\")),\n })\n : undefined,\n },\n });\n queryClientRef = built.queryClient ?? localQueryClient;\n return built.router;\n },\n });\n\n const response = await handler(({ request, responseHeaders, router }) =>\n renderRouterToStream({\n request,\n responseHeaders,\n router,\n children: (\n <QueryClientProvider client={queryClientRef!}>\n <RouterServer router={router} />\n </QueryClientProvider>\n ),\n }),\n );\n\n if (options.locale) response.headers.append(\"Vary\", \"Cookie, Accept-Language\");\n\n return {\n stream: response.body!,\n statusCode: response.status,\n headers: response.headers,\n } satisfies RenderResult;\n };\n\n return {\n createRouter,\n getRouteHead,\n renderToStream,\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
-
3
2
  //#region src/ui/router.ts
4
3
  function getMetaKey(meta) {
5
4
  if (!meta) return "null";
@@ -25,21 +24,10 @@ async function collectHeadData(router) {
25
24
  const linkMap = /* @__PURE__ */ new Map();
26
25
  const scriptMap = /* @__PURE__ */ new Map();
27
26
  for (const match of router.state.matches) {
28
- const headFn = (router.routesById?.[match.routeId] ?? match.route)?.options?.head;
29
- if (!headFn) continue;
30
- try {
31
- const headResult = await headFn({
32
- loaderData: match.loaderData,
33
- matches: router.state.matches,
34
- match,
35
- params: match.params
36
- });
37
- if (headResult?.meta) for (const meta of headResult.meta) metaMap.set(getMetaKey(meta), meta);
38
- if (headResult?.links) for (const link of headResult.links) linkMap.set(getLinkKey(link), link);
39
- if (headResult?.scripts) for (const script of headResult.scripts) scriptMap.set(getScriptKey(script), script);
40
- } catch (error) {
41
- console.warn(`[collectHeadData] head() failed for ${match.routeId}:`, error);
42
- }
27
+ const matchData = match;
28
+ if (matchData.meta) for (const meta of matchData.meta) metaMap.set(getMetaKey(meta), meta);
29
+ if (matchData.links) for (const link of matchData.links) linkMap.set(getLinkKey(link), link);
30
+ if (matchData.headScripts) for (const script of matchData.headScripts) scriptMap.set(getScriptKey(script), script);
43
31
  }
44
32
  return {
45
33
  meta: [...metaMap.values()],
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs","names":[],"sources":["../../src/ui/router.ts"],"sourcesContent":["import type { AnyRouter } from \"@tanstack/react-router\";\nimport type { HeadData, HeadLink, HeadMeta, HeadScript } from \"./types\";\n\nexport function getMetaKey(meta: HeadMeta): string {\n if (!meta) return \"null\";\n if (\"title\" in meta) return \"title\";\n if (\"charSet\" in meta) return \"charSet\";\n if (\"name\" in meta) return `name:${(meta as { name: string }).name}`;\n if (\"property\" in meta) {\n return `property:${(meta as { property: string }).property}`;\n }\n if (\"httpEquiv\" in meta) {\n return `httpEquiv:${(meta as { httpEquiv: string }).httpEquiv}`;\n }\n return JSON.stringify(meta);\n}\n\nexport function getLinkKey(link: HeadLink): string {\n const rel = (link as { rel?: string }).rel ?? \"\";\n const href = (link as { href?: string }).href ?? \"\";\n return `${rel}:${href}`;\n}\n\nexport function getScriptKey(script: HeadScript): string {\n if (!script) return \"null\";\n if (\"src\" in script && script.src) return `src:${script.src}`;\n if (\"children\" in script && script.children) {\n return `children:${typeof script.children === \"string\" ? script.children : JSON.stringify(script.children)}`;\n }\n return JSON.stringify(script);\n}\n\nexport async function collectHeadData(router: AnyRouter): Promise<HeadData> {\n await router.load();\n\n const metaMap = new Map<string, HeadMeta>();\n const linkMap = new Map<string, HeadLink>();\n const scriptMap = new Map<string, HeadScript>();\n\n for (const match of router.state.matches) {\n const route =\n (\n router as AnyRouter & {\n routesById?: Record<string, { options?: { head?: (...args: unknown[]) => unknown } }>;\n }\n ).routesById?.[(match as { routeId: string }).routeId] ??\n (match as { route?: { options?: { head?: (...args: unknown[]) => unknown } } }).route;\n const headFn = route?.options?.head;\n if (!headFn) continue;\n\n try {\n const headResult = (await headFn({\n loaderData: match.loaderData,\n matches: router.state.matches,\n match,\n params: match.params,\n })) as {\n meta?: HeadMeta[];\n links?: HeadLink[];\n scripts?: HeadScript[];\n };\n\n if (headResult?.meta) {\n for (const meta of headResult.meta) {\n metaMap.set(getMetaKey(meta), meta);\n }\n }\n if (headResult?.links) {\n for (const link of headResult.links) {\n linkMap.set(getLinkKey(link), link);\n }\n }\n if (headResult?.scripts) {\n for (const script of headResult.scripts) {\n scriptMap.set(getScriptKey(script), script);\n }\n }\n } catch (error) {\n console.warn(`[collectHeadData] head() failed for ${match.routeId}:`, error);\n }\n }\n\n return {\n meta: [...metaMap.values()],\n links: [...linkMap.values()],\n scripts: [...scriptMap.values()],\n };\n}\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction serializeMeta(meta: HeadMeta): string {\n if (!meta) return \"\";\n if (\"charSet\" in meta) return `<meta charset=\"${escapeHtml(String(meta.charSet))}\">`;\n if (\"title\" in meta) return `<title>${escapeHtml(String(meta.title))}</title>`;\n const attrs = Object.entries(meta as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<meta ${attrs}>`;\n}\n\nfunction serializeLink(link: HeadLink): string {\n if (!link) return \"\";\n const attrs = Object.entries(link as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<link ${attrs}>`;\n}\n\nfunction serializeScript(script: HeadScript, cspNonce?: string): string {\n if (!script) return \"\";\n if (\"src\" in script && script.src) {\n const attrs: string[] = [`src=\"${escapeHtml(script.src)}\"`];\n if (script.integrity) attrs.push(`integrity=\"${escapeHtml(script.integrity)}\"`);\n if (script.crossOrigin) attrs.push(`crossorigin=\"${escapeHtml(script.crossOrigin)}\"`);\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n return `<script ${attrs.join(\" \")}></script>`;\n }\n if (\"children\" in script) {\n const attrs: string[] = [];\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n const content =\n typeof script.children === \"string\" ? script.children : JSON.stringify(script.children);\n return `<script${attrs.length ? ` ${attrs.join(\" \")}` : \"\"}>${content}</script>`;\n }\n return \"\";\n}\n\nexport function serializeHeadData(\n headData: HeadData,\n cspNonce?: string,\n): { metaHtml: string; linkHtml: string; scriptHtml: string } {\n return {\n metaHtml: headData.meta\n .filter(Boolean)\n .map((m) => serializeMeta(m))\n .join(\"\\n\"),\n linkHtml: headData.links\n .filter(Boolean)\n .map((l) => serializeLink(l))\n .join(\"\\n\"),\n scriptHtml: headData.scripts\n .filter(Boolean)\n .map((s) => serializeScript(s, cspNonce))\n .join(\"\\n\"),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs","names":[],"sources":["../../src/ui/router.ts"],"sourcesContent":["import type { AnyRouter } from \"@tanstack/react-router\";\nimport type { HeadData, HeadLink, HeadMeta, HeadScript } from \"./types\";\n\nexport function getMetaKey(meta: HeadMeta): string {\n if (!meta) return \"null\";\n if (\"title\" in meta) return \"title\";\n if (\"charSet\" in meta) return \"charSet\";\n if (\"name\" in meta) return `name:${(meta as { name: string }).name}`;\n if (\"property\" in meta) {\n return `property:${(meta as { property: string }).property}`;\n }\n if (\"httpEquiv\" in meta) {\n return `httpEquiv:${(meta as { httpEquiv: string }).httpEquiv}`;\n }\n return JSON.stringify(meta);\n}\n\nexport function getLinkKey(link: HeadLink): string {\n const rel = (link as { rel?: string }).rel ?? \"\";\n const href = (link as { href?: string }).href ?? \"\";\n return `${rel}:${href}`;\n}\n\nexport function getScriptKey(script: HeadScript): string {\n if (!script) return \"null\";\n if (\"src\" in script && script.src) return `src:${script.src}`;\n if (\"children\" in script && script.children) {\n return `children:${typeof script.children === \"string\" ? script.children : JSON.stringify(script.children)}`;\n }\n return JSON.stringify(script);\n}\n\nexport async function collectHeadData(router: AnyRouter): Promise<HeadData> {\n await router.load();\n\n const metaMap = new Map<string, HeadMeta>();\n const linkMap = new Map<string, HeadLink>();\n const scriptMap = new Map<string, HeadScript>();\n\n for (const match of router.state.matches) {\n const matchData = match as {\n meta?: HeadMeta[];\n links?: HeadLink[];\n headScripts?: HeadScript[];\n };\n\n if (matchData.meta) {\n for (const meta of matchData.meta) {\n metaMap.set(getMetaKey(meta), meta);\n }\n }\n if (matchData.links) {\n for (const link of matchData.links) {\n linkMap.set(getLinkKey(link), link);\n }\n }\n if (matchData.headScripts) {\n for (const script of matchData.headScripts) {\n scriptMap.set(getScriptKey(script), script);\n }\n }\n }\n\n return {\n meta: [...metaMap.values()],\n links: [...linkMap.values()],\n scripts: [...scriptMap.values()],\n };\n}\n\nfunction escapeHtml(s: string): string {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nfunction serializeMeta(meta: HeadMeta): string {\n if (!meta) return \"\";\n if (\"charSet\" in meta) return `<meta charset=\"${escapeHtml(String(meta.charSet))}\">`;\n if (\"title\" in meta) return `<title>${escapeHtml(String(meta.title))}</title>`;\n const attrs = Object.entries(meta as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<meta ${attrs}>`;\n}\n\nfunction serializeLink(link: HeadLink): string {\n if (!link) return \"\";\n const attrs = Object.entries(link as Record<string, unknown>)\n .filter(([, v]) => v != null)\n .map(([k, v]) => `${k}=\"${escapeHtml(String(v))}\"`)\n .join(\" \");\n return `<link ${attrs}>`;\n}\n\nfunction serializeScript(script: HeadScript, cspNonce?: string): string {\n if (!script) return \"\";\n if (\"src\" in script && script.src) {\n const attrs: string[] = [`src=\"${escapeHtml(script.src)}\"`];\n if (script.integrity) attrs.push(`integrity=\"${escapeHtml(script.integrity)}\"`);\n if (script.crossOrigin) attrs.push(`crossorigin=\"${escapeHtml(script.crossOrigin)}\"`);\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n return `<script ${attrs.join(\" \")}></script>`;\n }\n if (\"children\" in script) {\n const attrs: string[] = [];\n if (script.type) attrs.push(`type=\"${escapeHtml(script.type)}\"`);\n if (cspNonce) attrs.push(`nonce=\"${cspNonce}\"`);\n const content =\n typeof script.children === \"string\" ? script.children : JSON.stringify(script.children);\n return `<script${attrs.length ? ` ${attrs.join(\" \")}` : \"\"}>${content}</script>`;\n }\n return \"\";\n}\n\nexport function serializeHeadData(\n headData: HeadData,\n cspNonce?: string,\n): { metaHtml: string; linkHtml: string; scriptHtml: string } {\n return {\n metaHtml: headData.meta\n .filter(Boolean)\n .map((m) => serializeMeta(m))\n .join(\"\\n\"),\n linkHtml: headData.links\n .filter(Boolean)\n .map((l) => serializeLink(l))\n .join(\"\\n\"),\n scriptHtml: headData.scripts\n .filter(Boolean)\n .map((s) => serializeScript(s, cspNonce))\n .join(\"\\n\"),\n };\n}\n"],"mappings":"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"}
@@ -23,21 +23,10 @@ async function collectHeadData(router) {
23
23
  const linkMap = /* @__PURE__ */ new Map();
24
24
  const scriptMap = /* @__PURE__ */ new Map();
25
25
  for (const match of router.state.matches) {
26
- const headFn = (router.routesById?.[match.routeId] ?? match.route)?.options?.head;
27
- if (!headFn) continue;
28
- try {
29
- const headResult = await headFn({
30
- loaderData: match.loaderData,
31
- matches: router.state.matches,
32
- match,
33
- params: match.params
34
- });
35
- if (headResult?.meta) for (const meta of headResult.meta) metaMap.set(getMetaKey(meta), meta);
36
- if (headResult?.links) for (const link of headResult.links) linkMap.set(getLinkKey(link), link);
37
- if (headResult?.scripts) for (const script of headResult.scripts) scriptMap.set(getScriptKey(script), script);
38
- } catch (error) {
39
- console.warn(`[collectHeadData] head() failed for ${match.routeId}:`, error);
40
- }
26
+ const matchData = match;
27
+ if (matchData.meta) for (const meta of matchData.meta) metaMap.set(getMetaKey(meta), meta);
28
+ if (matchData.links) for (const link of matchData.links) linkMap.set(getLinkKey(link), link);
29
+ if (matchData.headScripts) for (const script of matchData.headScripts) scriptMap.set(getScriptKey(script), script);
41
30
  }
42
31
  return {
43
32
  meta: [...metaMap.values()],