@modern-js/app-tools 2.0.0-beta.2 → 2.0.0-canary.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 (231) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/bin/modern.js +10 -1
  3. package/dist/js/modern/analyze/constants.js +38 -16
  4. package/dist/js/modern/analyze/generateCode.js +271 -211
  5. package/dist/js/modern/analyze/getBundleEntry.js +31 -32
  6. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +93 -49
  7. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +89 -47
  8. package/dist/js/modern/analyze/getClientRoutes/index.js +6 -2
  9. package/dist/js/modern/analyze/getClientRoutes/utils.js +23 -10
  10. package/dist/js/modern/analyze/getFileSystemEntry.js +43 -22
  11. package/dist/js/modern/analyze/getHtmlTemplate.js +89 -49
  12. package/dist/js/modern/analyze/getServerRoutes.js +122 -126
  13. package/dist/js/modern/analyze/index.js +193 -159
  14. package/dist/js/modern/analyze/isDefaultExportFunction.js +30 -16
  15. package/dist/js/modern/analyze/makeLegalIdentifier.js +10 -11
  16. package/dist/js/modern/analyze/nestedRoutes.js +110 -53
  17. package/dist/js/modern/analyze/templates.js +190 -77
  18. package/dist/js/modern/analyze/utils.js +98 -51
  19. package/dist/js/modern/builder/builderPlugins/compatModern.js +124 -107
  20. package/dist/js/modern/builder/index.js +123 -86
  21. package/dist/js/modern/builder/loaders/routerLoader.js +17 -0
  22. package/dist/js/modern/builder/loaders/serverModuleLoader.js +7 -0
  23. package/dist/js/modern/builder/share.js +22 -20
  24. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +23 -22
  25. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +31 -27
  26. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +98 -84
  27. package/dist/js/modern/commands/build.js +67 -42
  28. package/dist/js/modern/commands/deploy.js +27 -4
  29. package/dist/js/modern/commands/dev.js +93 -47
  30. package/dist/js/modern/commands/index.js +1 -1
  31. package/dist/js/modern/commands/inspect.js +30 -5
  32. package/dist/js/modern/commands/start.js +37 -16
  33. package/dist/js/modern/config/default.js +103 -114
  34. package/dist/js/modern/config/index.js +8 -2
  35. package/dist/js/modern/config/initial/createHtmlConfig.js +5 -2
  36. package/dist/js/modern/config/initial/createOutputConfig.js +11 -9
  37. package/dist/js/modern/config/initial/createSourceConfig.js +5 -2
  38. package/dist/js/modern/config/initial/createToolsConfig.js +7 -6
  39. package/dist/js/modern/config/initial/index.js +9 -4
  40. package/dist/js/modern/config/initial/inits.js +109 -73
  41. package/dist/js/modern/config/initial/transformNormalizedConfig.js +6 -3
  42. package/dist/js/modern/defineConfig.js +26 -11
  43. package/dist/js/modern/exports/server.js +4 -1
  44. package/dist/js/modern/hooks.js +10 -3
  45. package/dist/js/modern/index.js +140 -89
  46. package/dist/js/modern/initialize/index.js +98 -51
  47. package/dist/js/modern/locale/en.js +20 -21
  48. package/dist/js/modern/locale/index.js +6 -6
  49. package/dist/js/modern/locale/zh.js +21 -22
  50. package/dist/js/modern/schema/Schema.js +6 -5
  51. package/dist/js/modern/schema/index.js +51 -100
  52. package/dist/js/modern/schema/legacy.js +96 -231
  53. package/dist/js/modern/types/config/index.js +0 -1
  54. package/dist/js/modern/types/index.js +0 -1
  55. package/dist/js/modern/types/legacyConfig/output.js +0 -1
  56. package/dist/js/modern/utils/commands.js +5 -2
  57. package/dist/js/modern/utils/config.js +102 -41
  58. package/dist/js/modern/utils/createFileWatcher.js +84 -51
  59. package/dist/js/modern/utils/createServer.js +63 -17
  60. package/dist/js/modern/utils/getSpecifiedEntries.js +46 -19
  61. package/dist/js/modern/utils/language.js +6 -3
  62. package/dist/js/modern/utils/printInstructions.js +27 -8
  63. package/dist/js/modern/utils/restart.js +43 -16
  64. package/dist/js/modern/utils/routes.js +29 -12
  65. package/dist/js/node/analyze/constants.js +54 -35
  66. package/dist/js/node/analyze/generateCode.js +290 -228
  67. package/dist/js/node/analyze/getBundleEntry.js +55 -44
  68. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +132 -76
  69. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +128 -74
  70. package/dist/js/node/analyze/getClientRoutes/index.js +23 -17
  71. package/dist/js/node/analyze/getClientRoutes/utils.js +44 -21
  72. package/dist/js/node/analyze/getFileSystemEntry.js +70 -39
  73. package/dist/js/node/analyze/getHtmlTemplate.js +116 -61
  74. package/dist/js/node/analyze/getServerRoutes.js +143 -137
  75. package/dist/js/node/analyze/index.js +240 -174
  76. package/dist/js/node/analyze/isDefaultExportFunction.js +55 -26
  77. package/dist/js/node/analyze/makeLegalIdentifier.js +27 -15
  78. package/dist/js/node/analyze/nestedRoutes.js +140 -67
  79. package/dist/js/node/analyze/templates.js +211 -84
  80. package/dist/js/node/analyze/utils.js +123 -62
  81. package/dist/js/node/builder/builderPlugins/compatModern.js +152 -120
  82. package/dist/js/node/builder/index.js +151 -95
  83. package/dist/js/node/builder/loaders/routerLoader.js +36 -0
  84. package/dist/js/node/builder/loaders/serverModuleLoader.js +26 -0
  85. package/dist/js/node/builder/share.js +45 -25
  86. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +39 -26
  87. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +47 -31
  88. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +116 -90
  89. package/dist/js/node/commands/build.js +89 -52
  90. package/dist/js/node/commands/deploy.js +45 -10
  91. package/dist/js/node/commands/dev.js +115 -61
  92. package/dist/js/node/commands/index.js +19 -38
  93. package/dist/js/node/commands/inspect.js +48 -11
  94. package/dist/js/node/commands/start.js +65 -27
  95. package/dist/js/node/config/default.js +119 -118
  96. package/dist/js/node/config/index.js +25 -29
  97. package/dist/js/node/config/initial/createHtmlConfig.js +22 -6
  98. package/dist/js/node/config/initial/createOutputConfig.js +28 -13
  99. package/dist/js/node/config/initial/createSourceConfig.js +22 -6
  100. package/dist/js/node/config/initial/createToolsConfig.js +24 -10
  101. package/dist/js/node/config/initial/index.js +28 -17
  102. package/dist/js/node/config/initial/inits.js +126 -81
  103. package/dist/js/node/config/initial/transformNormalizedConfig.js +31 -15
  104. package/dist/js/node/defineConfig.js +43 -17
  105. package/dist/js/node/exports/server.js +21 -10
  106. package/dist/js/node/hooks.js +44 -29
  107. package/dist/js/node/index.js +190 -130
  108. package/dist/js/node/initialize/index.js +116 -61
  109. package/dist/js/node/locale/en.js +36 -25
  110. package/dist/js/node/locale/index.js +27 -15
  111. package/dist/js/node/locale/zh.js +37 -26
  112. package/dist/js/node/schema/Schema.js +23 -10
  113. package/dist/js/node/schema/index.js +77 -114
  114. package/dist/js/node/schema/legacy.js +117 -240
  115. package/dist/js/node/types/config/index.js +17 -16
  116. package/dist/js/node/types/index.js +19 -38
  117. package/dist/js/node/types/legacyConfig/output.js +0 -5
  118. package/dist/js/node/utils/commands.js +21 -6
  119. package/dist/js/node/utils/config.js +120 -51
  120. package/dist/js/node/utils/createFileWatcher.js +104 -60
  121. package/dist/js/node/utils/createServer.js +86 -25
  122. package/dist/js/node/utils/getSpecifiedEntries.js +64 -25
  123. package/dist/js/node/utils/language.js +24 -8
  124. package/dist/js/node/utils/printInstructions.js +47 -16
  125. package/dist/js/node/utils/restart.js +61 -21
  126. package/dist/js/node/utils/routes.js +53 -18
  127. package/dist/js/treeshaking/analyze/constants.js +28 -16
  128. package/dist/js/treeshaking/analyze/generateCode.js +604 -355
  129. package/dist/js/treeshaking/analyze/getBundleEntry.js +52 -63
  130. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +214 -168
  131. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +215 -169
  132. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +3 -2
  133. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +19 -20
  134. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +89 -86
  135. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +298 -125
  136. package/dist/js/treeshaking/analyze/getServerRoutes.js +210 -146
  137. package/dist/js/treeshaking/analyze/index.js +558 -303
  138. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +45 -26
  139. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +13 -16
  140. package/dist/js/treeshaking/analyze/nestedRoutes.js +414 -160
  141. package/dist/js/treeshaking/analyze/templates.js +432 -161
  142. package/dist/js/treeshaking/analyze/utils.js +361 -80
  143. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +281 -195
  144. package/dist/js/treeshaking/builder/index.js +371 -165
  145. package/dist/js/treeshaking/builder/loaders/routerLoader.js +13 -0
  146. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +5 -0
  147. package/dist/js/treeshaking/builder/share.js +41 -44
  148. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +108 -44
  149. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +70 -39
  150. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +332 -112
  151. package/dist/js/treeshaking/commands/build.js +286 -88
  152. package/dist/js/treeshaking/commands/deploy.js +153 -25
  153. package/dist/js/treeshaking/commands/dev.js +318 -132
  154. package/dist/js/treeshaking/commands/index.js +1 -1
  155. package/dist/js/treeshaking/commands/inspect.js +147 -32
  156. package/dist/js/treeshaking/commands/start.js +190 -68
  157. package/dist/js/treeshaking/config/default.js +210 -199
  158. package/dist/js/treeshaking/config/index.js +3 -2
  159. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +19 -31
  160. package/dist/js/treeshaking/config/initial/createOutputConfig.js +43 -67
  161. package/dist/js/treeshaking/config/initial/createSourceConfig.js +37 -40
  162. package/dist/js/treeshaking/config/initial/createToolsConfig.js +23 -38
  163. package/dist/js/treeshaking/config/initial/index.js +10 -9
  164. package/dist/js/treeshaking/config/initial/inits.js +205 -106
  165. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +27 -34
  166. package/dist/js/treeshaking/defineConfig.js +60 -13
  167. package/dist/js/treeshaking/exports/server.js +2 -1
  168. package/dist/js/treeshaking/hooks.js +26 -25
  169. package/dist/js/treeshaking/index.js +465 -257
  170. package/dist/js/treeshaking/initialize/index.js +290 -112
  171. package/dist/js/treeshaking/locale/en.js +34 -33
  172. package/dist/js/treeshaking/locale/index.js +5 -5
  173. package/dist/js/treeshaking/locale/zh.js +34 -33
  174. package/dist/js/treeshaking/schema/Schema.js +267 -69
  175. package/dist/js/treeshaking/schema/index.js +165 -121
  176. package/dist/js/treeshaking/schema/legacy.js +323 -256
  177. package/dist/js/treeshaking/types/config/deploy.js +1 -0
  178. package/dist/js/treeshaking/types/config/dev.js +1 -0
  179. package/dist/js/treeshaking/types/config/experiments.js +1 -0
  180. package/dist/js/treeshaking/types/config/html.js +1 -0
  181. package/dist/js/treeshaking/types/config/index.js +0 -1
  182. package/dist/js/treeshaking/types/config/output.js +1 -0
  183. package/dist/js/treeshaking/types/config/performance.js +1 -0
  184. package/dist/js/treeshaking/types/config/security.js +1 -0
  185. package/dist/js/treeshaking/types/config/source.js +1 -0
  186. package/dist/js/treeshaking/types/config/tools.js +1 -0
  187. package/dist/js/treeshaking/types/hooks.js +1 -0
  188. package/dist/js/treeshaking/types/index.js +0 -1
  189. package/dist/js/treeshaking/types/legacyConfig/deploy.js +1 -0
  190. package/dist/js/treeshaking/types/legacyConfig/dev.js +1 -0
  191. package/dist/js/treeshaking/types/legacyConfig/index.js +1 -0
  192. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -1
  193. package/dist/js/treeshaking/types/legacyConfig/source.js +1 -0
  194. package/dist/js/treeshaking/types/legacyConfig/tools.js +1 -0
  195. package/dist/js/treeshaking/utils/commands.js +6 -5
  196. package/dist/js/treeshaking/utils/config.js +295 -117
  197. package/dist/js/treeshaking/utils/createFileWatcher.js +278 -118
  198. package/dist/js/treeshaking/utils/createServer.js +252 -67
  199. package/dist/js/treeshaking/utils/getSpecifiedEntries.js +182 -55
  200. package/dist/js/treeshaking/utils/language.js +6 -5
  201. package/dist/js/treeshaking/utils/printInstructions.js +151 -29
  202. package/dist/js/treeshaking/utils/restart.js +184 -42
  203. package/dist/js/treeshaking/utils/routes.js +151 -27
  204. package/dist/js/treeshaking/utils/types.js +1 -0
  205. package/dist/types/analyze/constants.d.ts +2 -0
  206. package/dist/types/analyze/index.d.ts +2 -0
  207. package/dist/types/analyze/templates.d.ts +8 -7
  208. package/dist/types/analyze/utils.d.ts +9 -1
  209. package/dist/types/builder/builderPlugins/compatModern.d.ts +2 -1
  210. package/dist/types/builder/index.d.ts +2 -2
  211. package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
  212. package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
  213. package/dist/types/builder/webpackPlugins/routerPlugin.d.ts +1 -7
  214. package/dist/types/defineConfig.d.ts +1 -0
  215. package/dist/types/index.d.ts +2 -0
  216. package/dist/types/initialize/index.d.ts +2 -0
  217. package/dist/types/types/config/index.d.ts +1 -0
  218. package/dist/types/types/config/output.d.ts +0 -1
  219. package/dist/types/types/config/source.d.ts +1 -0
  220. package/dist/types/types/config/tools.d.ts +10 -1
  221. package/dist/types/types/hooks.d.ts +2 -1
  222. package/dist/types/types/legacyConfig/dev.d.ts +1 -0
  223. package/dist/types/types/legacyConfig/output.d.ts +1 -1
  224. package/dist/types/types/legacyConfig/source.d.ts +1 -0
  225. package/dist/types/types/legacyConfig/tools.d.ts +1 -0
  226. package/dist/types/utils/config.d.ts +1 -0
  227. package/dist/types/utils/createFileWatcher.d.ts +2 -1
  228. package/dist/types/utils/createServer.d.ts +1 -0
  229. package/dist/types/utils/restart.d.ts +1 -1
  230. package/lib/types.d.ts +1 -1
  231. package/package.json +27 -23
