@modern-js/runtime 2.69.7 → 3.0.0-alpha.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 (677) hide show
  1. package/dist/cjs/cache/index.js +55 -19
  2. package/dist/cjs/cli/alias.js +63 -57
  3. package/dist/cjs/cli/code.js +155 -163
  4. package/dist/cjs/cli/constants.js +65 -49
  5. package/dist/cjs/cli/entry.js +50 -41
  6. package/dist/cjs/cli/index.js +143 -178
  7. package/dist/cjs/cli/ssr/index.js +164 -142
  8. package/dist/cjs/cli/ssr/loadable-bundler-plugin.js +94 -102
  9. package/dist/cjs/cli/ssr/mode.js +48 -0
  10. package/dist/cjs/cli/template.js +110 -123
  11. package/dist/cjs/cli/template.server.js +55 -47
  12. package/dist/cjs/common.js +41 -31
  13. package/dist/cjs/core/browser/hydrate.js +82 -84
  14. package/dist/cjs/core/browser/index.js +133 -147
  15. package/dist/cjs/core/browser/withCallback.js +43 -37
  16. package/dist/cjs/core/compat/hooks.js +65 -70
  17. package/dist/cjs/core/compat/index.js +42 -38
  18. package/dist/cjs/core/compat/requestContext.js +53 -43
  19. package/dist/cjs/core/config.js +33 -38
  20. package/dist/cjs/core/constants.js +45 -36
  21. package/dist/cjs/core/context/index.js +100 -82
  22. package/dist/cjs/core/context/monitors/default.js +39 -33
  23. package/dist/cjs/core/context/monitors/index.js +34 -28
  24. package/dist/cjs/core/context/monitors/index.server.js +37 -29
  25. package/dist/cjs/core/context/request/index.js +33 -27
  26. package/dist/cjs/core/context/request/index.server.js +36 -28
  27. package/dist/cjs/core/context/response/index.js +46 -39
  28. package/dist/cjs/core/context/response/index.server.js +64 -55
  29. package/dist/cjs/core/context/runtime.js +58 -38
  30. package/dist/cjs/core/context/serverPayload/index.js +37 -31
  31. package/dist/cjs/core/context/serverPayload/index.server.js +42 -35
  32. package/dist/cjs/core/index.js +40 -41
  33. package/dist/cjs/core/plugin/index.js +55 -46
  34. package/dist/cjs/core/plugin/types.js +17 -15
  35. package/dist/cjs/core/react/index.js +45 -37
  36. package/dist/cjs/core/react/wrapper.js +49 -39
  37. package/dist/cjs/core/server/constants.js +45 -34
  38. package/dist/cjs/core/server/helmet.js +64 -63
  39. package/dist/cjs/core/server/index.js +47 -37
  40. package/dist/cjs/core/server/react/index.js +37 -31
  41. package/dist/cjs/core/server/react/no-ssr-cache/index.js +40 -33
  42. package/dist/cjs/core/server/react/nossr/index.js +50 -43
  43. package/dist/cjs/core/server/requestHandler.js +193 -211
  44. package/dist/cjs/core/server/server.js +41 -31
  45. package/dist/cjs/core/server/shared.js +33 -25
  46. package/dist/cjs/core/server/stream/afterTemplate.js +92 -92
  47. package/dist/cjs/core/server/stream/beforeTemplate.js +98 -110
  48. package/dist/cjs/core/server/stream/createReadableStream.js +164 -149
  49. package/dist/cjs/core/server/stream/createReadableStream.worker.js +145 -160
  50. package/dist/cjs/core/server/stream/deferredScript.js +92 -84
  51. package/dist/cjs/core/server/stream/index.js +35 -37
  52. package/dist/cjs/core/server/stream/shared.js +107 -102
  53. package/dist/cjs/core/server/stream/template.js +43 -35
  54. package/dist/cjs/core/server/string/index.js +131 -132
  55. package/dist/cjs/core/server/string/loadable.js +131 -173
  56. package/dist/cjs/core/server/string/ssrData.js +129 -89
  57. package/dist/cjs/core/server/string/types.js +17 -15
  58. package/dist/cjs/core/server/tracer.js +49 -42
  59. package/dist/cjs/core/server/utils.js +70 -68
  60. package/dist/cjs/core/types.js +17 -15
  61. package/dist/cjs/document/Body.js +49 -41
  62. package/dist/cjs/document/Comment.js +44 -35
  63. package/dist/cjs/document/DocumentContext.js +47 -39
  64. package/dist/cjs/document/DocumentStructureContext.js +50 -42
  65. package/dist/cjs/document/Head.js +59 -50
  66. package/dist/cjs/document/Html.js +96 -95
  67. package/dist/cjs/document/Links.js +38 -29
  68. package/dist/cjs/document/Root.js +59 -53
  69. package/dist/cjs/document/Script.js +50 -42
  70. package/dist/cjs/document/Scripts.js +38 -29
  71. package/dist/cjs/document/Style.js +45 -36
  72. package/dist/cjs/document/Title.js +37 -29
  73. package/dist/cjs/document/cli/index.js +361 -210
  74. package/dist/cjs/document/constants.js +125 -95
  75. package/dist/cjs/document/index.js +132 -41
  76. package/dist/cjs/exports/config-routes.js +38 -0
  77. package/dist/cjs/exports/head.js +63 -38
  78. package/dist/cjs/exports/loadable.js +63 -38
  79. package/dist/cjs/index.js +61 -53
  80. package/dist/cjs/internal.js +36 -0
  81. package/dist/cjs/react-server.js +47 -35
  82. package/dist/cjs/router/cli/code/getClientRoutes/getRoutes.js +147 -185
  83. package/dist/cjs/router/cli/code/getClientRoutes/index.js +33 -28
  84. package/dist/cjs/router/cli/code/getClientRoutes/utils.js +57 -54
  85. package/dist/cjs/router/cli/code/index.js +173 -150
  86. package/dist/cjs/router/cli/code/inspect.js +139 -0
  87. package/dist/cjs/router/cli/code/makeLegalIdentifier.js +38 -32
  88. package/dist/cjs/router/cli/code/nestedRoutes.js +225 -286
  89. package/dist/cjs/router/cli/code/templates.js +334 -405
  90. package/dist/cjs/router/cli/code/utils.js +131 -132
  91. package/dist/cjs/router/cli/config-routes/converter.js +129 -0
  92. package/dist/cjs/router/cli/config-routes/parseRouteConfig.js +155 -0
  93. package/dist/cjs/router/cli/constants.js +92 -82
  94. package/dist/cjs/router/cli/entry.js +67 -86
  95. package/dist/cjs/router/cli/handler.js +109 -96
  96. package/dist/cjs/router/cli/index.js +131 -142
  97. package/dist/cjs/router/index.js +55 -19
  98. package/dist/cjs/router/internal.js +61 -27
  99. package/dist/cjs/router/runtime/DefaultNotFound.js +44 -35
  100. package/dist/cjs/router/runtime/DeferredDataScripts.js +34 -24
  101. package/dist/cjs/router/runtime/DeferredDataScripts.node.js +148 -146
  102. package/dist/cjs/router/runtime/PrefetchLink.js +190 -210
  103. package/dist/cjs/router/runtime/constants.js +61 -46
  104. package/dist/cjs/router/runtime/hooks.js +38 -29
  105. package/dist/cjs/router/runtime/index.js +92 -46
  106. package/dist/cjs/router/runtime/internal.js +44 -33
  107. package/dist/cjs/router/runtime/plugin.js +206 -225
  108. package/dist/cjs/router/runtime/plugin.node.js +177 -203
  109. package/dist/cjs/router/runtime/routerHelper.js +55 -0
  110. package/dist/cjs/router/runtime/rsc-router.js +272 -305
  111. package/dist/cjs/router/runtime/rsc.js +58 -0
  112. package/dist/cjs/router/runtime/server.js +55 -19
  113. package/dist/cjs/router/runtime/types.js +17 -15
  114. package/dist/cjs/router/runtime/utils.js +202 -228
  115. package/dist/cjs/router/runtime/withRouter.js +45 -39
  116. package/dist/cjs/rsc/client.js +65 -30
  117. package/dist/cjs/rsc/server.js +55 -19
  118. package/dist/esm/cli/alias.mjs +24 -0
  119. package/dist/esm/cli/code.mjs +119 -0
  120. package/dist/esm/cli/constants.mjs +10 -0
  121. package/dist/esm/cli/entry.mjs +6 -0
  122. package/dist/esm/cli/index.mjs +89 -0
  123. package/dist/esm/cli/ssr/index.mjs +125 -0
  124. package/dist/esm/cli/ssr/loadable-bundler-plugin.mjs +75 -0
  125. package/dist/esm/cli/ssr/mode.mjs +14 -0
  126. package/dist/{esm-node/cli/template.js → esm/cli/template.mjs} +45 -82
  127. package/dist/esm/cli/template.server.mjs +147 -0
  128. package/dist/esm/common.mjs +4 -0
  129. package/dist/esm/core/browser/hydrate.mjs +53 -0
  130. package/dist/esm/core/browser/index.mjs +96 -0
  131. package/dist/esm/core/browser/withCallback.mjs +13 -0
  132. package/dist/esm/core/compat/hooks.mjs +35 -0
  133. package/dist/esm/core/compat/index.mjs +12 -0
  134. package/dist/esm/core/compat/requestContext.mjs +21 -0
  135. package/dist/esm/core/config.mjs +2 -0
  136. package/dist/esm/core/constants.mjs +8 -0
  137. package/dist/esm/core/context/index.mjs +45 -0
  138. package/dist/esm/core/context/monitors/default.mjs +10 -0
  139. package/dist/esm/core/context/monitors/index.mjs +3 -0
  140. package/dist/esm/core/context/monitors/index.server.mjs +7 -0
  141. package/dist/esm/core/context/request/index.mjs +2 -0
  142. package/dist/esm/core/context/request/index.server.mjs +6 -0
  143. package/dist/esm/core/context/response/index.mjs +7 -0
  144. package/dist/esm/core/context/response/index.server.mjs +28 -0
  145. package/dist/esm/core/context/runtime.mjs +15 -0
  146. package/dist/esm/core/context/serverPayload/index.mjs +3 -0
  147. package/dist/esm/core/context/serverPayload/index.server.mjs +10 -0
  148. package/dist/esm/core/index.mjs +3 -0
  149. package/dist/esm/core/plugin/index.mjs +25 -0
  150. package/dist/esm/core/react/index.mjs +16 -0
  151. package/dist/esm/core/react/wrapper.mjs +20 -0
  152. package/dist/esm/core/server/constants.mjs +5 -0
  153. package/dist/esm/core/server/helmet.mjs +38 -0
  154. package/dist/esm/core/server/index.mjs +7 -0
  155. package/dist/esm/core/server/react/index.mjs +3 -0
  156. package/dist/esm/core/server/react/no-ssr-cache/index.mjs +9 -0
  157. package/dist/esm/core/server/react/nossr/index.mjs +10 -0
  158. package/dist/esm/core/server/requestHandler.mjs +161 -0
  159. package/dist/{esm-node/core/server/server.js → esm/core/server/server.mjs} +1 -5
  160. package/dist/esm/core/server/shared.mjs +4 -0
  161. package/dist/esm/core/server/stream/afterTemplate.mjs +66 -0
  162. package/dist/esm/core/server/stream/beforeTemplate.mjs +63 -0
  163. package/dist/esm/core/server/stream/createReadableStream.mjs +128 -0
  164. package/dist/esm/core/server/stream/createReadableStream.worker.mjs +109 -0
  165. package/dist/esm/core/server/stream/deferredScript.mjs +62 -0
  166. package/dist/esm/core/server/stream/index.mjs +4 -0
  167. package/dist/esm/core/server/stream/shared.mjs +75 -0
  168. package/dist/esm/core/server/stream/template.mjs +13 -0
  169. package/dist/esm/core/server/string/index.mjs +101 -0
  170. package/dist/esm/core/server/string/loadable.mjs +112 -0
  171. package/dist/esm/core/server/string/ssrData.mjs +104 -0
  172. package/dist/esm/core/server/tracer.mjs +15 -0
  173. package/dist/esm/core/server/utils.mjs +39 -0
  174. package/dist/esm/document/Body.mjs +20 -0
  175. package/dist/esm/document/Comment.mjs +15 -0
  176. package/dist/esm/document/DocumentContext.mjs +7 -0
  177. package/dist/esm/document/DocumentStructureContext.mjs +10 -0
  178. package/dist/esm/document/Head.mjs +29 -0
  179. package/dist/esm/document/Html.mjs +74 -0
  180. package/dist/esm/document/Links.mjs +9 -0
  181. package/dist/esm/document/Root.mjs +29 -0
  182. package/dist/esm/document/Script.mjs +21 -0
  183. package/dist/esm/document/Scripts.mjs +9 -0
  184. package/dist/esm/document/Style.mjs +16 -0
  185. package/dist/esm/document/Title.mjs +8 -0
  186. package/dist/esm/document/cli/index.mjs +323 -0
  187. package/dist/esm/document/constants.mjs +34 -0
  188. package/dist/esm/exports/config-routes.mjs +4 -0
  189. package/dist/esm/exports/head.mjs +4 -0
  190. package/dist/esm/exports/loadable.mjs +4 -0
  191. package/dist/esm/index.mjs +6 -0
  192. package/dist/esm/internal.mjs +2 -0
  193. package/dist/esm/react-server.mjs +4 -0
  194. package/dist/esm/router/cli/code/getClientRoutes/getRoutes.mjs +115 -0
  195. package/dist/esm/router/cli/code/getClientRoutes/index.mjs +2 -0
  196. package/dist/esm/router/cli/code/getClientRoutes/utils.mjs +12 -0
  197. package/dist/esm/router/cli/code/index.mjs +132 -0
  198. package/dist/esm/router/cli/code/inspect.mjs +95 -0
  199. package/dist/esm/router/cli/code/makeLegalIdentifier.mjs +9 -0
  200. package/dist/esm/router/cli/code/nestedRoutes.mjs +193 -0
  201. package/dist/esm/router/cli/code/templates.mjs +365 -0
  202. package/dist/esm/router/cli/code/utils.mjs +73 -0
  203. package/dist/esm/router/cli/config-routes/converter.mjs +82 -0
  204. package/dist/esm/router/cli/config-routes/parseRouteConfig.mjs +105 -0
  205. package/dist/esm/router/cli/constants.mjs +32 -0
  206. package/dist/esm/router/cli/entry.mjs +22 -0
  207. package/dist/esm/router/cli/handler.mjs +66 -0
  208. package/dist/esm/router/cli/index.mjs +80 -0
  209. package/dist/{esm-node/router/internal.js → esm/router/internal.mjs} +2 -4
  210. package/dist/esm/router/runtime/DefaultNotFound.mjs +13 -0
  211. package/dist/esm/router/runtime/DeferredDataScripts.mjs +2 -0
  212. package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +120 -0
  213. package/dist/esm/router/runtime/PrefetchLink.mjs +161 -0
  214. package/dist/{esm-node/router/runtime/constants.js → esm/router/runtime/constants.mjs} +7 -16
  215. package/dist/esm/router/runtime/hooks.mjs +4 -0
  216. package/dist/esm/router/runtime/index.mjs +9 -0
  217. package/dist/esm/router/runtime/internal.mjs +4 -0
  218. package/dist/esm/router/runtime/plugin.mjs +181 -0
  219. package/dist/esm/router/runtime/plugin.node.mjs +136 -0
  220. package/dist/esm/router/runtime/routerHelper.mjs +15 -0
  221. package/dist/esm/router/runtime/rsc-router.mjs +233 -0
  222. package/dist/esm/router/runtime/rsc.mjs +1 -0
  223. package/dist/esm/router/runtime/server.mjs +1 -0
  224. package/dist/esm/router/runtime/utils.mjs +165 -0
  225. package/dist/esm/router/runtime/withRouter.mjs +14 -0
  226. package/dist/esm/rsc/client.mjs +3 -0
  227. package/dist/esm-node/cli/alias.mjs +24 -0
  228. package/dist/esm-node/cli/code.mjs +119 -0
  229. package/dist/esm-node/cli/constants.mjs +10 -0
  230. package/dist/esm-node/cli/entry.mjs +6 -0
  231. package/dist/esm-node/cli/index.mjs +89 -0
  232. package/dist/esm-node/cli/ssr/index.mjs +125 -0
  233. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +75 -0
  234. package/dist/esm-node/cli/ssr/mode.mjs +14 -0
  235. package/dist/esm-node/cli/template.mjs +168 -0
  236. package/dist/esm-node/cli/{template.server.js → template.server.mjs} +20 -24
  237. package/dist/esm-node/common.mjs +4 -0
  238. package/dist/esm-node/core/browser/hydrate.mjs +53 -0
  239. package/dist/esm-node/core/browser/index.mjs +96 -0
  240. package/dist/esm-node/core/browser/withCallback.mjs +13 -0
  241. package/dist/esm-node/core/compat/hooks.mjs +35 -0
  242. package/dist/esm-node/core/compat/index.mjs +12 -0
  243. package/dist/esm-node/core/compat/requestContext.mjs +21 -0
  244. package/dist/esm-node/core/config.mjs +2 -0
  245. package/dist/esm-node/core/constants.mjs +8 -0
  246. package/dist/esm-node/core/context/index.mjs +45 -0
  247. package/dist/esm-node/core/context/monitors/default.mjs +10 -0
  248. package/dist/esm-node/core/context/monitors/index.mjs +3 -0
  249. package/dist/esm-node/core/context/monitors/index.server.mjs +7 -0
  250. package/dist/esm-node/core/context/request/index.mjs +2 -0
  251. package/dist/esm-node/core/context/request/index.server.mjs +6 -0
  252. package/dist/esm-node/core/context/response/index.mjs +7 -0
  253. package/dist/esm-node/core/context/response/index.server.mjs +28 -0
  254. package/dist/esm-node/core/context/runtime.mjs +15 -0
  255. package/dist/esm-node/core/context/serverPayload/index.mjs +3 -0
  256. package/dist/esm-node/core/context/serverPayload/index.server.mjs +10 -0
  257. package/dist/esm-node/core/index.mjs +3 -0
  258. package/dist/esm-node/core/plugin/index.mjs +25 -0
  259. package/dist/esm-node/core/react/index.mjs +16 -0
  260. package/dist/esm-node/core/react/wrapper.mjs +20 -0
  261. package/dist/esm-node/core/server/constants.mjs +5 -0
  262. package/dist/esm-node/core/server/helmet.mjs +38 -0
  263. package/dist/esm-node/core/server/index.mjs +7 -0
  264. package/dist/esm-node/core/server/react/index.mjs +3 -0
  265. package/dist/esm-node/core/server/react/no-ssr-cache/index.mjs +9 -0
  266. package/dist/esm-node/core/server/react/nossr/index.mjs +10 -0
  267. package/dist/esm-node/core/server/requestHandler.mjs +161 -0
  268. package/dist/esm-node/core/server/server.mjs +4 -0
  269. package/dist/esm-node/core/server/shared.mjs +4 -0
  270. package/dist/esm-node/core/server/stream/afterTemplate.mjs +66 -0
  271. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +63 -0
  272. package/dist/esm-node/core/server/stream/createReadableStream.mjs +128 -0
  273. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +109 -0
  274. package/dist/esm-node/core/server/stream/deferredScript.mjs +62 -0
  275. package/dist/esm-node/core/server/stream/index.mjs +4 -0
  276. package/dist/esm-node/core/server/stream/shared.mjs +75 -0
  277. package/dist/esm-node/core/server/stream/template.mjs +13 -0
  278. package/dist/esm-node/core/server/string/index.mjs +101 -0
  279. package/dist/esm-node/core/server/string/loadable.mjs +112 -0
  280. package/dist/esm-node/core/server/string/ssrData.mjs +104 -0
  281. package/dist/esm-node/core/server/tracer.mjs +15 -0
  282. package/dist/esm-node/core/server/utils.mjs +39 -0
  283. package/dist/esm-node/document/Body.mjs +20 -0
  284. package/dist/esm-node/document/Comment.mjs +15 -0
  285. package/dist/esm-node/document/DocumentContext.mjs +7 -0
  286. package/dist/esm-node/document/DocumentStructureContext.mjs +10 -0
  287. package/dist/esm-node/document/Head.mjs +29 -0
  288. package/dist/esm-node/document/Html.mjs +74 -0
  289. package/dist/esm-node/document/Links.mjs +9 -0
  290. package/dist/esm-node/document/Root.mjs +29 -0
  291. package/dist/esm-node/document/Script.mjs +21 -0
  292. package/dist/esm-node/document/Scripts.mjs +9 -0
  293. package/dist/esm-node/document/Style.mjs +16 -0
  294. package/dist/esm-node/document/Title.mjs +8 -0
  295. package/dist/esm-node/document/cli/index.mjs +323 -0
  296. package/dist/esm-node/document/constants.mjs +34 -0
  297. package/dist/esm-node/document/index.mjs +12 -0
  298. package/dist/esm-node/exports/config-routes.mjs +4 -0
  299. package/dist/esm-node/exports/head.mjs +4 -0
  300. package/dist/esm-node/exports/loadable.mjs +4 -0
  301. package/dist/esm-node/index.mjs +6 -0
  302. package/dist/esm-node/internal.mjs +2 -0
  303. package/dist/esm-node/react-server.mjs +4 -0
  304. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutes.mjs +115 -0
  305. package/dist/esm-node/router/cli/code/getClientRoutes/index.mjs +2 -0
  306. package/dist/esm-node/router/cli/code/getClientRoutes/utils.mjs +12 -0
  307. package/dist/esm-node/router/cli/code/index.mjs +132 -0
  308. package/dist/esm-node/router/cli/code/inspect.mjs +95 -0
  309. package/dist/esm-node/router/cli/code/{makeLegalIdentifier.js → makeLegalIdentifier.mjs} +7 -11
  310. package/dist/esm-node/router/cli/code/nestedRoutes.mjs +193 -0
  311. package/dist/esm-node/router/cli/code/templates.mjs +365 -0
  312. package/dist/esm-node/router/cli/code/utils.mjs +73 -0
  313. package/dist/esm-node/router/cli/config-routes/converter.mjs +82 -0
  314. package/dist/esm-node/router/cli/config-routes/parseRouteConfig.mjs +105 -0
  315. package/dist/esm-node/router/cli/constants.mjs +32 -0
  316. package/dist/esm-node/router/cli/entry.mjs +22 -0
  317. package/dist/esm-node/router/cli/handler.mjs +66 -0
  318. package/dist/esm-node/router/cli/index.mjs +80 -0
  319. package/dist/esm-node/router/index.mjs +1 -0
  320. package/dist/esm-node/router/internal.mjs +3 -0
  321. package/dist/esm-node/router/runtime/DefaultNotFound.mjs +13 -0
  322. package/dist/esm-node/router/runtime/DeferredDataScripts.mjs +2 -0
  323. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +120 -0
  324. package/dist/esm-node/router/runtime/PrefetchLink.mjs +161 -0
  325. package/dist/esm-node/router/runtime/constants.mjs +10 -0
  326. package/dist/esm-node/router/runtime/hooks.mjs +4 -0
  327. package/dist/esm-node/router/runtime/index.mjs +9 -0
  328. package/dist/esm-node/router/runtime/internal.mjs +4 -0
  329. package/dist/esm-node/router/runtime/plugin.mjs +181 -0
  330. package/dist/esm-node/router/runtime/plugin.node.mjs +136 -0
  331. package/dist/esm-node/router/runtime/routerHelper.mjs +15 -0
  332. package/dist/esm-node/router/runtime/rsc-router.mjs +233 -0
  333. package/dist/esm-node/router/runtime/rsc.mjs +1 -0
  334. package/dist/esm-node/router/runtime/server.mjs +1 -0
  335. package/dist/esm-node/router/runtime/utils.mjs +165 -0
  336. package/dist/esm-node/router/runtime/withRouter.mjs +14 -0
  337. package/dist/esm-node/rsc/client.mjs +3 -0
  338. package/dist/types/cli/code.d.ts +1 -1
  339. package/dist/types/cli/index.d.ts +3 -3
  340. package/dist/types/cli/ssr/index.d.ts +2 -2
  341. package/dist/types/cli/ssr/mode.d.ts +15 -0
  342. package/dist/types/cli/template.d.ts +3 -3
  343. package/dist/types/common.d.ts +2 -7
  344. package/dist/types/core/browser/hydrate.d.ts +2 -2
  345. package/dist/types/core/browser/index.d.ts +3 -1
  346. package/dist/types/core/compat/hooks.d.ts +2 -2
  347. package/dist/types/core/compat/index.d.ts +2 -2
  348. package/dist/types/core/compat/requestContext.d.ts +5 -24
  349. package/dist/types/core/config.d.ts +1 -8
  350. package/dist/types/core/constants.d.ts +0 -1
  351. package/dist/types/core/context/index.d.ts +9 -13
  352. package/dist/types/core/context/monitors/index.d.ts +1 -1
  353. package/dist/types/core/context/runtime.d.ts +26 -29
  354. package/dist/types/core/context/serverPayload/index.server.d.ts +1 -1
  355. package/dist/types/core/index.d.ts +4 -7
  356. package/dist/types/core/plugin/index.d.ts +13 -13
  357. package/dist/types/core/plugin/types.d.ts +9 -10
  358. package/dist/types/core/react/wrapper.d.ts +3 -3
  359. package/dist/types/core/server/index.d.ts +3 -3
  360. package/dist/types/core/server/react/index.d.ts +0 -1
  361. package/dist/types/core/server/requestHandler.d.ts +3 -3
  362. package/dist/types/core/server/stream/afterTemplate.d.ts +2 -2
  363. package/dist/types/core/server/stream/beforeTemplate.d.ts +2 -2
  364. package/dist/types/core/server/stream/shared.d.ts +2 -2
  365. package/dist/types/core/server/string/loadable.d.ts +2 -2
  366. package/dist/types/core/server/string/ssrData.d.ts +3 -2
  367. package/dist/types/core/server/tracer.d.ts +1 -3
  368. package/dist/types/core/server/utils.d.ts +2 -3
  369. package/dist/types/core/types.d.ts +4 -16
  370. package/dist/types/document/DocumentContext.d.ts +1 -1
  371. package/dist/types/document/cli/index.d.ts +3 -3
  372. package/dist/types/document/constants.d.ts +3 -1
  373. package/dist/types/exports/config-routes.d.ts +9 -0
  374. package/dist/types/index.d.ts +4 -5
  375. package/dist/types/internal.d.ts +2 -0
  376. package/dist/types/router/cli/code/getClientRoutes/index.d.ts +0 -1
  377. package/dist/types/router/cli/code/getClientRoutes/utils.d.ts +0 -1
  378. package/dist/types/router/cli/code/index.d.ts +7 -3
  379. package/dist/types/router/cli/code/inspect.d.ts +22 -0
  380. package/dist/types/router/cli/code/nestedRoutes.d.ts +10 -4
  381. package/dist/types/router/cli/code/templates.d.ts +3 -2
  382. package/dist/types/router/cli/config-routes/converter.d.ts +15 -0
  383. package/dist/types/router/cli/config-routes/parseRouteConfig.d.ts +32 -0
  384. package/dist/types/router/cli/constants.d.ts +0 -3
  385. package/dist/types/router/cli/entry.d.ts +1 -2
  386. package/dist/types/router/cli/handler.d.ts +4 -4
  387. package/dist/types/router/cli/index.d.ts +2 -4
  388. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -1
  389. package/dist/types/router/runtime/hooks.d.ts +3 -3
  390. package/dist/types/router/runtime/index.d.ts +0 -1
  391. package/dist/types/router/runtime/plugin.d.ts +2 -2
  392. package/dist/types/router/runtime/plugin.node.d.ts +2 -2
  393. package/dist/types/router/runtime/{routeModule.d.ts → routerHelper.d.ts} +1 -1
  394. package/dist/types/router/runtime/rsc-router.d.ts +2 -2
  395. package/dist/types/router/runtime/rsc.d.ts +1 -0
  396. package/dist/types/router/runtime/server.d.ts +1 -1
  397. package/dist/types/router/runtime/types.d.ts +0 -1
  398. package/dist/types/router/runtime/utils.d.ts +5 -4
  399. package/package.json +90 -80
  400. package/rslib.config.mts +19 -0
  401. package/dist/cjs/cli/ssr/babel-plugin-ssr-loader-id.js +0 -133
  402. package/dist/cjs/config.js +0 -16
  403. package/dist/cjs/core/compatible.js +0 -192
  404. package/dist/cjs/core/loader/index.js +0 -38
  405. package/dist/cjs/core/loader/loaderManager.js +0 -186
  406. package/dist/cjs/core/loader/useLoader.js +0 -114
  407. package/dist/cjs/core/plugin/base.js +0 -16
  408. package/dist/cjs/core/server/react/prerender/index.js +0 -124
  409. package/dist/cjs/core/server/react/prerender/type.js +0 -16
  410. package/dist/cjs/core/server/react/prerender/util.js +0 -121
  411. package/dist/cjs/core/server/string/prefetch.js +0 -93
  412. package/dist/cjs/core/server/string/styledComponent.js +0 -53
  413. package/dist/cjs/exports/server.js +0 -28
  414. package/dist/cjs/exports/styled.js +0 -41
  415. package/dist/cjs/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -195
  416. package/dist/cjs/router/runtime/routeModule.js +0 -52
  417. package/dist/esm/cli/alias.js +0 -30
  418. package/dist/esm/cli/code.js +0 -265
  419. package/dist/esm/cli/constants.js +0 -20
  420. package/dist/esm/cli/entry.js +0 -15
  421. package/dist/esm/cli/index.js +0 -170
  422. package/dist/esm/cli/ssr/babel-plugin-ssr-loader-id.js +0 -118
  423. package/dist/esm/cli/ssr/index.js +0 -143
  424. package/dist/esm/cli/ssr/loadable-bundler-plugin.js +0 -102
  425. package/dist/esm/cli/template.js +0 -98
  426. package/dist/esm/cli/template.server.js +0 -34
  427. package/dist/esm/common.js +0 -10
  428. package/dist/esm/core/browser/hydrate.js +0 -75
  429. package/dist/esm/core/browser/index.js +0 -279
  430. package/dist/esm/core/browser/withCallback.js +0 -18
  431. package/dist/esm/core/compat/hooks.js +0 -88
  432. package/dist/esm/core/compat/index.js +0 -20
  433. package/dist/esm/core/compat/requestContext.js +0 -25
  434. package/dist/esm/core/compatible.js +0 -215
  435. package/dist/esm/core/config.js +0 -19
  436. package/dist/esm/core/constants.js +0 -13
  437. package/dist/esm/core/context/index.js +0 -67
  438. package/dist/esm/core/context/monitors/default.js +0 -20
  439. package/dist/esm/core/context/monitors/index.js +0 -7
  440. package/dist/esm/core/context/monitors/index.server.js +0 -9
  441. package/dist/esm/core/context/request/index.js +0 -6
  442. package/dist/esm/core/context/request/index.server.js +0 -8
  443. package/dist/esm/core/context/response/index.js +0 -16
  444. package/dist/esm/core/context/response/index.server.js +0 -41
  445. package/dist/esm/core/context/runtime.js +0 -18
  446. package/dist/esm/core/context/serverPayload/index.js +0 -9
  447. package/dist/esm/core/context/serverPayload/index.server.js +0 -15
  448. package/dist/esm/core/index.js +0 -12
  449. package/dist/esm/core/loader/index.js +0 -4
  450. package/dist/esm/core/loader/loaderManager.js +0 -234
  451. package/dist/esm/core/loader/useLoader.js +0 -89
  452. package/dist/esm/core/plugin/base.js +0 -0
  453. package/dist/esm/core/plugin/index.js +0 -33
  454. package/dist/esm/core/plugin/types.js +0 -0
  455. package/dist/esm/core/react/index.js +0 -18
  456. package/dist/esm/core/react/wrapper.js +0 -10
  457. package/dist/esm/core/server/constants.js +0 -10
  458. package/dist/esm/core/server/helmet.js +0 -53
  459. package/dist/esm/core/server/index.js +0 -17
  460. package/dist/esm/core/server/react/index.js +0 -8
  461. package/dist/esm/core/server/react/no-ssr-cache/index.js +0 -12
  462. package/dist/esm/core/server/react/nossr/index.js +0 -14
  463. package/dist/esm/core/server/react/prerender/index.js +0 -105
  464. package/dist/esm/core/server/react/prerender/type.js +0 -0
  465. package/dist/esm/core/server/react/prerender/util.js +0 -114
  466. package/dist/esm/core/server/requestHandler.js +0 -330
  467. package/dist/esm/core/server/server.js +0 -8
  468. package/dist/esm/core/server/shared.js +0 -10
  469. package/dist/esm/core/server/stream/afterTemplate.js +0 -107
  470. package/dist/esm/core/server/stream/beforeTemplate.js +0 -188
  471. package/dist/esm/core/server/stream/createReadableStream.js +0 -165
  472. package/dist/esm/core/server/stream/createReadableStream.worker.js +0 -239
  473. package/dist/esm/core/server/stream/deferredScript.js +0 -85
  474. package/dist/esm/core/server/stream/index.js +0 -10
  475. package/dist/esm/core/server/stream/shared.js +0 -113
  476. package/dist/esm/core/server/stream/template.js +0 -42
  477. package/dist/esm/core/server/string/index.js +0 -189
  478. package/dist/esm/core/server/string/loadable.js +0 -336
  479. package/dist/esm/core/server/string/prefetch.js +0 -105
  480. package/dist/esm/core/server/string/ssrData.js +0 -82
  481. package/dist/esm/core/server/string/styledComponent.js +0 -34
  482. package/dist/esm/core/server/string/types.js +0 -0
  483. package/dist/esm/core/server/tracer.js +0 -20
  484. package/dist/esm/core/server/utils.js +0 -80
  485. package/dist/esm/core/types.js +0 -0
  486. package/dist/esm/document/Body.js +0 -26
  487. package/dist/esm/document/Comment.js +0 -16
  488. package/dist/esm/document/DocumentContext.js +0 -9
  489. package/dist/esm/document/DocumentStructureContext.js +0 -12
  490. package/dist/esm/document/Head.js +0 -36
  491. package/dist/esm/document/Html.js +0 -108
  492. package/dist/esm/document/Links.js +0 -10
  493. package/dist/esm/document/Root.js +0 -41
  494. package/dist/esm/document/Script.js +0 -25
  495. package/dist/esm/document/Scripts.js +0 -10
  496. package/dist/esm/document/Style.js +0 -17
  497. package/dist/esm/document/Title.js +0 -10
  498. package/dist/esm/document/cli/index.js +0 -282
  499. package/dist/esm/document/constants.js +0 -56
  500. package/dist/esm/document/index.js +0 -12
  501. package/dist/esm/exports/head.js +0 -6
  502. package/dist/esm/exports/loadable.js +0 -6
  503. package/dist/esm/exports/server.js +0 -6
  504. package/dist/esm/exports/styled.js +0 -6
  505. package/dist/esm/index.js +0 -20
  506. package/dist/esm/react-server.js +0 -10
  507. package/dist/esm/router/cli/code/getClientRoutes/getRoutes.js +0 -185
  508. package/dist/esm/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -183
  509. package/dist/esm/router/cli/code/getClientRoutes/index.js +0 -6
  510. package/dist/esm/router/cli/code/getClientRoutes/utils.js +0 -28
  511. package/dist/esm/router/cli/code/index.js +0 -255
  512. package/dist/esm/router/cli/code/makeLegalIdentifier.js +0 -15
  513. package/dist/esm/router/cli/code/nestedRoutes.js +0 -397
  514. package/dist/esm/router/cli/code/templates.js +0 -554
  515. package/dist/esm/router/cli/code/utils.js +0 -212
  516. package/dist/esm/router/cli/constants.js +0 -51
  517. package/dist/esm/router/cli/entry.js +0 -61
  518. package/dist/esm/router/cli/handler.js +0 -191
  519. package/dist/esm/router/cli/index.js +0 -202
  520. package/dist/esm/router/index.js +0 -1
  521. package/dist/esm/router/internal.js +0 -5
  522. package/dist/esm/router/runtime/DefaultNotFound.js +0 -16
  523. package/dist/esm/router/runtime/DeferredDataScripts.js +0 -7
  524. package/dist/esm/router/runtime/DeferredDataScripts.node.js +0 -138
  525. package/dist/esm/router/runtime/PrefetchLink.js +0 -247
  526. package/dist/esm/router/runtime/constants.js +0 -19
  527. package/dist/esm/router/runtime/hooks.js +0 -7
  528. package/dist/esm/router/runtime/index.js +0 -17
  529. package/dist/esm/router/runtime/internal.js +0 -10
  530. package/dist/esm/router/runtime/plugin.js +0 -216
  531. package/dist/esm/router/runtime/plugin.node.js +0 -235
  532. package/dist/esm/router/runtime/routeModule.js +0 -26
  533. package/dist/esm/router/runtime/rsc-router.js +0 -437
  534. package/dist/esm/router/runtime/server.js +0 -1
  535. package/dist/esm/router/runtime/types.js +0 -0
  536. package/dist/esm/router/runtime/utils.js +0 -296
  537. package/dist/esm/router/runtime/withRouter.js +0 -19
  538. package/dist/esm/rsc/client.js +0 -7
  539. package/dist/esm-node/cli/alias.js +0 -28
  540. package/dist/esm-node/cli/code.js +0 -137
  541. package/dist/esm-node/cli/constants.js +0 -20
  542. package/dist/esm-node/cli/entry.js +0 -9
  543. package/dist/esm-node/cli/index.js +0 -145
  544. package/dist/esm-node/cli/ssr/babel-plugin-ssr-loader-id.js +0 -119
  545. package/dist/esm-node/cli/ssr/index.js +0 -116
  546. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.js +0 -97
  547. package/dist/esm-node/common.js +0 -8
  548. package/dist/esm-node/core/browser/hydrate.js +0 -68
  549. package/dist/esm-node/core/browser/index.js +0 -128
  550. package/dist/esm-node/core/browser/withCallback.js +0 -17
  551. package/dist/esm-node/core/compat/hooks.js +0 -54
  552. package/dist/esm-node/core/compat/index.js +0 -18
  553. package/dist/esm-node/core/compat/requestContext.js +0 -23
  554. package/dist/esm-node/core/compatible.js +0 -156
  555. package/dist/esm-node/core/config.js +0 -15
  556. package/dist/esm-node/core/constants.js +0 -13
  557. package/dist/esm-node/core/context/index.js +0 -67
  558. package/dist/esm-node/core/context/monitors/default.js +0 -14
  559. package/dist/esm-node/core/context/monitors/index.js +0 -7
  560. package/dist/esm-node/core/context/monitors/index.server.js +0 -9
  561. package/dist/esm-node/core/context/request/index.js +0 -6
  562. package/dist/esm-node/core/context/request/index.server.js +0 -8
  563. package/dist/esm-node/core/context/response/index.js +0 -16
  564. package/dist/esm-node/core/context/response/index.server.js +0 -35
  565. package/dist/esm-node/core/context/runtime.js +0 -15
  566. package/dist/esm-node/core/context/serverPayload/index.js +0 -9
  567. package/dist/esm-node/core/context/serverPayload/index.server.js +0 -15
  568. package/dist/esm-node/core/index.js +0 -12
  569. package/dist/esm-node/core/loader/index.js +0 -4
  570. package/dist/esm-node/core/loader/loaderManager.js +0 -151
  571. package/dist/esm-node/core/loader/useLoader.js +0 -84
  572. package/dist/esm-node/core/plugin/index.js +0 -28
  573. package/dist/esm-node/core/react/index.js +0 -18
  574. package/dist/esm-node/core/react/wrapper.js +0 -10
  575. package/dist/esm-node/core/server/constants.js +0 -10
  576. package/dist/esm-node/core/server/helmet.js +0 -49
  577. package/dist/esm-node/core/server/index.js +0 -13
  578. package/dist/esm-node/core/server/react/index.js +0 -8
  579. package/dist/esm-node/core/server/react/no-ssr-cache/index.js +0 -12
  580. package/dist/esm-node/core/server/react/nossr/index.js +0 -13
  581. package/dist/esm-node/core/server/react/prerender/index.js +0 -90
  582. package/dist/esm-node/core/server/react/prerender/util.js +0 -93
  583. package/dist/esm-node/core/server/requestHandler.js +0 -199
  584. package/dist/esm-node/core/server/shared.js +0 -6
  585. package/dist/esm-node/core/server/stream/afterTemplate.js +0 -76
  586. package/dist/esm-node/core/server/stream/beforeTemplate.js +0 -85
  587. package/dist/esm-node/core/server/stream/createReadableStream.js +0 -123
  588. package/dist/esm-node/core/server/stream/createReadableStream.worker.js +0 -134
  589. package/dist/esm-node/core/server/stream/deferredScript.js +0 -76
  590. package/dist/esm-node/core/server/stream/index.js +0 -6
  591. package/dist/esm-node/core/server/stream/shared.js +0 -86
  592. package/dist/esm-node/core/server/stream/template.js +0 -15
  593. package/dist/esm-node/core/server/string/index.js +0 -113
  594. package/dist/esm-node/core/server/string/loadable.js +0 -154
  595. package/dist/esm-node/core/server/string/prefetch.js +0 -69
  596. package/dist/esm-node/core/server/string/ssrData.js +0 -74
  597. package/dist/esm-node/core/server/string/styledComponent.js +0 -29
  598. package/dist/esm-node/core/server/tracer.js +0 -20
  599. package/dist/esm-node/core/server/utils.js +0 -57
  600. package/dist/esm-node/document/Body.js +0 -22
  601. package/dist/esm-node/document/Comment.js +0 -16
  602. package/dist/esm-node/document/DocumentContext.js +0 -9
  603. package/dist/esm-node/document/DocumentStructureContext.js +0 -12
  604. package/dist/esm-node/document/Head.js +0 -32
  605. package/dist/esm-node/document/Html.js +0 -83
  606. package/dist/esm-node/document/Links.js +0 -10
  607. package/dist/esm-node/document/Root.js +0 -35
  608. package/dist/esm-node/document/Script.js +0 -23
  609. package/dist/esm-node/document/Scripts.js +0 -10
  610. package/dist/esm-node/document/Style.js +0 -17
  611. package/dist/esm-node/document/Title.js +0 -10
  612. package/dist/esm-node/document/cli/index.js +0 -188
  613. package/dist/esm-node/document/constants.js +0 -58
  614. package/dist/esm-node/exports/head.js +0 -6
  615. package/dist/esm-node/exports/loadable.js +0 -6
  616. package/dist/esm-node/exports/server.js +0 -4
  617. package/dist/esm-node/exports/styled.js +0 -6
  618. package/dist/esm-node/index.js +0 -20
  619. package/dist/esm-node/react-server.js +0 -10
  620. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutes.js +0 -163
  621. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -161
  622. package/dist/esm-node/router/cli/code/getClientRoutes/index.js +0 -6
  623. package/dist/esm-node/router/cli/code/getClientRoutes/utils.js +0 -22
  624. package/dist/esm-node/router/cli/code/index.js +0 -126
  625. package/dist/esm-node/router/cli/code/nestedRoutes.js +0 -258
  626. package/dist/esm-node/router/cli/code/templates.js +0 -452
  627. package/dist/esm-node/router/cli/code/utils.js +0 -101
  628. package/dist/esm-node/router/cli/constants.js +0 -51
  629. package/dist/esm-node/router/cli/entry.js +0 -54
  630. package/dist/esm-node/router/cli/handler.js +0 -67
  631. package/dist/esm-node/router/cli/index.js +0 -110
  632. package/dist/esm-node/router/runtime/DefaultNotFound.js +0 -14
  633. package/dist/esm-node/router/runtime/DeferredDataScripts.js +0 -6
  634. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +0 -132
  635. package/dist/esm-node/router/runtime/PrefetchLink.js +0 -192
  636. package/dist/esm-node/router/runtime/hooks.js +0 -7
  637. package/dist/esm-node/router/runtime/index.js +0 -17
  638. package/dist/esm-node/router/runtime/internal.js +0 -10
  639. package/dist/esm-node/router/runtime/plugin.js +0 -206
  640. package/dist/esm-node/router/runtime/plugin.node.js +0 -174
  641. package/dist/esm-node/router/runtime/routeModule.js +0 -26
  642. package/dist/esm-node/router/runtime/rsc-router.js +0 -284
  643. package/dist/esm-node/router/runtime/server.js +0 -1
  644. package/dist/esm-node/router/runtime/utils.js +0 -218
  645. package/dist/esm-node/router/runtime/withRouter.js +0 -18
  646. package/dist/esm-node/rsc/client.js +0 -7
  647. package/dist/types/cli/ssr/babel-plugin-ssr-loader-id.d.ts +0 -1
  648. package/dist/types/config.d.ts +0 -6
  649. package/dist/types/core/compatible.d.ts +0 -24
  650. package/dist/types/core/loader/index.d.ts +0 -1
  651. package/dist/types/core/loader/loaderManager.d.ts +0 -56
  652. package/dist/types/core/loader/useLoader.d.ts +0 -36
  653. package/dist/types/core/plugin/base.d.ts +0 -15
  654. package/dist/types/core/server/react/prerender/index.d.ts +0 -5
  655. package/dist/types/core/server/react/prerender/type.d.ts +0 -29
  656. package/dist/types/core/server/react/prerender/util.d.ts +0 -6
  657. package/dist/types/core/server/string/prefetch.d.ts +0 -16
  658. package/dist/types/core/server/string/styledComponent.d.ts +0 -11
  659. package/dist/types/exports/server.d.ts +0 -14
  660. package/dist/types/exports/styled.d.ts +0 -3
  661. package/dist/types/router/cli/code/getClientRoutes/getRoutesLegacy.d.ts +0 -9
  662. package/types/index.d.ts +0 -7
  663. package/types/router.d.ts +0 -24
  664. /package/dist/esm/cache/{index.js → index.mjs} +0 -0
  665. /package/dist/{esm-node/core/server/string/types.js → esm/core/plugin/types.mjs} +0 -0
  666. /package/dist/{esm-node/core/types.js → esm/core/server/string/types.mjs} +0 -0
  667. /package/dist/{esm-node/router/runtime/types.js → esm/core/types.mjs} +0 -0
  668. /package/dist/{esm-node/document/index.js → esm/document/index.mjs} +0 -0
  669. /package/dist/{esm-node/router/index.js → esm/router/index.mjs} +0 -0
  670. /package/dist/esm/{config.js → router/runtime/types.mjs} +0 -0
  671. /package/dist/esm/rsc/{server.js → server.mjs} +0 -0
  672. /package/dist/esm-node/cache/{index.js → index.mjs} +0 -0
  673. /package/dist/esm-node/{config.js → core/plugin/types.mjs} +0 -0
  674. /package/dist/esm-node/core/{plugin/base.js → server/string/types.mjs} +0 -0
  675. /package/dist/esm-node/core/{plugin/types.js → types.mjs} +0 -0
  676. /package/dist/esm-node/{core/server/react/prerender/type.js → router/runtime/types.mjs} +0 -0
  677. /package/dist/esm-node/rsc/{server.js → server.mjs} +0 -0
