@modern-js/app-tools 2.35.2-alpha.0 → 2.37.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 (259) hide show
  1. package/dist/cjs/analyze/index.js +5 -7
  2. package/dist/cjs/analyze/nestedRoutes.js +4 -1
  3. package/dist/cjs/analyze/templates.js +28 -8
  4. package/dist/cjs/builder/builder-rspack/adapterCopy.js +14 -10
  5. package/dist/cjs/builder/builder-webpack/adapterModern.js +0 -2
  6. package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +2 -0
  7. package/dist/cjs/config/initialize/inits.js +0 -16
  8. package/dist/esm/analyze/index.js +5 -7
  9. package/dist/esm/analyze/nestedRoutes.js +4 -1
  10. package/dist/esm/analyze/templates.js +19 -7
  11. package/dist/esm/builder/builder-rspack/adapterCopy.js +12 -8
  12. package/dist/esm/builder/builder-webpack/adapterModern.js +0 -2
  13. package/dist/esm/builder/shared/builderPlugins/adapterBasic.js +2 -0
  14. package/dist/esm/config/initialize/inits.js +2 -17
  15. package/dist/esm-node/analyze/index.js +5 -7
  16. package/dist/esm-node/analyze/nestedRoutes.js +4 -1
  17. package/dist/esm-node/analyze/templates.js +25 -5
  18. package/dist/esm-node/builder/builder-rspack/adapterCopy.js +14 -10
  19. package/dist/esm-node/builder/builder-webpack/adapterModern.js +0 -2
  20. package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.js +2 -0
  21. package/dist/esm-node/config/initialize/inits.js +2 -18
  22. package/package.json +25 -25
  23. package/dist/js/modern/analyze/constants.js +0 -54
  24. package/dist/js/modern/analyze/generateCode.js +0 -247
  25. package/dist/js/modern/analyze/getBundleEntry.js +0 -71
  26. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +0 -220
  27. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +0 -216
  28. package/dist/js/modern/analyze/getClientRoutes/index.js +0 -6
  29. package/dist/js/modern/analyze/getClientRoutes/utils.js +0 -31
  30. package/dist/js/modern/analyze/getFileSystemEntry.js +0 -109
  31. package/dist/js/modern/analyze/getHtmlTemplate.js +0 -115
  32. package/dist/js/modern/analyze/getServerRoutes.js +0 -175
  33. package/dist/js/modern/analyze/index.js +0 -332
  34. package/dist/js/modern/analyze/isDefaultExportFunction.js +0 -42
  35. package/dist/js/modern/analyze/makeLegalIdentifier.js +0 -13
  36. package/dist/js/modern/analyze/nestedRoutes.js +0 -157
  37. package/dist/js/modern/analyze/templates.js +0 -334
  38. package/dist/js/modern/analyze/utils.js +0 -141
  39. package/dist/js/modern/builder/builderPlugins/compatModern.js +0 -233
  40. package/dist/js/modern/builder/index.js +0 -159
  41. package/dist/js/modern/builder/loaders/routerLoader.js +0 -17
  42. package/dist/js/modern/builder/loaders/serverModuleLoader.js +0 -7
  43. package/dist/js/modern/builder/share.js +0 -46
  44. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -30
  45. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +0 -37
  46. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +0 -113
  47. package/dist/js/modern/commands/build.js +0 -91
  48. package/dist/js/modern/commands/deploy.js +0 -28
  49. package/dist/js/modern/commands/dev.js +0 -109
  50. package/dist/js/modern/commands/index.js +0 -3
  51. package/dist/js/modern/commands/inspect.js +0 -38
  52. package/dist/js/modern/commands/serve.js +0 -54
  53. package/dist/js/modern/config/default.js +0 -175
  54. package/dist/js/modern/config/index.js +0 -8
  55. package/dist/js/modern/config/initial/createHtmlConfig.js +0 -35
  56. package/dist/js/modern/config/initial/createOutputConfig.js +0 -68
  57. package/dist/js/modern/config/initial/createSourceConfig.js +0 -39
  58. package/dist/js/modern/config/initial/createToolsConfig.js +0 -42
  59. package/dist/js/modern/config/initial/index.js +0 -16
  60. package/dist/js/modern/config/initial/inits.js +0 -152
  61. package/dist/js/modern/config/initial/transformNormalizedConfig.js +0 -47
  62. package/dist/js/modern/defineConfig.js +0 -27
  63. package/dist/js/modern/exports/server.js +0 -4
  64. package/dist/js/modern/hooks.js +0 -35
  65. package/dist/js/modern/index.js +0 -211
  66. package/dist/js/modern/initialize/index.js +0 -124
  67. package/dist/js/modern/locale/en.js +0 -36
  68. package/dist/js/modern/locale/index.js +0 -9
  69. package/dist/js/modern/locale/zh.js +0 -36
  70. package/dist/js/modern/schema/Schema.js +0 -40
  71. package/dist/js/modern/schema/index.js +0 -88
  72. package/dist/js/modern/schema/legacy.js +0 -148
  73. package/dist/js/modern/types/config/deploy.js +0 -0
  74. package/dist/js/modern/types/config/dev.js +0 -0
  75. package/dist/js/modern/types/config/experiments.js +0 -0
  76. package/dist/js/modern/types/config/html.js +0 -0
  77. package/dist/js/modern/types/config/index.js +0 -1
  78. package/dist/js/modern/types/config/output.js +0 -0
  79. package/dist/js/modern/types/config/performance.js +0 -0
  80. package/dist/js/modern/types/config/security.js +0 -0
  81. package/dist/js/modern/types/config/source.js +0 -0
  82. package/dist/js/modern/types/config/tools.js +0 -0
  83. package/dist/js/modern/types/hooks.js +0 -0
  84. package/dist/js/modern/types/index.js +0 -3
  85. package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
  86. package/dist/js/modern/types/legacyConfig/dev.js +0 -0
  87. package/dist/js/modern/types/legacyConfig/index.js +0 -0
  88. package/dist/js/modern/types/legacyConfig/output.js +0 -0
  89. package/dist/js/modern/types/legacyConfig/source.js +0 -0
  90. package/dist/js/modern/types/legacyConfig/tools.js +0 -0
  91. package/dist/js/modern/utils/config.js +0 -128
  92. package/dist/js/modern/utils/createServer.js +0 -75
  93. package/dist/js/modern/utils/env.js +0 -15
  94. package/dist/js/modern/utils/generateWatchFiles.js +0 -55
  95. package/dist/js/modern/utils/getSelectedEntries.js +0 -58
  96. package/dist/js/modern/utils/getServerInternalPlugins.js +0 -58
  97. package/dist/js/modern/utils/language.js +0 -8
  98. package/dist/js/modern/utils/printInstructions.js +0 -31
  99. package/dist/js/modern/utils/restart.js +0 -44
  100. package/dist/js/modern/utils/routes.js +0 -30
  101. package/dist/js/modern/utils/types.js +0 -0
  102. package/dist/js/node/analyze/constants.js +0 -98
  103. package/dist/js/node/analyze/generateCode.js +0 -271
  104. package/dist/js/node/analyze/getBundleEntry.js +0 -95
  105. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +0 -242
  106. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +0 -238
  107. package/dist/js/node/analyze/getClientRoutes/index.js +0 -30
  108. package/dist/js/node/analyze/getClientRoutes/utils.js +0 -58
  109. package/dist/js/node/analyze/getFileSystemEntry.js +0 -131
  110. package/dist/js/node/analyze/getHtmlTemplate.js +0 -144
  111. package/dist/js/node/analyze/getServerRoutes.js +0 -194
  112. package/dist/js/node/analyze/index.js +0 -339
  113. package/dist/js/node/analyze/isDefaultExportFunction.js +0 -71
  114. package/dist/js/node/analyze/makeLegalIdentifier.js +0 -36
  115. package/dist/js/node/analyze/nestedRoutes.js +0 -184
  116. package/dist/js/node/analyze/templates.js +0 -365
  117. package/dist/js/node/analyze/utils.js +0 -172
  118. package/dist/js/node/builder/builderPlugins/compatModern.js +0 -258
  119. package/dist/js/node/builder/index.js +0 -177
  120. package/dist/js/node/builder/loaders/routerLoader.js +0 -38
  121. package/dist/js/node/builder/loaders/serverModuleLoader.js +0 -28
  122. package/dist/js/node/builder/share.js +0 -75
  123. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -53
  124. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +0 -60
  125. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +0 -135
  126. package/dist/js/node/commands/build.js +0 -112
  127. package/dist/js/node/commands/deploy.js +0 -51
  128. package/dist/js/node/commands/dev.js +0 -126
  129. package/dist/js/node/commands/index.js +0 -19
  130. package/dist/js/node/commands/inspect.js +0 -61
  131. package/dist/js/node/commands/serve.js +0 -83
  132. package/dist/js/node/config/default.js +0 -197
  133. package/dist/js/node/config/index.js +0 -34
  134. package/dist/js/node/config/initial/createHtmlConfig.js +0 -58
  135. package/dist/js/node/config/initial/createOutputConfig.js +0 -91
  136. package/dist/js/node/config/initial/createSourceConfig.js +0 -62
  137. package/dist/js/node/config/initial/createToolsConfig.js +0 -65
  138. package/dist/js/node/config/initial/index.js +0 -41
  139. package/dist/js/node/config/initial/inits.js +0 -175
  140. package/dist/js/node/config/initial/transformNormalizedConfig.js +0 -70
  141. package/dist/js/node/defineConfig.js +0 -49
  142. package/dist/js/node/exports/server.js +0 -27
  143. package/dist/js/node/hooks.js +0 -54
  144. package/dist/js/node/index.js +0 -235
  145. package/dist/js/node/initialize/index.js +0 -134
  146. package/dist/js/node/locale/en.js +0 -59
  147. package/dist/js/node/locale/index.js +0 -33
  148. package/dist/js/node/locale/zh.js +0 -59
  149. package/dist/js/node/schema/Schema.js +0 -63
  150. package/dist/js/node/schema/index.js +0 -118
  151. package/dist/js/node/schema/legacy.js +0 -169
  152. package/dist/js/node/types/config/deploy.js +0 -15
  153. package/dist/js/node/types/config/dev.js +0 -15
  154. package/dist/js/node/types/config/experiments.js +0 -15
  155. package/dist/js/node/types/config/html.js +0 -15
  156. package/dist/js/node/types/config/index.js +0 -17
  157. package/dist/js/node/types/config/output.js +0 -15
  158. package/dist/js/node/types/config/performance.js +0 -15
  159. package/dist/js/node/types/config/security.js +0 -15
  160. package/dist/js/node/types/config/source.js +0 -15
  161. package/dist/js/node/types/config/tools.js +0 -15
  162. package/dist/js/node/types/hooks.js +0 -15
  163. package/dist/js/node/types/index.js +0 -19
  164. package/dist/js/node/types/legacyConfig/deploy.js +0 -15
  165. package/dist/js/node/types/legacyConfig/dev.js +0 -15
  166. package/dist/js/node/types/legacyConfig/index.js +0 -15
  167. package/dist/js/node/types/legacyConfig/output.js +0 -15
  168. package/dist/js/node/types/legacyConfig/source.js +0 -15
  169. package/dist/js/node/types/legacyConfig/tools.js +0 -15
  170. package/dist/js/node/utils/config.js +0 -153
  171. package/dist/js/node/utils/createServer.js +0 -106
  172. package/dist/js/node/utils/env.js +0 -38
  173. package/dist/js/node/utils/generateWatchFiles.js +0 -85
  174. package/dist/js/node/utils/getSelectedEntries.js +0 -81
  175. package/dist/js/node/utils/getServerInternalPlugins.js +0 -79
  176. package/dist/js/node/utils/language.js +0 -31
  177. package/dist/js/node/utils/printInstructions.js +0 -54
  178. package/dist/js/node/utils/restart.js +0 -67
  179. package/dist/js/node/utils/routes.js +0 -59
  180. package/dist/js/node/utils/types.js +0 -15
  181. package/dist/js/treeshaking/analyze/constants.js +0 -40
  182. package/dist/js/treeshaking/analyze/generateCode.js +0 -485
  183. package/dist/js/treeshaking/analyze/getBundleEntry.js +0 -62
  184. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +0 -233
  185. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +0 -231
  186. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +0 -3
  187. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +0 -23
  188. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +0 -107
  189. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +0 -302
  190. package/dist/js/treeshaking/analyze/getServerRoutes.js +0 -222
  191. package/dist/js/treeshaking/analyze/index.js +0 -697
  192. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +0 -47
  193. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +0 -13
  194. package/dist/js/treeshaking/analyze/nestedRoutes.js +0 -384
  195. package/dist/js/treeshaking/analyze/templates.js +0 -468
  196. package/dist/js/treeshaking/analyze/utils.js +0 -374
  197. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +0 -304
  198. package/dist/js/treeshaking/builder/index.js +0 -374
  199. package/dist/js/treeshaking/builder/loaders/routerLoader.js +0 -13
  200. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +0 -5
  201. package/dist/js/treeshaking/builder/share.js +0 -40
  202. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -110
  203. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +0 -72
  204. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +0 -343
  205. package/dist/js/treeshaking/commands/build.js +0 -291
  206. package/dist/js/treeshaking/commands/deploy.js +0 -154
  207. package/dist/js/treeshaking/commands/dev.js +0 -301
  208. package/dist/js/treeshaking/commands/index.js +0 -3
  209. package/dist/js/treeshaking/commands/inspect.js +0 -149
  210. package/dist/js/treeshaking/commands/serve.js +0 -199
  211. package/dist/js/treeshaking/config/default.js +0 -210
  212. package/dist/js/treeshaking/config/index.js +0 -3
  213. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +0 -19
  214. package/dist/js/treeshaking/config/initial/createOutputConfig.js +0 -41
  215. package/dist/js/treeshaking/config/initial/createSourceConfig.js +0 -42
  216. package/dist/js/treeshaking/config/initial/createToolsConfig.js +0 -23
  217. package/dist/js/treeshaking/config/initial/index.js +0 -12
  218. package/dist/js/treeshaking/config/initial/inits.js +0 -209
  219. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +0 -35
  220. package/dist/js/treeshaking/defineConfig.js +0 -61
  221. package/dist/js/treeshaking/exports/server.js +0 -2
  222. package/dist/js/treeshaking/hooks.js +0 -29
  223. package/dist/js/treeshaking/index.js +0 -706
  224. package/dist/js/treeshaking/initialize/index.js +0 -276
  225. package/dist/js/treeshaking/locale/en.js +0 -38
  226. package/dist/js/treeshaking/locale/index.js +0 -9
  227. package/dist/js/treeshaking/locale/zh.js +0 -38
  228. package/dist/js/treeshaking/schema/Schema.js +0 -273
  229. package/dist/js/treeshaking/schema/index.js +0 -181
  230. package/dist/js/treeshaking/schema/legacy.js +0 -337
  231. package/dist/js/treeshaking/types/config/deploy.js +0 -1
  232. package/dist/js/treeshaking/types/config/dev.js +0 -1
  233. package/dist/js/treeshaking/types/config/experiments.js +0 -1
  234. package/dist/js/treeshaking/types/config/html.js +0 -1
  235. package/dist/js/treeshaking/types/config/index.js +0 -1
  236. package/dist/js/treeshaking/types/config/output.js +0 -1
  237. package/dist/js/treeshaking/types/config/performance.js +0 -1
  238. package/dist/js/treeshaking/types/config/security.js +0 -1
  239. package/dist/js/treeshaking/types/config/source.js +0 -1
  240. package/dist/js/treeshaking/types/config/tools.js +0 -1
  241. package/dist/js/treeshaking/types/hooks.js +0 -1
  242. package/dist/js/treeshaking/types/index.js +0 -3
  243. package/dist/js/treeshaking/types/legacyConfig/deploy.js +0 -1
  244. package/dist/js/treeshaking/types/legacyConfig/dev.js +0 -1
  245. package/dist/js/treeshaking/types/legacyConfig/index.js +0 -1
  246. package/dist/js/treeshaking/types/legacyConfig/output.js +0 -1
  247. package/dist/js/treeshaking/types/legacyConfig/source.js +0 -1
  248. package/dist/js/treeshaking/types/legacyConfig/tools.js +0 -1
  249. package/dist/js/treeshaking/utils/config.js +0 -302
  250. package/dist/js/treeshaking/utils/createServer.js +0 -258
  251. package/dist/js/treeshaking/utils/env.js +0 -13
  252. package/dist/js/treeshaking/utils/generateWatchFiles.js +0 -214
  253. package/dist/js/treeshaking/utils/getSelectedEntries.js +0 -186
  254. package/dist/js/treeshaking/utils/getServerInternalPlugins.js +0 -210
  255. package/dist/js/treeshaking/utils/language.js +0 -6
  256. package/dist/js/treeshaking/utils/printInstructions.js +0 -152
  257. package/dist/js/treeshaking/utils/restart.js +0 -187
  258. package/dist/js/treeshaking/utils/routes.js +0 -153
  259. package/dist/js/treeshaking/utils/types.js +0 -1
