@modern-js/app-tools 2.36.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.
@@ -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) {
@@ -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"
@@ -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
  };
@@ -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
@@ -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:
@@ -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
  });
@@ -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) {
@@ -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 }) => `
@@ -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
  };
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.36.0",
18
+ "version": "2.37.0",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -67,29 +67,29 @@
67
67
  },
68
68
  "dependencies": {
69
69
  "@babel/parser": "^7.22.15",
70
- "@babel/traverse": "^7.22.15",
70
+ "@babel/traverse": "^7.23.2",
71
71
  "@babel/types": "^7.22.15",
72
72
  "es-module-lexer": "^1.1.0",
73
73
  "esbuild": "0.17.19",
74
74
  "@swc/helpers": "0.5.1",
75
- "@modern-js/builder-plugin-esbuild": "2.36.0",
76
- "@modern-js/builder": "2.36.0",
77
- "@modern-js/builder-plugin-node-polyfill": "2.36.0",
78
- "@modern-js/builder-shared": "2.36.0",
79
- "@modern-js/builder-webpack-provider": "2.36.0",
80
- "@modern-js/core": "2.36.0",
81
- "@modern-js/new-action": "2.36.0",
82
- "@modern-js/node-bundle-require": "2.36.0",
83
- "@modern-js/plugin": "2.36.0",
84
- "@modern-js/plugin-data-loader": "2.36.0",
85
- "@modern-js/plugin-i18n": "2.36.0",
86
- "@modern-js/plugin-lint": "2.36.0",
87
- "@modern-js/prod-server": "2.36.0",
88
- "@modern-js/server": "2.36.0",
89
- "@modern-js/types": "2.36.0",
90
- "@modern-js/upgrade": "2.36.0",
91
- "@modern-js/utils": "2.36.0",
92
- "@modern-js/server-core": "2.36.0"
75
+ "@modern-js/builder": "2.37.0",
76
+ "@modern-js/builder-plugin-esbuild": "2.37.0",
77
+ "@modern-js/builder-plugin-node-polyfill": "2.37.0",
78
+ "@modern-js/builder-shared": "2.37.0",
79
+ "@modern-js/builder-webpack-provider": "2.37.0",
80
+ "@modern-js/core": "2.37.0",
81
+ "@modern-js/new-action": "2.37.0",
82
+ "@modern-js/node-bundle-require": "2.37.0",
83
+ "@modern-js/plugin": "2.37.0",
84
+ "@modern-js/plugin-data-loader": "2.37.0",
85
+ "@modern-js/plugin-i18n": "2.37.0",
86
+ "@modern-js/plugin-lint": "2.37.0",
87
+ "@modern-js/prod-server": "2.37.0",
88
+ "@modern-js/server": "2.37.0",
89
+ "@modern-js/types": "2.37.0",
90
+ "@modern-js/upgrade": "2.37.0",
91
+ "@modern-js/utils": "2.37.0",
92
+ "@modern-js/server-core": "2.37.0"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@types/babel__traverse": "^7.14.2",
@@ -98,13 +98,13 @@
98
98
  "jest": "^29",
99
99
  "typescript": "^5",
100
100
  "webpack": "^5.88.1",
101
- "@modern-js/builder-plugin-swc": "2.36.0",
102
- "@modern-js/builder-rspack-provider": "2.36.0",
103
- "@scripts/jest-config": "2.36.0",
104
- "@scripts/build": "2.36.0"
101
+ "@modern-js/builder-plugin-swc": "2.37.0",
102
+ "@modern-js/builder-rspack-provider": "2.37.0",
103
+ "@scripts/build": "2.37.0",
104
+ "@scripts/jest-config": "2.37.0"
105
105
  },
106
106
  "peerDependencies": {
107
- "@modern-js/builder-rspack-provider": "^2.36.0"
107
+ "@modern-js/builder-rspack-provider": "^2.37.0"
108
108
  },
109
109
  "peerDependenciesMeta": {
110
110
  "@modern-js/builder-rspack-provider": {