@@ -0,0 +1,365 @@
1
+ import path from "path";
2
+ import { findExists, formatImportPath, fs, getEntryOptions, isSSGEntry, slash } from "@modern-js/utils";
3
+ import { ROUTE_MODULES } from "@modern-js/utils/universal/constants";
4
+ import { APP_INIT_EXPORTED, TEMP_LOADERS_DIR } from "../constants.mjs";
5
+ import { getPathWithoutExt, getServerLoadersFile, parseModule, replaceWithAlias } from "./utils.mjs";
6
+ const routesForServer = ({ routesForServerLoaderMatches })=>{
7
+ const loaders = [];
8
+ const actions = [];
9
+ const loadersMap = {};
10
+ const traverseRouteTree = (route)=>{
11
+ let children;
12
+ if ('children' in route && route.children) children = route?.children?.map(traverseRouteTree);
13
+ let loader;
14
+ let action;
15
+ if ('nested' === route.type) {
16
+ if (route.loader || route.data) {
17
+ loaders.push(route.loader);
18
+ const loaderId = loaders.length - 1;
19
+ loader = `loader_${loaderId}`;
20
+ const inline = Boolean(route.data);
21
+ loadersMap[loader] = {
22
+ loaderId,
23
+ routeId: route.id,
24
+ filePath: route.data || route.loader,
25
+ clientData: Boolean(route.clientData),
26
+ route,
27
+ inline
28
+ };
29
+ if (route.action) {
30
+ actions.push(route.action);
31
+ action = `action_${loaders.length - 1}`;
32
+ }
33
+ }
34
+ }
35
+ const finalRoute = {
36
+ ...route,
37
+ loader,
38
+ action,
39
+ children
40
+ };
41
+ return finalRoute;
42
+ };
43
+ let routesCode = `
44
+ export const routes = [
45
+ `;
46
+ for(let i = 0; i < routesForServerLoaderMatches.length; i++){
47
+ const route = routesForServerLoaderMatches[i];
48
+ if ('type' in route) {
49
+ const keywords = [
50
+ 'loader',
51
+ 'action'
52
+ ];
53
+ const regs = keywords.map(createMatchReg);
54
+ const newRoute = traverseRouteTree(route);
55
+ const routeStr = JSON.stringify(newRoute, null, 2);
56
+ routesCode += regs.reduce((acc, reg)=>acc.replace(reg, '$1$2'), routeStr).replace(/\\"/g, '"');
57
+ } else routesCode += `${JSON.stringify(route, null, 2)}`;
58
+ if (i < routesForServerLoaderMatches.length - 1) routesCode += ',';
59
+ }
60
+ routesCode += `\n];`;
61
+ let importLoadersCode = '';
62
+ for (const [key, loaderInfo] of Object.entries(loadersMap))if (loaderInfo.inline) {
63
+ const { route } = loaderInfo;
64
+ if (route.action) importLoadersCode += `import { loader as ${key}, action as action_${loaderInfo.loaderId} } from "${slash(loaderInfo.filePath)}";\n`;
65
+ else importLoadersCode += `import { loader as ${key} } from "${slash(loaderInfo.filePath)}";\n`;
66
+ } else importLoadersCode += `import ${key} from "${slash(loaderInfo.filePath)}";\n`;
67
+ return `
68
+ ${importLoadersCode}
69
+ ${routesCode}
70
+ `;
71
+ };
72
+ const createMatchReg = (keyword)=>new RegExp(`("${keyword}":\\s)"([^\n]+)"`, 'g');
73
+ const fileSystemRoutes = async ({ metaName, routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, splitRouteChunks = true, isRscClient = false })=>{
74
+ const components = [];
75
+ const loadings = [];
76
+ const errors = [];
77
+ const loaders = [];
78
+ const loadersMap = {};
79
+ const configs = [];
80
+ const configsMap = {};
81
+ const loadersMapFile = path.join(internalDirectory, entryName, TEMP_LOADERS_DIR, 'map.json');
82
+ const importLazyCode = `
83
+ import { lazy } from "react";
84
+ import loadable, { lazy as loadableLazy } from "@${metaName}/runtime/loadable"
85
+ `;
86
+ let rootLayoutCode = "";
87
+ const getDataLoaderPath = ({ loaderId, clientData, action, inline, routeId, inValidSSRRoute })=>{
88
+ if (!ssrMode) return '';
89
+ const clientDataStr = clientData ? `&clientData=${clientData}` : '';
90
+ const retain = inValidSSRRoute ?? false;
91
+ if (nestedRoutesEntry) return `?loaderId=${loaderId}${clientDataStr}&action=${action ? slash(action) : action}&inline=${inline}&routeId=${routeId}&retain=${retain}`;
92
+ return '';
93
+ };
94
+ const createLazyImport = ({ componentPath, routeId, webpackChunkName, eager })=>{
95
+ const importOptions = webpackChunkName ? `/* webpackChunkName: "${routeId}" */ ` : eager ? '/* webpackMode: "eager" */ ' : '';
96
+ return `() => import(${importOptions}'${componentPath}').then(routeModule => handleRouteModule(routeModule, "${routeId}")).catch(handleRouteModuleError)`;
97
+ };
98
+ const traverseRouteTree = (route, isRscClient)=>{
99
+ let children;
100
+ if ('children' in route && route.children) children = route?.children?.map((child)=>traverseRouteTree(child, isRscClient));
101
+ let loading;
102
+ let error;
103
+ let loader;
104
+ let action;
105
+ let config;
106
+ let component = '';
107
+ let lazyImport = null;
108
+ if ('nested' === route.type) {
109
+ if (route.loading) {
110
+ loadings.push(route.loading);
111
+ loading = `loading_${loadings.length - 1}`;
112
+ }
113
+ if (route.error) {
114
+ errors.push(route.error);
115
+ error = `error_${errors.length - 1}`;
116
+ }
117
+ if (route.loader || route.data) {
118
+ loaders.push(route.loader);
119
+ const loaderId = loaders.length - 1;
120
+ loader = `loader_${loaderId}`;
121
+ const inline = Boolean(route.data);
122
+ loadersMap[loader] = {
123
+ loaderId,
124
+ routeId: route.id,
125
+ inValidSSRRoute: route.inValidSSRRoute,
126
+ filePath: route.data || route.loader,
127
+ clientData: Boolean(route.clientData),
128
+ route,
129
+ inline
130
+ };
131
+ loader = `loader_${loaderId}`;
132
+ if (route.action) action = `action_${loaderId}`;
133
+ }
134
+ if ('string' == typeof route.config) {
135
+ configs.push(route.config);
136
+ const configId = configs.length - 1;
137
+ config = `config_${configId}`;
138
+ configsMap[config] = route.config;
139
+ }
140
+ if (route._component) if (route.isRoot) {
141
+ lazyImport = createLazyImport({
142
+ componentPath: route._component,
143
+ routeId: route.id
144
+ });
145
+ rootLayoutCode = `import RootLayout from '${route._component}'`;
146
+ component = 'RootLayout';
147
+ } else if (splitRouteChunks) {
148
+ lazyImport = createLazyImport({
149
+ componentPath: route._component,
150
+ routeId: route.id,
151
+ webpackChunkName: true
152
+ });
153
+ component = 'string' === ssrMode ? `loadable(${lazyImport})` : `lazy(${lazyImport})`;
154
+ } else if ('string' === ssrMode) {
155
+ components.push(route._component);
156
+ component = `component_${components.length - 1}`;
157
+ } else {
158
+ lazyImport = createLazyImport({
159
+ componentPath: route._component,
160
+ routeId: route.id,
161
+ eager: true
162
+ });
163
+ component = `lazy(${lazyImport})`;
164
+ }
165
+ } else if (route._component) if (splitRouteChunks) {
166
+ lazyImport = `() => import('${route._component}')`;
167
+ component = `loadable(${lazyImport})`;
168
+ } else {
169
+ components.push(route._component);
170
+ component = `component_${components.length - 1}`;
171
+ }
172
+ const finalRoute = {
173
+ ...route,
174
+ loading,
175
+ loader,
176
+ action,
177
+ config,
178
+ error,
179
+ children
180
+ };
181
+ if (!isRscClient) finalRoute.lazyImport = lazyImport;
182
+ if (route._component && !isRscClient) finalRoute.component = component;
183
+ if ('nested' === route.type && route._component && (route.loader || route.data)) finalRoute.shouldRevalidate = `createShouldRevalidate("${route.id}")`;
184
+ return finalRoute;
185
+ };
186
+ let routeComponentsCode = `
187
+ export const routes = [
188
+ `;
189
+ for (const route of routes)if ('type' in route) {
190
+ const newRoute = traverseRouteTree(route, isRscClient);
191
+ const routeStr = JSON.stringify(newRoute, null, 2);
192
+ const keywords = [
193
+ 'component',
194
+ 'lazyImport',
195
+ 'shouldRevalidate',
196
+ 'loader',
197
+ 'action',
198
+ 'loading',
199
+ 'error',
200
+ 'config'
201
+ ];
202
+ const regs = keywords.map(createMatchReg);
203
+ const newRouteStr = regs.reduce((acc, reg)=>acc.replace(reg, '$1$2'), routeStr).replace(/"(RootLayout)"/g, '$1').replace(/\\"/g, '"');
204
+ routeComponentsCode += `${newRouteStr},`;
205
+ } else {
206
+ const component = `loadable(() => import('${route._component}'))`;
207
+ const finalRoute = {
208
+ ...route,
209
+ component
210
+ };
211
+ const keywords = [
212
+ 'component',
213
+ 'lazyImport'
214
+ ];
215
+ const routeStr = JSON.stringify(finalRoute, null, 2);
216
+ const regs = keywords.map(createMatchReg);
217
+ const newRouteStr = regs.reduce((acc, reg)=>acc.replace(reg, '$1$2'), routeStr).replace(/\\"/g, '"');
218
+ routeComponentsCode += `${newRouteStr},`;
219
+ }
220
+ routeComponentsCode += `\n];`;
221
+ const importLoadingCode = loadings.map((loading, index)=>`import loading_${index} from '${loading}';\n`).join('');
222
+ const importComponentsCode = components.map((component, index)=>`import component_${index} from '${component}';\n`).join('');
223
+ const importErrorComponentsCode = errors.map((error, index)=>`import error_${index} from '${error}';\n`).join('');
224
+ let importLoadersCode = '';
225
+ for (const [key, loaderInfo] of Object.entries(loadersMap))if (loaderInfo.inline) {
226
+ const { route } = loaderInfo;
227
+ if (route.action) importLoadersCode += `import { loader as ${key}, action as action_${loaderInfo.loaderId} } from "${slash(loaderInfo.filePath)}${getDataLoaderPath({
228
+ loaderId: key,
229
+ clientData: loaderInfo.clientData,
230
+ action: route.action,
231
+ inline: loaderInfo.inline,
232
+ routeId: loaderInfo.routeId,
233
+ inValidSSRRoute: loaderInfo.inValidSSRRoute
234
+ })}";\n`;
235
+ else importLoadersCode += `import { loader as ${key} } from "${slash(loaderInfo.filePath)}${getDataLoaderPath({
236
+ loaderId: key,
237
+ clientData: loaderInfo.clientData,
238
+ action: false,
239
+ inline: loaderInfo.inline,
240
+ routeId: route.id,
241
+ inValidSSRRoute: loaderInfo.inValidSSRRoute
242
+ })}";\n`;
243
+ } else importLoadersCode += `import ${key} from "${slash(loaderInfo.filePath)}${getDataLoaderPath({
244
+ loaderId: key,
245
+ clientData: loaderInfo.clientData,
246
+ action: false,
247
+ inline: loaderInfo.inline,
248
+ routeId: loaderInfo.routeId,
249
+ inValidSSRRoute: loaderInfo.inValidSSRRoute
250
+ })}";\n`;
251
+ let importConfigsCode = '';
252
+ for (const [key, configPath] of Object.entries(configsMap))importConfigsCode += `import * as ${key} from "${slash(configPath)}";\n`;
253
+ await fs.ensureFile(loadersMapFile);
254
+ await fs.writeJSON(loadersMapFile, loadersMap);
255
+ const importRuntimeRouterCode = `
256
+ import { createShouldRevalidate, handleRouteModule, handleRouteModuleError} from '@${metaName}/runtime/routerHelper';
257
+ `;
258
+ const routeModulesCode = `
259
+ if(typeof document !== 'undefined'){
260
+ window.${ROUTE_MODULES} = {}
261
+ }
262
+ `;
263
+ return `
264
+ ${importLazyCode}
265
+ ${!isRscClient ? importComponentsCode : ''}
266
+ ${importRuntimeRouterCode}
267
+ ${!isRscClient ? rootLayoutCode : ''}
268
+ ${importLoadingCode}
269
+ ${importErrorComponentsCode}
270
+ ${importLoadersCode}
271
+ ${importConfigsCode}
272
+ ${routeModulesCode}
273
+ ${routeComponentsCode}
274
+ `;
275
+ };
276
+ function ssrLoaderCombinedModule(entrypoints, entrypoint, config, appContext) {
277
+ const { entryName, isMainEntry } = entrypoint;
278
+ const { packageName, internalDirectory } = appContext;
279
+ const ssr = getEntryOptions(entryName, isMainEntry, config.server.ssr, config.server.ssrByEntries, packageName);
280
+ const ssg = isSSGEntry(config, entryName, entrypoints);
281
+ if (entrypoint.nestedRoutesEntry && (ssr || ssg)) {
282
+ const serverLoaderRuntime = require.resolve('@modern-js/plugin-data-loader/runtime');
283
+ const serverLoadersFile = getServerLoadersFile(internalDirectory, entryName);
284
+ const combinedModule = `export * from "${slash(serverLoaderRuntime)}"; export * from "${slash(serverLoadersFile)}"`;
285
+ if (!config.source.enableAsyncEntry) return combinedModule;
286
+ return `
287
+ async function loadModules() {
288
+ const [moduleA, moduleB] = await Promise.all([
289
+ import("${slash(serverLoaderRuntime)}"),
290
+ import("${slash(serverLoadersFile)}")
291
+ ]);
292
+
293
+ return {
294
+ ...moduleA,
295
+ ...moduleB
296
+ };
297
+ }
298
+
299
+ export { loadModules };
300
+ `;
301
+ }
302
+ return null;
303
+ }
304
+ const runtimeGlobalContext = async ({ entryName, metaName, srcDirectory, nestedRoutesEntry, internalSrcAlias, globalApp, rscType = false, basename })=>{
305
+ const imports = [
306
+ `import { setGlobalContext } from '@${metaName}/runtime/context';`
307
+ ];
308
+ if (nestedRoutesEntry) {
309
+ const rootLayoutPath = path.join(nestedRoutesEntry, 'layout');
310
+ const rootLayoutFile = findExists([
311
+ '.js',
312
+ '.ts',
313
+ '.jsx',
314
+ '.tsx'
315
+ ].map((ext)=>`${rootLayoutPath}${ext}`));
316
+ if (rootLayoutFile) {
317
+ const rootLayoutBuffer = await fs.readFile(rootLayoutFile);
318
+ const rootLayout = rootLayoutBuffer.toString();
319
+ const [, moduleExports] = await parseModule({
320
+ source: rootLayout.toString(),
321
+ filename: rootLayoutFile
322
+ });
323
+ const hasAppInit = moduleExports.some((e)=>e.n === APP_INIT_EXPORTED);
324
+ const layoutPath = formatImportPath(getPathWithoutExt(replaceWithAlias(srcDirectory, rootLayoutFile, internalSrcAlias)));
325
+ if (hasAppInit) imports.push(`import { init as appInit } from '${layoutPath}';`);
326
+ else imports.push("let appInit;");
327
+ } else imports.push("let appInit;");
328
+ } else imports.push("let appInit;");
329
+ if (globalApp) imports.push(`import layoutApp from '${formatImportPath(globalApp.replace(srcDirectory, internalSrcAlias))}';`);
330
+ else imports.push("let layoutApp;");
331
+ const isClient = 'client' === rscType;
332
+ const enableRsc = Boolean(rscType);
333
+ if (isClient) return `${imports.join('\n')}
334
+
335
+ import { routes } from './routes';
336
+
337
+ const entryName = '${entryName}';
338
+ const basename = '${basename || '/'}';
339
+ setGlobalContext({
340
+ entryName,
341
+ layoutApp,
342
+ routes,
343
+ appInit,
344
+ basename,
345
+ isRscClient: true,
346
+ enableRsc: true,
347
+ });
348
+ `;
349
+ return `${imports.join('\n')}
350
+
351
+ import { routes } from './routes';
352
+
353
+ const entryName = '${entryName}';
354
+ const basename = '${basename || '/'}';
355
+ setGlobalContext({
356
+ entryName,
357
+ layoutApp,
358
+ routes,
359
+ appInit,
360
+ basename,
361
+ enableRsc: ${enableRsc},
362
+ });
363
+ `;
364
+ };
365
+ export { fileSystemRoutes, routesForServer, runtimeGlobalContext, ssrLoaderCombinedModule };
@@ -0,0 +1,73 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { JS_EXTENSIONS, fs as utils_fs, normalizeToPosixPath } from "@modern-js/utils";
4
+ import { parse } from "es-module-lexer";
5
+ import { transform } from "esbuild";
6
+ import { ACTION_EXPORT_NAME, LOADER_EXPORT_NAME } from "../constants.mjs";
7
+ const walkDirectory = (dir)=>fs.readdirSync(dir).reduce((previous, filename)=>{
8
+ const filePath = path.join(dir, filename);
9
+ if (fs.statSync(filePath).isDirectory()) return [
10
+ ...previous,
11
+ ...walkDirectory(filePath)
12
+ ];
13
+ return [
14
+ ...previous,
15
+ filePath
16
+ ];
17
+ }, []);
18
+ const isPageComponentFile = (filePath)=>{
19
+ if (/\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/.test(filePath)) return false;
20
+ if ([
21
+ '.js',
22
+ '.jsx',
23
+ '.ts',
24
+ '.tsx'
25
+ ].includes(path.extname(filePath))) return true;
26
+ return false;
27
+ };
28
+ const replaceWithAlias = (base, filePath, alias)=>{
29
+ if (filePath.includes(base)) return normalizeToPosixPath(path.join(alias, path.relative(base, filePath)));
30
+ return filePath;
31
+ };
32
+ const parseModule = async ({ source, filename })=>{
33
+ let content = source;
34
+ if (JS_EXTENSIONS.some((ext)=>filename.endsWith(ext))) {
35
+ const result = await transform(content, {
36
+ loader: path.extname(filename).slice(1),
37
+ format: 'esm'
38
+ });
39
+ content = result.code;
40
+ }
41
+ return parse(content);
42
+ };
43
+ const hasLoader = async (filename, source)=>{
44
+ let content = source;
45
+ if (!source) content = (await utils_fs.readFile(filename, 'utf-8')).toString();
46
+ if (content) {
47
+ const [, moduleExports] = await parseModule({
48
+ source: content.toString(),
49
+ filename
50
+ });
51
+ return moduleExports.some((e)=>e.n === LOADER_EXPORT_NAME);
52
+ }
53
+ return false;
54
+ };
55
+ const hasAction = async (filename, source)=>{
56
+ let content = source;
57
+ if (!source) content = (await utils_fs.readFile(filename, 'utf-8')).toString();
58
+ if (content) {
59
+ const [, moduleExports] = await parseModule({
60
+ source: content.toString(),
61
+ filename
62
+ });
63
+ return moduleExports.some((e)=>e.n === ACTION_EXPORT_NAME);
64
+ }
65
+ return false;
66
+ };
67
+ const getServerLoadersFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'route-server-loaders.js');
68
+ const getServerCombinedModueFile = (internalDirectory, entryName)=>path.join(internalDirectory, entryName, 'server-loader-combined.js');
69
+ const getPathWithoutExt = (filename)=>{
70
+ const extname = path.extname(filename);
71
+ return extname ? filename.slice(0, -extname.length) : filename;
72
+ };
73
+ export { getPathWithoutExt, getServerCombinedModueFile, getServerLoadersFile, hasAction, hasLoader, isPageComponentFile, parseModule, replaceWithAlias, walkDirectory };
@@ -0,0 +1,82 @@
1
+ import node_path from "node:path";
2
+ import { fs, normalizeToPosixPath } from "@modern-js/utils";
3
+ import { getRouteId } from "../code/nestedRoutes.mjs";
4
+ import { getPathWithoutExt, replaceWithAlias } from "../code/utils.mjs";
5
+ async function processConfigRoutes(configRoutes, entryName, isMainEntry, configRoutesDir, alias) {
6
+ return Promise.all(configRoutes.map((configRoute)=>processConfigRoute(configRoute, entryName, isMainEntry, configRoutesDir, alias)));
7
+ }
8
+ async function processConfigRoute(configRoute, entryName, isMainEntry, configRoutesDir, alias) {
9
+ if ('config' !== configRoute.origin) {
10
+ if (configRoute.children && configRoute.children.length > 0) {
11
+ const processedChildren = await Promise.all(configRoute.children.map((child)=>processConfigRoute(child, entryName, isMainEntry, configRoutesDir, alias)));
12
+ return {
13
+ ...configRoute,
14
+ children: processedChildren
15
+ };
16
+ }
17
+ return configRoute;
18
+ }
19
+ const componentPath = configRoute.component;
20
+ const absoluteComponentPath = componentPath ? node_path.isAbsolute(componentPath) ? componentPath : node_path.resolve(configRoutesDir, componentPath) : void 0;
21
+ const routeId = configRoute.id || getRouteId(componentPath, configRoutesDir, entryName, isMainEntry);
22
+ const processedRoute = {
23
+ ...configRoute,
24
+ id: routeId,
25
+ path: configRoute.path ?? '',
26
+ type: 'nested',
27
+ origin: 'config'
28
+ };
29
+ if (absoluteComponentPath) {
30
+ const componentPathWithAlias = alias ? getPathWithoutExt(replaceWithAlias(alias.basename, absoluteComponentPath, alias.name)) : getPathWithoutExt(absoluteComponentPath);
31
+ processedRoute._component = componentPathWithAlias;
32
+ }
33
+ if (configRoute.children && configRoute.children.length > 0) {
34
+ const processedChildren = await Promise.all(configRoute.children.map((child)=>processConfigRoute(child, entryName, isMainEntry, configRoutesDir, alias)));
35
+ processedRoute.children = processedChildren;
36
+ }
37
+ if ('page' === configRoute.routeType || !configRoute.routeType && !configRoute.children) {
38
+ const rawPath = configRoute.path;
39
+ const isIndexPath = '' === rawPath || '/' === rawPath || 'string' == typeof rawPath && '' === rawPath.replace(/^\/+/, '');
40
+ if (isIndexPath) {
41
+ processedRoute.index = true;
42
+ delete processedRoute.path;
43
+ }
44
+ }
45
+ if (absoluteComponentPath) await discoverRelatedFiles(processedRoute, absoluteComponentPath, alias);
46
+ return processedRoute;
47
+ }
48
+ async function discoverRelatedFiles(nestedRoute, componentPath, alias) {
49
+ if ('config' !== nestedRoute.origin) return;
50
+ const componentDir = node_path.dirname(componentPath);
51
+ const componentName = node_path.basename(componentPath, node_path.extname(componentPath));
52
+ const relatedFiles = {
53
+ data: `${componentName}.data.ts`,
54
+ clientData: `${componentName}.data.client.ts`,
55
+ error: `${componentName}.error.tsx`,
56
+ loading: `${componentName}.loading.tsx`,
57
+ config: `${componentName}.config.ts`
58
+ };
59
+ await Promise.all(Object.entries(relatedFiles).map(async ([key, filename])=>{
60
+ const filePath = node_path.resolve(componentDir, filename);
61
+ try {
62
+ if (await fs.promises.stat(filePath).then((stat)=>stat.isFile()).catch(()=>false)) {
63
+ const aliasedPath = alias ? replaceWithAlias(alias.basename, filePath, alias.name) : filePath;
64
+ nestedRoute[key] = normalizeToPosixPath(aliasedPath);
65
+ }
66
+ } catch (e) {}
67
+ }));
68
+ }
69
+ function normalizeRoutes(generatedRoutes) {
70
+ return generatedRoutes.map((route)=>normalizeRoute(route));
71
+ }
72
+ function normalizeRoute(route) {
73
+ const { component, ...rest } = route;
74
+ const processedRoute = {
75
+ ...rest,
76
+ ...route.children && route.children.length > 0 ? {
77
+ children: route.children.map((child)=>normalizeRoute(child))
78
+ } : {}
79
+ };
80
+ return processedRoute;
81
+ }
82
+ export { normalizeRoutes, processConfigRoutes };
@@ -0,0 +1,105 @@
1
+ import node_path from "node:path";
2
+ import { fs, getMeta, logger } from "@modern-js/utils";
3
+ function createRouteFunctions(basePath) {
4
+ const resolveComponentPath = (component)=>{
5
+ if (!component) return component;
6
+ if (node_path.isAbsolute(component)) return component;
7
+ if (component.startsWith('./') || component.startsWith('../') || !component.startsWith('@')) return node_path.resolve(basePath, component);
8
+ return component;
9
+ };
10
+ const createNestedRoute = (component, routePath, children = [], routeType, wildcard = false)=>{
11
+ if ('string' == typeof component && component.startsWith('@')) throw new Error('component path must be absolute or relative; alias is not allowed');
12
+ if (void 0 !== routePath && 'string' != typeof routePath) throw new Error('Route path must be a string');
13
+ const resolvedComponent = resolveComponentPath(component);
14
+ if ('page' === routeType || wildcard) {
15
+ if (!component || '' === component.trim()) throw new Error('page route must specify a non-empty component path');
16
+ if (!fs.pathExistsSync(resolvedComponent)) throw new Error(`page component not found: ${resolvedComponent}`);
17
+ }
18
+ if (wildcard) return {
19
+ path: routePath || '*',
20
+ component: resolvedComponent,
21
+ routeType: 'page',
22
+ origin: 'config',
23
+ type: 'nested',
24
+ children: children.length > 0 ? children : void 0
25
+ };
26
+ if (!routeType) throw new Error('createRouteConfig must specify route type');
27
+ return {
28
+ path: routePath,
29
+ component: resolvedComponent,
30
+ routeType,
31
+ origin: 'config',
32
+ type: 'nested',
33
+ children: children.length > 0 ? children : void 0
34
+ };
35
+ };
36
+ return {
37
+ route: (component, pathOrChildren, maybeChildren)=>{
38
+ const path = Array.isArray(pathOrChildren) ? void 0 : pathOrChildren;
39
+ const children = Array.isArray(pathOrChildren) ? pathOrChildren : maybeChildren ?? [];
40
+ const routeType = children.length > 0 ? 'layout' : 'page';
41
+ return createNestedRoute(component, path, children, routeType);
42
+ },
43
+ layout: (component, pathOrChildren, maybeChildren)=>{
44
+ const path = Array.isArray(pathOrChildren) ? void 0 : pathOrChildren;
45
+ const children = Array.isArray(pathOrChildren) ? pathOrChildren : maybeChildren ?? [];
46
+ if (0 === children.length) throw new Error('layout route must have children');
47
+ return createNestedRoute(component, path, children, 'layout');
48
+ },
49
+ page: (component, path)=>createNestedRoute(component, path, [], 'page'),
50
+ $: (component, path)=>createNestedRoute(component, path, [], void 0, true)
51
+ };
52
+ }
53
+ async function findConfigRoutesFile(entrypoint, appContext) {
54
+ const { absoluteEntryDir } = entrypoint;
55
+ if (!absoluteEntryDir) return null;
56
+ const { metaName } = appContext;
57
+ const meta = getMeta(metaName);
58
+ const possibleNames = [
59
+ `${meta}.routes.ts`,
60
+ `${meta}.routes.mts`,
61
+ `${meta}.routes.tsx`,
62
+ `${meta}.routes.js`,
63
+ `${meta}.routes.mjs`,
64
+ `${meta}.routes.jsx`
65
+ ];
66
+ for (const filename of possibleNames){
67
+ const filePath = node_path.resolve(absoluteEntryDir, filename);
68
+ if (await fs.pathExists(filePath)) {
69
+ const stats = await fs.stat(filePath);
70
+ if (stats.isFile()) {
71
+ logger.debug(`Found config routes file: ${filePath}`);
72
+ return filePath;
73
+ }
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ async function parseConfigRoutesFile(filePath, entrypoint, fileRoutes) {
79
+ const { loadTypeScriptFile } = await import("@modern-js/plugin/run");
80
+ const configModule = loadTypeScriptFile(filePath);
81
+ if (!configModule.default || 'function' != typeof configModule.default) throw new Error(`Config routes file must export a default function. Found: ${typeof configModule.default}`);
82
+ const routeFunctions = createRouteFunctions(entrypoint.absoluteEntryDir);
83
+ let routesConfig;
84
+ if (!fileRoutes) throw new Error("Routes function expects file routes parameter, but none provided");
85
+ routesConfig = configModule.default(routeFunctions, fileRoutes);
86
+ if (!Array.isArray(routesConfig)) throw new Error(`Config routes function must return an array of routes. Received: ${typeof routesConfig}`);
87
+ return {
88
+ entryName: entrypoint.entryName,
89
+ filePath,
90
+ routes: routesConfig,
91
+ isMainEntry: entrypoint.isMainEntry || false
92
+ };
93
+ }
94
+ async function discoverAndParseConfigRoutes(entrypoint, appContext, fileRoutes) {
95
+ const configFilePath = await findConfigRoutesFile(entrypoint, appContext);
96
+ if (!configFilePath) {
97
+ logger.debug(`No config routes file found for entry: ${entrypoint.entryName}`);
98
+ return null;
99
+ }
100
+ const configRouteFile = await parseConfigRoutesFile(configFilePath, entrypoint, fileRoutes);
101
+ logger.debug(`Successfully loaded config routes from: ${configFilePath}`);
102
+ logger.debug(`Found ${configRouteFile.routes.length} route(s) for entry: ${entrypoint.entryName}`);
103
+ return configRouteFile;
104
+ }
105
+ export { discoverAndParseConfigRoutes, findConfigRoutesFile, parseConfigRoutesFile };
@@ -0,0 +1,32 @@
1
+ const NESTED_ROUTES_DIR = 'routes';
2
+ const FILE_SYSTEM_ROUTES_FILE_NAME = 'routes.js';
3
+ const LOADER_EXPORT_NAME = 'loader';
4
+ const ACTION_EXPORT_NAME = 'action';
5
+ const TEMP_LOADERS_DIR = '__loaders__';
6
+ const FILE_SYSTEM_ROUTES_INDEX = 'index';
7
+ const FILE_SYSTEM_ROUTES_IGNORED_REGEX = /\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/;
8
+ const FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = /^\[(\S+)\]([*+?]?)$/;
9
+ const FILE_SYSTEM_ROUTES_COMPONENTS_DIR = 'internal_components';
10
+ const APP_CONFIG_NAME = 'config';
11
+ const APP_INIT_EXPORTED = 'init';
12
+ const NESTED_ROUTE = {
13
+ LAYOUT_FILE: 'layout',
14
+ LAYOUT_CONFIG_FILE: 'layout.config',
15
+ LAYOUT_LOADER_FILE: 'layout.loader',
16
+ LAYOUT_DATA_FILE: 'layout.data',
17
+ LAYOUT_CLIENT_LOADER: 'layout.data.client',
18
+ PAGE_FILE: 'page',
19
+ PAGE_CONFIG_FILE: 'page.config',
20
+ PAGE_LOADER_FILE: 'page.loader',
21
+ PAGE_DATA_FILE: 'page.data',
22
+ PAGE_CLIENT_LOADER: 'page.data.client',
23
+ SPLATE_FILE: '$',
24
+ SPLATE_CONFIG_FILE: '$.config',
25
+ SPLATE_LOADER_FILE: '$.loader',
26
+ SPLATE_DATA_FILE: '$.data',
27
+ SPLATE_CLIENT_DATA: '$.data.client',
28
+ LOADING_FILE: 'loading',
29
+ ERROR_FILE: 'error',
30
+ LOADER_FILE: 'loader'
31
+ };
32
+ export { ACTION_EXPORT_NAME, APP_CONFIG_NAME, APP_INIT_EXPORTED, FILE_SYSTEM_ROUTES_COMPONENTS_DIR, FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP, FILE_SYSTEM_ROUTES_FILE_NAME, FILE_SYSTEM_ROUTES_IGNORED_REGEX, FILE_SYSTEM_ROUTES_INDEX, LOADER_EXPORT_NAME, NESTED_ROUTE, NESTED_ROUTES_DIR, TEMP_LOADERS_DIR };
@@ -0,0 +1,22 @@
1
+ import path from "path";
2
+ import { fs } from "@modern-js/utils";
3
+ import { hasApp } from "../../cli/entry.mjs";
4
+ import { NESTED_ROUTES_DIR } from "./constants.mjs";
5
+ const hasNestedRoutes = (dir)=>fs.existsSync(path.join(dir, NESTED_ROUTES_DIR));
6
+ const isRouteEntry = (dir)=>{
7
+ if (hasNestedRoutes(dir)) return path.join(dir, NESTED_ROUTES_DIR);
8
+ return false;
9
+ };
10
+ const modifyEntrypoints = (entrypoints)=>entrypoints.map((entrypoint)=>{
11
+ if (!entrypoint.isAutoMount) return entrypoint;
12
+ if (entrypoint?.isCustomSourceEntry) {
13
+ if (entrypoint.fileSystemRoutes) entrypoint.nestedRoutesEntry = entrypoint.absoluteEntryDir || entrypoint.entry;
14
+ return entrypoint;
15
+ }
16
+ const isHasApp = hasApp(entrypoint.absoluteEntryDir);
17
+ if (isHasApp) return entrypoint;
18
+ const isHasNestedRoutes = hasNestedRoutes(entrypoint.absoluteEntryDir);
19
+ if (isHasNestedRoutes) entrypoint.nestedRoutesEntry = path.join(entrypoint.absoluteEntryDir, NESTED_ROUTES_DIR);
20
+ return entrypoint;
21
+ });
22
+ export { hasNestedRoutes, isRouteEntry, modifyEntrypoints };