@@ -147,13 +147,11 @@ var analyze_default = ({ bundler }) => ({
147
147
  });
148
148
  builder.onDevCompileDone(async ({ isFirstCompile }) => {
149
149
  const hookRunners2 = api.useHookRunners();
150
- if (process.stdout.isTTY || isFirstCompile) {
151
- hookRunners2.afterDev({
152
- isFirstCompile
153
- });
154
- if (isFirstCompile) {
155
- (0, import_printInstructions.printInstructions)(hookRunners2, appContext, normalizedConfig);
156
- }
150
+ hookRunners2.afterDev({
151
+ isFirstCompile
152
+ });
153
+ if (isFirstCompile) {
154
+ (0, import_printInstructions.printInstructions)(hookRunners2, appContext, normalizedConfig);
157
155
  }
158
156
  });
159
157
  builder.onBeforeCreateCompiler(async ({ bundlerConfigs }) => {
@@ -268,7 +268,7 @@ const walk = async (dirname, rootDir, alias, entryName, isMainEntry, oldVersion)
268
268
  delete finalRoute.path;
269
269
  }
270
270
  const childRoutes = finalRoute.children = (_finalRoute_children = finalRoute.children) === null || _finalRoute_children === void 0 ? void 0 : _finalRoute_children.filter((childRoute) => childRoute);
271
- if (childRoutes && childRoutes.length === 0 && !finalRoute.index) {
271
+ if (childRoutes && childRoutes.length === 0 && !finalRoute.index && !finalRoute._component) {
272
272
  return null;
273
273
  }
274
274
  if (childRoutes && childRoutes.length === 1 && !finalRoute._component) {
@@ -281,6 +281,9 @@ const walk = async (dirname, rootDir, alias, entryName, isMainEntry, oldVersion)
281
281
  };
282
282
  }
283
283
  }
284
+ if (isRoot && !finalRoute._component) {
285
+ throw new Error("The root layout component is required, make sure the routes/layout.tsx file exists.");
286
+ }
284
287
  if (isRoot && !oldVersion) {
285
288
  const optimizedRoutes = optimizeRoute(finalRoute);
286
289
  return optimizedRoutes;
@@ -38,7 +38,8 @@ __export(templates_exports, {
38
38
  module.exports = __toCommonJS(templates_exports);
39
39
  var import_path = __toESM(require("path"));
40
40
  var import_utils = require("@modern-js/utils");
41
- var import_constants = require("./constants");
41
+ var import_constants = require("@modern-js/utils/universal/constants");
42
+ var import_constants2 = require("./constants");
42
43
  var import_utils2 = require("./utils");
43
44
  const index = ({ mountId, imports, renderFunction: renderFunction2, exportStatement }) => `
44
45
  const IS_BROWSER = typeof window !== 'undefined' && window.name !== 'nodejs';
@@ -64,7 +65,7 @@ const renderFunction = ({ plugins, customBootstrap, fileSystemRoutes: fileSystem
64
65
  return `
65
66
  const finalAppConfig = {
66
67
  ...App.config,
67
- ...typeof ${import_constants.APP_CONFIG_NAME} === 'function' ? ${import_constants.APP_CONFIG_NAME}() : {},
68
+ ...typeof ${import_constants2.APP_CONFIG_NAME} === 'function' ? ${import_constants2.APP_CONFIG_NAME}() : {},
68
69
  }
69
70
 
70
71
  AppWrapper = createApp({
@@ -198,7 +199,7 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
198
199
  const loadersMap = {};
199
200
  const configs = [];
200
201
  const configsMap = {};
201
- const loadersMapFile = import_path.default.join(internalDirectory, entryName, import_constants.TEMP_LOADERS_DIR, "map.json");
202
+ const loadersMapFile = import_path.default.join(internalDirectory, entryName, import_constants2.TEMP_LOADERS_DIR, "map.json");
202
203
  const importLazyCode = `
203
204
  import { lazy } from "react";
204
205
  import loadable, { lazy as loadableLazy } from "@modern-js/runtime/loadable"
@@ -210,7 +211,7 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
210
211
  }
211
212
  const clientDataStr = clientData ? `&clientData=${clientData}` : "";
212
213
  if (nestedRoutesEntry) {
213
- return `?loaderId=${loaderId}${clientDataStr}&action=${action}&inline=${inline}&routeId=${routeId}`;
214
+ return `?loaderId=${loaderId}${clientDataStr}&action=${action ? (0, import_utils.slash)(action) : action}&inline=${inline}&routeId=${routeId}`;
214
215
  }
215
216
  return "";
216
217
  };
@@ -263,18 +264,23 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
263
264
  if (route._component) {
264
265
  if (splitRouteChunks) {
265
266
  if (route.isRoot) {
267
+ lazyImport = `async function(){const routeModule = await import('${route._component}'); if(typeof document !== "undefined") window.${import_constants.ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
266
268
  rootLayoutCode = `import RootLayout from '${route._component}'`;
267
269
  component = `RootLayout`;
268
270
  } else if (ssrMode === "string") {
269
- lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
271
+ lazyImport = `async function(){const routeModule = await import(/* webpackChunkName: "${route.id}" */ '${route._component}'); if(typeof document !== "undefined") window.${import_constants.ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
270
272
  component = `loadable(${lazyImport})`;
271
273
  } else {
272
- lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
274
+ lazyImport = `async function(){const routeModule = await import(/* webpackChunkName: "${route.id}" */ '${route._component}'); if(typeof document !== "undefined") window.${import_constants.ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
273
275
  component = `lazy(${lazyImport})`;
274
276
  }
275
277
  } else {
276
- components.push(route._component);
277
- component = `component_${components.length - 1}`;
278
+ lazyImport = `async function(){const routeModule = await import(/* webpackMode: "eager" */ '${route._component}'); if(typeof document !== "undefined") window.${import_constants.ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
279
+ if (ssrMode === "string") {
280
+ component = `loadable(${lazyImport})`;
281
+ } else {
282
+ component = `lazy(${lazyImport})`;
283
+ }
278
284
  }
279
285
  }
280
286
  } else if (route._component) {
@@ -299,6 +305,9 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
299
305
  if (route._component) {
300
306
  finalRoute.component = component;
301
307
  }
308
+ if (route.type === "nested" && route._component && (route.loader || route.data)) {
309
+ finalRoute.shouldRevalidate = `createShouldRevalidate("${route.id}")`;
310
+ }
302
311
  return finalRoute;
303
312
  };
304
313
  let routeComponentsCode = `
@@ -311,6 +320,7 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
311
320
  const keywords = [
312
321
  "component",
313
322
  "lazyImport",
323
+ "shouldRevalidate",
314
324
  "loader",
315
325
  "action",
316
326
  "loading",
@@ -391,14 +401,24 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
391
401
  }
392
402
  await import_utils.fs.ensureFile(loadersMapFile);
393
403
  await import_utils.fs.writeJSON(loadersMapFile, loadersMap);
404
+ const importRuntimeRouterCode = `
405
+ import { createShouldRevalidate } from '@modern-js/runtime/router';
406
+ `;
407
+ const routeModulesCode = `
408
+ if(typeof document !== 'undefined'){
409
+ window.${import_constants.ROUTE_MODULES} = {}
410
+ }
411
+ `;
394
412
  return `
395
413
  ${importLazyCode}
396
414
  ${importComponentsCode}
415
+ ${importRuntimeRouterCode}
397
416
  ${rootLayoutCode}
398
417
  ${importLoadingCode}
399
418
  ${importErrorComponentsCode}
400
419
  ${importLoadersCode}
401
420
  ${importConfigsCode}
421
+ ${routeModulesCode}
402
422
  ${routeComponentsCode}
403
423
  `;
404
424
  };
@@ -39,17 +39,21 @@ const builderPluginAdpaterCopy = (options) => ({
39
39
  name: "builder-plugin-adapter-rspack-copy",
40
40
  setup(api) {
41
41
  let publicPath;
42
+ api.modifyBundlerChain((chain, { CHAIN_ID }) => {
43
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
44
+ var _args_;
45
+ return [
46
+ {
47
+ patterns: [
48
+ ...((_args_ = args[0]) === null || _args_ === void 0 ? void 0 : _args_.patterns) || [],
49
+ ...createConfigBuiltinCopy(options)
50
+ ]
51
+ }
52
+ ];
53
+ });
54
+ });
42
55
  api.modifyRspackConfig((config) => {
43
- var _config_builtins_copy, _config_builtins, _config_output;
44
- config.builtins = {
45
- ...config.builtins || {},
46
- copy: {
47
- patterns: [
48
- ...((_config_builtins = config.builtins) === null || _config_builtins === void 0 ? void 0 : (_config_builtins_copy = _config_builtins.copy) === null || _config_builtins_copy === void 0 ? void 0 : _config_builtins_copy.patterns) || [],
49
- ...createConfigBuiltinCopy(options)
50
- ]
51
- }
52
- };
56
+ var _config_output;
53
57
  publicPath = (_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.publicPath;
54
58
  });
55
59
  api.onDevCompileDone(async () => {
@@ -21,14 +21,12 @@ __export(adapterModern_exports, {
21
21
  builderPluginAdapterModern: () => builderPluginAdapterModern
22
22
  });
23
23
  module.exports = __toCommonJS(adapterModern_exports);
24
- var import_path = require("path");
25
24
  var import_createCopyPattern = require("./createCopyPattern");
26
25
  const builderPluginAdapterModern = (options) => ({
27
26
  name: "builder-plugin-adapter-modern",
28
27
  setup(api) {
29
28
  const { normalizedConfig: modernConfig, appContext } = options;
30
29
  api.modifyWebpackChain((chain, { CHAIN_ID }) => {
31
- chain.resolve.modules.add("node_modules").add((0, import_path.join)(api.context.rootPath, "node_modules"));
32
30
  if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
33
31
  const defaultCopyPattern = (0, import_createCopyPattern.createPublicPattern)(appContext, modernConfig, chain);
34
32
  chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
@@ -31,6 +31,7 @@ __export(adapterBasic_exports, {
31
31
  builderPluginAdapterBasic: () => builderPluginAdapterBasic
32
32
  });
33
33
  module.exports = __toCommonJS(adapterBasic_exports);
34
+ var import_path = __toESM(require("path"));
34
35
  const builderPluginAdapterBasic = () => ({
35
36
  name: "builder-plugin-adapter-modern-basic",
36
37
  setup(api) {
@@ -54,6 +55,7 @@ const builderPluginAdapterBasic = () => ({
54
55
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
55
56
  chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
56
57
  }
58
+ chain.resolve.modules.add("node_modules").add(import_path.default.join(api.context.rootPath, "node_modules"));
57
59
  });
58
60
  }
59
61
  });
@@ -76,22 +76,6 @@ function initSourceConfig(config, appContext, bundler) {
76
76
  }
77
77
  return include2;
78
78
  }).concat(defaultInclude);
79
- const root = (0, import_utils.findMonorepoRoot)(appContext2.appDirectory);
80
- if (!root) {
81
- return transformInclude;
82
- }
83
- const modernjsMonorepo = (0, import_utils.isModernjsMonorepo)(root);
84
- if (modernjsMonorepo) {
85
- const paths = import_utils.globby.sync(import_path.posix.join(root, "features", "**", "package.json"), {
86
- ignore: [
87
- "**/node_modules/**/*"
88
- ]
89
- }).map((pathname) => (0, import_path.dirname)(pathname) + import_path.sep);
90
- return [
91
- ...paths,
92
- ...transformInclude
93
- ];
94
- }
95
79
  return transformInclude;
96
80
  }
97
81
  function createBuilderModuleScope(config2) {
@@ -257,13 +257,11 @@ function analyze_default(param) {
257
257
  return _ts_generator(this, function(_state2) {
258
258
  isFirstCompile = param2.isFirstCompile;
259
259
  hookRunners2 = api.useHookRunners();
260
- if (process.stdout.isTTY || isFirstCompile) {
261
- hookRunners2.afterDev({
262
- isFirstCompile
263
- });
264
- if (isFirstCompile) {
265
- printInstructions(hookRunners2, appContext, normalizedConfig);
266
- }
260
+ hookRunners2.afterDev({
261
+ isFirstCompile
262
+ });
263
+ if (isFirstCompile) {
264
+ printInstructions(hookRunners2, appContext, normalizedConfig);
267
265
  }
268
266
  return [
269
267
  2
@@ -360,7 +360,7 @@ var walk = function() {
360
360
  childRoutes = finalRoute.children = (_finalRoute_children = finalRoute.children) === null || _finalRoute_children === void 0 ? void 0 : _finalRoute_children.filter(function(childRoute2) {
361
361
  return childRoute2;
362
362
  });
363
- if (childRoutes && childRoutes.length === 0 && !finalRoute.index) {
363
+ if (childRoutes && childRoutes.length === 0 && !finalRoute.index && !finalRoute._component) {
364
364
  return [
365
365
  2,
366
366
  null
@@ -375,6 +375,9 @@ var walk = function() {
375
375
  });
376
376
  }
377
377
  }
378
+ if (isRoot && !finalRoute._component) {
379
+ throw new Error("The root layout component is required, make sure the routes/layout.tsx file exists.");
380
+ }
378
381
  if (isRoot && !oldVersion) {
379
382
  optimizedRoutes = optimizeRoute(finalRoute);
380
383
  return [
@@ -5,6 +5,7 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
5
5
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
6
  import path from "path";
7
7
  import { fs, getEntryOptions, isSSGEntry, slash } from "@modern-js/utils";
8
+ import { ROUTE_MODULES } from "@modern-js/utils/universal/constants";
8
9
  import { APP_CONFIG_NAME, TEMP_LOADERS_DIR } from "./constants";
9
10
  import { getServerLoadersFile } from "./utils";
10
11
  var index = function(param) {
@@ -134,7 +135,7 @@ var createMatchReg = function(keyword) {
134
135
  };
135
136
  var fileSystemRoutes = function() {
136
137
  var _ref = _async_to_generator(function(param) {
137
- var routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, _param_splitRouteChunks, splitRouteChunks, components, loadings, errors, loaders, loadersMap, configs, configsMap, loadersMapFile, importLazyCode, rootLayoutCode, getDataLoaderPath, traverseRouteTree, routeComponentsCode, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, newRoute, routeStr, keywords, regs, newRouteStr, component, finalRoute, keywords1, routeStr1, regs1, newRouteStr1, importLoadingCode, importComponentsCode, importErrorComponentsCode, importLoadersCode, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, key, loaderInfo, route1, importConfigsCode, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, _step_value1, key1, configPath;
138
+ var routes, ssrMode, nestedRoutesEntry, entryName, internalDirectory, _param_splitRouteChunks, splitRouteChunks, components, loadings, errors, loaders, loadersMap, configs, configsMap, loadersMapFile, importLazyCode, rootLayoutCode, getDataLoaderPath, traverseRouteTree, routeComponentsCode, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, newRoute, routeStr, keywords, regs, newRouteStr, component, finalRoute, keywords1, routeStr1, regs1, newRouteStr1, importLoadingCode, importComponentsCode, importErrorComponentsCode, importLoadersCode, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _step_value, key, loaderInfo, route1, importConfigsCode, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, _step_value1, key1, configPath, importRuntimeRouterCode, routeModulesCode;
138
139
  return _ts_generator(this, function(_state) {
139
140
  switch (_state.label) {
140
141
  case 0:
@@ -156,7 +157,7 @@ var fileSystemRoutes = function() {
156
157
  }
157
158
  var clientDataStr = clientData ? "&clientData=".concat(clientData) : "";
158
159
  if (nestedRoutesEntry) {
159
- return "?loaderId=".concat(loaderId).concat(clientDataStr, "&action=").concat(action, "&inline=").concat(inline, "&routeId=").concat(routeId);
160
+ return "?loaderId=".concat(loaderId).concat(clientDataStr, "&action=").concat(action ? slash(action) : action, "&inline=").concat(inline, "&routeId=").concat(routeId);
160
161
  }
161
162
  return "";
162
163
  };
@@ -209,18 +210,23 @@ var fileSystemRoutes = function() {
209
210
  if (route2._component) {
210
211
  if (splitRouteChunks) {
211
212
  if (route2.isRoot) {
213
+ lazyImport = "async function(){const routeModule = await import('".concat(route2._component, `'); if(typeof document !== "undefined") window.`).concat(ROUTE_MODULES, '["').concat(route2.id, '"] = routeModule;return routeModule;}');
212
214
  rootLayoutCode = "import RootLayout from '".concat(route2._component, "'");
213
215
  component2 = "RootLayout";
214
216
  } else if (ssrMode === "string") {
215
- lazyImport = '() => import(/* webpackChunkName: "'.concat(route2.id, `" */ '`).concat(route2._component, "')");
217
+ lazyImport = 'async function(){const routeModule = await import(/* webpackChunkName: "'.concat(route2.id, `" */ '`).concat(route2._component, `'); if(typeof document !== "undefined") window.`).concat(ROUTE_MODULES, '["').concat(route2.id, '"] = routeModule;return routeModule;}');
216
218
  component2 = "loadable(".concat(lazyImport, ")");
217
219
  } else {
218
- lazyImport = '() => import(/* webpackChunkName: "'.concat(route2.id, `" */ '`).concat(route2._component, "')");
220
+ lazyImport = 'async function(){const routeModule = await import(/* webpackChunkName: "'.concat(route2.id, `" */ '`).concat(route2._component, `'); if(typeof document !== "undefined") window.`).concat(ROUTE_MODULES, '["').concat(route2.id, '"] = routeModule;return routeModule;}');
219
221
  component2 = "lazy(".concat(lazyImport, ")");
220
222
  }
221
223
  } else {
222
- components.push(route2._component);
223
- component2 = "component_".concat(components.length - 1);
224
+ lazyImport = `async function(){const routeModule = await import(/* webpackMode: "eager" */ '`.concat(route2._component, `'); if(typeof document !== "undefined") window.`).concat(ROUTE_MODULES, '["').concat(route2.id, '"] = routeModule;return routeModule;}');
225
+ if (ssrMode === "string") {
226
+ component2 = "loadable(".concat(lazyImport, ")");
227
+ } else {
228
+ component2 = "lazy(".concat(lazyImport, ")");
229
+ }
224
230
  }
225
231
  }
226
232
  } else if (route2._component) {
@@ -244,6 +250,9 @@ var fileSystemRoutes = function() {
244
250
  if (route2._component) {
245
251
  finalRoute2.component = component2;
246
252
  }
253
+ if (route2.type === "nested" && route2._component && (route2.loader || route2.data)) {
254
+ finalRoute2.shouldRevalidate = 'createShouldRevalidate("'.concat(route2.id, '")');
255
+ }
247
256
  return finalRoute2;
248
257
  };
249
258
  routeComponentsCode = "\n export const routes = [\n ";
@@ -257,6 +266,7 @@ var fileSystemRoutes = function() {
257
266
  keywords = [
258
267
  "component",
259
268
  "lazyImport",
269
+ "shouldRevalidate",
260
270
  "loader",
261
271
  "action",
262
272
  "loading",
@@ -390,9 +400,11 @@ var fileSystemRoutes = function() {
390
400
  ];
391
401
  case 2:
392
402
  _state.sent();
403
+ importRuntimeRouterCode = "\n import { createShouldRevalidate } from '@modern-js/runtime/router';\n ";
404
+ routeModulesCode = "\n if(typeof document !== 'undefined'){\n window.".concat(ROUTE_MODULES, " = {}\n }\n ");
393
405
  return [
394
406
  2,
395
- "\n ".concat(importLazyCode, "\n ").concat(importComponentsCode, "\n ").concat(rootLayoutCode, "\n ").concat(importLoadingCode, "\n ").concat(importErrorComponentsCode, "\n ").concat(importLoadersCode, "\n ").concat(importConfigsCode, "\n ").concat(routeComponentsCode, "\n ")
407
+ "\n ".concat(importLazyCode, "\n ").concat(importComponentsCode, "\n ").concat(importRuntimeRouterCode, "\n ").concat(rootLayoutCode, "\n ").concat(importLoadingCode, "\n ").concat(importErrorComponentsCode, "\n ").concat(importLoadersCode, "\n ").concat(importConfigsCode, "\n ").concat(routeModulesCode, "\n ").concat(routeComponentsCode, "\n ")
396
408
  ];
397
409
  }
398
410
  });
@@ -1,6 +1,4 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
- import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
- import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
2
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
5
3
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
4
  import path from "path";
@@ -12,13 +10,19 @@ var builderPluginAdpaterCopy = function(options) {
12
10
  name: "builder-plugin-adapter-rspack-copy",
13
11
  setup: function setup(api) {
14
12
  var publicPath;
15
- api.modifyRspackConfig(function(config) {
16
- var _config_builtins_copy, _config_builtins, _config_output;
17
- config.builtins = _object_spread_props(_object_spread({}, config.builtins || {}), {
18
- copy: {
19
- patterns: _to_consumable_array(((_config_builtins = config.builtins) === null || _config_builtins === void 0 ? void 0 : (_config_builtins_copy = _config_builtins.copy) === null || _config_builtins_copy === void 0 ? void 0 : _config_builtins_copy.patterns) || []).concat(_to_consumable_array(createConfigBuiltinCopy(options)))
20
- }
13
+ api.modifyBundlerChain(function(chain, param) {
14
+ var CHAIN_ID = param.CHAIN_ID;
15
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap(function(args) {
16
+ var _args_;
17
+ return [
18
+ {
19
+ patterns: _to_consumable_array(((_args_ = args[0]) === null || _args_ === void 0 ? void 0 : _args_.patterns) || []).concat(_to_consumable_array(createConfigBuiltinCopy(options)))
20
+ }
21
+ ];
21
22
  });
23
+ });
24
+ api.modifyRspackConfig(function(config) {
25
+ var _config_output;
22
26
  publicPath = (_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.publicPath;
23
27
  });
24
28
  api.onDevCompileDone(/* @__PURE__ */ _async_to_generator(function() {
@@ -1,5 +1,4 @@
1
1
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
2
- import { join } from "path";
3
2
  import { createPublicPattern } from "./createCopyPattern";
4
3
  var builderPluginAdapterModern = function(options) {
5
4
  return {
@@ -8,7 +7,6 @@ var builderPluginAdapterModern = function(options) {
8
7
  var modernConfig = options.normalizedConfig, appContext = options.appContext;
9
8
  api.modifyWebpackChain(function(chain, param) {
10
9
  var CHAIN_ID = param.CHAIN_ID;
11
- chain.resolve.modules.add("node_modules").add(join(api.context.rootPath, "node_modules"));
12
10
  if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
13
11
  var defaultCopyPattern = createPublicPattern(appContext, modernConfig, chain);
14
12
  chain.plugin(CHAIN_ID.PLUGIN.COPY).tap(function(args) {
@@ -1,3 +1,4 @@
1
+ import path from "path";
1
2
  var builderPluginAdapterBasic = function() {
2
3
  return {
3
4
  name: "builder-plugin-adapter-modern-basic",
@@ -23,6 +24,7 @@ var builderPluginAdapterBasic = function() {
23
24
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
24
25
  chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
25
26
  }
27
+ chain.resolve.modules.add("node_modules").add(path.join(api.context.rootPath, "node_modules"));
26
28
  });
27
29
  }
28
30
  };
@@ -1,6 +1,6 @@
1
1
  import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
2
- import path, { dirname, isAbsolute, posix, sep } from "path";
3
- import { findExists, findMonorepoRoot, globby, isModernjsMonorepo } from "@modern-js/utils";
2
+ import path, { isAbsolute } from "path";
3
+ import { findExists } from "@modern-js/utils";
4
4
  function initHtmlConfig(config, appContext) {
5
5
  var createBuilderAppIcon = function createBuilderAppIcon2(config2, appContext2) {
6
6
  var configDir = config2.source.configDir;
@@ -43,21 +43,6 @@ function initSourceConfig(config, appContext, bundler) {
43
43
  }
44
44
  return include2;
45
45
  }).concat(defaultInclude);
46
- var root = findMonorepoRoot(appContext2.appDirectory);
47
- if (!root) {
48
- return transformInclude;
49
- }
50
- var modernjsMonorepo = isModernjsMonorepo(root);
51
- if (modernjsMonorepo) {
52
- var paths = globby.sync(posix.join(root, "features", "**", "package.json"), {
53
- ignore: [
54
- "**/node_modules/**/*"
55
- ]
56
- }).map(function(pathname) {
57
- return dirname(pathname) + sep;
58
- });
59
- return _to_consumable_array(paths).concat(_to_consumable_array(transformInclude));
60
- }
61
46
  return transformInclude;
62
47
  };
63
48
  var createBuilderModuleScope = function createBuilderModuleScope2(config2) {
@@ -114,13 +114,11 @@ var analyze_default = ({ bundler }) => ({
114
114
  });
115
115
  builder.onDevCompileDone(async ({ isFirstCompile }) => {
116
116
  const hookRunners2 = api.useHookRunners();
117
- if (process.stdout.isTTY || isFirstCompile) {
118
- hookRunners2.afterDev({
119
- isFirstCompile
120
- });
121
- if (isFirstCompile) {
122
- printInstructions(hookRunners2, appContext, normalizedConfig);
123
- }
117
+ hookRunners2.afterDev({
118
+ isFirstCompile
119
+ });
120
+ if (isFirstCompile) {
121
+ printInstructions(hookRunners2, appContext, normalizedConfig);
124
122
  }
125
123
  });
126
124
  builder.onBeforeCreateCompiler(async ({ bundlerConfigs }) => {
@@ -233,7 +233,7 @@ const walk = async (dirname, rootDir, alias, entryName, isMainEntry, oldVersion)
233
233
  delete finalRoute.path;
234
234
  }
235
235
  const childRoutes = finalRoute.children = (_finalRoute_children = finalRoute.children) === null || _finalRoute_children === void 0 ? void 0 : _finalRoute_children.filter((childRoute) => childRoute);
236
- if (childRoutes && childRoutes.length === 0 && !finalRoute.index) {
236
+ if (childRoutes && childRoutes.length === 0 && !finalRoute.index && !finalRoute._component) {
237
237
  return null;
238
238
  }
239
239
  if (childRoutes && childRoutes.length === 1 && !finalRoute._component) {
@@ -246,6 +246,9 @@ const walk = async (dirname, rootDir, alias, entryName, isMainEntry, oldVersion)
246
246
  };
247
247
  }
248
248
  }
249
+ if (isRoot && !finalRoute._component) {
250
+ throw new Error("The root layout component is required, make sure the routes/layout.tsx file exists.");
251
+ }
249
252
  if (isRoot && !oldVersion) {
250
253
  const optimizedRoutes = optimizeRoute(finalRoute);
251
254
  return optimizedRoutes;
@@ -1,5 +1,6 @@
1
1
  import path from "path";
2
2
  import { fs, getEntryOptions, isSSGEntry, slash } from "@modern-js/utils";
3
+ import { ROUTE_MODULES } from "@modern-js/utils/universal/constants";
3
4
  import { APP_CONFIG_NAME, TEMP_LOADERS_DIR } from "./constants";
4
5
  import { getServerLoadersFile } from "./utils";
5
6
  const index = ({ mountId, imports, renderFunction: renderFunction2, exportStatement }) => `
@@ -172,7 +173,7 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
172
173
  }
173
174
  const clientDataStr = clientData ? `&clientData=${clientData}` : "";
174
175
  if (nestedRoutesEntry) {
175
- return `?loaderId=${loaderId}${clientDataStr}&action=${action}&inline=${inline}&routeId=${routeId}`;
176
+ return `?loaderId=${loaderId}${clientDataStr}&action=${action ? slash(action) : action}&inline=${inline}&routeId=${routeId}`;
176
177
  }
177
178
  return "";
178
179
  };
@@ -225,18 +226,23 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
225
226
  if (route._component) {
226
227
  if (splitRouteChunks) {
227
228
  if (route.isRoot) {
229
+ lazyImport = `async function(){const routeModule = await import('${route._component}'); if(typeof document !== "undefined") window.${ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
228
230
  rootLayoutCode = `import RootLayout from '${route._component}'`;
229
231
  component = `RootLayout`;
230
232
  } else if (ssrMode === "string") {
231
- lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
233
+ lazyImport = `async function(){const routeModule = await import(/* webpackChunkName: "${route.id}" */ '${route._component}'); if(typeof document !== "undefined") window.${ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
232
234
  component = `loadable(${lazyImport})`;
233
235
  } else {
234
- lazyImport = `() => import(/* webpackChunkName: "${route.id}" */ '${route._component}')`;
236
+ lazyImport = `async function(){const routeModule = await import(/* webpackChunkName: "${route.id}" */ '${route._component}'); if(typeof document !== "undefined") window.${ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
235
237
  component = `lazy(${lazyImport})`;
236
238
  }
237
239
  } else {
238
- components.push(route._component);
239
- component = `component_${components.length - 1}`;
240
+ lazyImport = `async function(){const routeModule = await import(/* webpackMode: "eager" */ '${route._component}'); if(typeof document !== "undefined") window.${ROUTE_MODULES}["${route.id}"] = routeModule;return routeModule;}`;
241
+ if (ssrMode === "string") {
242
+ component = `loadable(${lazyImport})`;
243
+ } else {
244
+ component = `lazy(${lazyImport})`;
245
+ }
240
246
  }
241
247
  }
242
248
  } else if (route._component) {
@@ -261,6 +267,9 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
261
267
  if (route._component) {
262
268
  finalRoute.component = component;
263
269
  }
270
+ if (route.type === "nested" && route._component && (route.loader || route.data)) {
271
+ finalRoute.shouldRevalidate = `createShouldRevalidate("${route.id}")`;
272
+ }
264
273
  return finalRoute;
265
274
  };
266
275
  let routeComponentsCode = `
@@ -273,6 +282,7 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
273
282
  const keywords = [
274
283
  "component",
275
284
  "lazyImport",
285
+ "shouldRevalidate",
276
286
  "loader",
277
287
  "action",
278
288
  "loading",
@@ -353,14 +363,24 @@ const fileSystemRoutes = async ({ routes, ssrMode, nestedRoutesEntry, entryName,
353
363
  }
354
364
  await fs.ensureFile(loadersMapFile);
355
365
  await fs.writeJSON(loadersMapFile, loadersMap);
366
+ const importRuntimeRouterCode = `
367
+ import { createShouldRevalidate } from '@modern-js/runtime/router';
368
+ `;
369
+ const routeModulesCode = `
370
+ if(typeof document !== 'undefined'){
371
+ window.${ROUTE_MODULES} = {}
372
+ }
373
+ `;
356
374
  return `
357
375
  ${importLazyCode}
358
376
  ${importComponentsCode}
377
+ ${importRuntimeRouterCode}
359
378
  ${rootLayoutCode}
360
379
  ${importLoadingCode}
361
380
  ${importErrorComponentsCode}
362
381
  ${importLoadersCode}
363
382
  ${importConfigsCode}
383
+ ${routeModulesCode}
364
384
  ${routeComponentsCode}
365
385
  `;
366
386
  };
@@ -6,17 +6,21 @@ const builderPluginAdpaterCopy = (options) => ({
6
6
  name: "builder-plugin-adapter-rspack-copy",
7
7
  setup(api) {
8
8
  let publicPath;
9
+ api.modifyBundlerChain((chain, { CHAIN_ID }) => {
10
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
11
+ var _args_;
12
+ return [
13
+ {
14
+ patterns: [
15
+ ...((_args_ = args[0]) === null || _args_ === void 0 ? void 0 : _args_.patterns) || [],
16
+ ...createConfigBuiltinCopy(options)
17
+ ]
18
+ }
19
+ ];
20
+ });
21
+ });
9
22
  api.modifyRspackConfig((config) => {
10
- var _config_builtins_copy, _config_builtins, _config_output;
11
- config.builtins = {
12
- ...config.builtins || {},
13
- copy: {
14
- patterns: [
15
- ...((_config_builtins = config.builtins) === null || _config_builtins === void 0 ? void 0 : (_config_builtins_copy = _config_builtins.copy) === null || _config_builtins_copy === void 0 ? void 0 : _config_builtins_copy.patterns) || [],
16
- ...createConfigBuiltinCopy(options)
17
- ]
18
- }
19
- };
23
+ var _config_output;
20
24
  publicPath = (_config_output = config.output) === null || _config_output === void 0 ? void 0 : _config_output.publicPath;
21
25
  });
22
26
  api.onDevCompileDone(async () => {
@@ -1,11 +1,9 @@
1
- import { join } from "path";
2
1
  import { createPublicPattern } from "./createCopyPattern";
3
2
  const builderPluginAdapterModern = (options) => ({
4
3
  name: "builder-plugin-adapter-modern",
5
4
  setup(api) {
6
5
  const { normalizedConfig: modernConfig, appContext } = options;
7
6
  api.modifyWebpackChain((chain, { CHAIN_ID }) => {
8
- chain.resolve.modules.add("node_modules").add(join(api.context.rootPath, "node_modules"));
9
7
  if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
10
8
  const defaultCopyPattern = createPublicPattern(appContext, modernConfig, chain);
11
9
  chain.plugin(CHAIN_ID.PLUGIN.COPY).tap((args) => {
@@ -1,3 +1,4 @@
1
+ import path from "path";
1
2
  const builderPluginAdapterBasic = () => ({
2
3
  name: "builder-plugin-adapter-modern-basic",
3
4
  setup(api) {
@@ -21,6 +22,7 @@ const builderPluginAdapterBasic = () => ({
21
22
  chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
22
23
  chain.module.rule("bare-server-module").test(bareServerModuleReg).use("server-module-loader").loader(require.resolve("../loaders/serverModuleLoader"));
23
24
  }
25
+ chain.resolve.modules.add("node_modules").add(path.join(api.context.rootPath, "node_modules"));
24
26
  });
25
27
  }
26
28
  });