@bleedingdev/modern-js-runtime 3.2.0-ultramodern.12 → 3.2.0-ultramodern.121

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 (330) hide show
  1. package/dist/cjs/boundary-debugger/index.js +307 -0
  2. package/dist/cjs/cache/index.js +9 -5
  3. package/dist/cjs/cli/alias.js +9 -5
  4. package/dist/cjs/cli/code.js +9 -5
  5. package/dist/cjs/cli/constants.js +20 -16
  6. package/dist/cjs/cli/entry.js +9 -5
  7. package/dist/cjs/cli/index.js +20 -5
  8. package/dist/cjs/cli/ssr/index.js +14 -20
  9. package/dist/cjs/cli/ssr/loadable-bundler-plugin.js +9 -5
  10. package/dist/cjs/cli/ssr/mode.js +12 -8
  11. package/dist/cjs/cli/template.js +9 -5
  12. package/dist/cjs/cli/template.server.js +10 -5
  13. package/dist/cjs/common.js +14 -10
  14. package/dist/cjs/core/browser/hydrate.js +9 -5
  15. package/dist/cjs/core/browser/index.js +9 -5
  16. package/dist/cjs/core/browser/withCallback.js +9 -5
  17. package/dist/cjs/core/compat/hooks.js +14 -10
  18. package/dist/cjs/core/compat/index.js +9 -5
  19. package/dist/cjs/core/compat/requestContext.js +13 -9
  20. package/dist/cjs/core/config.js +12 -8
  21. package/dist/cjs/core/constants.js +15 -10
  22. package/dist/cjs/core/context/extensions.js +69 -0
  23. package/dist/cjs/core/context/helmetContext.js +54 -0
  24. package/dist/cjs/core/context/index.js +74 -5
  25. package/dist/cjs/core/context/monitors/default.js +12 -8
  26. package/dist/cjs/core/context/monitors/index.js +9 -5
  27. package/dist/cjs/core/context/monitors/index.server.js +9 -5
  28. package/dist/cjs/core/context/request/index.js +12 -8
  29. package/dist/cjs/core/context/request/index.server.js +9 -5
  30. package/dist/cjs/core/context/response/index.js +15 -11
  31. package/dist/cjs/core/context/response/index.server.js +9 -5
  32. package/dist/cjs/core/context/runtime.js +9 -5
  33. package/dist/cjs/core/context/serverPayload/index.js +13 -9
  34. package/dist/cjs/core/context/serverPayload/index.server.js +9 -5
  35. package/dist/cjs/core/index.js +9 -5
  36. package/dist/cjs/core/plugin/index.js +9 -5
  37. package/dist/cjs/core/react/index.js +9 -5
  38. package/dist/cjs/core/react/wrapper.js +21 -9
  39. package/dist/cjs/core/server/constants.js +15 -11
  40. package/dist/cjs/core/server/federatedCss.js +51 -0
  41. package/dist/cjs/core/server/helmet.js +18 -7
  42. package/dist/cjs/core/server/index.js +9 -5
  43. package/dist/cjs/core/server/react/index.js +9 -5
  44. package/dist/cjs/core/server/react/no-ssr-cache/index.js +9 -5
  45. package/dist/cjs/core/server/react/nossr/index.js +9 -5
  46. package/dist/cjs/core/server/requestHandler.js +51 -34
  47. package/dist/cjs/core/server/routerCleanup.js +110 -0
  48. package/dist/cjs/core/server/scriptOrder.js +134 -0
  49. package/dist/cjs/core/server/server.js +9 -5
  50. package/dist/cjs/core/server/shared.js +12 -8
  51. package/dist/cjs/core/server/stream/afterTemplate.js +16 -16
  52. package/dist/cjs/core/server/stream/beforeTemplate.js +22 -25
  53. package/dist/cjs/core/server/stream/beforeTemplate.worker.js +102 -0
  54. package/dist/cjs/core/server/stream/createReadableStream.js +16 -7
  55. package/dist/cjs/core/server/stream/createReadableStream.worker.js +13 -7
  56. package/dist/cjs/core/server/stream/deferredScript.js +13 -6
  57. package/dist/cjs/core/server/stream/index.js +9 -5
  58. package/dist/cjs/core/server/stream/shared.js +12 -6
  59. package/dist/cjs/core/server/stream/template.js +9 -5
  60. package/dist/cjs/core/server/string/index.js +19 -14
  61. package/dist/cjs/core/server/string/loadable.js +56 -15
  62. package/dist/cjs/core/server/string/ssrData.js +10 -6
  63. package/dist/cjs/core/server/tracer.js +13 -9
  64. package/dist/cjs/core/server/utils.js +40 -13
  65. package/dist/cjs/document/Body.js +9 -5
  66. package/dist/cjs/document/Comment.js +9 -5
  67. package/dist/cjs/document/DocumentContext.js +9 -5
  68. package/dist/cjs/document/DocumentStructureContext.js +9 -5
  69. package/dist/cjs/document/Head.js +9 -5
  70. package/dist/cjs/document/Html.js +9 -5
  71. package/dist/cjs/document/Links.js +9 -5
  72. package/dist/cjs/document/Root.js +9 -5
  73. package/dist/cjs/document/Script.js +9 -5
  74. package/dist/cjs/document/Scripts.js +9 -5
  75. package/dist/cjs/document/Style.js +9 -5
  76. package/dist/cjs/document/Title.js +9 -5
  77. package/dist/cjs/document/cli/index.js +12 -6
  78. package/dist/cjs/document/constants.js +9 -5
  79. package/dist/cjs/document/index.js +9 -5
  80. package/dist/cjs/exports/config-routes.js +12 -8
  81. package/dist/cjs/exports/head.js +271 -10
  82. package/dist/cjs/exports/loadable.js +51 -12
  83. package/dist/cjs/exports/tanstack-router.js +50 -58
  84. package/dist/cjs/index.js +9 -5
  85. package/dist/cjs/internal.js +9 -5
  86. package/dist/cjs/module-federation/index.js +178 -0
  87. package/dist/cjs/react-server.js +9 -5
  88. package/dist/cjs/router/cli/code/getClientRoutes/getRoutes.js +9 -5
  89. package/dist/cjs/router/cli/code/getClientRoutes/index.js +9 -5
  90. package/dist/cjs/router/cli/code/getClientRoutes/utils.js +9 -5
  91. package/dist/cjs/router/cli/code/index.js +10 -52
  92. package/dist/cjs/router/cli/code/inspect.js +9 -5
  93. package/dist/cjs/router/cli/code/makeLegalIdentifier.js +12 -8
  94. package/dist/cjs/router/cli/code/nestedRoutes.js +9 -5
  95. package/dist/cjs/router/cli/code/templates.js +10 -13
  96. package/dist/cjs/router/cli/code/utils.js +9 -5
  97. package/dist/cjs/router/cli/config-routes/converter.js +9 -5
  98. package/dist/cjs/router/cli/config-routes/parseRouteConfig.js +9 -5
  99. package/dist/cjs/router/cli/constants.js +23 -19
  100. package/dist/cjs/router/cli/entry.js +9 -5
  101. package/dist/cjs/router/cli/handler.js +10 -6
  102. package/dist/cjs/router/cli/index.js +11 -28
  103. package/dist/cjs/router/index.js +9 -5
  104. package/dist/cjs/router/internal.js +12 -8
  105. package/dist/cjs/router/runtime/CSSLinks.js +9 -5
  106. package/dist/cjs/router/runtime/DefaultNotFound.js +9 -5
  107. package/dist/cjs/router/runtime/DeferredDataScripts.js +12 -8
  108. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +25 -9
  109. package/dist/cjs/router/runtime/PrefetchLink.js +161 -26
  110. package/dist/cjs/router/runtime/constants.js +9 -5
  111. package/dist/cjs/router/runtime/hooks.js +9 -5
  112. package/dist/cjs/router/runtime/index.js +15 -10
  113. package/dist/cjs/router/runtime/internal.js +29 -18
  114. package/dist/cjs/router/runtime/lifecycle.js +38 -19
  115. package/dist/cjs/router/runtime/plugin.js +11 -14
  116. package/dist/cjs/router/runtime/plugin.node.js +11 -12
  117. package/dist/cjs/router/runtime/provider.js +107 -0
  118. package/dist/cjs/router/runtime/routerHelper.js +9 -5
  119. package/dist/cjs/router/runtime/rsc-router.js +9 -5
  120. package/dist/cjs/router/runtime/rsc.js +9 -5
  121. package/dist/cjs/router/runtime/server.js +9 -5
  122. package/dist/cjs/router/runtime/utils.js +44 -14
  123. package/dist/cjs/router/runtime/withRouter.js +9 -5
  124. package/dist/cjs/rsc/client.js +12 -8
  125. package/dist/cjs/rsc/server.js +9 -5
  126. package/dist/cjs/rsc/server.worker.js +62 -0
  127. package/dist/esm/boundary-debugger/index.mjs +267 -0
  128. package/dist/esm/cli/index.mjs +4 -2
  129. package/dist/esm/cli/ssr/index.mjs +5 -15
  130. package/dist/esm/cli/template.server.mjs +1 -0
  131. package/dist/esm/core/context/extensions.mjs +28 -0
  132. package/dist/esm/core/context/helmetContext.mjs +13 -0
  133. package/dist/esm/core/context/index.mjs +5 -0
  134. package/dist/esm/core/react/wrapper.mjs +12 -4
  135. package/dist/esm/core/server/federatedCss.mjs +13 -0
  136. package/dist/esm/core/server/helmet.mjs +6 -2
  137. package/dist/esm/core/server/requestHandler.mjs +43 -30
  138. package/dist/esm/core/server/routerCleanup.mjs +66 -0
  139. package/dist/esm/core/server/scriptOrder.mjs +84 -0
  140. package/dist/esm/core/server/stream/afterTemplate.mjs +7 -11
  141. package/dist/esm/core/server/stream/beforeTemplate.mjs +14 -11
  142. package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +64 -0
  143. package/dist/esm/core/server/stream/createReadableStream.mjs +7 -2
  144. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +4 -2
  145. package/dist/esm/core/server/stream/deferredScript.mjs +4 -1
  146. package/dist/esm/core/server/stream/shared.mjs +3 -1
  147. package/dist/esm/core/server/string/index.mjs +12 -10
  148. package/dist/esm/core/server/string/loadable.mjs +43 -9
  149. package/dist/esm/core/server/string/ssrData.mjs +2 -2
  150. package/dist/esm/core/server/utils.mjs +31 -8
  151. package/dist/esm/document/cli/index.mjs +3 -1
  152. package/dist/esm/exports/head.mjs +255 -4
  153. package/dist/esm/exports/loadable.mjs +26 -3
  154. package/dist/esm/exports/tanstack-router.mjs +30 -3
  155. package/dist/esm/module-federation/index.mjs +109 -0
  156. package/dist/esm/router/cli/code/index.mjs +1 -47
  157. package/dist/esm/router/cli/code/templates.mjs +1 -8
  158. package/dist/esm/router/cli/handler.mjs +1 -1
  159. package/dist/esm/router/cli/index.mjs +3 -24
  160. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +16 -4
  161. package/dist/esm/router/runtime/PrefetchLink.mjs +152 -21
  162. package/dist/esm/router/runtime/internal.mjs +16 -15
  163. package/dist/esm/router/runtime/lifecycle.mjs +22 -13
  164. package/dist/esm/router/runtime/plugin.mjs +4 -11
  165. package/dist/esm/router/runtime/plugin.node.mjs +4 -9
  166. package/dist/esm/router/runtime/provider.mjs +57 -0
  167. package/dist/esm/router/runtime/utils.mjs +35 -9
  168. package/dist/esm/rsc/server.worker.mjs +1 -0
  169. package/dist/esm-node/boundary-debugger/index.mjs +268 -0
  170. package/dist/esm-node/cli/index.mjs +4 -2
  171. package/dist/esm-node/cli/ssr/index.mjs +5 -15
  172. package/dist/esm-node/cli/template.server.mjs +1 -0
  173. package/dist/esm-node/core/context/extensions.mjs +29 -0
  174. package/dist/esm-node/core/context/helmetContext.mjs +14 -0
  175. package/dist/esm-node/core/context/index.mjs +5 -0
  176. package/dist/esm-node/core/react/wrapper.mjs +12 -4
  177. package/dist/esm-node/core/server/federatedCss.mjs +14 -0
  178. package/dist/esm-node/core/server/helmet.mjs +6 -2
  179. package/dist/esm-node/core/server/requestHandler.mjs +43 -30
  180. package/dist/esm-node/core/server/routerCleanup.mjs +67 -0
  181. package/dist/esm-node/core/server/scriptOrder.mjs +85 -0
  182. package/dist/esm-node/core/server/stream/afterTemplate.mjs +7 -11
  183. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +14 -11
  184. package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +65 -0
  185. package/dist/esm-node/core/server/stream/createReadableStream.mjs +7 -2
  186. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +4 -2
  187. package/dist/esm-node/core/server/stream/deferredScript.mjs +4 -1
  188. package/dist/esm-node/core/server/stream/shared.mjs +3 -1
  189. package/dist/esm-node/core/server/string/index.mjs +12 -10
  190. package/dist/esm-node/core/server/string/loadable.mjs +43 -9
  191. package/dist/esm-node/core/server/string/ssrData.mjs +2 -2
  192. package/dist/esm-node/core/server/utils.mjs +31 -8
  193. package/dist/esm-node/document/cli/index.mjs +3 -1
  194. package/dist/esm-node/exports/head.mjs +255 -4
  195. package/dist/esm-node/exports/loadable.mjs +26 -3
  196. package/dist/esm-node/exports/tanstack-router.mjs +30 -3
  197. package/dist/esm-node/module-federation/index.mjs +110 -0
  198. package/dist/esm-node/router/cli/code/index.mjs +1 -47
  199. package/dist/esm-node/router/cli/code/templates.mjs +1 -8
  200. package/dist/esm-node/router/cli/handler.mjs +1 -1
  201. package/dist/esm-node/router/cli/index.mjs +3 -24
  202. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +16 -4
  203. package/dist/esm-node/router/runtime/PrefetchLink.mjs +152 -21
  204. package/dist/esm-node/router/runtime/internal.mjs +16 -15
  205. package/dist/esm-node/router/runtime/lifecycle.mjs +22 -13
  206. package/dist/esm-node/router/runtime/plugin.mjs +4 -11
  207. package/dist/esm-node/router/runtime/plugin.node.mjs +4 -9
  208. package/dist/esm-node/router/runtime/provider.mjs +58 -0
  209. package/dist/esm-node/router/runtime/utils.mjs +35 -9
  210. package/dist/esm-node/rsc/server.worker.mjs +2 -0
  211. package/dist/types/boundary-debugger/index.d.ts +28 -0
  212. package/dist/types/cli/entry.d.ts +2 -2
  213. package/dist/types/cli/index.d.ts +3 -1
  214. package/dist/types/core/context/extensions.d.ts +37 -0
  215. package/dist/types/core/context/helmetContext.d.ts +10 -0
  216. package/dist/types/core/context/index.d.ts +6 -0
  217. package/dist/types/core/context/response/index.server.d.ts +4 -1
  218. package/dist/types/core/context/runtime.d.ts +1 -7
  219. package/dist/types/core/plugin/index.d.ts +1 -1
  220. package/dist/types/core/server/federatedCss.d.ts +5 -0
  221. package/dist/types/core/server/helmet.d.ts +5 -3
  222. package/dist/types/core/server/routerCleanup.d.ts +28 -0
  223. package/dist/types/core/server/scriptOrder.d.ts +25 -0
  224. package/dist/types/core/server/stream/beforeTemplate.d.ts +1 -0
  225. package/dist/types/core/server/stream/beforeTemplate.worker.d.ts +10 -0
  226. package/dist/types/core/server/stream/shared.d.ts +8 -0
  227. package/dist/types/core/server/string/loadable.d.ts +5 -0
  228. package/dist/types/core/server/utils.d.ts +12 -1
  229. package/dist/types/document/constants.d.ts +3 -1
  230. package/dist/types/exports/head.d.ts +10 -3
  231. package/dist/types/exports/loadable.d.ts +8 -1
  232. package/dist/types/exports/tanstack-router.d.ts +88 -5
  233. package/dist/types/module-federation/index.d.ts +65 -0
  234. package/dist/types/router/cli/code/index.d.ts +1 -3
  235. package/dist/types/router/cli/code/utils.d.ts +1 -1
  236. package/dist/types/router/cli/entry.d.ts +1 -1
  237. package/dist/types/router/cli/handler.d.ts +0 -3
  238. package/dist/types/router/runtime/PrefetchLink.d.ts +5 -1
  239. package/dist/types/router/runtime/internal.d.ts +1 -0
  240. package/dist/types/router/runtime/lifecycle.d.ts +2 -0
  241. package/dist/types/router/runtime/plugin.d.ts +1 -1
  242. package/dist/types/router/runtime/plugin.node.d.ts +1 -1
  243. package/dist/types/router/runtime/provider.d.ts +61 -0
  244. package/dist/types/rsc/server.worker.d.ts +1 -0
  245. package/package.json +37 -27
  246. package/rstest.config.mts +2 -4
  247. package/dist/cjs/router/cli/code/tanstackTypes.js +0 -378
  248. package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +0 -62
  249. package/dist/cjs/router/runtime/tanstack/dataMutation.js +0 -345
  250. package/dist/cjs/router/runtime/tanstack/plugin.js +0 -239
  251. package/dist/cjs/router/runtime/tanstack/plugin.node.js +0 -278
  252. package/dist/cjs/router/runtime/tanstack/prefetchLink.js +0 -55
  253. package/dist/cjs/router/runtime/tanstack/routeTree.js +0 -469
  254. package/dist/cjs/router/runtime/tanstack/rsc/ClientSlot.js +0 -53
  255. package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +0 -75
  256. package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +0 -141
  257. package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +0 -65
  258. package/dist/cjs/router/runtime/tanstack/rsc/SlotContext.js +0 -54
  259. package/dist/cjs/router/runtime/tanstack/rsc/client.js +0 -93
  260. package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +0 -141
  261. package/dist/cjs/router/runtime/tanstack/rsc/index.js +0 -42
  262. package/dist/cjs/router/runtime/tanstack/rsc/server.js +0 -246
  263. package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +0 -65
  264. package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +0 -72
  265. package/dist/cjs/ssr/index.node.js +0 -121
  266. package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -84
  267. package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -195
  268. package/dist/cjs/ssr/serverRender/types.js +0 -36
  269. package/dist/esm/router/cli/code/tanstackTypes.mjs +0 -331
  270. package/dist/esm/router/runtime/tanstack/basepathRewrite.mjs +0 -28
  271. package/dist/esm/router/runtime/tanstack/dataMutation.mjs +0 -305
  272. package/dist/esm/router/runtime/tanstack/plugin.mjs +0 -205
  273. package/dist/esm/router/runtime/tanstack/plugin.node.mjs +0 -244
  274. package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +0 -18
  275. package/dist/esm/router/runtime/tanstack/routeTree.mjs +0 -429
  276. package/dist/esm/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -19
  277. package/dist/esm/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -41
  278. package/dist/esm/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -104
  279. package/dist/esm/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -31
  280. package/dist/esm/router/runtime/tanstack/rsc/SlotContext.mjs +0 -17
  281. package/dist/esm/router/runtime/tanstack/rsc/client.mjs +0 -53
  282. package/dist/esm/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -107
  283. package/dist/esm/router/runtime/tanstack/rsc/index.mjs +0 -1
  284. package/dist/esm/router/runtime/tanstack/rsc/server.mjs +0 -200
  285. package/dist/esm/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -31
  286. package/dist/esm/router/runtime/tanstack/rsc/symbols.mjs +0 -17
  287. package/dist/esm/ssr/index.node.mjs +0 -44
  288. package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -50
  289. package/dist/esm/ssr/serverRender/renderToString/entry.mjs +0 -148
  290. package/dist/esm/ssr/serverRender/types.mjs +0 -1
  291. package/dist/esm-node/router/cli/code/tanstackTypes.mjs +0 -332
  292. package/dist/esm-node/router/runtime/tanstack/basepathRewrite.mjs +0 -29
  293. package/dist/esm-node/router/runtime/tanstack/dataMutation.mjs +0 -306
  294. package/dist/esm-node/router/runtime/tanstack/plugin.mjs +0 -206
  295. package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +0 -245
  296. package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +0 -19
  297. package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +0 -430
  298. package/dist/esm-node/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -20
  299. package/dist/esm-node/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -42
  300. package/dist/esm-node/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -105
  301. package/dist/esm-node/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -32
  302. package/dist/esm-node/router/runtime/tanstack/rsc/SlotContext.mjs +0 -18
  303. package/dist/esm-node/router/runtime/tanstack/rsc/client.mjs +0 -54
  304. package/dist/esm-node/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -108
  305. package/dist/esm-node/router/runtime/tanstack/rsc/index.mjs +0 -2
  306. package/dist/esm-node/router/runtime/tanstack/rsc/server.mjs +0 -201
  307. package/dist/esm-node/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -32
  308. package/dist/esm-node/router/runtime/tanstack/rsc/symbols.mjs +0 -18
  309. package/dist/esm-node/ssr/index.node.mjs +0 -45
  310. package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -51
  311. package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +0 -149
  312. package/dist/esm-node/ssr/serverRender/types.mjs +0 -2
  313. package/dist/types/router/cli/code/tanstackTypes.d.ts +0 -10
  314. package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +0 -8
  315. package/dist/types/router/runtime/tanstack/dataMutation.d.ts +0 -29
  316. package/dist/types/router/runtime/tanstack/plugin.d.ts +0 -6
  317. package/dist/types/router/runtime/tanstack/plugin.node.d.ts +0 -6
  318. package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +0 -11
  319. package/dist/types/router/runtime/tanstack/routeTree.d.ts +0 -8
  320. package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +0 -5
  321. package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +0 -3
  322. package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +0 -24
  323. package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +0 -5
  324. package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +0 -11
  325. package/dist/types/router/runtime/tanstack/rsc/client.d.ts +0 -11
  326. package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +0 -7
  327. package/dist/types/router/runtime/tanstack/rsc/index.d.ts +0 -2
  328. package/dist/types/router/runtime/tanstack/rsc/server.d.ts +0 -14
  329. package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +0 -2
  330. package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +0 -46
