@modern-js/app-tools 2.0.0-beta.1 → 2.0.0-beta.3

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 (240) hide show
  1. package/CHANGELOG.md +445 -0
  2. package/bin/modern.js +10 -1
  3. package/dist/js/modern/analyze/constants.js +2 -0
  4. package/dist/js/modern/analyze/generateCode.js +39 -19
  5. package/dist/js/modern/analyze/getBundleEntry.js +1 -1
  6. package/dist/js/modern/analyze/getFileSystemEntry.js +1 -1
  7. package/dist/js/modern/analyze/getHtmlTemplate.js +1 -1
  8. package/dist/js/modern/analyze/getServerRoutes.js +8 -4
  9. package/dist/js/modern/analyze/index.js +12 -27
  10. package/dist/js/modern/analyze/nestedRoutes.js +17 -6
  11. package/dist/js/modern/analyze/templates.js +59 -27
  12. package/dist/js/modern/analyze/utils.js +30 -4
  13. package/dist/js/modern/builder/builderPlugins/compatModern.js +18 -12
  14. package/dist/js/modern/builder/index.js +31 -16
  15. package/dist/js/modern/builder/loaders/routerLoader.js +20 -0
  16. package/dist/js/modern/builder/loaders/serverModuleLoader.js +4 -0
  17. package/dist/js/modern/builder/share.js +1 -1
  18. package/dist/js/modern/commands/build.js +8 -2
  19. package/dist/js/modern/commands/dev.js +37 -32
  20. package/dist/js/modern/commands/inspect.js +4 -2
  21. package/dist/js/modern/config/default.js +206 -0
  22. package/dist/js/modern/config/index.js +2 -0
  23. package/dist/js/modern/config/initial/createHtmlConfig.js +32 -0
  24. package/dist/js/modern/{builder → config/initial}/createOutputConfig.js +16 -15
  25. package/dist/js/modern/config/initial/createSourceConfig.js +32 -0
  26. package/dist/js/modern/config/initial/createToolsConfig.js +41 -0
  27. package/dist/js/modern/config/initial/index.js +11 -0
  28. package/dist/js/modern/config/initial/inits.js +117 -0
  29. package/dist/js/modern/config/initial/transformNormalizedConfig.js +40 -0
  30. package/dist/js/modern/defineConfig.js +12 -0
  31. package/dist/js/modern/hooks.js +23 -19
  32. package/dist/js/modern/index.js +7 -5
  33. package/dist/js/modern/initialize/index.js +72 -0
  34. package/dist/js/modern/schema/Schema.js +39 -0
  35. package/dist/js/modern/schema/index.js +139 -0
  36. package/dist/js/modern/schema/legacy.js +284 -0
  37. package/dist/js/modern/types/config/deploy.js +0 -0
  38. package/dist/js/modern/types/config/dev.js +0 -0
  39. package/dist/js/modern/types/config/experiments.js +0 -0
  40. package/dist/js/modern/types/config/html.js +0 -0
  41. package/dist/js/modern/types/config/index.js +2 -0
  42. package/dist/js/modern/types/config/output.js +0 -0
  43. package/dist/js/modern/types/config/performance.js +0 -0
  44. package/dist/js/modern/types/config/security.js +0 -0
  45. package/dist/js/modern/types/config/source.js +0 -0
  46. package/dist/js/modern/types/config/tools.js +0 -0
  47. package/dist/js/modern/types/hooks.js +0 -0
  48. package/dist/js/modern/types/index.js +4 -0
  49. package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
  50. package/dist/js/modern/types/legacyConfig/dev.js +0 -0
  51. package/dist/js/modern/types/legacyConfig/index.js +0 -0
  52. package/dist/js/modern/types/legacyConfig/output.js +1 -0
  53. package/dist/js/modern/types/legacyConfig/source.js +0 -0
  54. package/dist/js/modern/types/legacyConfig/tools.js +0 -0
  55. package/dist/js/modern/utils/config.js +1 -1
  56. package/dist/js/modern/utils/createFileWatcher.js +82 -0
  57. package/dist/js/modern/utils/restart.js +17 -0
  58. package/dist/js/node/analyze/constants.js +5 -1
  59. package/dist/js/node/analyze/generateCode.js +37 -17
  60. package/dist/js/node/analyze/getBundleEntry.js +1 -1
  61. package/dist/js/node/analyze/getFileSystemEntry.js +1 -1
  62. package/dist/js/node/analyze/getHtmlTemplate.js +1 -1
  63. package/dist/js/node/analyze/getServerRoutes.js +8 -4
  64. package/dist/js/node/analyze/index.js +13 -39
  65. package/dist/js/node/analyze/nestedRoutes.js +15 -4
  66. package/dist/js/node/analyze/templates.js +60 -27
  67. package/dist/js/node/analyze/utils.js +31 -3
  68. package/dist/js/node/builder/builderPlugins/compatModern.js +18 -12
  69. package/dist/js/node/builder/index.js +32 -16
  70. package/dist/js/node/builder/loaders/routerLoader.js +27 -0
  71. package/dist/js/node/builder/loaders/serverModuleLoader.js +11 -0
  72. package/dist/js/node/builder/share.js +1 -1
  73. package/dist/js/node/commands/build.js +8 -2
  74. package/dist/js/node/commands/dev.js +37 -32
  75. package/dist/js/node/commands/inspect.js +4 -2
  76. package/dist/js/node/config/default.js +213 -0
  77. package/dist/js/node/config/index.js +31 -0
  78. package/dist/js/node/config/initial/createHtmlConfig.js +38 -0
  79. package/dist/js/node/{builder → config/initial}/createOutputConfig.js +16 -15
  80. package/dist/js/node/config/initial/createSourceConfig.js +38 -0
  81. package/dist/js/node/config/initial/createToolsConfig.js +47 -0
  82. package/dist/js/node/config/initial/index.js +24 -0
  83. package/dist/js/node/config/initial/inits.js +127 -0
  84. package/dist/js/node/config/initial/transformNormalizedConfig.js +46 -0
  85. package/dist/js/node/defineConfig.js +20 -0
  86. package/dist/js/node/hooks.js +23 -28
  87. package/dist/js/node/index.js +30 -16
  88. package/dist/js/node/initialize/index.js +79 -0
  89. package/dist/js/node/schema/Schema.js +46 -0
  90. package/dist/js/node/schema/index.js +152 -0
  91. package/dist/js/node/schema/legacy.js +291 -0
  92. package/dist/js/node/types/config/deploy.js +0 -0
  93. package/dist/js/node/types/config/dev.js +0 -0
  94. package/dist/js/node/types/config/experiments.js +0 -0
  95. package/dist/js/node/types/config/html.js +0 -0
  96. package/dist/js/node/types/config/index.js +16 -0
  97. package/dist/js/node/types/config/output.js +0 -0
  98. package/dist/js/node/types/config/performance.js +0 -0
  99. package/dist/js/node/types/config/security.js +0 -0
  100. package/dist/js/node/types/config/source.js +0 -0
  101. package/dist/js/node/types/config/tools.js +0 -0
  102. package/dist/js/node/types/hooks.js +0 -0
  103. package/dist/js/node/types/index.js +38 -0
  104. package/dist/js/node/types/legacyConfig/deploy.js +0 -0
  105. package/dist/js/node/types/legacyConfig/dev.js +0 -0
  106. package/dist/js/node/types/legacyConfig/index.js +0 -0
  107. package/dist/js/node/types/legacyConfig/output.js +5 -0
  108. package/dist/js/node/types/legacyConfig/source.js +0 -0
  109. package/dist/js/node/types/legacyConfig/tools.js +0 -0
  110. package/dist/js/node/utils/config.js +1 -1
  111. package/dist/js/node/utils/createFileWatcher.js +91 -0
  112. package/dist/js/node/utils/restart.js +23 -0
  113. package/dist/js/treeshaking/analyze/constants.js +2 -0
  114. package/dist/js/treeshaking/analyze/generateCode.js +138 -82
  115. package/dist/js/treeshaking/analyze/getBundleEntry.js +1 -1
  116. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +1 -1
  117. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +1 -1
  118. package/dist/js/treeshaking/analyze/getServerRoutes.js +7 -5
  119. package/dist/js/treeshaking/analyze/index.js +10 -26
  120. package/dist/js/treeshaking/analyze/nestedRoutes.js +98 -55
  121. package/dist/js/treeshaking/analyze/templates.js +175 -101
  122. package/dist/js/treeshaking/analyze/utils.js +80 -4
  123. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +18 -12
  124. package/dist/js/treeshaking/builder/index.js +29 -16
  125. package/dist/js/treeshaking/builder/loaders/routerLoader.js +14 -0
  126. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +4 -0
  127. package/dist/js/treeshaking/builder/share.js +1 -1
  128. package/dist/js/treeshaking/commands/build.js +33 -23
  129. package/dist/js/treeshaking/commands/dev.js +56 -43
  130. package/dist/js/treeshaking/commands/inspect.js +8 -3
  131. package/dist/js/treeshaking/config/default.js +199 -0
  132. package/dist/js/treeshaking/config/index.js +2 -0
  133. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +31 -0
  134. package/dist/js/treeshaking/config/initial/createOutputConfig.js +70 -0
  135. package/dist/js/treeshaking/config/initial/createSourceConfig.js +41 -0
  136. package/dist/js/treeshaking/config/initial/createToolsConfig.js +38 -0
  137. package/dist/js/treeshaking/config/initial/index.js +11 -0
  138. package/dist/js/treeshaking/config/initial/inits.js +114 -0
  139. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +38 -0
  140. package/dist/js/treeshaking/defineConfig.js +14 -0
  141. package/dist/js/treeshaking/hooks.js +23 -19
  142. package/dist/js/treeshaking/index.js +7 -5
  143. package/dist/js/treeshaking/initialize/index.js +121 -0
  144. package/dist/js/treeshaking/schema/Schema.js +75 -0
  145. package/dist/js/treeshaking/schema/index.js +138 -0
  146. package/dist/js/treeshaking/schema/legacy.js +273 -0
  147. package/dist/js/treeshaking/types/config/deploy.js +0 -0
  148. package/dist/js/treeshaking/types/config/dev.js +0 -0
  149. package/dist/js/treeshaking/types/config/experiments.js +0 -0
  150. package/dist/js/treeshaking/types/config/html.js +0 -0
  151. package/dist/js/treeshaking/types/config/index.js +2 -0
  152. package/dist/js/treeshaking/types/config/output.js +0 -0
  153. package/dist/js/treeshaking/types/config/performance.js +0 -0
  154. package/dist/js/treeshaking/types/config/security.js +0 -0
  155. package/dist/js/treeshaking/types/config/source.js +0 -0
  156. package/dist/js/treeshaking/types/config/tools.js +0 -0
  157. package/dist/js/treeshaking/types/hooks.js +0 -0
  158. package/dist/js/treeshaking/types/index.js +4 -0
  159. package/dist/js/treeshaking/types/legacyConfig/deploy.js +0 -0
  160. package/dist/js/treeshaking/types/legacyConfig/dev.js +0 -0
  161. package/dist/js/treeshaking/types/legacyConfig/index.js +0 -0
  162. package/dist/js/treeshaking/types/legacyConfig/output.js +1 -0
  163. package/dist/js/treeshaking/types/legacyConfig/source.js +0 -0
  164. package/dist/js/treeshaking/types/legacyConfig/tools.js +0 -0
  165. package/dist/js/treeshaking/utils/config.js +1 -1
  166. package/dist/js/treeshaking/utils/createFileWatcher.js +123 -0
  167. package/dist/js/treeshaking/utils/restart.js +45 -0
  168. package/dist/types/analyze/constants.d.ts +2 -0
  169. package/dist/types/analyze/generateCode.d.ts +3 -2
  170. package/dist/types/analyze/getBundleEntry.d.ts +2 -2
  171. package/dist/types/analyze/getFileSystemEntry.d.ts +2 -2
  172. package/dist/types/analyze/getHtmlTemplate.d.ts +3 -3
  173. package/dist/types/analyze/getServerRoutes.d.ts +3 -2
  174. package/dist/types/analyze/index.d.ts +3 -41
  175. package/dist/types/analyze/templates.d.ts +9 -8
  176. package/dist/types/analyze/utils.d.ts +10 -2
  177. package/dist/types/builder/builderPlugins/compatModern.d.ts +2 -2
  178. package/dist/types/builder/index.d.ts +5 -2
  179. package/dist/types/builder/loaders/routerLoader.d.ts +3 -0
  180. package/dist/types/builder/loaders/serverModuleLoader.d.ts +3 -0
  181. package/dist/types/builder/share.d.ts +2 -2
  182. package/dist/types/commands/build.d.ts +2 -2
  183. package/dist/types/commands/deploy.d.ts +2 -2
  184. package/dist/types/commands/dev.d.ts +2 -2
  185. package/dist/types/commands/inspect.d.ts +9 -1
  186. package/dist/types/commands/start.d.ts +2 -2
  187. package/dist/types/config/default.d.ts +3 -0
  188. package/dist/types/config/index.d.ts +2 -0
  189. package/dist/types/config/initial/createHtmlConfig.d.ts +2 -0
  190. package/dist/types/config/initial/createOutputConfig.d.ts +2 -0
  191. package/dist/types/config/initial/createSourceConfig.d.ts +2 -0
  192. package/dist/types/config/initial/createToolsConfig.d.ts +2 -0
  193. package/dist/types/config/initial/index.d.ts +4 -0
  194. package/dist/types/config/initial/inits.d.ts +4 -0
  195. package/dist/types/config/initial/transformNormalizedConfig.d.ts +2 -0
  196. package/dist/types/defineConfig.d.ts +7 -0
  197. package/dist/types/hooks.d.ts +2 -42
  198. package/dist/types/index.d.ts +5 -5
  199. package/dist/types/initialize/index.d.ts +3 -0
  200. package/dist/types/schema/Schema.d.ts +14 -0
  201. package/dist/types/schema/index.d.ts +4 -0
  202. package/dist/types/schema/legacy.d.ts +3 -0
  203. package/dist/types/types/config/deploy.d.ts +9 -0
  204. package/dist/types/types/config/dev.d.ts +13 -0
  205. package/dist/types/types/config/experiments.d.ts +4 -0
  206. package/dist/types/types/config/html.d.ts +4 -0
  207. package/dist/types/types/config/index.d.ts +62 -0
  208. package/dist/types/types/config/output.d.ts +23 -0
  209. package/dist/types/types/config/performance.d.ts +4 -0
  210. package/dist/types/types/config/security.d.ts +4 -0
  211. package/dist/types/types/config/source.d.ts +22 -0
  212. package/dist/types/types/config/tools.d.ts +22 -0
  213. package/dist/types/types/hooks.d.ts +81 -0
  214. package/dist/types/types/index.d.ts +23 -0
  215. package/dist/types/types/legacyConfig/deploy.d.ts +8 -0
  216. package/dist/types/types/legacyConfig/dev.d.ts +12 -0
  217. package/dist/types/types/legacyConfig/index.d.ts +33 -0
  218. package/dist/types/types/legacyConfig/output.d.ts +51 -0
  219. package/dist/types/types/legacyConfig/source.d.ts +25 -0
  220. package/dist/types/types/legacyConfig/tools.d.ts +16 -0
  221. package/dist/types/utils/config.d.ts +2 -2
  222. package/dist/types/utils/createFileWatcher.d.ts +4 -0
  223. package/dist/types/utils/printInstructions.d.ts +3 -3
  224. package/dist/types/utils/restart.d.ts +3 -0
  225. package/lib/types.d.ts +1 -1
  226. package/package.json +28 -25
  227. package/dist/js/modern/builder/createHtmlConfig.js +0 -58
  228. package/dist/js/modern/builder/createSourceConfig.js +0 -74
  229. package/dist/js/modern/builder/createToolsConfig.js +0 -87
  230. package/dist/js/node/builder/createHtmlConfig.js +0 -68
  231. package/dist/js/node/builder/createSourceConfig.js +0 -82
  232. package/dist/js/node/builder/createToolsConfig.js +0 -94
  233. package/dist/js/treeshaking/builder/createHtmlConfig.js +0 -59
  234. package/dist/js/treeshaking/builder/createOutputConfig.js +0 -70
  235. package/dist/js/treeshaking/builder/createSourceConfig.js +0 -88
  236. package/dist/js/treeshaking/builder/createToolsConfig.js +0 -85
  237. package/dist/types/builder/createHtmlConfig.d.ts +0 -6
  238. package/dist/types/builder/createOutputConfig.d.ts +0 -3
  239. package/dist/types/builder/createSourceConfig.d.ts +0 -5
  240. package/dist/types/builder/createToolsConfig.d.ts +0 -13
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PAGES_DIR_NAME = exports.NESTED_ROUTES_DIR = exports.JS_EXTENSIONS = exports.INDEX_FILE_NAME = exports.HTML_PARTIALS_FOLDER = exports.HTML_PARTIALS_EXTENSIONS = exports.FILE_SYSTEM_ROUTES_LAYOUT = exports.FILE_SYSTEM_ROUTES_INDEX = exports.FILE_SYSTEM_ROUTES_IGNORED_REGEX = exports.FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT = exports.FILE_SYSTEM_ROUTES_FILE_NAME = exports.FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = exports.FILE_SYSTEM_ROUTES_COMPONENTS_DIR = exports.ENTRY_POINT_FILE_NAME = exports.ENTRY_BOOTSTRAP_FILE_NAME = exports.APP_FILE_NAME = void 0;
6
+ exports.TEMP_LOADERS_DIR = exports.PAGES_DIR_NAME = exports.NESTED_ROUTES_DIR = exports.LOADER_EXPORT_NAME = exports.JS_EXTENSIONS = exports.INDEX_FILE_NAME = exports.HTML_PARTIALS_FOLDER = exports.HTML_PARTIALS_EXTENSIONS = exports.FILE_SYSTEM_ROUTES_LAYOUT = exports.FILE_SYSTEM_ROUTES_INDEX = exports.FILE_SYSTEM_ROUTES_IGNORED_REGEX = exports.FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT = exports.FILE_SYSTEM_ROUTES_FILE_NAME = exports.FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = exports.FILE_SYSTEM_ROUTES_COMPONENTS_DIR = exports.ENTRY_POINT_FILE_NAME = exports.ENTRY_BOOTSTRAP_FILE_NAME = exports.APP_FILE_NAME = void 0;
7
7
  const JS_EXTENSIONS = ['.js', '.ts', '.jsx', '.tsx'];
