@modern-js/runtime 2.69.4 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (679) 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 +103 -98
  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 +179 -205
  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 +93 -57
  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 +71 -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 +138 -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/rsc/server.mjs +33 -0
  228. package/dist/esm-node/cli/alias.mjs +24 -0
  229. package/dist/esm-node/cli/code.mjs +119 -0
  230. package/dist/esm-node/cli/constants.mjs +10 -0
  231. package/dist/esm-node/cli/entry.mjs +6 -0
  232. package/dist/esm-node/cli/index.mjs +89 -0
  233. package/dist/esm-node/cli/ssr/index.mjs +125 -0
  234. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.mjs +75 -0
  235. package/dist/esm-node/cli/ssr/mode.mjs +14 -0
  236. package/dist/esm-node/cli/template.mjs +168 -0
  237. package/dist/esm-node/cli/{template.server.js → template.server.mjs} +20 -24
  238. package/dist/esm-node/common.mjs +4 -0
  239. package/dist/esm-node/core/browser/hydrate.mjs +53 -0
  240. package/dist/esm-node/core/browser/index.mjs +96 -0
  241. package/dist/esm-node/core/browser/withCallback.mjs +13 -0
  242. package/dist/esm-node/core/compat/hooks.mjs +35 -0
  243. package/dist/esm-node/core/compat/index.mjs +12 -0
  244. package/dist/esm-node/core/compat/requestContext.mjs +21 -0
  245. package/dist/esm-node/core/config.mjs +2 -0
  246. package/dist/esm-node/core/constants.mjs +8 -0
  247. package/dist/esm-node/core/context/index.mjs +45 -0
  248. package/dist/esm-node/core/context/monitors/default.mjs +10 -0
  249. package/dist/esm-node/core/context/monitors/index.mjs +3 -0
  250. package/dist/esm-node/core/context/monitors/index.server.mjs +7 -0
  251. package/dist/esm-node/core/context/request/index.mjs +2 -0
  252. package/dist/esm-node/core/context/request/index.server.mjs +6 -0
  253. package/dist/esm-node/core/context/response/index.mjs +7 -0
  254. package/dist/esm-node/core/context/response/index.server.mjs +28 -0
  255. package/dist/esm-node/core/context/runtime.mjs +15 -0
  256. package/dist/esm-node/core/context/serverPayload/index.mjs +3 -0
  257. package/dist/esm-node/core/context/serverPayload/index.server.mjs +10 -0
  258. package/dist/esm-node/core/index.mjs +3 -0
  259. package/dist/esm-node/core/plugin/index.mjs +25 -0
  260. package/dist/esm-node/core/react/index.mjs +16 -0
  261. package/dist/esm-node/core/react/wrapper.mjs +20 -0
  262. package/dist/esm-node/core/server/constants.mjs +5 -0
  263. package/dist/esm-node/core/server/helmet.mjs +38 -0
  264. package/dist/esm-node/core/server/index.mjs +7 -0
  265. package/dist/esm-node/core/server/react/index.mjs +3 -0
  266. package/dist/esm-node/core/server/react/no-ssr-cache/index.mjs +9 -0
  267. package/dist/esm-node/core/server/react/nossr/index.mjs +10 -0
  268. package/dist/esm-node/core/server/requestHandler.mjs +161 -0
  269. package/dist/esm-node/core/server/server.mjs +4 -0
  270. package/dist/esm-node/core/server/shared.mjs +4 -0
  271. package/dist/esm-node/core/server/stream/afterTemplate.mjs +66 -0
  272. package/dist/esm-node/core/server/stream/beforeTemplate.mjs +63 -0
  273. package/dist/esm-node/core/server/stream/createReadableStream.mjs +128 -0
  274. package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +109 -0
  275. package/dist/esm-node/core/server/stream/deferredScript.mjs +62 -0
  276. package/dist/esm-node/core/server/stream/index.mjs +4 -0
  277. package/dist/esm-node/core/server/stream/shared.mjs +71 -0
  278. package/dist/esm-node/core/server/stream/template.mjs +13 -0
  279. package/dist/esm-node/core/server/string/index.mjs +101 -0
  280. package/dist/esm-node/core/server/string/loadable.mjs +112 -0
  281. package/dist/esm-node/core/server/string/ssrData.mjs +104 -0
  282. package/dist/esm-node/core/server/tracer.mjs +15 -0
  283. package/dist/esm-node/core/server/utils.mjs +39 -0
  284. package/dist/esm-node/document/Body.mjs +20 -0
  285. package/dist/esm-node/document/Comment.mjs +15 -0
  286. package/dist/esm-node/document/DocumentContext.mjs +7 -0
  287. package/dist/esm-node/document/DocumentStructureContext.mjs +10 -0
  288. package/dist/esm-node/document/Head.mjs +29 -0
  289. package/dist/esm-node/document/Html.mjs +74 -0
  290. package/dist/esm-node/document/Links.mjs +9 -0
  291. package/dist/esm-node/document/Root.mjs +29 -0
  292. package/dist/esm-node/document/Script.mjs +21 -0
  293. package/dist/esm-node/document/Scripts.mjs +9 -0
  294. package/dist/esm-node/document/Style.mjs +16 -0
  295. package/dist/esm-node/document/Title.mjs +8 -0
  296. package/dist/esm-node/document/cli/index.mjs +323 -0
  297. package/dist/esm-node/document/constants.mjs +34 -0
  298. package/dist/esm-node/document/index.mjs +12 -0
  299. package/dist/esm-node/exports/config-routes.mjs +4 -0
  300. package/dist/esm-node/exports/head.mjs +4 -0
  301. package/dist/esm-node/exports/loadable.mjs +4 -0
  302. package/dist/esm-node/index.mjs +6 -0
  303. package/dist/esm-node/internal.mjs +2 -0
  304. package/dist/esm-node/react-server.mjs +4 -0
  305. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutes.mjs +115 -0
  306. package/dist/esm-node/router/cli/code/getClientRoutes/index.mjs +2 -0
  307. package/dist/esm-node/router/cli/code/getClientRoutes/utils.mjs +12 -0
  308. package/dist/esm-node/router/cli/code/index.mjs +132 -0
  309. package/dist/esm-node/router/cli/code/inspect.mjs +95 -0
  310. package/dist/esm-node/router/cli/code/{makeLegalIdentifier.js → makeLegalIdentifier.mjs} +7 -11
  311. package/dist/esm-node/router/cli/code/nestedRoutes.mjs +193 -0
  312. package/dist/esm-node/router/cli/code/templates.mjs +365 -0
  313. package/dist/esm-node/router/cli/code/utils.mjs +73 -0
  314. package/dist/esm-node/router/cli/config-routes/converter.mjs +82 -0
  315. package/dist/esm-node/router/cli/config-routes/parseRouteConfig.mjs +105 -0
  316. package/dist/esm-node/router/cli/constants.mjs +32 -0
  317. package/dist/esm-node/router/cli/entry.mjs +22 -0
  318. package/dist/esm-node/router/cli/handler.mjs +66 -0
  319. package/dist/esm-node/router/cli/index.mjs +80 -0
  320. package/dist/esm-node/router/index.mjs +1 -0
  321. package/dist/esm-node/router/internal.mjs +3 -0
  322. package/dist/esm-node/router/runtime/DefaultNotFound.mjs +13 -0
  323. package/dist/esm-node/router/runtime/DeferredDataScripts.mjs +2 -0
  324. package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +120 -0
  325. package/dist/esm-node/router/runtime/PrefetchLink.mjs +161 -0
  326. package/dist/esm-node/router/runtime/constants.mjs +10 -0
  327. package/dist/esm-node/router/runtime/hooks.mjs +4 -0
  328. package/dist/esm-node/router/runtime/index.mjs +9 -0
  329. package/dist/esm-node/router/runtime/internal.mjs +4 -0
  330. package/dist/esm-node/router/runtime/plugin.mjs +181 -0
  331. package/dist/esm-node/router/runtime/plugin.node.mjs +138 -0
  332. package/dist/esm-node/router/runtime/routerHelper.mjs +15 -0
  333. package/dist/esm-node/router/runtime/rsc-router.mjs +233 -0
  334. package/dist/esm-node/router/runtime/rsc.mjs +1 -0
  335. package/dist/esm-node/router/runtime/server.mjs +1 -0
  336. package/dist/esm-node/router/runtime/utils.mjs +165 -0
  337. package/dist/esm-node/router/runtime/withRouter.mjs +14 -0
  338. package/dist/esm-node/rsc/client.mjs +3 -0
  339. package/dist/esm-node/rsc/server.mjs +33 -0
  340. package/dist/types/cli/code.d.ts +1 -1
  341. package/dist/types/cli/index.d.ts +3 -3
  342. package/dist/types/cli/ssr/index.d.ts +2 -2
  343. package/dist/types/cli/ssr/mode.d.ts +15 -0
  344. package/dist/types/cli/template.d.ts +3 -3
  345. package/dist/types/common.d.ts +2 -7
  346. package/dist/types/core/browser/hydrate.d.ts +2 -2
  347. package/dist/types/core/browser/index.d.ts +3 -1
  348. package/dist/types/core/compat/hooks.d.ts +2 -2
  349. package/dist/types/core/compat/index.d.ts +2 -2
  350. package/dist/types/core/compat/requestContext.d.ts +5 -24
  351. package/dist/types/core/config.d.ts +1 -8
  352. package/dist/types/core/constants.d.ts +0 -1
  353. package/dist/types/core/context/index.d.ts +9 -13
  354. package/dist/types/core/context/monitors/index.d.ts +1 -1
  355. package/dist/types/core/context/runtime.d.ts +26 -29
  356. package/dist/types/core/context/serverPayload/index.server.d.ts +1 -1
  357. package/dist/types/core/index.d.ts +4 -7
  358. package/dist/types/core/plugin/index.d.ts +13 -13
  359. package/dist/types/core/plugin/types.d.ts +9 -10
  360. package/dist/types/core/react/wrapper.d.ts +3 -3
  361. package/dist/types/core/server/index.d.ts +3 -3
  362. package/dist/types/core/server/react/index.d.ts +0 -1
  363. package/dist/types/core/server/requestHandler.d.ts +3 -3
  364. package/dist/types/core/server/stream/afterTemplate.d.ts +2 -2
  365. package/dist/types/core/server/stream/beforeTemplate.d.ts +2 -2
  366. package/dist/types/core/server/stream/shared.d.ts +2 -2
  367. package/dist/types/core/server/string/loadable.d.ts +2 -2
  368. package/dist/types/core/server/string/ssrData.d.ts +3 -2
  369. package/dist/types/core/server/tracer.d.ts +1 -3
  370. package/dist/types/core/server/utils.d.ts +2 -3
  371. package/dist/types/core/types.d.ts +4 -16
  372. package/dist/types/document/DocumentContext.d.ts +1 -1
  373. package/dist/types/document/cli/index.d.ts +3 -3
  374. package/dist/types/document/constants.d.ts +3 -1
  375. package/dist/types/exports/config-routes.d.ts +9 -0
  376. package/dist/types/index.d.ts +4 -5
  377. package/dist/types/internal.d.ts +2 -0
  378. package/dist/types/router/cli/code/getClientRoutes/index.d.ts +0 -1
  379. package/dist/types/router/cli/code/getClientRoutes/utils.d.ts +0 -1
  380. package/dist/types/router/cli/code/index.d.ts +7 -3
  381. package/dist/types/router/cli/code/inspect.d.ts +22 -0
  382. package/dist/types/router/cli/code/nestedRoutes.d.ts +10 -4
  383. package/dist/types/router/cli/code/templates.d.ts +3 -2
  384. package/dist/types/router/cli/config-routes/converter.d.ts +15 -0
  385. package/dist/types/router/cli/config-routes/parseRouteConfig.d.ts +32 -0
  386. package/dist/types/router/cli/constants.d.ts +0 -3
  387. package/dist/types/router/cli/entry.d.ts +1 -2
  388. package/dist/types/router/cli/handler.d.ts +4 -4
  389. package/dist/types/router/cli/index.d.ts +2 -4
  390. package/dist/types/router/runtime/DeferredDataScripts.node.d.ts +1 -1
  391. package/dist/types/router/runtime/hooks.d.ts +3 -3
  392. package/dist/types/router/runtime/index.d.ts +0 -1
  393. package/dist/types/router/runtime/plugin.d.ts +2 -2
  394. package/dist/types/router/runtime/plugin.node.d.ts +2 -2
  395. package/dist/types/router/runtime/{routeModule.d.ts → routerHelper.d.ts} +1 -1
  396. package/dist/types/router/runtime/rsc-router.d.ts +2 -2
  397. package/dist/types/router/runtime/rsc.d.ts +1 -0
  398. package/dist/types/router/runtime/server.d.ts +1 -1
  399. package/dist/types/router/runtime/types.d.ts +0 -1
  400. package/dist/types/router/runtime/utils.d.ts +5 -4
  401. package/package.json +92 -82
  402. package/rslib.config.mts +19 -0
  403. package/dist/cjs/cli/ssr/babel-plugin-ssr-loader-id.js +0 -133
  404. package/dist/cjs/config.js +0 -16
  405. package/dist/cjs/core/compatible.js +0 -192
  406. package/dist/cjs/core/loader/index.js +0 -38
  407. package/dist/cjs/core/loader/loaderManager.js +0 -186
  408. package/dist/cjs/core/loader/useLoader.js +0 -114
  409. package/dist/cjs/core/plugin/base.js +0 -16
  410. package/dist/cjs/core/server/react/prerender/index.js +0 -124
  411. package/dist/cjs/core/server/react/prerender/type.js +0 -16
  412. package/dist/cjs/core/server/react/prerender/util.js +0 -121
  413. package/dist/cjs/core/server/string/prefetch.js +0 -93
  414. package/dist/cjs/core/server/string/styledComponent.js +0 -53
  415. package/dist/cjs/exports/server.js +0 -28
  416. package/dist/cjs/exports/styled.js +0 -41
  417. package/dist/cjs/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -195
  418. package/dist/cjs/router/runtime/routeModule.js +0 -52
  419. package/dist/esm/cli/alias.js +0 -30
  420. package/dist/esm/cli/code.js +0 -265
  421. package/dist/esm/cli/constants.js +0 -20
  422. package/dist/esm/cli/entry.js +0 -15
  423. package/dist/esm/cli/index.js +0 -170
  424. package/dist/esm/cli/ssr/babel-plugin-ssr-loader-id.js +0 -118
  425. package/dist/esm/cli/ssr/index.js +0 -143
  426. package/dist/esm/cli/ssr/loadable-bundler-plugin.js +0 -102
  427. package/dist/esm/cli/template.js +0 -98
  428. package/dist/esm/cli/template.server.js +0 -34
  429. package/dist/esm/common.js +0 -10
  430. package/dist/esm/core/browser/hydrate.js +0 -75
  431. package/dist/esm/core/browser/index.js +0 -279
  432. package/dist/esm/core/browser/withCallback.js +0 -18
  433. package/dist/esm/core/compat/hooks.js +0 -88
  434. package/dist/esm/core/compat/index.js +0 -20
  435. package/dist/esm/core/compat/requestContext.js +0 -25
  436. package/dist/esm/core/compatible.js +0 -215
  437. package/dist/esm/core/config.js +0 -19
  438. package/dist/esm/core/constants.js +0 -13
  439. package/dist/esm/core/context/index.js +0 -67
  440. package/dist/esm/core/context/monitors/default.js +0 -20
  441. package/dist/esm/core/context/monitors/index.js +0 -7
  442. package/dist/esm/core/context/monitors/index.server.js +0 -9
  443. package/dist/esm/core/context/request/index.js +0 -6
  444. package/dist/esm/core/context/request/index.server.js +0 -8
  445. package/dist/esm/core/context/response/index.js +0 -16
  446. package/dist/esm/core/context/response/index.server.js +0 -41
  447. package/dist/esm/core/context/runtime.js +0 -18
  448. package/dist/esm/core/context/serverPayload/index.js +0 -9
  449. package/dist/esm/core/context/serverPayload/index.server.js +0 -15
  450. package/dist/esm/core/index.js +0 -12
  451. package/dist/esm/core/loader/index.js +0 -4
  452. package/dist/esm/core/loader/loaderManager.js +0 -234
  453. package/dist/esm/core/loader/useLoader.js +0 -89
  454. package/dist/esm/core/plugin/base.js +0 -0
  455. package/dist/esm/core/plugin/index.js +0 -33
  456. package/dist/esm/core/plugin/types.js +0 -0
  457. package/dist/esm/core/react/index.js +0 -18
  458. package/dist/esm/core/react/wrapper.js +0 -10
  459. package/dist/esm/core/server/constants.js +0 -10
  460. package/dist/esm/core/server/helmet.js +0 -53
  461. package/dist/esm/core/server/index.js +0 -17
  462. package/dist/esm/core/server/react/index.js +0 -8
  463. package/dist/esm/core/server/react/no-ssr-cache/index.js +0 -12
  464. package/dist/esm/core/server/react/nossr/index.js +0 -14
  465. package/dist/esm/core/server/react/prerender/index.js +0 -105
  466. package/dist/esm/core/server/react/prerender/type.js +0 -0
  467. package/dist/esm/core/server/react/prerender/util.js +0 -114
  468. package/dist/esm/core/server/requestHandler.js +0 -330
  469. package/dist/esm/core/server/server.js +0 -8
  470. package/dist/esm/core/server/shared.js +0 -10
  471. package/dist/esm/core/server/stream/afterTemplate.js +0 -107
  472. package/dist/esm/core/server/stream/beforeTemplate.js +0 -188
  473. package/dist/esm/core/server/stream/createReadableStream.js +0 -165
  474. package/dist/esm/core/server/stream/createReadableStream.worker.js +0 -239
  475. package/dist/esm/core/server/stream/deferredScript.js +0 -85
  476. package/dist/esm/core/server/stream/index.js +0 -10
  477. package/dist/esm/core/server/stream/shared.js +0 -109
  478. package/dist/esm/core/server/stream/template.js +0 -42
  479. package/dist/esm/core/server/string/index.js +0 -189
  480. package/dist/esm/core/server/string/loadable.js +0 -336
  481. package/dist/esm/core/server/string/prefetch.js +0 -105
  482. package/dist/esm/core/server/string/ssrData.js +0 -82
  483. package/dist/esm/core/server/string/styledComponent.js +0 -34
  484. package/dist/esm/core/server/string/types.js +0 -0
  485. package/dist/esm/core/server/tracer.js +0 -20
  486. package/dist/esm/core/server/utils.js +0 -80
  487. package/dist/esm/core/types.js +0 -0
  488. package/dist/esm/document/Body.js +0 -26
  489. package/dist/esm/document/Comment.js +0 -16
  490. package/dist/esm/document/DocumentContext.js +0 -9
  491. package/dist/esm/document/DocumentStructureContext.js +0 -12
  492. package/dist/esm/document/Head.js +0 -36
  493. package/dist/esm/document/Html.js +0 -108
  494. package/dist/esm/document/Links.js +0 -10
  495. package/dist/esm/document/Root.js +0 -41
  496. package/dist/esm/document/Script.js +0 -25
  497. package/dist/esm/document/Scripts.js +0 -10
  498. package/dist/esm/document/Style.js +0 -17
  499. package/dist/esm/document/Title.js +0 -10
  500. package/dist/esm/document/cli/index.js +0 -282
  501. package/dist/esm/document/constants.js +0 -56
  502. package/dist/esm/document/index.js +0 -12
  503. package/dist/esm/exports/head.js +0 -6
  504. package/dist/esm/exports/loadable.js +0 -6
  505. package/dist/esm/exports/server.js +0 -6
  506. package/dist/esm/exports/styled.js +0 -6
  507. package/dist/esm/index.js +0 -20
  508. package/dist/esm/react-server.js +0 -10
  509. package/dist/esm/router/cli/code/getClientRoutes/getRoutes.js +0 -185
  510. package/dist/esm/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -183
  511. package/dist/esm/router/cli/code/getClientRoutes/index.js +0 -6
  512. package/dist/esm/router/cli/code/getClientRoutes/utils.js +0 -28
  513. package/dist/esm/router/cli/code/index.js +0 -255
  514. package/dist/esm/router/cli/code/makeLegalIdentifier.js +0 -15
  515. package/dist/esm/router/cli/code/nestedRoutes.js +0 -397
  516. package/dist/esm/router/cli/code/templates.js +0 -554
  517. package/dist/esm/router/cli/code/utils.js +0 -212
  518. package/dist/esm/router/cli/constants.js +0 -51
  519. package/dist/esm/router/cli/entry.js +0 -61
  520. package/dist/esm/router/cli/handler.js +0 -191
  521. package/dist/esm/router/cli/index.js +0 -202
  522. package/dist/esm/router/index.js +0 -1
  523. package/dist/esm/router/internal.js +0 -5
  524. package/dist/esm/router/runtime/DefaultNotFound.js +0 -16
  525. package/dist/esm/router/runtime/DeferredDataScripts.js +0 -7
  526. package/dist/esm/router/runtime/DeferredDataScripts.node.js +0 -138
  527. package/dist/esm/router/runtime/PrefetchLink.js +0 -247
  528. package/dist/esm/router/runtime/constants.js +0 -19
  529. package/dist/esm/router/runtime/hooks.js +0 -7
  530. package/dist/esm/router/runtime/index.js +0 -17
  531. package/dist/esm/router/runtime/internal.js +0 -10
  532. package/dist/esm/router/runtime/plugin.js +0 -216
  533. package/dist/esm/router/runtime/plugin.node.js +0 -237
  534. package/dist/esm/router/runtime/routeModule.js +0 -26
  535. package/dist/esm/router/runtime/rsc-router.js +0 -437
  536. package/dist/esm/router/runtime/server.js +0 -1
  537. package/dist/esm/router/runtime/types.js +0 -0
  538. package/dist/esm/router/runtime/utils.js +0 -296
  539. package/dist/esm/router/runtime/withRouter.js +0 -19
  540. package/dist/esm/rsc/client.js +0 -7
  541. package/dist/esm/rsc/server.js +0 -87
  542. package/dist/esm-node/cli/alias.js +0 -28
  543. package/dist/esm-node/cli/code.js +0 -137
  544. package/dist/esm-node/cli/constants.js +0 -20
  545. package/dist/esm-node/cli/entry.js +0 -9
  546. package/dist/esm-node/cli/index.js +0 -145
  547. package/dist/esm-node/cli/ssr/babel-plugin-ssr-loader-id.js +0 -119
  548. package/dist/esm-node/cli/ssr/index.js +0 -116
  549. package/dist/esm-node/cli/ssr/loadable-bundler-plugin.js +0 -97
  550. package/dist/esm-node/common.js +0 -8
  551. package/dist/esm-node/core/browser/hydrate.js +0 -68
  552. package/dist/esm-node/core/browser/index.js +0 -128
  553. package/dist/esm-node/core/browser/withCallback.js +0 -17
  554. package/dist/esm-node/core/compat/hooks.js +0 -54
  555. package/dist/esm-node/core/compat/index.js +0 -18
  556. package/dist/esm-node/core/compat/requestContext.js +0 -23
  557. package/dist/esm-node/core/compatible.js +0 -156
  558. package/dist/esm-node/core/config.js +0 -15
  559. package/dist/esm-node/core/constants.js +0 -13
  560. package/dist/esm-node/core/context/index.js +0 -67
  561. package/dist/esm-node/core/context/monitors/default.js +0 -14
  562. package/dist/esm-node/core/context/monitors/index.js +0 -7
  563. package/dist/esm-node/core/context/monitors/index.server.js +0 -9
  564. package/dist/esm-node/core/context/request/index.js +0 -6
  565. package/dist/esm-node/core/context/request/index.server.js +0 -8
  566. package/dist/esm-node/core/context/response/index.js +0 -16
  567. package/dist/esm-node/core/context/response/index.server.js +0 -35
  568. package/dist/esm-node/core/context/runtime.js +0 -15
  569. package/dist/esm-node/core/context/serverPayload/index.js +0 -9
  570. package/dist/esm-node/core/context/serverPayload/index.server.js +0 -15
  571. package/dist/esm-node/core/index.js +0 -12
  572. package/dist/esm-node/core/loader/index.js +0 -4
  573. package/dist/esm-node/core/loader/loaderManager.js +0 -151
  574. package/dist/esm-node/core/loader/useLoader.js +0 -84
  575. package/dist/esm-node/core/plugin/index.js +0 -28
  576. package/dist/esm-node/core/react/index.js +0 -18
  577. package/dist/esm-node/core/react/wrapper.js +0 -10
  578. package/dist/esm-node/core/server/constants.js +0 -10
  579. package/dist/esm-node/core/server/helmet.js +0 -49
  580. package/dist/esm-node/core/server/index.js +0 -13
  581. package/dist/esm-node/core/server/react/index.js +0 -8
  582. package/dist/esm-node/core/server/react/no-ssr-cache/index.js +0 -12
  583. package/dist/esm-node/core/server/react/nossr/index.js +0 -13
  584. package/dist/esm-node/core/server/react/prerender/index.js +0 -90
  585. package/dist/esm-node/core/server/react/prerender/util.js +0 -93
  586. package/dist/esm-node/core/server/requestHandler.js +0 -199
  587. package/dist/esm-node/core/server/shared.js +0 -6
  588. package/dist/esm-node/core/server/stream/afterTemplate.js +0 -76
  589. package/dist/esm-node/core/server/stream/beforeTemplate.js +0 -85
  590. package/dist/esm-node/core/server/stream/createReadableStream.js +0 -123
  591. package/dist/esm-node/core/server/stream/createReadableStream.worker.js +0 -134
  592. package/dist/esm-node/core/server/stream/deferredScript.js +0 -76
  593. package/dist/esm-node/core/server/stream/index.js +0 -6
  594. package/dist/esm-node/core/server/stream/shared.js +0 -82
  595. package/dist/esm-node/core/server/stream/template.js +0 -15
  596. package/dist/esm-node/core/server/string/index.js +0 -113
  597. package/dist/esm-node/core/server/string/loadable.js +0 -154
  598. package/dist/esm-node/core/server/string/prefetch.js +0 -69
  599. package/dist/esm-node/core/server/string/ssrData.js +0 -74
  600. package/dist/esm-node/core/server/string/styledComponent.js +0 -29
  601. package/dist/esm-node/core/server/tracer.js +0 -20
  602. package/dist/esm-node/core/server/utils.js +0 -57
  603. package/dist/esm-node/document/Body.js +0 -22
  604. package/dist/esm-node/document/Comment.js +0 -16
  605. package/dist/esm-node/document/DocumentContext.js +0 -9
  606. package/dist/esm-node/document/DocumentStructureContext.js +0 -12
  607. package/dist/esm-node/document/Head.js +0 -32
  608. package/dist/esm-node/document/Html.js +0 -83
  609. package/dist/esm-node/document/Links.js +0 -10
  610. package/dist/esm-node/document/Root.js +0 -35
  611. package/dist/esm-node/document/Script.js +0 -23
  612. package/dist/esm-node/document/Scripts.js +0 -10
  613. package/dist/esm-node/document/Style.js +0 -17
  614. package/dist/esm-node/document/Title.js +0 -10
  615. package/dist/esm-node/document/cli/index.js +0 -188
  616. package/dist/esm-node/document/constants.js +0 -58
  617. package/dist/esm-node/exports/head.js +0 -6
  618. package/dist/esm-node/exports/loadable.js +0 -6
  619. package/dist/esm-node/exports/server.js +0 -4
  620. package/dist/esm-node/exports/styled.js +0 -6
  621. package/dist/esm-node/index.js +0 -20
  622. package/dist/esm-node/react-server.js +0 -10
  623. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutes.js +0 -163
  624. package/dist/esm-node/router/cli/code/getClientRoutes/getRoutesLegacy.js +0 -161
  625. package/dist/esm-node/router/cli/code/getClientRoutes/index.js +0 -6
  626. package/dist/esm-node/router/cli/code/getClientRoutes/utils.js +0 -22
  627. package/dist/esm-node/router/cli/code/index.js +0 -126
  628. package/dist/esm-node/router/cli/code/nestedRoutes.js +0 -258
  629. package/dist/esm-node/router/cli/code/templates.js +0 -452
  630. package/dist/esm-node/router/cli/code/utils.js +0 -101
  631. package/dist/esm-node/router/cli/constants.js +0 -51
  632. package/dist/esm-node/router/cli/entry.js +0 -54
  633. package/dist/esm-node/router/cli/handler.js +0 -67
  634. package/dist/esm-node/router/cli/index.js +0 -110
  635. package/dist/esm-node/router/runtime/DefaultNotFound.js +0 -14
  636. package/dist/esm-node/router/runtime/DeferredDataScripts.js +0 -6
  637. package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +0 -132
  638. package/dist/esm-node/router/runtime/PrefetchLink.js +0 -192
  639. package/dist/esm-node/router/runtime/hooks.js +0 -7
  640. package/dist/esm-node/router/runtime/index.js +0 -17
  641. package/dist/esm-node/router/runtime/internal.js +0 -10
  642. package/dist/esm-node/router/runtime/plugin.js +0 -206
  643. package/dist/esm-node/router/runtime/plugin.node.js +0 -176
  644. package/dist/esm-node/router/runtime/routeModule.js +0 -26
  645. package/dist/esm-node/router/runtime/rsc-router.js +0 -284
  646. package/dist/esm-node/router/runtime/server.js +0 -1
  647. package/dist/esm-node/router/runtime/utils.js +0 -218
  648. package/dist/esm-node/router/runtime/withRouter.js +0 -18
  649. package/dist/esm-node/rsc/client.js +0 -7
  650. package/dist/esm-node/rsc/server.js +0 -36
  651. package/dist/types/cli/ssr/babel-plugin-ssr-loader-id.d.ts +0 -1
  652. package/dist/types/config.d.ts +0 -6
  653. package/dist/types/core/compatible.d.ts +0 -24
  654. package/dist/types/core/loader/index.d.ts +0 -1
  655. package/dist/types/core/loader/loaderManager.d.ts +0 -56
  656. package/dist/types/core/loader/useLoader.d.ts +0 -36
  657. package/dist/types/core/plugin/base.d.ts +0 -15
  658. package/dist/types/core/server/react/prerender/index.d.ts +0 -5
  659. package/dist/types/core/server/react/prerender/type.d.ts +0 -29
  660. package/dist/types/core/server/react/prerender/util.d.ts +0 -6
  661. package/dist/types/core/server/string/prefetch.d.ts +0 -16
  662. package/dist/types/core/server/string/styledComponent.d.ts +0 -11
  663. package/dist/types/exports/server.d.ts +0 -14
  664. package/dist/types/exports/styled.d.ts +0 -3
  665. package/dist/types/router/cli/code/getClientRoutes/getRoutesLegacy.d.ts +0 -9
  666. package/types/index.d.ts +0 -7
  667. package/types/router.d.ts +0 -24
  668. /package/dist/esm/cache/{index.js → index.mjs} +0 -0
  669. /package/dist/{esm-node/core/server/string/types.js → esm/core/plugin/types.mjs} +0 -0
  670. /package/dist/{esm-node/core/types.js → esm/core/server/string/types.mjs} +0 -0
  671. /package/dist/{esm-node/router/runtime/types.js → esm/core/types.mjs} +0 -0
  672. /package/dist/{esm-node/document/index.js → esm/document/index.mjs} +0 -0
  673. /package/dist/{esm-node/router/index.js → esm/router/index.mjs} +0 -0
  674. /package/dist/esm/{config.js → router/runtime/types.mjs} +0 -0
  675. /package/dist/esm-node/cache/{index.js → index.mjs} +0 -0
  676. /package/dist/esm-node/{config.js → core/plugin/types.mjs} +0 -0
  677. /package/dist/esm-node/core/{plugin/base.js → server/string/types.mjs} +0 -0
  678. /package/dist/esm-node/core/{plugin/types.js → types.mjs} +0 -0
  679. /package/dist/esm-node/{core/server/react/prerender/type.js → router/runtime/types.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 };