@@ -1,28 +1,49 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- import path from 'path';
5
- import { fs } from '@modern-js/utils';
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import path from "path";
21
+ import { fs } from "@modern-js/utils";
6
22
  import { makeLegalIdentifier } from "../makeLegalIdentifier";
7
- import { FILE_SYSTEM_ROUTES_COMPONENTS_DIR, FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP, FILE_SYSTEM_ROUTES_INDEX, FILE_SYSTEM_ROUTES_LAYOUT } from "../constants";
23
+ import {
24
+ FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
25
+ FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
26
+ FILE_SYSTEM_ROUTES_INDEX,
27
+ FILE_SYSTEM_ROUTES_LAYOUT
28
+ } from "../constants";
8
29
  import { replaceWithAlias } from "../utils";
9
30
  import { debug, findLayout, shouldSkip, getRouteWeight } from "./utils";
10
31
  const compName = (srcDirectory, filePath) => {
11
- const legalCompName = makeLegalIdentifier(path.relative(srcDirectory, filePath));
32
+ const legalCompName = makeLegalIdentifier(
33
+ path.relative(srcDirectory, filePath)
34
+ );
12
35
  return `Comp_${legalCompName}`;
13
36
  };
14
- const layoutNameAbbr = filePath => {
15
- const prefix = 'L_';
16
- const dirName = path.dirname(filePath).split('/').pop() || '';
37
+ const layoutNameAbbr = (filePath) => {
38
+ const prefix = "L_";
39
+ const dirName = path.dirname(filePath).split("/").pop() || "";
17
40
  return `${prefix}${makeLegalIdentifier(dirName)}`;
18
41
  };
19
42
  const parents = [];
20
-
21
- /* eslint-disable no-param-reassign */
22
43
  const recursiveReadDir = ({
23
44
  dir,
24
45
  routes,
25
- basePath: _basePath = '/',
46
+ basePath = "/",
26
47
  srcDirectory,
27
48
  srcAlias
28
49
  }) => {
@@ -31,18 +52,18 @@ const recursiveReadDir = ({
31
52
  let parent = parents[parents.length - 1];
32
53
  const layout = findLayout(dir);
33
54
  if (layout) {
34
- if (_basePath === '/') {
55
+ if (basePath === "/") {
35
56
  throw new Error(`should use _app instead of _layout in ${dir}`);
36
57
  } else {
37
58
  const alias = replaceWithAlias(srcDirectory, layout, srcAlias);
38
59
  const componentName = compName(srcDirectory, layout);
39
60
  const route = {
40
- path: `${_basePath.substring(0, _basePath.length - 1)}`,
61
+ path: `${basePath.substring(0, basePath.length - 1)}`,
41
62
  children: [],
42
63
  _component: alias,
43
64
  component: componentName,
44
65
  parent,
45
- type: 'page'
66
+ type: "page"
46
67
  };
47
68
  parent = route;
48
69
  resetParent = true;
@@ -60,17 +81,19 @@ const recursiveReadDir = ({
60
81
  const dynamicRouteMatched = FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP.exec(filename);
61
82
  if (dynamicRouteMatched) {
62
83
  if (hasDynamicRoute) {
63
- throw new Error(`Can't set two dynamic route in one directory: ${dir}`);
84
+ throw new Error(
85
+ `Can't set two dynamic route in one directory: ${dir}`
86
+ );
64
87
  } else {
65
88
  hasDynamicRoute = true;
66
89
  }
67
90
  }
68
91
  const route = {
69
- path: `${_basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
92
+ path: `${basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
70
93
  _component: alias,
71
94
  component: componentName,
72
95
  parent,
73
- type: 'page'
96
+ type: "page"
74
97
  };
75
98
  if (fs.statSync(filePath).isDirectory()) {
76
99
  recursiveReadDir({
@@ -86,10 +109,10 @@ const recursiveReadDir = ({
86
109
  continue;
87
110
  }
88
111
  if (filename === FILE_SYSTEM_ROUTES_INDEX) {
89
- route.path = _basePath === '/' ? _basePath : `${_basePath.substring(0, _basePath.length - 1)}`;
112
+ route.path = basePath === "/" ? basePath : `${basePath.substring(0, basePath.length - 1)}`;
90
113
  }
91
- if (filename === '404' && _basePath === '/') {
92
- route.path = '*';
114
+ if (filename === "404" && basePath === "/") {
115
+ route.path = "*";
93
116
  }
94
117
  routes.push(route);
95
118
  }
@@ -98,69 +121,87 @@ const recursiveReadDir = ({
98
121
  parents.pop();
99
122
  }
100
123
  };
101
- /* eslint-enable no-param-reassign */
102
-
103
124
  const normalizeNestedRoutes = (nested, internalComponentsDir, internalDirectory, internalDirAlias) => {
104
- const flat = routes => routes.reduce((memo, route) => memo.concat(Array.isArray(route.children) ? flat(route.children) : [route]), []);
105
- const generate = route => {
125
+ const flat = (routes) => routes.reduce(
126
+ (memo, route) => memo.concat(
127
+ Array.isArray(route.children) ? flat(route.children) : [route]
128
+ ),
129
+ []
130
+ );
131
+ const generate = (route) => {
106
132
  const codes = [];
107
133
  let lastComponent = route.component;
108
- const imports = [`import React from 'react';`, `import ${lastComponent} from '${route._component}'`];
109
-
110
- // eslint-disable-next-line no-param-reassign, no-cond-assign
134
+ const imports = [
135
+ `import React from 'react';`,
136
+ `import ${lastComponent} from '${route._component}'`
137
+ ];
111
138
  while (route = route.parent) {
112
139
  const layoutComponent = route.component;
113
140
  const layoutComponentAbbr = layoutNameAbbr(route._component);
114
141
  imports.push(`import ${layoutComponent} from '${route._component}';`);
115
142
  const currentComponent = `${layoutComponentAbbr}_${lastComponent}`;
116
- codes.push(`const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`);
143
+ codes.push(
144
+ `const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`
145
+ );
117
146
  lastComponent = currentComponent;
118
147
  }
119
148
  const file = path.resolve(internalComponentsDir, `${lastComponent}.jsx`);
120
- fs.outputFileSync(file, `${imports.join('\n')}\n${codes.join('\n')}\nexport default ${lastComponent}`);
149
+ fs.outputFileSync(
150
+ file,
151
+ `${imports.join("\n")}
152
+ ${codes.join(
153
+ "\n"
154
+ )}
155
+ export default ${lastComponent}`
156
+ );
121
157
  return {
122
158
  component: lastComponent,
123
159
  _component: replaceWithAlias(internalDirectory, file, internalDirAlias)
124
160
  };
125
161
  };
126
- const normalized = flat(nested).map(route => route.parent ? _objectSpread(_objectSpread(_objectSpread({}, route), generate(route)), {}, {
127
- parent: undefined
128
- }) : _objectSpread(_objectSpread({}, route), {}, {
129
- parent: undefined
130
- }));
162
+ const normalized = flat(nested).map(
163
+ (route) => route.parent ? __spreadProps(__spreadValues(__spreadValues({}, route), generate(route)), { parent: void 0 }) : __spreadProps(__spreadValues({}, route), { parent: void 0 })
164
+ );
131
165
  return normalized;
132
166
  };
133
- export const getClientRoutes = ({
167
+ const getClientRoutes = ({
134
168
  entrypoint,
135
169
  srcDirectory,
136
170
  srcAlias,
137
171
  internalDirectory,
138
172
  internalDirAlias
139
173
  }) => {
140
- const {
141
- entry,
142
- entryName
143
- } = entrypoint;
174
+ const { entry, entryName } = entrypoint;
144
175
  if (!fs.existsSync(entry)) {
145
- throw new Error(`generate file system routes error, ${entry} directory not found.`);
176
+ throw new Error(
177
+ `generate file system routes error, ${entry} directory not found.`
178
+ );
146
179
  }
147
180
  if (!(fs.existsSync(entry) && fs.statSync(entry).isDirectory())) {
148
- throw new Error(`generate file system routes error, ${entry} should be directory.`);
181
+ throw new Error(
182
+ `generate file system routes error, ${entry} should be directory.`
183
+ );
149
184
  }
150
185
  let routes = [];
151
186
  recursiveReadDir({
152
187
  dir: entry,
153
188
  routes,
154
- basePath: '/',
189
+ basePath: "/",
155
190
  srcDirectory,
156
191
  srcAlias
157
192
  });
158
- const internalComponentsDir = path.resolve(internalDirectory, `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`);
193
+ const internalComponentsDir = path.resolve(
194
+ internalDirectory,
195
+ `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`
196
+ );
159
197
  fs.emptyDirSync(internalComponentsDir);
160
- routes = normalizeNestedRoutes(routes, internalComponentsDir, internalDirectory, internalDirAlias);
198
+ routes = normalizeNestedRoutes(
199
+ routes,
200
+ internalComponentsDir,
201
+ internalDirectory,
202
+ internalDirAlias
203
+ );
161
204
  parents.length = 0;
162
-
163
- // FIXME: support more situations
164
205
  routes.sort((a, b) => {
165
206
  const delta = getRouteWeight(a.path) - getRouteWeight(b.path);
166
207
  if (delta === 0) {
@@ -170,4 +211,7 @@ export const getClientRoutes = ({
170
211
  });
171
212
  debug(`fileSystem routes: %o`, routes);
172
213
  return routes;
173
- };
214
+ };
215
+ export {
216
+ getClientRoutes
217
+ };
@@ -1,28 +1,49 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- import path from 'path';
5
- import { fs } from '@modern-js/utils';
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import path from "path";
21
+ import { fs } from "@modern-js/utils";
6
22
  import { makeLegalIdentifier } from "../makeLegalIdentifier";
7
- import { FILE_SYSTEM_ROUTES_COMPONENTS_DIR, FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP, FILE_SYSTEM_ROUTES_INDEX, FILE_SYSTEM_ROUTES_LAYOUT } from "../constants";
23
+ import {
24
+ FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
25
+ FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
26
+ FILE_SYSTEM_ROUTES_INDEX,
27
+ FILE_SYSTEM_ROUTES_LAYOUT
28
+ } from "../constants";
8
29
  import { replaceWithAlias } from "../utils";
9
30
  import { debug, findLayout, shouldSkip, getRouteWeight } from "./utils";
10
31
  const compName = (srcDirectory, filePath) => {
11
- const legalCompName = makeLegalIdentifier(path.relative(srcDirectory, filePath));
32
+ const legalCompName = makeLegalIdentifier(
33
+ path.relative(srcDirectory, filePath)
34
+ );
12
35
  return `Comp_${legalCompName}`;
13
36
  };
14
- const layoutNameAbbr = filePath => {
15
- const prefix = 'L_';
16
- const dirName = path.dirname(filePath).split('/').pop() || '';
37
+ const layoutNameAbbr = (filePath) => {
38
+ const prefix = "L_";
39
+ const dirName = path.dirname(filePath).split("/").pop() || "";
17
40
  return `${prefix}${makeLegalIdentifier(dirName)}`;
18
41
  };
19
42
  const parents = [];
20
-
21
- /* eslint-disable no-param-reassign */
22
43
  const recursiveReadDirLegacy = ({
23
44
  dir,
24
45
  routes,
25
- basePath: _basePath = '/',
46
+ basePath = "/",
26
47
  srcDirectory,
27
48
  srcAlias
28
49
  }) => {
@@ -31,13 +52,13 @@ const recursiveReadDirLegacy = ({
31
52
  let parent = parents[parents.length - 1];
32
53
  const layout = findLayout(dir);
33
54
  if (layout) {
34
- if (_basePath === '/') {
55
+ if (basePath === "/") {
35
56
  throw new Error(`should use _app instead of _layout in ${dir}`);
36
57
  } else {
37
58
  const alias = replaceWithAlias(srcDirectory, layout, srcAlias);
38
59
  const componentName = compName(srcDirectory, layout);
39
60
  const route = {
40
- path: `${_basePath.substring(0, _basePath.length - 1)}`,
61
+ path: `${basePath.substring(0, basePath.length - 1)}`,
41
62
  exact: false,
42
63
  routes: [],
43
64
  _component: alias,
@@ -60,13 +81,15 @@ const recursiveReadDirLegacy = ({
60
81
  const dynamicRouteMatched = FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP.exec(filename);
61
82
  if (dynamicRouteMatched) {
62
83
  if (hasDynamicRoute) {
63
- throw new Error(`Can't set two dynamic route in one directory: ${dir}`);
84
+ throw new Error(
85
+ `Can't set two dynamic route in one directory: ${dir}`
86
+ );
64
87
  } else {
65
88
  hasDynamicRoute = true;
66
89
  }
67
90
  }
68
91
  const route = {
69
- path: `${_basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
92
+ path: `${basePath}${dynamicRouteMatched ? `:${dynamicRouteMatched[1]}${dynamicRouteMatched[2]}` : filename}`,
70
93
  _component: alias,
71
94
  component: componentName,
72
95
  exact: true,
@@ -86,10 +109,10 @@ const recursiveReadDirLegacy = ({
86
109
  continue;
87
110
  }
88
111
  if (filename === FILE_SYSTEM_ROUTES_INDEX) {
89
- route.path = _basePath === '/' ? _basePath : `${_basePath.substring(0, _basePath.length - 1)}`;
112
+ route.path = basePath === "/" ? basePath : `${basePath.substring(0, basePath.length - 1)}`;
90
113
  }
91
- if (filename === '404' && _basePath === '/') {
92
- route.path = '*';
114
+ if (filename === "404" && basePath === "/") {
115
+ route.path = "*";
93
116
  route.exact = false;
94
117
  }
95
118
  routes.push(route);
@@ -99,69 +122,85 @@ const recursiveReadDirLegacy = ({
99
122
  parents.pop();
100
123
  }
101
124
  };
102
- /* eslint-enable no-param-reassign */
103
-
104
125
  const normalizeNestedRoutes = (nested, internalComponentsDir, internalDirectory, internalDirAlias) => {
105
- const flat = routes => routes.reduce((memo, route) => memo.concat(Array.isArray(route.routes) ? flat(route.routes) : [route]), []);
106
- const generate = route => {
126
+ const flat = (routes) => routes.reduce(
127
+ (memo, route) => memo.concat(Array.isArray(route.routes) ? flat(route.routes) : [route]),
128
+ []
129
+ );
130
+ const generate = (route) => {
107
131
  const codes = [];
108
132
  let lastComponent = route.component;
109
- const imports = [`import React from 'react';`, `import ${lastComponent} from '${route._component}'`];
110
-
111
- // eslint-disable-next-line no-param-reassign, no-cond-assign
133
+ const imports = [
134
+ `import React from 'react';`,
135
+ `import ${lastComponent} from '${route._component}'`
136
+ ];
112
137
  while (route = route.parent) {
113
138
  const layoutComponent = route.component;
114
139
  const layoutComponentAbbr = layoutNameAbbr(route._component);
115
140
  imports.push(`import ${layoutComponent} from '${route._component}';`);
116
141
  const currentComponent = `${layoutComponentAbbr}_${lastComponent}`;
117
- codes.push(`const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`);
142
+ codes.push(
143
+ `const ${currentComponent} = props => <${layoutComponent} Component={${lastComponent}} {...props} />;`
144
+ );
118
145
  lastComponent = currentComponent;
119
146
  }
120
147
  const file = path.resolve(internalComponentsDir, `${lastComponent}.jsx`);
121
- fs.outputFileSync(file, `${imports.join('\n')}\n${codes.join('\n')}\nexport default ${lastComponent}`);
148
+ fs.outputFileSync(
149
+ file,
150
+ `${imports.join("\n")}
151
+ ${codes.join(
152
+ "\n"
153
+ )}
154
+ export default ${lastComponent}`
155
+ );
122
156
  return {
123
157
  component: lastComponent,
124
158
  _component: replaceWithAlias(internalDirectory, file, internalDirAlias)
125
159
  };
126
160
  };
127
- const normalized = flat(nested).map(route => route.parent ? _objectSpread(_objectSpread(_objectSpread({}, route), generate(route)), {}, {
128
- parent: undefined
129
- }) : _objectSpread(_objectSpread({}, route), {}, {
130
- parent: undefined
131
- }));
161
+ const normalized = flat(nested).map(
162
+ (route) => route.parent ? __spreadProps(__spreadValues(__spreadValues({}, route), generate(route)), { parent: void 0 }) : __spreadProps(__spreadValues({}, route), { parent: void 0 })
163
+ );
132
164
  return normalized;
133
165
  };
134
- export const getClientRoutes = ({
166
+ const getClientRoutes = ({
135
167
  entrypoint,
136
168
  srcDirectory,
137
169
  srcAlias,
138
170
  internalDirectory,
139
171
  internalDirAlias
140
172
  }) => {
141
- const {
142
- entry,
143
- entryName
144
- } = entrypoint;
173
+ const { entry, entryName } = entrypoint;
145
174
  if (!fs.existsSync(entry)) {
146
- throw new Error(`generate file system routes error, ${entry} directory not found.`);
175
+ throw new Error(
176
+ `generate file system routes error, ${entry} directory not found.`
177
+ );
147
178
  }
148
179
  if (!(fs.existsSync(entry) && fs.statSync(entry).isDirectory())) {
149
- throw new Error(`generate file system routes error, ${entry} should be directory.`);
180
+ throw new Error(
181
+ `generate file system routes error, ${entry} should be directory.`
182
+ );
150
183
  }
151
184
  let routes = [];
152
185
  recursiveReadDirLegacy({
153
186
  dir: entry,
154
187
  routes,
155
- basePath: '/',
188
+ basePath: "/",
156
189
  srcDirectory,
157
190
  srcAlias
158
191
  });
159
- const internalComponentsDir = path.resolve(internalDirectory, `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`);
192
+ const internalComponentsDir = path.resolve(
193
+ internalDirectory,
194
+ `${entryName}/${FILE_SYSTEM_ROUTES_COMPONENTS_DIR}`
195
+ );
160
196
  fs.emptyDirSync(internalComponentsDir);
161
- routes = normalizeNestedRoutes(routes, internalComponentsDir, internalDirectory, internalDirAlias);
197
+ routes = normalizeNestedRoutes(
198
+ routes,
199
+ internalComponentsDir,
200
+ internalDirectory,
201
+ internalDirAlias
202
+ );
162
203
  parents.length = 0;
163
-
164
- // FIXME: support more situations
165
204
  routes.sort((a, b) => {
166
205
  const delta = getRouteWeight(a.path) - getRouteWeight(b.path);
167
206
  if (delta === 0) {
@@ -171,4 +210,7 @@ export const getClientRoutes = ({
171
210
  });
172
211
  debug(`fileSystem routes: %o`, routes);
173
212
  return routes;
174
- };
213
+ };
214
+ export {
215
+ getClientRoutes
216
+ };
@@ -1,2 +1,6 @@
1
- export { getClientRoutes } from "./getRoutes";
2
- export { getClientRoutes as getClientRoutesLegacy } from "./getRoutesLegacy";
1
+ import { getClientRoutes } from "./getRoutes";
2
+ import { getClientRoutes as getClientRoutes2 } from "./getRoutesLegacy";
3
+ export {
4
+ getClientRoutes,
5
+ getClientRoutes2 as getClientRoutesLegacy
6
+ };
@@ -1,12 +1,19 @@
1
- import path from 'path';
2
- import { createDebugger, findExists, fs } from '@modern-js/utils';
3
- import { JS_EXTENSIONS, FILE_SYSTEM_ROUTES_LAYOUT, FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT, FILE_SYSTEM_ROUTES_IGNORED_REGEX } from "../constants";
4
- const debug = createDebugger('get-client-routes');
5
- export { debug };
6
- export const findLayout = dir => findExists(JS_EXTENSIONS.map(ext => path.resolve(dir, `${FILE_SYSTEM_ROUTES_LAYOUT}${ext}`)));
7
- export const getRouteWeight = route => route === '*' ? 999 : route.split(':').length - 1;
8
- export const shouldSkip = file => {
9
- // should not skip directory.
1
+ import path from "path";
2
+ import { createDebugger, findExists, fs } from "@modern-js/utils";
3
+ import {
4
+ JS_EXTENSIONS,
5
+ FILE_SYSTEM_ROUTES_LAYOUT,
6
+ FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
7
+ FILE_SYSTEM_ROUTES_IGNORED_REGEX
8
+ } from "../constants";
9
+ const debug = createDebugger("get-client-routes");
10
+ const findLayout = (dir) => findExists(
11
+ JS_EXTENSIONS.map(
12
+ (ext) => path.resolve(dir, `${FILE_SYSTEM_ROUTES_LAYOUT}${ext}`)
13
+ )
14
+ );
15
+ const getRouteWeight = (route) => route === "*" ? 999 : route.split(":").length - 1;
16
+ const shouldSkip = (file) => {
10
17
  if (fs.statSync(file).isDirectory()) {
11
18
  return false;
12
19
  }
@@ -15,4 +22,10 @@ export const shouldSkip = file => {
15
22
  return true;
16
23
  }
17
24
  return false;
18
- };
25
+ };
26
+ export {
27
+ debug,
28
+ findLayout,
29
+ getRouteWeight,
30
+ shouldSkip
31
+ };
@@ -1,14 +1,25 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { findExists, ensureAbsolutePath } from '@modern-js/utils';
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { findExists, ensureAbsolutePath } from "@modern-js/utils";
4
4
  import { isDefaultExportFunction } from "./isDefaultExportFunction";
5
- import { JS_EXTENSIONS, INDEX_FILE_NAME, APP_FILE_NAME, PAGES_DIR_NAME, FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT, NESTED_ROUTES_DIR } from "./constants";
6
- const hasIndex = dir => findExists(JS_EXTENSIONS.map(ext => path.resolve(dir, `${INDEX_FILE_NAME}${ext}`)));
7
- const hasApp = dir => findExists(JS_EXTENSIONS.map(ext => path.resolve(dir, `${APP_FILE_NAME}${ext}`)));
8
- const hasPages = dir => fs.existsSync(path.join(dir, PAGES_DIR_NAME));
9
- const hasNestedRoutes = dir => fs.existsSync(path.join(dir, NESTED_ROUTES_DIR));
10
- const isBundleEntry = dir => hasApp(dir) || hasPages(dir) || hasIndex(dir) || hasNestedRoutes(dir);
11
- const scanDir = dirs => dirs.map(dir => {
5
+ import {
6
+ JS_EXTENSIONS,
7
+ INDEX_FILE_NAME,
8
+ APP_FILE_NAME,
9
+ PAGES_DIR_NAME,
10
+ FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
11
+ NESTED_ROUTES_DIR
12
+ } from "./constants";
13
+ const hasIndex = (dir) => findExists(
14
+ JS_EXTENSIONS.map((ext) => path.resolve(dir, `${INDEX_FILE_NAME}${ext}`))
15
+ );
16
+ const hasApp = (dir) => findExists(
17
+ JS_EXTENSIONS.map((ext) => path.resolve(dir, `${APP_FILE_NAME}${ext}`))
18
+ );
19
+ const hasPages = (dir) => fs.existsSync(path.join(dir, PAGES_DIR_NAME));
20
+ const hasNestedRoutes = (dir) => fs.existsSync(path.join(dir, NESTED_ROUTES_DIR));
21
+ const isBundleEntry = (dir) => hasApp(dir) || hasPages(dir) || hasIndex(dir) || hasNestedRoutes(dir);
22
+ const scanDir = (dirs) => dirs.map((dir) => {
12
23
  const indexFile = hasIndex(dir);
13
24
  const customBootstrap = isDefaultExportFunction(indexFile) ? indexFile : false;
14
25
  const entryName = path.basename(dir);
@@ -35,9 +46,16 @@ const scanDir = dirs => dirs.map(dir => {
35
46
  if (isHasNestedRoutes || isHasPages) {
36
47
  const entrypoint = {
37
48
  entryName,
38
- entry: '',
49
+ entry: "",
39
50
  fileSystemRoutes: {
40
- globalApp: findExists(JS_EXTENSIONS.map(ext => path.resolve(dir, `./${PAGES_DIR_NAME}/${FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT}${ext}`)))
51
+ globalApp: findExists(
52
+ JS_EXTENSIONS.map(
53
+ (ext) => path.resolve(
54
+ dir,
55
+ `./${PAGES_DIR_NAME}/${FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT}${ext}`
56
+ )
57
+ )
58
+ )
41
59
  },
42
60
  isAutoMount: true,
43
61
  absoluteEntryDir: path.resolve(dir),
@@ -58,23 +76,26 @@ const scanDir = dirs => dirs.map(dir => {
58
76
  isAutoMount: false
59
77
  };
60
78
  });
61
- export const getFileSystemEntry = (appContext, config) => {
79
+ const getFileSystemEntry = (appContext, config) => {
80
+ const { appDirectory } = appContext;
62
81
  const {
63
- appDirectory
64
- } = appContext;
65
- const {
66
- source: {
67
- entriesDir
68
- }
82
+ source: { entriesDir }
69
83
  } = config;
70
- const src = ensureAbsolutePath(appDirectory, entriesDir || '');
84
+ const src = ensureAbsolutePath(appDirectory, entriesDir || "");
71
85
  if (fs.existsSync(src)) {
72
86
  if (fs.statSync(src).isDirectory()) {
73
- return scanDir(isBundleEntry(src) ? [src] : fs.readdirSync(src).map(file => path.join(src, file)).filter(file => fs.statSync(file).isDirectory() && isBundleEntry(file)));
87
+ return scanDir(
88
+ isBundleEntry(src) ? [src] : fs.readdirSync(src).map((file) => path.join(src, file)).filter(
89
+ (file) => fs.statSync(file).isDirectory() && isBundleEntry(file)
90
+ )
91
+ );
74
92
  } else {
75
93
  throw Error(`source.entriesDir accept a directory.`);
76
94
  }
77
95
  } else {
78
96
  throw Error(`src dir ${entriesDir} not found.`);
79
97
  }
80
- };
98
+ };
99
+ export {
100
+ getFileSystemEntry
101
+ };