8
8
  exports.JS_EXTENSIONS = JS_EXTENSIONS;
9
9
  const INDEX_FILE_NAME = 'index';
@@ -16,6 +16,10 @@ const NESTED_ROUTES_DIR = 'routes';
16
16
  exports.NESTED_ROUTES_DIR = NESTED_ROUTES_DIR;
17
17
  const FILE_SYSTEM_ROUTES_FILE_NAME = 'routes.js';
18
18
  exports.FILE_SYSTEM_ROUTES_FILE_NAME = FILE_SYSTEM_ROUTES_FILE_NAME;
19
+ const LOADER_EXPORT_NAME = 'loader';
20
+ exports.LOADER_EXPORT_NAME = LOADER_EXPORT_NAME;
21
+ const TEMP_LOADERS_DIR = '__loaders__';
22
+ exports.TEMP_LOADERS_DIR = TEMP_LOADERS_DIR;
19
23
  const ENTRY_POINT_FILE_NAME = 'index.js';
20
24
  exports.ENTRY_POINT_FILE_NAME = ENTRY_POINT_FILE_NAME;
21
25
  const ENTRY_BOOTSTRAP_FILE_NAME = 'bootstrap.js';
@@ -17,6 +17,11 @@ var _nestedRoutes = require("./nestedRoutes");
17
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ const loader = {
21
+ '.js': 'jsx',
22
+ '.ts': 'tsx'
23
+ };
24
+ const EXTERNAL_REGEXP = /^[^./]|^\.[^./]|^\.\.[^/]/;
20
25
  const createImportSpecifier = specifiers => {
21
26
  let defaults = '';
22
27
  const named = [];
@@ -73,15 +78,10 @@ const createImportStatements = statements => {
73
78
  };
74
79
  exports.createImportStatements = createImportStatements;
75
80
  const buildLoader = async (entry, outfile) => {
76
- const loader = {
77
- '.js': 'jsx',
78
- '.ts': 'tsx'
79
- };
80
- const EXTERNAL_REGEXP = /^[^./]|^\.[^./]|^\.\.[^/]/;
81
81
  const command = (0, _commands.getCommand)();
82
82
  await _esbuild.default.build({
83
- format: 'cjs',
84
- platform: 'node',
83
+ format: 'esm',
84
+ platform: 'browser',
85
85
  target: 'esnext',
86
86
  loader,
87
87
  watch: command === 'dev' && {},
@@ -110,6 +110,20 @@ const buildLoader = async (entry, outfile) => {
110
110
  }]
111
111
  });
112
112
  };