@@ -1,332 +0,0 @@
1
- import "node:module";
2
- import { findExists, formatImportPath, fs, slash } from "@modern-js/utils";
3
- import path from "path";
4
- import { makeLegalIdentifier } from "./makeLegalIdentifier.mjs";
5
- import { getPathWithoutExt } from "./utils.mjs";
6
- const JS_OR_TS_EXTS = [
7
- '.js',
8
- '.jsx',
9
- '.ts',
10
- '.tsx',
11
- '.mjs',
12
- '.mts',
13
- '.cjs',
14
- '.cts'
15
- ];
16
- function toTanstackPath(pathname) {
17
- return pathname.split('/').map((segment)=>{
18
- if (!segment) return segment;
19
- if ('*' === segment) return '$';
20
- if (segment.startsWith(':')) {
21
- const name = segment.slice(1);
22
- if (name.endsWith('?')) return `{-$${name.slice(0, -1)}}`;
23
- return `$${name}`;
24
- }
25
- return segment;
26
- }).join('/');
27
- }
28
- async function resolveFileNoExt(inputNoExtPath) {
29
- const file = findExists(JS_OR_TS_EXTS.map((ext)=>`${inputNoExtPath}${ext}`));
30
- return file ? getPathWithoutExt(file) : null;
31
- }
32
- function quote(str) {
33
- return JSON.stringify(str);
34
- }
35
- function normalizeRelativeImport(p) {
36
- const normalized = formatImportPath(slash(p));
37
- if (normalized.startsWith('.')) return normalized;
38
- return `./${normalized}`;
39
- }
40
- function pickModernLoaderModule(route) {
41
- const loaderPath = route.data || route.loader;
42
- if (!loaderPath || 'string' != typeof loaderPath) return null;
43
- const inline = Boolean(route.data);
44
- return {
45
- loaderPath,
46
- inline
47
- };
48
- }
49
- function isPathlessLayout(route) {
50
- return 'nested' === route.type && 'boolean' != typeof route.index && void 0 === route.path;
51
- }
52
- function isIndexRoute(route) {
53
- return 'nested' === route.type && Boolean(route.index);
54
- }
55
- function createRouteStaticDataSnippet(opts) {
56
- const staticDataLines = [];
57
- if (opts.modernRouteId) staticDataLines.push(`modernRouteId: ${quote(opts.modernRouteId)},`);
58
- if (opts.loaderName) staticDataLines.push(`modernRouteLoader: ${opts.loaderName},`);
59
- if (opts.actionName) staticDataLines.push(`modernRouteAction: ${opts.actionName},`);
60
- if (!staticDataLines.length) return null;
61
- return `staticData: createRouteStaticData({\n ${staticDataLines.join('\n ')}\n }),`;
62
- }
63
- async function isTanstackRouterFrameworkEnabled(appContext) {
64
- const runtimeConfigBase = path.join(appContext.srcDirectory, appContext.runtimeConfigFile);
65
- const runtimeConfigFile = findExists(JS_OR_TS_EXTS.map((ext)=>`${runtimeConfigBase}${ext}`));
66
- if (!runtimeConfigFile) return false;
67
- try {
68
- const content = await fs.readFile(runtimeConfigFile, 'utf-8');
69
- return /framework\s*:\s*['"]tanstack['"]/.test(content);
70
- } catch {
71
- return false;
72
- }
73
- }
74
- async function generateTanstackRouterTypesSourceForEntry(opts) {
75
- const { appContext, entryName, routes } = opts;
76
- const outDir = path.join(appContext.srcDirectory, 'modern-tanstack', entryName);
77
- const rootModern = routes.find((r)=>r && 'nested' === r.type && r.isRoot);
78
- const topLevel = rootModern ? rootModern.children || [] : routes;
79
- const imports = [];
80
- const statements = [];
81
- const loaderImportMap = new Map();
82
- let loaderIndex = 0;
83
- let routeIndex = 0;
84
- const getImportNamesForLoader = async (aliasedNoExtPath, inline, hasAction)=>{
85
- const key = `${inline ? 'inline' : 'default'}:${hasAction ? 'action' : 'loader'}:${aliasedNoExtPath}`;
86
- const existing = loaderImportMap.get(key);
87
- if (existing) return {
88
- loaderName: existing,
89
- actionName: hasAction ? existing.replace(/^loader_/, 'action_') : null
90
- };
91
- const prefix = `${appContext.internalSrcAlias}/`;
92
- let absNoExt = null;
93
- if (aliasedNoExtPath.startsWith(prefix)) {
94
- const rel = aliasedNoExtPath.slice(prefix.length);
95
- absNoExt = path.join(appContext.srcDirectory, rel);
96
- } else absNoExt = path.isAbsolute(aliasedNoExtPath) ? aliasedNoExtPath : path.join(appContext.srcDirectory, aliasedNoExtPath);
97
- const resolvedNoExt = await resolveFileNoExt(absNoExt);
98
- if (!resolvedNoExt) return null;
99
- const relImport = normalizeRelativeImport(path.relative(outDir, resolvedNoExt));
100
- const importName = `loader_${loaderIndex++}`;
101
- const actionName = hasAction ? importName.replace(/^loader_/, 'action_') : null;
102
- if (inline) {
103
- const specifiers = [
104
- `loader as ${importName}`
105
- ];
106
- if (actionName) specifiers.push(`action as ${actionName}`);
107
- imports.push(`import { ${specifiers.join(', ')} } from ${quote(relImport)};`);
108
- } else imports.push(`import ${importName} from ${quote(relImport)};`);
109
- loaderImportMap.set(key, importName);
110
- return {
111
- loaderName: importName,
112
- actionName
113
- };
114
- };
115
- const createRouteVarName = (route)=>{
116
- const id = route.id;
117
- const base = id ? makeLegalIdentifier(id) : `r_${routeIndex++}`;
118
- return `route_${base}`;
119
- };
120
- const buildRoute = async (opts)=>{
121
- const { parentVar, route } = opts;
122
- const varName = createRouteVarName(route);
123
- const loaderInfo = pickModernLoaderModule(route);
124
- const routeAction = route.action;
125
- const loaderImports = loaderInfo ? await getImportNamesForLoader(loaderInfo.loaderPath, loaderInfo.inline, Boolean(loaderInfo.inline && routeAction === loaderInfo.loaderPath)) : null;
126
- const loaderName = loaderImports?.loaderName || null;
127
- const actionName = loaderImports?.actionName || null;
128
- const rawPath = route.path;
129
- const hasSplat = 'string' == typeof rawPath && rawPath.includes('*');
130
- const routeOpts = [
131
- `getParentRoute: () => ${parentVar},`
132
- ];
133
- if (isPathlessLayout(route)) {
134
- const id = route.id;
135
- routeOpts.push(`id: ${quote(id || 'pathless')},`);
136
- } else {
137
- const p = isIndexRoute(route) ? '/' : toTanstackPath(rawPath || '');
138
- routeOpts.push(`path: ${quote(p)},`);
139
- }
140
- if (loaderName) routeOpts.push(`loader: modernLoaderToTanstack({ hasSplat: ${hasSplat} }, ${loaderName}),`);
141
- const staticDataSnippet = createRouteStaticDataSnippet({
142
- modernRouteId: route.id,
143
- loaderName,
144
- actionName
145
- });
146
- if (staticDataSnippet) routeOpts.push(staticDataSnippet);
147
- statements.push(`const ${varName} = createRoute({\n ${routeOpts.join('\n ')}\n});`);
148
- const children = route.children;
149
- if (children && children.length > 0) {
150
- const childVars = await Promise.all(children.map((child)=>buildRoute({
151
- parentVar: varName,
152
- route: child
153
- })));
154
- statements.push(`${varName}.addChildren([${childVars.join(', ')}]);`);
155
- }
156
- return varName;
157
- };
158
- const rootLoaderInfo = rootModern ? pickModernLoaderModule(rootModern) : null;
159
- const rootAction = rootModern?.action;
160
- const rootLoaderImports = rootLoaderInfo?.loaderPath ? await getImportNamesForLoader(rootLoaderInfo.loaderPath, rootLoaderInfo.inline, Boolean(rootLoaderInfo.inline && rootAction === rootLoaderInfo.loaderPath)) : null;
161
- const rootLoaderName = rootLoaderImports?.loaderName || null;
162
- const rootActionName = rootLoaderImports?.actionName || null;
163
- const topLevelVars = await Promise.all(topLevel.map((route)=>buildRoute({
164
- parentVar: 'rootRoute',
165
- route
166
- })));
167
- const rootOpts = [];
168
- if (rootLoaderName) rootOpts.push(`loader: modernLoaderToTanstack({ hasSplat: false }, ${rootLoaderName}),`);
169
- const routerGenTs = `/* eslint-disable */
170
- // This file is auto-generated by Modern.js. Do not edit manually.
171
-
172
- import {
173
- createMemoryHistory,
174
- createRootRouteWithContext,
175
- createRoute,
176
- createRouter,
177
- notFound,
178
- redirect,
179
- } from '@modern-js/runtime/tanstack-router';
180
-
181
- type ModernRouterContext = {
182
- request?: Request;
183
- requestContext?: unknown;
184
- };
185
-
186
- function isResponse(value: unknown): value is Response {
187
- return (
188
- value != null &&
189
- typeof value === 'object' &&
190
- typeof (value as any).status === 'number' &&
191
- typeof (value as any).headers === 'object'
192
- );
193
- }
194
-
195
- const redirectStatusCodes = new Set([301, 302, 303, 307, 308]);
196
- function isRedirectResponse(res: Response) {
197
- return redirectStatusCodes.has(res.status);
198
- }
199
-
200
- function throwTanstackRedirect(location: string) {
201
- const target = location || '/';
202
- try {
203
- void new URL(target);
204
- throw redirect({ href: target });
205
- } catch {
206
- throw redirect({ to: target });
207
- }
208
- }
209
-
210
- function mapParamsForModernLoader(params: Record<string, string>, hasSplat: boolean) {
211
- if (!hasSplat) {
212
- return params;
213
- }
214
-
215
- const { _splat, ...rest } = params as any;
216
- if (typeof _splat !== 'undefined') {
217
- return { ...rest, '*': _splat };
218
- }
219
- return rest;
220
- }
221
-
222
- function createRouteStaticData(opts: {
223
- modernRouteId?: string;
224
- modernRouteAction?: unknown;
225
- modernRouteLoader?: unknown;
226
- }) {
227
- const staticData: Record<string, unknown> = {};
228
-
229
- if (opts.modernRouteId) {
230
- staticData.modernRouteId = opts.modernRouteId;
231
- }
232
-
233
- if (opts.modernRouteLoader) {
234
- staticData.modernRouteLoader = opts.modernRouteLoader;
235
- }
236
-
237
- if (opts.modernRouteAction) {
238
- staticData.modernRouteAction = opts.modernRouteAction;
239
- }
240
-
241
- return Object.keys(staticData).length > 0 ? staticData : undefined;
242
- }
243
-
244
- function modernLoaderToTanstack<TLoader extends (args: any) => any>(
245
- opts: { hasSplat: boolean },
246
- modernLoader: TLoader,
247
- ) {
248
- type LoaderResult = Awaited<ReturnType<TLoader>>;
249
-
250
- return async (ctx: any): Promise<LoaderResult> => {
251
- try {
252
- const signal: AbortSignal =
253
- ctx?.abortController?.signal ||
254
- ctx?.signal ||
255
- new AbortController().signal;
256
- const baseRequest: Request | undefined =
257
- ctx?.context?.request instanceof Request ? ctx.context.request : undefined;
258
-
259
- const href =
260
- typeof ctx?.location === 'string'
261
- ? ctx.location
262
- : ctx?.location?.publicHref ||
263
- ctx?.location?.href ||
264
- ctx?.location?.url?.href ||
265
- '';
266
-
267
- const request = baseRequest
268
- ? new Request(baseRequest, { signal })
269
- : new Request(href, { signal });
270
-
271
- const params = mapParamsForModernLoader(ctx?.params || {}, opts.hasSplat);
272
-
273
- const result = await (modernLoader as any)({
274
- request,
275
- params,
276
- context: ctx?.context?.requestContext,
277
- });
278
-
279
- if (isResponse(result)) {
280
- if (isRedirectResponse(result)) {
281
- const location = result.headers.get('Location') || '/';
282
- throwTanstackRedirect(location);
283
- }
284
- if (result.status === 404) {
285
- throw notFound();
286
- }
287
- }
288
-
289
- return result as LoaderResult;
290
- } catch (err) {
291
- if (isResponse(err)) {
292
- if (isRedirectResponse(err)) {
293
- const location = err.headers.get('Location') || '/';
294
- throwTanstackRedirect(location);
295
- }
296
- if (err.status === 404) {
297
- throw notFound();
298
- }
299
- }
300
- throw err;
301
- }
302
- };
303
- }
304
-
305
- ${imports.join('\n')}
306
-
307
- export const rootRoute = createRootRouteWithContext<ModernRouterContext>()({
308
- ${rootOpts.join('\n ')}
309
- ${createRouteStaticDataSnippet({
310
- modernRouteId: rootModern?.id,
311
- loaderName: rootLoaderName,
312
- actionName: rootActionName
313
- }) || ''}
314
- });
315
-
316
- ${statements.join('\n\n')}
317
-
318
- export const routeTree = rootRoute.addChildren([${topLevelVars.join(', ')}]);
319
-
320
- export const router = createRouter({
321
- routeTree,
322
- history: createMemoryHistory({
323
- initialEntries: ['/'],
324
- }),
325
- context: {} as ModernRouterContext,
326
- });
327
- `;
328
- return {
329
- routerGenTs
330
- };
331
- }
332
- export { generateTanstackRouterTypesSourceForEntry, isTanstackRouterFrameworkEnabled };
@@ -1,29 +0,0 @@
1
- import "node:module";
2
- function normalizeBasepath(basepath) {
3
- if (!basepath) return '/';
4
- let normalized = basepath.startsWith('/') ? basepath : `/${basepath}`;
5
- if (normalized.length > 1 && normalized.endsWith('/')) normalized = normalized.slice(0, -1);
6
- return normalized || '/';
7
- }
8
- function createModernBasepathRewrite(basepath, caseSensitive = false) {
9
- const normalizedBasepath = normalizeBasepath(basepath);
10
- if ('/' === normalizedBasepath) return;
11
- const normalizedBasepathWithSlash = `${normalizedBasepath}/`;
12
- const checkBasepath = caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase();
13
- const checkBasepathWithSlash = caseSensitive ? normalizedBasepathWithSlash : normalizedBasepathWithSlash.toLowerCase();
14
- return {
15
- input: ({ url })=>{
16
- const pathname = caseSensitive ? url.pathname : url.pathname.toLowerCase();
17
- if (pathname === checkBasepath) url.pathname = '/';
18
- else if (pathname.startsWith(checkBasepathWithSlash)) url.pathname = url.pathname.slice(normalizedBasepath.length) || '/';
19
- return url;
20
- },
21
- output: ({ url })=>{
22
- const pathname = url.pathname || '/';
23
- if ('/' === pathname) url.pathname = normalizedBasepath;
24
- else url.pathname = `${normalizedBasepath}${pathname.startsWith('/') ? '' : '/'}${pathname}`;
25
- return url;
26
- }
27
- };
28
- }
29
- export { createModernBasepathRewrite };
@@ -1,306 +0,0 @@
1
- import "node:module";
2
- import { jsx } from "react/jsx-runtime";
3
- import { useRouter } from "@tanstack/react-router";
4
- import { useCallback, useRef, useState } from "react";
5
- class RouteActionResponseError extends Error {
6
- constructor(response, data){
7
- super(`Route action failed with status ${response.status}`);
8
- this.name = 'RouteActionResponseError';
9
- this.response = response;
10
- this.data = data;
11
- }
12
- }
13
- function formDataToUrlSearchParams(formData) {
14
- const searchParams = new URLSearchParams();
15
- formData.forEach((value, key)=>{
16
- if ('string' == typeof value) searchParams.append(key, value);
17
- });
18
- return searchParams;
19
- }
20
- function formDataToTextPlain(formData) {
21
- return Array.from(formData.entries()).map(([key, value])=>`${key}=${String(value)}`).join('\n');
22
- }
23
- function toFormData(target) {
24
- if (target instanceof HTMLFormElement) return new FormData(target);
25
- if (target instanceof FormData) return target;
26
- if (target instanceof URLSearchParams) {
27
- const formData = new FormData();
28
- target.forEach((value, key)=>{
29
- formData.append(key, value);
30
- });
31
- return formData;
32
- }
33
- const formData = new FormData();
34
- Object.entries(target).forEach(([key, value])=>{
35
- if (null == value) return;
36
- formData.append(key, String(value));
37
- });
38
- return formData;
39
- }
40
- function getSubmitter(event) {
41
- const nativeEvent = event.nativeEvent;
42
- const submitter = nativeEvent?.submitter;
43
- if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) return submitter;
44
- return null;
45
- }
46
- function createFormDataFromSubmit({ form, submitter }) {
47
- if (submitter) try {
48
- return new FormData(form, submitter);
49
- } catch {}
50
- return new FormData(form);
51
- }
52
- function resolveSubmitOptionsFromForm({ form, submitter, action, method, encType }) {
53
- const resolvedAction = submitter?.getAttribute('formaction') || action || form.getAttribute('action') || '.';
54
- const resolvedMethod = (submitter?.getAttribute('formmethod') || method || form.getAttribute('method') || 'get').toLowerCase();
55
- const resolvedEncType = submitter?.getAttribute('formenctype') || encType || form.getAttribute('enctype') || 'application/x-www-form-urlencoded';
56
- return {
57
- action: resolvedAction,
58
- method: resolvedMethod,
59
- encType: resolvedEncType
60
- };
61
- }
62
- function resolveRouteHandlers(router, actionTo) {
63
- const builtLocation = router.buildLocation({
64
- to: actionTo
65
- });
66
- const href = router.getParsedLocationHref(builtLocation);
67
- const matchedRoutes = router.getMatchedRoutes(builtLocation.pathname);
68
- const routeStaticData = matchedRoutes.foundRoute?.options?.staticData;
69
- const action = routeStaticData?.modernRouteAction;
70
- const loader = routeStaticData?.modernRouteLoader;
71
- return {
72
- action,
73
- loader,
74
- href,
75
- params: matchedRoutes.routeParams || {}
76
- };
77
- }
78
- function isRedirectResponse(value) {
79
- if (!(value instanceof Response)) return false;
80
- return [
81
- 301,
82
- 302,
83
- 303,
84
- 307,
85
- 308
86
- ].includes(value.status);
87
- }
88
- async function parseResponseData(response) {
89
- if (204 === response.status) return null;
90
- const contentType = response.headers.get('Content-Type') || '';
91
- if (contentType.includes('application/json')) return response.json();
92
- return response.text();
93
- }
94
- async function parseResponseResultOrThrow(response) {
95
- const parsed = await parseResponseData(response);
96
- if (!response.ok) throw new RouteActionResponseError(response, parsed);
97
- return parsed;
98
- }
99
- async function submitRouteAction({ router, target, options = {}, isFetcher = false, onInvalidateStart }) {
100
- const method = (options.method || 'post').toLowerCase();
101
- const encType = options.encType || 'application/x-www-form-urlencoded';
102
- const actionTo = options.action || '.';
103
- const formData = toFormData(target);
104
- const resolved = resolveRouteHandlers(router, actionTo);
105
- if ('get' === method) {
106
- const search = formDataToUrlSearchParams(formData).toString();
107
- const requestUrl = new URL(resolved.href, window.location.origin);
108
- requestUrl.search = search;
109
- if (isFetcher && resolved.loader) {
110
- const result = await resolved.loader({
111
- request: new Request(requestUrl, {
112
- method: 'GET'
113
- }),
114
- params: resolved.params
115
- });
116
- if (result instanceof Response) {
117
- const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
118
- if (redirectTo || isRedirectResponse(result)) {
119
- await router.navigate({
120
- to: redirectTo || '/'
121
- });
122
- return parseResponseData(result);
123
- }
124
- return parseResponseResultOrThrow(result);
125
- }
126
- return result;
127
- }
128
- await router.navigate({
129
- href: search ? `${resolved.href}?${search}` : resolved.href
130
- });
131
- return;
132
- }
133
- if (!resolved.action) throw new Error(`No route action found for "${actionTo}"`);
134
- const headers = new Headers();
135
- let body = null;
136
- if (encType.includes('application/json')) {
137
- headers.set('Content-Type', 'application/json');
138
- body = JSON.stringify(Object.fromEntries(formDataToUrlSearchParams(formData).entries()));
139
- } else if (encType.includes('text/plain')) {
140
- headers.set('Content-Type', 'text/plain;charset=UTF-8');
141
- body = formDataToTextPlain(formData);
142
- } else if (encType.includes('application/x-www-form-urlencoded')) {
143
- headers.set('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
144
- body = formDataToUrlSearchParams(formData);
145
- } else body = formData;
146
- const request = new Request(new URL(resolved.href, window.location.origin), {
147
- method: method.toUpperCase(),
148
- headers,
149
- body
150
- });
151
- const result = await resolved.action({
152
- request,
153
- params: resolved.params
154
- });
155
- if (result instanceof Response) {
156
- const redirectTo = result.headers.get('X-Modernjs-Redirect') || result.headers.get('Location');
157
- if (redirectTo || isRedirectResponse(result)) {
158
- await router.navigate({
159
- to: redirectTo || '/'
160
- });
161
- return parseResponseData(result);
162
- }
163
- const parsed = isFetcher ? await parseResponseResultOrThrow(result) : await parseResponseData(result);
164
- onInvalidateStart?.();
165
- await router.invalidate();
166
- return parsed;
167
- }
168
- onInvalidateStart?.();
169
- await router.invalidate();
170
- return result;
171
- }
172
- function Form({ action, method = 'get', encType, reloadDocument, onSubmit, ...rest }) {
173
- const router = useRouter();
174
- const handleSubmit = useCallback(async (event)=>{
175
- onSubmit?.(event);
176
- if (event.defaultPrevented || reloadDocument) return;
177
- event.preventDefault();
178
- const submitter = getSubmitter(event);
179
- const formData = createFormDataFromSubmit({
180
- form: event.currentTarget,
181
- submitter
182
- });
183
- const normalizedOptions = resolveSubmitOptionsFromForm({
184
- form: event.currentTarget,
185
- submitter,
186
- action,
187
- method,
188
- encType
189
- });
190
- await submitRouteAction({
191
- router,
192
- target: formData,
193
- options: normalizedOptions
194
- });
195
- }, [
196
- action,
197
- encType,
198
- method,
199
- onSubmit,
200
- reloadDocument,
201
- router
202
- ]);
203
- return /*#__PURE__*/ jsx("form", {
204
- ...rest,
205
- action: action,
206
- method: method,
207
- encType: encType,
208
- onSubmit: handleSubmit
209
- });
210
- }
211
- function useFetcher() {
212
- const router = useRouter();
213
- const [state, setState] = useState('idle');
214
- const [data, setData] = useState(void 0);
215
- const [error, setError] = useState(void 0);
216
- const requestStatesRef = useRef(new Map());
217
- const requestIdRef = useRef(0);
218
- const syncStateFromRequests = useCallback(()=>{
219
- let hasSubmitting = false;
220
- let hasLoading = false;
221
- requestStatesRef.current.forEach((requestState)=>{
222
- if ('submitting' === requestState) hasSubmitting = true;
223
- else if ('loading' === requestState) hasLoading = true;
224
- });
225
- if (hasSubmitting) return void setState('submitting');
226
- if (hasLoading) return void setState('loading');
227
- setState('idle');
228
- }, []);
229
- const setRequestState = useCallback((requestId, requestState)=>{
230
- requestStatesRef.current.set(requestId, requestState);
231
- syncStateFromRequests();
232
- }, [
233
- syncStateFromRequests
234
- ]);
235
- const clearRequestState = useCallback((requestId)=>{
236
- requestStatesRef.current.delete(requestId);
237
- syncStateFromRequests();
238
- }, [
239
- syncStateFromRequests
240
- ]);
241
- const submit = useCallback(async (target, options)=>{
242
- setError(void 0);
243
- const requestId = ++requestIdRef.current;
244
- const normalizedMethod = (options?.method || 'post').toLowerCase();
245
- const isLoaderSubmit = 'get' === normalizedMethod;
246
- setRequestState(requestId, isLoaderSubmit ? 'loading' : 'submitting');
247
- try {
248
- const result = await submitRouteAction({
249
- router,
250
- target,
251
- options,
252
- isFetcher: true,
253
- onInvalidateStart: ()=>{
254
- if (!isLoaderSubmit) setRequestState(requestId, 'loading');
255
- }
256
- });
257
- setData(result);
258
- } catch (err) {
259
- setError(err);
260
- throw err;
261
- } finally{
262
- clearRequestState(requestId);
263
- }
264
- }, [
265
- clearRequestState,
266
- router,
267
- setRequestState
268
- ]);
269
- const FetcherForm = useCallback(({ action, method = 'get', encType, reloadDocument, onSubmit, ...rest })=>{
270
- const handleSubmit = async (event)=>{
271
- onSubmit?.(event);
272
- if (event.defaultPrevented || reloadDocument) return;
273
- event.preventDefault();
274
- const submitter = getSubmitter(event);
275
- const formData = createFormDataFromSubmit({
276
- form: event.currentTarget,
277
- submitter
278
- });
279
- const normalizedOptions = resolveSubmitOptionsFromForm({
280
- form: event.currentTarget,
281
- submitter,
282
- action,
283
- method,
284
- encType
285
- });
286
- await submit(formData, normalizedOptions);
287
- };
288
- return /*#__PURE__*/ jsx("form", {
289
- ...rest,
290
- action: action,
291
- method: method,
292
- encType: encType,
293
- onSubmit: handleSubmit
294
- });
295
- }, [
296
- submit
297
- ]);
298
- return {
299
- state,
300
- data,
301
- error,
302
- Form: FetcherForm,
303
- submit
304
- };
305
- }
306
- export { Form, RouteActionResponseError, useFetcher };