113
+ const buildServerLoader = async (entry, outfile) => {
114
+ const command = (0, _commands.getCommand)();
115
+ await _esbuild.default.build({
116
+ format: 'cjs',
117
+ platform: 'node',
118
+ target: 'esnext',
119
+ loader,
120
+ watch: command === 'dev' && {},
121
+ bundle: true,
122
+ logLevel: 'error',
123
+ entryPoints: [entry],
124
+ outfile
125
+ });
126
+ };
113
127
  const generateCode = async (appContext, config, entrypoints, api) => {
114
128
  var _config$runtime, _config$runtime$route;
115
129
  const {
@@ -123,7 +137,7 @@ const generateCode = async (appContext, config, entrypoints, api) => {
123
137
  const islegacy = Boolean(config === null || config === void 0 ? void 0 : (_config$runtime = config.runtime) === null || _config$runtime === void 0 ? void 0 : (_config$runtime$route = _config$runtime.router) === null || _config$runtime$route === void 0 ? void 0 : _config$runtime$route.legacy);
124
138
  const {
125
139
  mountId
126
- } = config.output;
140
+ } = config.html;
127
141
  const getRoutes = islegacy ? _getClientRoutes.getClientRoutesLegacy : _getClientRoutes.getClientRoutes;
128
142
  await Promise.all(entrypoints.map(generateEntryCode));
129
143
  async function generateEntryCode(entrypoint) {
@@ -188,28 +202,34 @@ const generateCode = async (appContext, config, entrypoints, api) => {
188
202
  code
189
203
  } = await hookRunners.beforeGenerateRoutes({
190
204
  entrypoint,
191
- code: templates.fileSystemRoutes({
205
+ code: await templates.fileSystemRoutes({
192
206
  routes,
193
207
  ssrMode: mode,
194
208
  nestedRoutesEntry: entrypoint.nestedRoutesEntry,
195
- entryName: entrypoint.entryName
209
+ entryName: entrypoint.entryName,
210
+ internalDirectory
196
211
  })
197
212
  });
198
213
 
199
214
  // extract nested router loaders
200
215
  if (entrypoint.nestedRoutesEntry) {
201
- const routesServerFile = _path.default.join(internalDirectory, entryName, 'routes.server.js');
202
- const outputRoutesServerFile = _path.default.join(distDirectory, 'loader-routes', entryName, 'index.js');
216
+ const routesServerFile = _path.default.join(internalDirectory, entryName, 'route-server-loaders.js');
217
+ const outputRoutesServerFile = _path.default.join(distDirectory, _utils.LOADER_ROUTES_DIR, entryName, 'index.js');
203
218
  const code = templates.routesForServer({
204
219
  routes: routes,
205
- alias: {
206
- name: internalSrcAlias,
207
- basename: srcDirectory
208
- }
220
+ internalDirectory,
221
+ entryName
209
222
  });
210
223
  await _utils.fs.ensureFile(routesServerFile);
211
224
  await _utils.fs.writeFile(routesServerFile, code);
212
- await buildLoader(routesServerFile, outputRoutesServerFile);
225
+ const loaderEntryFile = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, 'entry.js');
226
+ const loaderIndexFile = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, 'index.js');
227
+ if (await _utils.fs.pathExists(loaderEntryFile)) {
228
+ await buildLoader(loaderEntryFile, loaderIndexFile);
229
+ }
230
+ if (await _utils.fs.pathExists(routesServerFile)) {
231
+ await buildServerLoader(routesServerFile, outputRoutesServerFile);
232
+ }
213
233
  }
214
234
  _utils.fs.outputFileSync(_path.default.resolve(internalDirectory, `./${entryName}/${_constants.FILE_SYSTEM_ROUTES_FILE_NAME}`), code, 'utf8');
215
235
  }
@@ -63,7 +63,7 @@ const getBundleEntry = (appContext, config) => {
63
63
  }
64
64
  if (!disableDefaultEntries) {
65
65
  // find main entry point which server route is '/'.
66
- const entriesDirAbs = (0, _utils.ensureAbsolutePath)(appDirectory, entriesDir);
66
+ const entriesDirAbs = (0, _utils.ensureAbsolutePath)(appDirectory, entriesDir || '');
67
67
  const found = defaults.find(({
68
68
  entryName,
69
69
  entry,
@@ -74,7 +74,7 @@ const getFileSystemEntry = (appContext, config) => {
74
74
  entriesDir
75
75
  }
76
76
  } = config;
77
- const src = (0, _utils.ensureAbsolutePath)(appDirectory, entriesDir);
77
+ const src = (0, _utils.ensureAbsolutePath)(appDirectory, entriesDir || '');
78
78
  if (_fs.default.existsSync(src)) {
79
79
  if (_fs.default.statSync(src).isDirectory()) {
80
80
  return scanDir(isBundleEntry(src) ? [src] : _fs.default.readdirSync(src).map(file => _path.default.join(src, file)).filter(file => _fs.default.statSync(file).isDirectory() && isBundleEntry(file)));
@@ -45,7 +45,7 @@ const getHtmlTemplate = async (entrypoints, api, {
45
45
  configDir
46
46
  }
47
47
  } = config;
48
- const htmlDir = _path.default.resolve(appDirectory, configDir, _constants.HTML_PARTIALS_FOLDER);
48
+ const htmlDir = _path.default.resolve(appDirectory, configDir || '', _constants.HTML_PARTIALS_FOLDER);
49
49
  const htmlTemplates = {};
50
50
  for (const entrypoint of entrypoints) {
51
51
  const {
@@ -100,9 +100,13 @@ const applyRouteOptions = (original, routeOptions) => {
100
100
  */
101
101
  const collectHtmlRoutes = (entrypoints, appContext, config) => {
102
102
  const {
103
+ html: {
104
+ disableHtmlFolder
105
+ },
103
106
  output: {
104
- htmlPath,
105
- disableHtmlFolder,
107
+ distPath: {
108
+ html: htmlPath
109
+ } = {},
106
110
  enableModernMode
107
111
  },
108
112
  server: {
@@ -163,14 +167,14 @@ const collectStaticRoutes = (appContext, config) => {
163
167
  publicRoutes = {}
164
168
  }
165
169
  } = config;
166
- const publicFolder = _path.default.resolve(appDirectory, configDir, 'public');
170
+ const publicFolder = _path.default.resolve(appDirectory, configDir || '', 'public');
167
171
  return _fs.default.existsSync(publicFolder) ? (0, _utils2.walkDirectory)(publicFolder).map(filePath => {
168
172
  const urlPath = `${(0, _utils.urlJoin)(toPosix(filePath).slice(toPosix(publicFolder).length))}`;
169
173
  return {
170
174
  urlPath: publicRoutes[(0, _utils.removeLeadingSlash)(urlPath)] || urlPath,
171
175
  isSPA: true,
172
176
  isSSR: false,
173
- entryPath: toPosix(_path.default.relative(_path.default.resolve(appDirectory, configDir), filePath))
177
+ entryPath: toPosix(_path.default.relative(_path.default.resolve(appDirectory, configDir || ''), filePath))
174
178
  };
175
179
  }) : [];
176
180
  };
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.modifyServerRoutes = exports.modifyFileSystemRoutes = exports.modifyEntryRuntimePlugins = exports.modifyEntryRenderFunction = exports.modifyEntryImports = exports.modifyEntryExport = exports.modifyAsyncEntry = exports.htmlPartials = exports.default = exports.beforeGenerateRoutes = exports.addRuntimeExports = exports.addDefineTypes = void 0;
6
+ exports.default = void 0;
7
7
  var path = _interopRequireWildcard(require("path"));
8
- var _plugin = require("@modern-js/plugin");
9
8
  var _utils = require("@modern-js/utils");
10
9
  var _lodash = require("@modern-js/utils/lodash");
11
10
  var _builder = require("../builder");
@@ -13,6 +12,7 @@ var _printInstructions = require("../utils/printInstructions");
13
12
  var _routes = require("../utils/routes");
14
13
  var _config = require("../utils/config");
15
14
  var _commands = require("../utils/commands");
15
+ var _config2 = require("../config");
16
16
  var _utils2 = require("./utils");
17
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
18
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -20,43 +20,8 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
20
20
  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; }
21
21
  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; }
22
22
  const debug = (0, _utils.createDebugger)('plugin-analyze');
23
- const modifyEntryImports = (0, _plugin.createAsyncWaterfall)();
24
- exports.modifyEntryImports = modifyEntryImports;
25
- const modifyEntryExport = (0, _plugin.createAsyncWaterfall)();
26
- exports.modifyEntryExport = modifyEntryExport;
27
- const addRuntimeExports = (0, _plugin.createAsyncWaterfall)();
28
- exports.addRuntimeExports = addRuntimeExports;
29
- const modifyEntryRuntimePlugins = (0, _plugin.createAsyncWaterfall)();
30
- exports.modifyEntryRuntimePlugins = modifyEntryRuntimePlugins;
31
- const modifyEntryRenderFunction = (0, _plugin.createAsyncWaterfall)();
32
- exports.modifyEntryRenderFunction = modifyEntryRenderFunction;
33
- const modifyAsyncEntry = (0, _plugin.createAsyncWaterfall)();
34
- exports.modifyAsyncEntry = modifyAsyncEntry;
35
- const modifyFileSystemRoutes = (0, _plugin.createAsyncWaterfall)();
36
- exports.modifyFileSystemRoutes = modifyFileSystemRoutes;
37
- const modifyServerRoutes = (0, _plugin.createAsyncWaterfall)();
38
- exports.modifyServerRoutes = modifyServerRoutes;
39
- const htmlPartials = (0, _plugin.createAsyncWaterfall)();
40
- exports.htmlPartials = htmlPartials;
41
- const beforeGenerateRoutes = (0, _plugin.createAsyncWaterfall)();
42
- exports.beforeGenerateRoutes = beforeGenerateRoutes;
43
- const addDefineTypes = (0, _plugin.createAsyncWaterfall)();
44
- exports.addDefineTypes = addDefineTypes;
45
23
  var _default = () => ({
46
24
  name: '@modern-js/plugin-analyze',
47
- registerHook: {
48
- modifyAsyncEntry,
49
- modifyEntryImports,
50
- modifyEntryExport,
51
- modifyEntryRuntimePlugins,
52
- modifyEntryRenderFunction,
53
- modifyFileSystemRoutes,
54
- modifyServerRoutes,
55
- htmlPartials,
56
- addRuntimeExports,
57
- beforeGenerateRoutes,
58
- addDefineTypes
59
- },
60
25
  setup: api => {
61
26
  let pagesDir = [];
62
27
  let originEntrypoints = [];
@@ -71,7 +36,7 @@ var _default = () => ({
71
36
  } catch (_unused) {
72
37
  // FIXME:
73
38
  }
74
- const apiOnly = await (0, _utils.isApiOnly)(appContext.appDirectory, resolvedConfig === null || resolvedConfig === void 0 ? void 0 : (_resolvedConfig$sourc = resolvedConfig.source) === null || _resolvedConfig$sourc === void 0 ? void 0 : _resolvedConfig$sourc.entriesDir);
39
+ const apiOnly = await (0, _utils.isApiOnly)(appContext.appDirectory, (_resolvedConfig$sourc = resolvedConfig.source) === null || _resolvedConfig$sourc === void 0 ? void 0 : _resolvedConfig$sourc.entriesDir);
75
40
  await hookRunners.addRuntimeExports();
76
41
  if (apiOnly) {
77
42
  const {
@@ -138,7 +103,7 @@ var _default = () => ({
138
103
  if (buildCommands.includes(command)) {
139
104
  const normalizedConfig = api.useResolvedConfigContext();
140
105
  const builder = await (0, _builder.createBuilderForEdenX)({
141
- normalizedConfig,
106
+ normalizedConfig: normalizedConfig,
142
107
  appContext,
143
108
  compatPluginConfig: {
144
109
  async onBeforeBuild({
@@ -199,6 +164,15 @@ var _default = () => ({
199
164
  watchFiles() {
200
165
  return pagesDir;
201
166
  },
167
+ resolvedConfig({
168
+ resolved
169
+ }) {
170
+ const appContext = api.useAppContext();
171
+ const config = (0, _config2.initialNormalizedConfig)(resolved, appContext);
172
+ return {
173
+ resolved: config
174
+ };
175
+ },
202
176
  async fileChange(e) {
203
177
  const appContext = api.useAppContext();
204
178
  const {
@@ -19,6 +19,12 @@ const LOADING_FILE = 'loading';
19
19
  const ERROR_FILE = 'error';
20
20
  const LOADER_FILE = 'loader';
21
21
  const conventionNames = [LAYOUT_FILE, PAGE_FILE, LOADING_FILE, ERROR_FILE, LOADER_FILE];
22
+ const getLoaderPath = async filename => {
23
+ if (await (0, _utils2.hasLoader)(filename)) {
24
+ return (0, _utils.normalizeToPosixPath)(filename);
25
+ }
26
+ return undefined;
27
+ };
22
28
  const replaceDynamicPath = routePath => {
23
29
  return routePath.replace(/\[(.*?)\]/g, ':$1');
24
30
  };
@@ -56,7 +62,8 @@ const walk = async (dirname, rootDir, alias, entryName) => {
56
62
  routePath = replaceDynamicPath(routePath);
57
63
  const route = {
58
64
  path: routePath,
59
- children: []
65
+ children: [],
66
+ isRoot
60
67
  };
61
68
  const items = await _utils.fs.readdir(dirname);
62
69
  for (const item of items) {
@@ -76,17 +83,21 @@ const walk = async (dirname, rootDir, alias, entryName) => {
76
83
  }
77
84
  if (itemWithoutExt === LAYOUT_FILE) {
78
85
  route._component = (0, _utils2.replaceWithAlias)(alias.basename, itemPath, alias.name);
86
+ route.loader = await getLoaderPath(itemPath);
79
87
  }
80
88
  if (itemWithoutExt === PAGE_FILE) {
81
89
  var _route$children2;
82
90
  const childRoute = createIndexRoute({
83
91
  _component: (0, _utils2.replaceWithAlias)(alias.basename, itemPath, alias.name)
84
92
  }, rootDir, itemPath, entryName);
93
+ childRoute.loader = await getLoaderPath(itemPath);
85
94
  (_route$children2 = route.children) === null || _route$children2 === void 0 ? void 0 : _route$children2.push(childRoute);
86
95
  }
87
- if (itemWithoutExt === LOADER_FILE) {
88
- route.loader = (0, _utils2.replaceWithAlias)(alias.basename, itemPath, alias.name);
89
- }
96
+
97
+ // if (itemWithoutExt === LOADER_FILE) {
98
+ // route.loader = replaceWithAlias(alias.basename, itemPath, alias.name);
99
+ // }
100
+
90
101
  if (itemWithoutExt === LOADING_FILE) {
91
102
  route.loading = (0, _utils2.replaceWithAlias)(alias.basename, itemPath, alias.name);
92
103
  }
@@ -4,6 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.routesForServer = exports.renderFunction = exports.index = exports.html = exports.fileSystemRoutes = void 0;
7
+ var _path = _interopRequireDefault(require("path"));
8
+ var _utils = require("@modern-js/utils");
9
+ var _constants = require("./constants");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
11
  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; }
8
12
  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; }
9
13
  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; }
@@ -87,13 +91,11 @@ const html = partials => `
87
91
  exports.html = html;
88
92
  const routesForServer = ({
89
93
  routes,
90
- alias
94
+ internalDirectory,
95
+ entryName
91
96
  }) => {
92
- const {
93
- name,
94
- basename
95
- } = alias;
96
97
  const loaders = [];
98
+ const loaderIndexFile = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, 'index.js');
97
99
  const traverseRouteTree = route => {
98
100
  let children;
99
101
  if ('children' in route && route.children) {
@@ -125,39 +127,44 @@ const routesForServer = ({
125
127
  }
126
128
  }
127
129
  routesCode += `\n];`;
128
- const importLoadersCode = loaders.map((loader, index) => {
129
- const realLoaderPath = loader.replace(name, basename);
130
- return `import loader_${index} from '${realLoaderPath}';\n`;
131
- }).join('');
130
+ let importLoadersCode = '';
131
+ if (loaders.length > 0) {
132
+ importLoadersCode = `
133
+ import { ${loaders.map((loader, index) => `loader_${index}`)} } from "${loaderIndexFile}"`;
134
+ }
132
135
  return `
133
136
  ${importLoadersCode}
134
137
  ${routesCode}
135
138
  `;
136
139
  };
137
140
  exports.routesForServer = routesForServer;
138
- const fileSystemRoutes = ({
141
+ const fileSystemRoutes = async ({
139
142
  routes,
140
143
  ssrMode,
141
144
  nestedRoutesEntry,
142
- entryName
145
+ entryName,
146
+ internalDirectory
143
147
  }) => {
144
- // The legacy mode and pages dir routes should use loadable
145
- // nested routes + renderTostring should use loadable.lazy
146
- // nested routes + renderToStream should use react.lazy
148
+ const loadings = [];
149
+ const errors = [];
150
+ const loaders = [];
151
+ const loadersMap = {};
152
+ const loadersIndexFile = _path.default.join('@_modern_js_internal', entryName, _constants.TEMP_LOADERS_DIR, 'index.js');
153
+ const loadersMapFile = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, 'map.json');
147
154
  const importLazyCode = `
148
155
  import { lazy } from "react";
149
156
  import loadable, { lazy as loadableLazy } from "@modern-js/runtime/loadable"
150
157
  `;
158
+ let rootLayoutCode = ``;
151
159
  let dataLoaderPath = '';
160
+ let componentLoaderPath = '';
152
161
  if (ssrMode) {
153
162
  dataLoaderPath = require.resolve(`@modern-js/plugin-data-loader/loader`);
154
163
  if (nestedRoutesEntry) {
155
- dataLoaderPath = `${dataLoaderPath}?routesDir=${nestedRoutesEntry}&entryName=${entryName}!`;
164
+ dataLoaderPath = `${dataLoaderPath}?routesDir=${nestedRoutesEntry}&mapFile=${loadersMapFile}!`;
156
165
  }
166
+ componentLoaderPath = `${_path.default.join(__dirname, '../builder/loaders/routerLoader')}!`;
157
167
  }
158
- const loadings = [];
159
- const errors = [];
160
- const loaders = [];
161
168
  const traverseRouteTree = route => {
162
169
  let children;
163
170
  if ('children' in route && route.children) {
@@ -179,13 +186,19 @@ const fileSystemRoutes = ({
179
186
  }
180
187
  if (route.loader) {
181
188
  loaders.push(route.loader);
182
- loader = `loader_${loaders.length - 1}`;
189
+ const loaderId = loaders.length - 1;
190
+ loader = `loader_${loaderId}`;
191
+ loadersMap[loader] = route.id;
183
192
  }
184
193
  if (route._component) {
185
- if (ssrMode === 'stream') {
186
- component = `lazy(() => import(/* webpackChunkName: "${route.id}" */ /* webpackMode: "lazy-once" */ '${route._component}'))`;
194
+ if (route.isRoot) {
195
+ rootLayoutCode = `import RootLayout from '${route._component}'`;
196
+ component = `RootLayout`;
197
+ } else if (ssrMode === 'string') {
198
+ component = `loadable(() => import(/* webpackChunkName: "${route.id}" */ '${componentLoaderPath}${route._component}'))`;
187
199
  } else {
188
- component = `loadable(() => import(/* webpackChunkName: "${route.id}" */ /* webpackMode: "lazy-once" */ '${route._component}'))`;
200
+ // csr and streaming
201
+ component = `lazy(() => import(/* webpackChunkName: "${route.id}" */ '${componentLoaderPath}${route._component}'))`;
189
202
  }
190
203
  }
191
204
  } else if (route._component) {
@@ -208,7 +221,7 @@ const fileSystemRoutes = ({
208
221
  for (const route of routes) {
209
222
  if ('type' in route) {
210
223
  const newRoute = traverseRouteTree(route);
211
- routeComponentsCode += `${JSON.stringify(newRoute, null, 2).replace(/"(loadable.*\))"/g, '$1').replace(/"(loadableLazy.*\))"/g, '$1').replace(/"(lazy.*\))"/g, '$1').replace(/"(loading_[^"])"/g, '$1').replace(/"(loader_[^"])"/g, '$1').replace(/"(error_[^"])"/g, '$1').replace(/\\"/g, '"')},`;
224
+ routeComponentsCode += `${JSON.stringify(newRoute, null, 2).replace(/"(loadable.*\))"/g, '$1').replace(/"(loadableLazy.*\))"/g, '$1').replace(/"(lazy.*\))"/g, '$1').replace(/"(loading_[^"])"/g, '$1').replace(/"(loader_[^"])"/g, '$1').replace(/"(RootLayout)"/g, '$1').replace(/"(error_[^"])"/g, '$1').replace(/\\"/g, '"')},`;
212
225
  } else {
213
226
  const component = `loadable(() => import('${route._component}'))`;
214
227
  const finalRoute = _objectSpread(_objectSpread({}, route), {}, {
@@ -224,14 +237,34 @@ const fileSystemRoutes = ({
224
237
  const importErrorComponentsCode = errors.map((error, index) => {
225
238
  return `import error_${index} from '${error}';\n`;
226
239
  }).join('');
227
- const importLoaderComponentsCode = loaders.map((loader, index) => {
228
- return `import loader_${index} from '${dataLoaderPath}${loader}';\n`;
229
- }).join('');
240
+ let importLoadersCode = '';
241
+ if (loaders.length > 0) {
242
+ importLoadersCode = `
243
+ import { ${loaders.map((loader, index) => `loader_${index}`)} } from "${dataLoaderPath}${loadersIndexFile}"
244
+ `;
245
+ const loaderEntryCode = loaders.map((loader, index) => {
246
+ return `export * from './loader_${index}.js';`;
247
+ }).join('\n');
248
+ const loaderEntryFile = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, 'entry.js');
249
+ await _utils.fs.ensureFile(loaderEntryFile);
250
+ await _utils.fs.writeFile(loaderEntryFile, loaderEntryCode);
251
+ await _utils.fs.writeJSON(loadersMapFile, loadersMap);
252
+ await Promise.all(loaders.map(async (loader, index) => {
253
+ const name = `loader_${index}`;
254
+ const filename = _path.default.join(internalDirectory, entryName, _constants.TEMP_LOADERS_DIR, `${name}.js`);
255
+ const code = `
256
+ export { loader as ${name} } from '${loader}'
257
+ `;
258
+ await _utils.fs.ensureFile(filename);
259
+ await _utils.fs.writeFile(filename, code);
260
+ }));
261
+ }
230
262
  return `
231
263
  ${importLazyCode}
264
+ ${rootLayoutCode}
232
265
  ${importLoadingCode}
233
266
  ${importErrorComponentsCode}
234
- ${importLoaderComponentsCode}
267
+ ${importLoadersCode}
235
268
  ${routeComponentsCode}
236
269
  `;
237
270
  };
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.walkDirectory = exports.replaceWithAlias = exports.isRouteComponentFile = exports.getDefaultImports = void 0;
6
+ exports.walkDirectory = exports.replaceWithAlias = exports.parseModule = exports.isRouteComponentFile = exports.hasLoader = exports.getDefaultImports = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _utils = require("@modern-js/utils");
10
+ var _esbuild = require("esbuild");
11
+ var _esModuleLexer = require("es-module-lexer");
10
12
  var _constants = require("./constants");
11
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
14
  const walkDirectory = dir => _fs.default.readdirSync(dir).reduce((previous, filename) => {
@@ -59,7 +61,7 @@ const getDefaultImports = ({
59
61
  specifiers: [{
60
62
  imported: 'routes'
61
63
  }],
62
- value: (0, _utils.normalizeToPosixPath)(`${internalDirAlias}/${entryName}/${_constants.FILE_SYSTEM_ROUTES_FILE_NAME}`)
64
+ value: (0, _utils.normalizeToPosixPath)(`${internalDirAlias}/${entryName}/${_constants.FILE_SYSTEM_ROUTES_FILE_NAME.replace('.js', '')}`)
63
65
  };
64
66
  if (fileSystemRoutes.globalApp) {
65
67
  imports.push({
@@ -94,4 +96,30 @@ const isRouteComponentFile = filePath => {
94
96
  };
95
97
  exports.isRouteComponentFile = isRouteComponentFile;
96
98
  const replaceWithAlias = (base, filePath, alias) => (0, _utils.normalizeToPosixPath)(_path.default.join(alias, _path.default.relative(base, filePath)));
97
- exports.replaceWithAlias = replaceWithAlias;
99
+ exports.replaceWithAlias = replaceWithAlias;
100
+ const parseModule = async ({
101
+ source,
102
+ filename
103
+ }) => {
104
+ let content = source;
105
+ if (filename.endsWith('.tsx') || filename.endsWith('.jsx')) {
106
+ const result = await (0, _esbuild.transform)(content, {
107
+ loader: _path.default.extname(filename).slice(1),
108
+ format: 'esm'
109
+ });
110
+ content = result.code;
111
+ }
112
+
113
+ // eslint-disable-next-line @typescript-eslint/await-thenable
114
+ return await (0, _esModuleLexer.parse)(content);
115
+ };
116
+ exports.parseModule = parseModule;
117
+ const hasLoader = async filename => {
118
+ const source = await _utils.fs.readFile(filename);
119
+ const [, moduleExports] = await parseModule({
120
+ source: source.toString(),
121
+ filename
122
+ });
123
+ return moduleExports.some(e => e.n === _constants.LOADER_EXPORT_NAME);
124
+ };
125
+ exports.hasLoader = hasLoader;
@@ -69,14 +69,15 @@ const PluginCompatModern = (appContext, modernConfig, options) => ({
69
69
  }
70
70
 
71
71
  // apply copy plugin
72
- // const copyPatterns = createCopyPatterns(chain, appContext, modernConfig);
73
- const defaultCopyPattern = (0, _share.createCopyPattern)(appContext, modernConfig, 'public', chain);
74
- chain.plugin(CHAIN_ID.PLUGIN.COPY).tap(args => {
75
- var _args$;
76
- return [{
77
- patterns: [...(((_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.patterns) || []), defaultCopyPattern]
78
- }];
79
- });
72
+ if (chain.plugins.has(CHAIN_ID.PLUGIN.COPY)) {
73
+ const defaultCopyPattern = (0, _share.createCopyPattern)(appContext, modernConfig, 'public', chain);
74
+ chain.plugin(CHAIN_ID.PLUGIN.COPY).tap(args => {
75
+ var _args$;
76
+ return [{
77
+ patterns: [...(((_args$ = args[0]) === null || _args$ === void 0 ? void 0 : _args$.patterns) || []), defaultCopyPattern]
78
+ }];
79
+ });
80
+ }
80
81
  const {
81
82
  entrypoints
82
83
  } = appContext;
@@ -84,6 +85,11 @@ const PluginCompatModern = (appContext, modernConfig, options) => ({
84
85
  chain.plugin('route-plugin').use(_routerPlugin.default, [{
85
86
  existNestedRoutes
86
87
  }]);
88
+ if (target !== 'node') {
89
+ const bareServerModuleReg = /\.(server|node)\.[tj]sx?$/;
90
+ chain.module.rule(CHAIN_ID.RULE.JS).exclude.add(bareServerModuleReg);
91
+ chain.module.rule('bare-server-module').test(bareServerModuleReg).use('server-module-loader').loader(require.resolve("../loaders/serverModuleLoader"));
92
+ }
87
93
  function isHtmlEnabled(config, target) {
88
94
  var _config$tools;
89
95
  return ((_config$tools = config.tools) === null || _config$tools === void 0 ? void 0 : _config$tools.htmlPlugin) !== false && target !== 'node' && target !== 'web-worker';
@@ -115,7 +121,7 @@ function applyCallbacks(api, options) {
115
121
  */
116
122
  function applyNodeCompat(chain, modernConfig, isProd) {
117
123
  // apply node resolve extensions
118
- for (const ext of ['.node.js', '.node.jsx', '.node.ts', '.node.tsx']) {
124
+ for (const ext of ['.node.js', '.node.jsx', '.node.ts', '.node.tsx', '.server.js', '.server.ts', '.server.ts', '.server.tsx']) {
119
125
  chain.resolve.extensions.prepend(ext);
120
126
  }
121
127
 
@@ -175,9 +181,9 @@ function applyBottomHtmlWebpackPlugin({
175
181
  // FIXME: the only need necessary
176
182
  const baseTemplateParams = _objectSpread({
177
183
  entryName,
178
- title: (0, _utils.getEntryOptions)(entryName, modernConfig.output.title, modernConfig.output.titleByEntries, appContext.packageName),
179
- mountId: modernConfig.output.mountId
180
- }, (0, _utils.getEntryOptions)(entryName, modernConfig.output.templateParameters, modernConfig.output.templateParametersByEntries, appContext.packageName));
184
+ title: (0, _utils.getEntryOptions)(entryName, modernConfig.html.title, modernConfig.html.titleByEntries, appContext.packageName),
185
+ mountId: modernConfig.html.mountId
186
+ }, (0, _utils.getEntryOptions)(entryName, modernConfig.html.templateParameters, modernConfig.html.templateParametersByEntries, appContext.packageName));
181
187
  chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).tap(args => [_objectSpread(_objectSpread({}, args[0] || {}), {}, {
182
188
  __internal__: true,
183
189
  bottomTemplate: appContext.htmlTemplates[`__${entryName}-bottom__`] && (0, _lodash.template)(appContext.htmlTemplates[`__${entryName}-bottom__`])(baseTemplateParams)