@modern-js/app-tools 2.30.1-alpha.0 → 2.31.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 (272) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/cjs/analyze/getHtmlTemplate.js +6 -0
  3. package/dist/cjs/analyze/nestedRoutes.js +1 -2
  4. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +13 -3
  5. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +64 -82
  6. package/dist/cjs/config/default.js +2 -1
  7. package/dist/cjs/schema/index.js +3 -0
  8. package/dist/cjs/types/config/testing.js +4 -0
  9. package/dist/cjs/types/legacyConfig/testing.js +4 -0
  10. package/dist/esm/analyze/getHtmlTemplate.js +8 -1
  11. package/dist/esm/analyze/nestedRoutes.js +1 -4
  12. package/dist/esm/builder/shared/builderPlugins/adapterSSR.js +13 -3
  13. package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.js +189 -249
  14. package/dist/esm/config/default.js +2 -1
  15. package/dist/esm/schema/index.js +3 -0
  16. package/dist/esm/types/config/testing.js +1 -0
  17. package/dist/esm/types/legacyConfig/testing.js +1 -0
  18. package/dist/esm-node/analyze/getHtmlTemplate.js +6 -0
  19. package/dist/esm-node/analyze/nestedRoutes.js +1 -2
  20. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.js +13 -3
  21. package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.js +68 -85
  22. package/dist/esm-node/config/default.js +2 -1
  23. package/dist/esm-node/schema/index.js +3 -0
  24. package/dist/esm-node/types/config/testing.js +1 -0
  25. package/dist/esm-node/types/legacyConfig/testing.js +1 -0
  26. package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +24 -0
  27. package/dist/types/types/config/index.d.ts +4 -1
  28. package/dist/types/types/config/output.d.ts +1 -0
  29. package/dist/types/types/config/security.d.ts +3 -1
  30. package/dist/types/types/config/testing.d.ts +8 -0
  31. package/dist/types/types/config/tools.d.ts +1 -1
  32. package/dist/types/types/legacyConfig/index.d.ts +2 -0
  33. package/dist/types/types/legacyConfig/testing.d.ts +8 -0
  34. package/dist/types/types/legacyConfig/tools.d.ts +1 -2
  35. package/package.json +25 -25
  36. package/dist/js/modern/analyze/constants.js +0 -54
  37. package/dist/js/modern/analyze/generateCode.js +0 -247
  38. package/dist/js/modern/analyze/getBundleEntry.js +0 -71
  39. package/dist/js/modern/analyze/getClientRoutes/getRoutes.js +0 -220
  40. package/dist/js/modern/analyze/getClientRoutes/getRoutesLegacy.js +0 -216
  41. package/dist/js/modern/analyze/getClientRoutes/index.js +0 -6
  42. package/dist/js/modern/analyze/getClientRoutes/utils.js +0 -31
  43. package/dist/js/modern/analyze/getFileSystemEntry.js +0 -109
  44. package/dist/js/modern/analyze/getHtmlTemplate.js +0 -115
  45. package/dist/js/modern/analyze/getServerRoutes.js +0 -175
  46. package/dist/js/modern/analyze/index.js +0 -332
  47. package/dist/js/modern/analyze/isDefaultExportFunction.js +0 -42
  48. package/dist/js/modern/analyze/makeLegalIdentifier.js +0 -13
  49. package/dist/js/modern/analyze/nestedRoutes.js +0 -157
  50. package/dist/js/modern/analyze/templates.js +0 -334
  51. package/dist/js/modern/analyze/utils.js +0 -141
  52. package/dist/js/modern/builder/builderPlugins/compatModern.js +0 -233
  53. package/dist/js/modern/builder/index.js +0 -159
  54. package/dist/js/modern/builder/loaders/routerLoader.js +0 -17
  55. package/dist/js/modern/builder/loaders/serverModuleLoader.js +0 -7
  56. package/dist/js/modern/builder/share.js +0 -46
  57. package/dist/js/modern/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -30
  58. package/dist/js/modern/builder/webpackPlugins/htmlBottomTemplate.js +0 -37
  59. package/dist/js/modern/builder/webpackPlugins/routerPlugin.js +0 -113
  60. package/dist/js/modern/commands/build.js +0 -91
  61. package/dist/js/modern/commands/deploy.js +0 -28
  62. package/dist/js/modern/commands/dev.js +0 -109
  63. package/dist/js/modern/commands/index.js +0 -3
  64. package/dist/js/modern/commands/inspect.js +0 -38
  65. package/dist/js/modern/commands/serve.js +0 -54
  66. package/dist/js/modern/config/default.js +0 -175
  67. package/dist/js/modern/config/index.js +0 -8
  68. package/dist/js/modern/config/initial/createHtmlConfig.js +0 -35
  69. package/dist/js/modern/config/initial/createOutputConfig.js +0 -68
  70. package/dist/js/modern/config/initial/createSourceConfig.js +0 -39
  71. package/dist/js/modern/config/initial/createToolsConfig.js +0 -42
  72. package/dist/js/modern/config/initial/index.js +0 -16
  73. package/dist/js/modern/config/initial/inits.js +0 -152
  74. package/dist/js/modern/config/initial/transformNormalizedConfig.js +0 -47
  75. package/dist/js/modern/defineConfig.js +0 -27
  76. package/dist/js/modern/exports/server.js +0 -4
  77. package/dist/js/modern/hooks.js +0 -35
  78. package/dist/js/modern/index.js +0 -211
  79. package/dist/js/modern/initialize/index.js +0 -124
  80. package/dist/js/modern/locale/en.js +0 -36
  81. package/dist/js/modern/locale/index.js +0 -9
  82. package/dist/js/modern/locale/zh.js +0 -36
  83. package/dist/js/modern/schema/Schema.js +0 -40
  84. package/dist/js/modern/schema/index.js +0 -88
  85. package/dist/js/modern/schema/legacy.js +0 -148
  86. package/dist/js/modern/types/config/deploy.js +0 -0
  87. package/dist/js/modern/types/config/dev.js +0 -0
  88. package/dist/js/modern/types/config/experiments.js +0 -0
  89. package/dist/js/modern/types/config/html.js +0 -0
  90. package/dist/js/modern/types/config/index.js +0 -1
  91. package/dist/js/modern/types/config/output.js +0 -0
  92. package/dist/js/modern/types/config/performance.js +0 -0
  93. package/dist/js/modern/types/config/security.js +0 -0
  94. package/dist/js/modern/types/config/source.js +0 -0
  95. package/dist/js/modern/types/config/tools.js +0 -0
  96. package/dist/js/modern/types/hooks.js +0 -0
  97. package/dist/js/modern/types/index.js +0 -3
  98. package/dist/js/modern/types/legacyConfig/deploy.js +0 -0
  99. package/dist/js/modern/types/legacyConfig/dev.js +0 -0
  100. package/dist/js/modern/types/legacyConfig/index.js +0 -0
  101. package/dist/js/modern/types/legacyConfig/output.js +0 -0
  102. package/dist/js/modern/types/legacyConfig/source.js +0 -0
  103. package/dist/js/modern/types/legacyConfig/tools.js +0 -0
  104. package/dist/js/modern/utils/config.js +0 -128
  105. package/dist/js/modern/utils/createServer.js +0 -75
  106. package/dist/js/modern/utils/env.js +0 -15
  107. package/dist/js/modern/utils/generateWatchFiles.js +0 -55
  108. package/dist/js/modern/utils/getSelectedEntries.js +0 -58
  109. package/dist/js/modern/utils/getServerInternalPlugins.js +0 -58
  110. package/dist/js/modern/utils/language.js +0 -8
  111. package/dist/js/modern/utils/printInstructions.js +0 -31
  112. package/dist/js/modern/utils/restart.js +0 -44
  113. package/dist/js/modern/utils/routes.js +0 -30
  114. package/dist/js/modern/utils/types.js +0 -0
  115. package/dist/js/node/analyze/constants.js +0 -98
  116. package/dist/js/node/analyze/generateCode.js +0 -271
  117. package/dist/js/node/analyze/getBundleEntry.js +0 -95
  118. package/dist/js/node/analyze/getClientRoutes/getRoutes.js +0 -242
  119. package/dist/js/node/analyze/getClientRoutes/getRoutesLegacy.js +0 -238
  120. package/dist/js/node/analyze/getClientRoutes/index.js +0 -30
  121. package/dist/js/node/analyze/getClientRoutes/utils.js +0 -58
  122. package/dist/js/node/analyze/getFileSystemEntry.js +0 -131
  123. package/dist/js/node/analyze/getHtmlTemplate.js +0 -144
  124. package/dist/js/node/analyze/getServerRoutes.js +0 -194
  125. package/dist/js/node/analyze/index.js +0 -339
  126. package/dist/js/node/analyze/isDefaultExportFunction.js +0 -71
  127. package/dist/js/node/analyze/makeLegalIdentifier.js +0 -36
  128. package/dist/js/node/analyze/nestedRoutes.js +0 -184
  129. package/dist/js/node/analyze/templates.js +0 -365
  130. package/dist/js/node/analyze/utils.js +0 -172
  131. package/dist/js/node/builder/builderPlugins/compatModern.js +0 -258
  132. package/dist/js/node/builder/index.js +0 -177
  133. package/dist/js/node/builder/loaders/routerLoader.js +0 -38
  134. package/dist/js/node/builder/loaders/serverModuleLoader.js +0 -28
  135. package/dist/js/node/builder/share.js +0 -75
  136. package/dist/js/node/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -53
  137. package/dist/js/node/builder/webpackPlugins/htmlBottomTemplate.js +0 -60
  138. package/dist/js/node/builder/webpackPlugins/routerPlugin.js +0 -135
  139. package/dist/js/node/commands/build.js +0 -112
  140. package/dist/js/node/commands/deploy.js +0 -51
  141. package/dist/js/node/commands/dev.js +0 -126
  142. package/dist/js/node/commands/index.js +0 -19
  143. package/dist/js/node/commands/inspect.js +0 -61
  144. package/dist/js/node/commands/serve.js +0 -83
  145. package/dist/js/node/config/default.js +0 -197
  146. package/dist/js/node/config/index.js +0 -34
  147. package/dist/js/node/config/initial/createHtmlConfig.js +0 -58
  148. package/dist/js/node/config/initial/createOutputConfig.js +0 -91
  149. package/dist/js/node/config/initial/createSourceConfig.js +0 -62
  150. package/dist/js/node/config/initial/createToolsConfig.js +0 -65
  151. package/dist/js/node/config/initial/index.js +0 -41
  152. package/dist/js/node/config/initial/inits.js +0 -175
  153. package/dist/js/node/config/initial/transformNormalizedConfig.js +0 -70
  154. package/dist/js/node/defineConfig.js +0 -49
  155. package/dist/js/node/exports/server.js +0 -27
  156. package/dist/js/node/hooks.js +0 -54
  157. package/dist/js/node/index.js +0 -235
  158. package/dist/js/node/initialize/index.js +0 -134
  159. package/dist/js/node/locale/en.js +0 -59
  160. package/dist/js/node/locale/index.js +0 -33
  161. package/dist/js/node/locale/zh.js +0 -59
  162. package/dist/js/node/schema/Schema.js +0 -63
  163. package/dist/js/node/schema/index.js +0 -118
  164. package/dist/js/node/schema/legacy.js +0 -169
  165. package/dist/js/node/types/config/deploy.js +0 -15
  166. package/dist/js/node/types/config/dev.js +0 -15
  167. package/dist/js/node/types/config/experiments.js +0 -15
  168. package/dist/js/node/types/config/html.js +0 -15
  169. package/dist/js/node/types/config/index.js +0 -17
  170. package/dist/js/node/types/config/output.js +0 -15
  171. package/dist/js/node/types/config/performance.js +0 -15
  172. package/dist/js/node/types/config/security.js +0 -15
  173. package/dist/js/node/types/config/source.js +0 -15
  174. package/dist/js/node/types/config/tools.js +0 -15
  175. package/dist/js/node/types/hooks.js +0 -15
  176. package/dist/js/node/types/index.js +0 -19
  177. package/dist/js/node/types/legacyConfig/deploy.js +0 -15
  178. package/dist/js/node/types/legacyConfig/dev.js +0 -15
  179. package/dist/js/node/types/legacyConfig/index.js +0 -15
  180. package/dist/js/node/types/legacyConfig/output.js +0 -15
  181. package/dist/js/node/types/legacyConfig/source.js +0 -15
  182. package/dist/js/node/types/legacyConfig/tools.js +0 -15
  183. package/dist/js/node/utils/config.js +0 -153
  184. package/dist/js/node/utils/createServer.js +0 -106
  185. package/dist/js/node/utils/env.js +0 -38
  186. package/dist/js/node/utils/generateWatchFiles.js +0 -85
  187. package/dist/js/node/utils/getSelectedEntries.js +0 -81
  188. package/dist/js/node/utils/getServerInternalPlugins.js +0 -79
  189. package/dist/js/node/utils/language.js +0 -31
  190. package/dist/js/node/utils/printInstructions.js +0 -54
  191. package/dist/js/node/utils/restart.js +0 -67
  192. package/dist/js/node/utils/routes.js +0 -59
  193. package/dist/js/node/utils/types.js +0 -15
  194. package/dist/js/treeshaking/analyze/constants.js +0 -40
  195. package/dist/js/treeshaking/analyze/generateCode.js +0 -485
  196. package/dist/js/treeshaking/analyze/getBundleEntry.js +0 -62
  197. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutes.js +0 -233
  198. package/dist/js/treeshaking/analyze/getClientRoutes/getRoutesLegacy.js +0 -231
  199. package/dist/js/treeshaking/analyze/getClientRoutes/index.js +0 -3
  200. package/dist/js/treeshaking/analyze/getClientRoutes/utils.js +0 -23
  201. package/dist/js/treeshaking/analyze/getFileSystemEntry.js +0 -107
  202. package/dist/js/treeshaking/analyze/getHtmlTemplate.js +0 -302
  203. package/dist/js/treeshaking/analyze/getServerRoutes.js +0 -222
  204. package/dist/js/treeshaking/analyze/index.js +0 -697
  205. package/dist/js/treeshaking/analyze/isDefaultExportFunction.js +0 -47
  206. package/dist/js/treeshaking/analyze/makeLegalIdentifier.js +0 -13
  207. package/dist/js/treeshaking/analyze/nestedRoutes.js +0 -384
  208. package/dist/js/treeshaking/analyze/templates.js +0 -468
  209. package/dist/js/treeshaking/analyze/utils.js +0 -374
  210. package/dist/js/treeshaking/builder/builderPlugins/compatModern.js +0 -304
  211. package/dist/js/treeshaking/builder/index.js +0 -374
  212. package/dist/js/treeshaking/builder/loaders/routerLoader.js +0 -13
  213. package/dist/js/treeshaking/builder/loaders/serverModuleLoader.js +0 -5
  214. package/dist/js/treeshaking/builder/share.js +0 -40
  215. package/dist/js/treeshaking/builder/webpackPlugins/htmlAsyncChunkPlugin.js +0 -110
  216. package/dist/js/treeshaking/builder/webpackPlugins/htmlBottomTemplate.js +0 -72
  217. package/dist/js/treeshaking/builder/webpackPlugins/routerPlugin.js +0 -343
  218. package/dist/js/treeshaking/commands/build.js +0 -291
  219. package/dist/js/treeshaking/commands/deploy.js +0 -154
  220. package/dist/js/treeshaking/commands/dev.js +0 -301
  221. package/dist/js/treeshaking/commands/index.js +0 -3
  222. package/dist/js/treeshaking/commands/inspect.js +0 -149
  223. package/dist/js/treeshaking/commands/serve.js +0 -199
  224. package/dist/js/treeshaking/config/default.js +0 -210
  225. package/dist/js/treeshaking/config/index.js +0 -3
  226. package/dist/js/treeshaking/config/initial/createHtmlConfig.js +0 -19
  227. package/dist/js/treeshaking/config/initial/createOutputConfig.js +0 -41
  228. package/dist/js/treeshaking/config/initial/createSourceConfig.js +0 -42
  229. package/dist/js/treeshaking/config/initial/createToolsConfig.js +0 -23
  230. package/dist/js/treeshaking/config/initial/index.js +0 -12
  231. package/dist/js/treeshaking/config/initial/inits.js +0 -209
  232. package/dist/js/treeshaking/config/initial/transformNormalizedConfig.js +0 -35
  233. package/dist/js/treeshaking/defineConfig.js +0 -61
  234. package/dist/js/treeshaking/exports/server.js +0 -2
  235. package/dist/js/treeshaking/hooks.js +0 -29
  236. package/dist/js/treeshaking/index.js +0 -706
  237. package/dist/js/treeshaking/initialize/index.js +0 -276
  238. package/dist/js/treeshaking/locale/en.js +0 -38
  239. package/dist/js/treeshaking/locale/index.js +0 -9
  240. package/dist/js/treeshaking/locale/zh.js +0 -38
  241. package/dist/js/treeshaking/schema/Schema.js +0 -273
  242. package/dist/js/treeshaking/schema/index.js +0 -181
  243. package/dist/js/treeshaking/schema/legacy.js +0 -337
  244. package/dist/js/treeshaking/types/config/deploy.js +0 -1
  245. package/dist/js/treeshaking/types/config/dev.js +0 -1
  246. package/dist/js/treeshaking/types/config/experiments.js +0 -1
  247. package/dist/js/treeshaking/types/config/html.js +0 -1
  248. package/dist/js/treeshaking/types/config/index.js +0 -1
  249. package/dist/js/treeshaking/types/config/output.js +0 -1
  250. package/dist/js/treeshaking/types/config/performance.js +0 -1
  251. package/dist/js/treeshaking/types/config/security.js +0 -1
  252. package/dist/js/treeshaking/types/config/source.js +0 -1
  253. package/dist/js/treeshaking/types/config/tools.js +0 -1
  254. package/dist/js/treeshaking/types/hooks.js +0 -1
  255. package/dist/js/treeshaking/types/index.js +0 -3
  256. package/dist/js/treeshaking/types/legacyConfig/deploy.js +0 -1
  257. package/dist/js/treeshaking/types/legacyConfig/dev.js +0 -1
  258. package/dist/js/treeshaking/types/legacyConfig/index.js +0 -1
  259. package/dist/js/treeshaking/types/legacyConfig/output.js +0 -1
  260. package/dist/js/treeshaking/types/legacyConfig/source.js +0 -1
  261. package/dist/js/treeshaking/types/legacyConfig/tools.js +0 -1
  262. package/dist/js/treeshaking/utils/config.js +0 -302
  263. package/dist/js/treeshaking/utils/createServer.js +0 -258
  264. package/dist/js/treeshaking/utils/env.js +0 -13
  265. package/dist/js/treeshaking/utils/generateWatchFiles.js +0 -214
  266. package/dist/js/treeshaking/utils/getSelectedEntries.js +0 -186
  267. package/dist/js/treeshaking/utils/getServerInternalPlugins.js +0 -210
  268. package/dist/js/treeshaking/utils/language.js +0 -6
  269. package/dist/js/treeshaking/utils/printInstructions.js +0 -152
  270. package/dist/js/treeshaking/utils/restart.js +0 -187
  271. package/dist/js/treeshaking/utils/routes.js +0 -153
  272. package/dist/js/treeshaking/utils/types.js +0 -1
@@ -1,9 +1,12 @@
1
- import path from "path";
1
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
2
+ import { createHash } from "crypto";
2
3
  import { mergeWith } from "@modern-js/utils/lodash";
3
4
  import { ROUTE_MANIFEST_FILE } from "@modern-js/utils";
4
5
  import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
5
- import { transform } from "esbuild";
6
6
  const PLUGIN_NAME = "ModernjsRoutePlugin";
7
+ const generateContentHash = (content) => {
8
+ return createHash("md5").update(content).digest("hex").slice(0, 8);
9
+ };
7
10
  export class RouterPlugin {
8
11
  isTargetNodeOrWebWorker(target) {
9
12
  if (target === "node" || Array.isArray(target) && target.includes("node")) {
@@ -37,76 +40,23 @@ export class RouterPlugin {
37
40
  }
38
41
  const { webpack } = compiler;
39
42
  const { Compilation, sources } = webpack;
40
- const { RawSource, SourceMapSource } = sources;
41
- const normalizePath = (path2) => {
42
- if (!path2.endsWith("/")) {
43
- return `${path2}/`;
43
+ const { RawSource } = sources;
44
+ const normalizePath = (path) => {
45
+ if (!path.endsWith("/")) {
46
+ return `${path}/`;
44
47
  }
45
- return path2;
48
+ return path;
46
49
  };
47
- const chunkToSource = /* @__PURE__ */ new Map();
48
- const chunkToMap = /* @__PURE__ */ new Map();
49
- const { minimize } = compiler.options.optimization;
50
+ const chunksToHtmlName = /* @__PURE__ */ new Map();
51
+ const ROUTE_MANIFEST_HOLDER = `route-manifest`;
52
+ const placeholder = `<!--<?- ${ROUTE_MANIFEST_HOLDER} ?>-->`;
50
53
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
51
- compilation.hooks.processAssets.tapPromise({
52
- name: PLUGIN_NAME,
53
- stage: Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING
54
- }, async () => {
55
- const stats = compilation.getStats().toJson({
56
- all: false,
57
- chunkGroups: true,
58
- chunks: true,
59
- ids: true
60
- });
61
- const { chunks = [], namedChunkGroups } = stats;
62
- if (!namedChunkGroups) {
63
- return;
64
- }
65
- const entryChunks = this.getEntryChunks(compilation, chunks);
66
- const entryChunkFiles = entryChunks.map((chunk) => [
67
- ...chunk.files || []
68
- ].find((fname) => fname.includes(".js")));
69
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
70
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
71
- const file = entryChunkFiles[i];
72
- const chunkId = entryChunkFileIds[i];
73
- const asset = compilation.assets[file];
74
- if (!asset) {
75
- continue;
76
- }
77
- const { map } = asset.sourceAndMap();
78
- chunkToMap.set(chunkId, map);
79
- }
80
- });
81
- compilation.hooks.processAssets.tapPromise({
82
- name: PLUGIN_NAME,
83
- stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER
84
- }, async () => {
85
- const stats = compilation.getStats().toJson({
86
- all: false,
87
- chunkGroups: true,
88
- chunks: true,
89
- ids: true
90
- });
91
- const { chunks = [], namedChunkGroups } = stats;
92
- if (!namedChunkGroups) {
93
- return;
94
- }
95
- const entryChunks = this.getEntryChunks(compilation, chunks);
96
- const entryChunkFiles = entryChunks.map((chunk) => [
97
- ...chunk.files || []
98
- ].find((fname) => fname.includes(".js")));
99
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
100
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
101
- const file = entryChunkFiles[i];
102
- const chunkId = entryChunkFileIds[i];
103
- const asset = compilation.assets[file];
104
- if (!asset) {
105
- continue;
106
- }
107
- const { source } = asset.sourceAndMap();
108
- chunkToSource.set(chunkId, source);
109
- }
54
+ this.HtmlBundlerPlugin.getHooks(compilation).beforeEmit.tapAsync("RouterManifestPlugin", (data, callback) => {
55
+ const { outputName } = data;
56
+ const { chunks } = data.plugin.options;
57
+ chunksToHtmlName.set(chunks, outputName);
58
+ data.html = data.html.replace("</script>", `</script>${placeholder}`);
59
+ callback(null, data);
110
60
  });
111
61
  compilation.hooks.processAssets.tapPromise({
112
62
  name: PLUGIN_NAME,
@@ -153,11 +103,12 @@ export class RouterPlugin {
153
103
  const manifest = {
154
104
  routeAssets
155
105
  };
106
+ const entryNames = Array.from(compilation.entrypoints.keys());
156
107
  const entryChunks = this.getEntryChunks(compilation, chunks);
157
108
  const entryChunkFiles = this.getEntryChunkFiles(entryChunks);
158
109
  const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
159
110
  for (let i = 0; i < entryChunkFiles.length; i++) {
160
- var _source, _source1;
111
+ const entryName = entryNames[i];
161
112
  const file = entryChunkFiles[i];
162
113
  const chunkNames = entryChunks[i].names;
163
114
  const chunkId = entryChunkFileIds[i];
@@ -193,21 +144,39 @@ export class RouterPlugin {
193
144
  })};
194
145
  })();
195
146
  `;
196
- const source = chunkToSource.get(chunkId);
197
- const map = chunkToMap.get(chunkId);
198
- const newContent = `${injectedContent}${(_source = source) === null || _source === void 0 ? void 0 : _source.toString()}`;
199
- const result = await transform(newContent, {
200
- loader: path.extname(file).slice(1),
201
- sourcemap: true,
202
- minify: minimize
203
- });
204
- const newSource = new SourceMapSource(result.code, file, result.map, (_source1 = source) === null || _source1 === void 0 ? void 0 : _source1.toString(), map);
205
- compilation.updateAsset(
206
- file,
207
- newSource,
208
- // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
209
- void 0
210
- );
147
+ let htmlName;
148
+ for (const [chunks2, name] of chunksToHtmlName.entries()) {
149
+ if (Array.isArray(chunkNames) && Array.isArray(chunks2) && chunkNames.every((value, index) => value === chunks2[index])) {
150
+ htmlName = name;
151
+ break;
152
+ }
153
+ }
154
+ const oldHtml = compilation.assets[htmlName];
155
+ const { enableInlineRouteManifests, disableFilenameHash, staticJsDir, scriptLoading, nonce } = this;
156
+ const nonceAttr = nonce ? `nonce="${nonce}"` : "";
157
+ if (enableInlineRouteManifests) {
158
+ compilation.updateAsset(
159
+ htmlName,
160
+ new RawSource(oldHtml.source().toString().replace(placeholder, `<script ${nonceAttr}>${injectedContent}</script>`)),
161
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
162
+ void 0
163
+ );
164
+ } else {
165
+ const scriptPath = `${staticJsDir}/${ROUTE_MANIFEST_HOLDER}-${entryName}${disableFilenameHash ? ".js" : `.${generateContentHash(injectedContent)}.js`}`;
166
+ const scriptUrl = `${publicPath}${scriptPath}`;
167
+ const scriptLoadingAttr = (
168
+ // eslint-disable-next-line no-nested-ternary
169
+ scriptLoading === "defer" ? scriptLoading : scriptLoading === "module" ? `type="module"` : ""
170
+ );
171
+ const script = `<script ${scriptLoadingAttr} ${nonceAttr} src="${scriptUrl}"></script>`;
172
+ compilation.updateAsset(
173
+ htmlName,
174
+ new RawSource(oldHtml.source().toString().replace(placeholder, script)),
175
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
176
+ void 0
177
+ );
178
+ compilation.emitAsset(scriptPath, new RawSource(injectedContent));
179
+ }
211
180
  }
212
181
  if (prevManifestAsset) {
213
182
  compilation.updateAsset(
@@ -222,4 +191,18 @@ export class RouterPlugin {
222
191
  });
223
192
  });
224
193
  }
194
+ constructor({ staticJsDir = "static/js", HtmlBundlerPlugin, enableInlineRouteManifests, disableFilenameHash = false, scriptLoading = "defer", nonce }) {
195
+ _define_property(this, "HtmlBundlerPlugin", void 0);
196
+ _define_property(this, "enableInlineRouteManifests", void 0);
197
+ _define_property(this, "staticJsDir", void 0);
198
+ _define_property(this, "disableFilenameHash", void 0);
199
+ _define_property(this, "scriptLoading", void 0);
200
+ _define_property(this, "nonce", void 0);
201
+ this.HtmlBundlerPlugin = HtmlBundlerPlugin;
202
+ this.enableInlineRouteManifests = enableInlineRouteManifests;
203
+ this.staticJsDir = staticJsDir;
204
+ this.disableFilenameHash = disableFilenameHash;
205
+ this.scriptLoading = scriptLoading;
206
+ this.nonce = nonce;
207
+ }
225
208
  }
@@ -11,7 +11,8 @@ export function createDefaultConfig(appContext, bundler) {
11
11
  };
12
12
  const output = {
13
13
  ...defaultBuilderConfig.output,
14
- disableNodePolyfill: true
14
+ disableNodePolyfill: true,
15
+ enableInlineRouteManifests: true
15
16
  };
16
17
  const source = {
17
18
  ...defaultBuilderConfig.source,
@@ -87,6 +87,9 @@ const output = {
87
87
  },
88
88
  disableNodePolyfill: {
89
89
  type: "boolean"
90
+ },
91
+ enableInlineRouteManifests: {
92
+ type: "boolean"
90
93
  }
91
94
  };
92
95
  const dev = {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,7 @@
1
1
  import type { webpack } from '@modern-js/builder-webpack-provider';
2
2
  import type { Rspack } from '@modern-js/builder-rspack-provider';
3
+ import type HtmlWebpackPlugin from '@modern-js/builder-webpack-provider/html-webpack-plugin';
4
+ import type { ScriptLoading } from '@modern-js/builder-shared';
3
5
  export interface RouteAssets {
4
6
  [routeId: string]: {
5
7
  chunkIds?: (string | number)[];
@@ -8,7 +10,29 @@ export interface RouteAssets {
8
10
  };
9
11
  }
10
12
  type Compiler = webpack.Compiler | Rspack.Compiler;
13
+ type Options = {
14
+ HtmlBundlerPlugin: typeof HtmlWebpackPlugin;
15
+ staticJsDir: string;
16
+ enableInlineRouteManifests: boolean;
17
+ disableFilenameHash?: boolean;
18
+ scriptLoading?: ScriptLoading;
19
+ nonce?: string;
20
+ };
11
21
  export declare class RouterPlugin {
22
+ private HtmlBundlerPlugin;
23
+ private enableInlineRouteManifests;
24
+ private staticJsDir;
25
+ private disableFilenameHash?;
26
+ private scriptLoading?;
27
+ private nonce?;
28
+ constructor({
29
+ staticJsDir,
30
+ HtmlBundlerPlugin,
31
+ enableInlineRouteManifests,
32
+ disableFilenameHash,
33
+ scriptLoading,
34
+ nonce
35
+ }: Options);
12
36
  private isTargetNodeOrWebWorker;
13
37
  private getEntryChunks;
14
38
  private getEntryChunkFiles;
@@ -2,10 +2,11 @@ import type { ServerUserConfig, BffUserConfig } from '@modern-js/server-core';
2
2
  import type { BuilderPlugin } from '@modern-js/builder-webpack-provider';
3
3
  import type { OutputUserConfig, RsOutputUserConfig, SharedOutputConfig } from './output';
4
4
  import type { RsSourceUserConfig, SharedSourceConfig, SourceUserConfig } from './source';
5
+ import type { TestingUserConfig } from './testing';
5
6
  import type { DevUserConfig } from './dev';
6
7
  import type { RsToolsUserConfig, SharedToolsConfig, ToolsUserConfig } from './tools';
7
8
  import type { HtmlUserConfig, RsHtmlUserConfig, SharedHtmlConfig } from './html';
8
- import type { RsSecurityConfig, SecurityUserConfig } from './security';
9
+ import type { RsSecurityConfig, SecurityUserConfig, SharedSecurityConfig } from './security';
9
10
  import type { DeployUserConfig } from './deploy';
10
11
  import type { ExperimentsUserConfig } from './experiments';
11
12
  import type { PerformanceUserConfig, RsPerformanceConfig, SharedPerformanceConfig } from './performance';
@@ -32,6 +33,8 @@ export type SharedUserConfig = {
32
33
  runtimeByEntries?: RuntimeByEntriesUserConfig;
33
34
  html?: SharedHtmlConfig;
34
35
  tools?: SharedToolsConfig;
36
+ security?: SharedSecurityConfig;
37
+ testing?: TestingUserConfig;
35
38
  builderPlugins?: BuilderPlugin[];
36
39
  performance?: SharedPerformanceConfig;
37
40
  };
@@ -8,6 +8,7 @@ export interface SharedOutputConfig extends BuilderSharedOutputConfig {
8
8
  ssg?: SSGConfig;
9
9
  splitRouteChunks?: boolean;
10
10
  disableNodePolyfill?: boolean;
11
+ enableInlineRouteManifests?: boolean;
11
12
  tempDir?: string;
12
13
  }
13
14
  export interface OutputUserConfig extends BuilderOutputConfig, SharedOutputConfig {}
@@ -1,5 +1,7 @@
1
+ import type { SharedSecurityConfig } from '@modern-js/builder-shared';
1
2
  import type { WebpackBuilderConfig, RspackBuilderConfig } from '../../builder/shared';
2
3
  import { UnwrapBuilderConfig } from '../utils';
3
4
  export type BuilderSecurityConfig = UnwrapBuilderConfig<WebpackBuilderConfig, 'security'>;
4
5
  export type RsSecurityConfig = UnwrapBuilderConfig<RspackBuilderConfig, 'security'>;
5
- export type SecurityUserConfig = BuilderSecurityConfig;
6
+ export type SecurityUserConfig = BuilderSecurityConfig;
7
+ export type { SharedSecurityConfig };
@@ -0,0 +1,8 @@
1
+ import type { TestConfig } from '@modern-js/types';
2
+ export interface TestingUserConfig {
3
+ /**
4
+ * Decide which transformer will be used to compile file
5
+ * Default: babel-jest
6
+ */
7
+ transformer?: TestConfig['transformer'];
8
+ }
@@ -1,4 +1,4 @@
1
- import type { JestConfig } from '@modern-js/core';
1
+ import type { JestConfig } from '@modern-js/types';
2
2
  import type { PluginSwcOptions } from '@modern-js/builder-plugin-swc';
3
3
  import type { PluginEsbuildOptions } from '@modern-js/builder-plugin-esbuild';
4
4
  import type { SharedToolsConfig as BuilderSharedToolsConfig } from '@modern-js/builder-shared';
@@ -4,6 +4,7 @@ import type { OutputLegacyUserConfig } from './output';
4
4
  import type { SourceLegacyUserConfig } from './source';
5
5
  import type { DeployLegacyUserConfig } from './deploy';
6
6
  import type { ToolsLegacyUserConfig } from './tools';
7
+ import type { TestingLegacyUserConfig } from './testing';
7
8
  export type { DevUserLegacyConfig } from './dev';
8
9
  export type { OutputLegacyUserConfig } from './output';
9
10
  export type { DeployLegacyUserConfig } from './deploy';
@@ -25,6 +26,7 @@ export type AppToolsLegacyUserConfig = {
25
26
  runtime?: RuntimeLegacyConfig;
26
27
  runtimeByEntries?: RuntimeByEntriesLegacyConfig;
27
28
  bff?: LegacyBffUserConfig;
29
+ testing?: TestingLegacyUserConfig;
28
30
  legacy?: boolean;
29
31
  };
30
32
  export interface AppToolsLegacyNormalizedConfig extends Required<AppToolsLegacyUserConfig> {
@@ -0,0 +1,8 @@
1
+ import type { TestConfig } from '@modern-js/types';
2
+ export interface TestingLegacyUserConfig {
3
+ /**
4
+ * Decide which transformer will be used to compile file
5
+ * Default: babel-jest
6
+ */
7
+ transformer?: TestConfig['transformer'];
8
+ }
@@ -1,6 +1,5 @@
1
- import type { DevServerOptions } from '@modern-js/types';
1
+ import type { JestConfig, DevServerOptions } from '@modern-js/types';
2
2
  import type { BuilderConfig } from '@modern-js/builder-webpack-provider';
3
- import type { JestConfig } from '@modern-js/core';
4
3
  type BuilderToolsConfig = Required<BuilderConfig>['tools'];
5
4
  export type ToolsLegacyUserConfig = BuilderToolsConfig & {
6
5
  esbuild?: Record<string, unknown>;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.30.1-alpha.0",
18
+ "version": "2.31.0",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -71,26 +71,26 @@
71
71
  "@babel/types": "^7.21.5",
72
72
  "es-module-lexer": "^1.1.0",
73
73
  "esbuild": "0.17.19",
74
- "rspack-plugin-virtual-module": "0.1.0",
74
+ "rspack-plugin-virtual-module": "0.1.7",
75
75
  "@swc/helpers": "0.5.1",
76
- "@modern-js/builder": "2.30.0",
77
- "@modern-js/builder-shared": "2.30.0",
78
- "@modern-js/builder-webpack-provider": "2.30.0",
79
- "@modern-js/core": "2.30.0",
80
- "@modern-js/node-bundle-require": "2.30.0",
81
- "@modern-js/plugin-data-loader": "2.30.0",
82
- "@modern-js/plugin": "2.30.0",
83
- "@modern-js/builder-plugin-esbuild": "2.30.0",
84
- "@modern-js/new-action": "2.30.0",
85
- "@modern-js/plugin-i18n": "2.30.0",
86
- "@modern-js/builder-plugin-node-polyfill": "2.30.0",
87
- "@modern-js/types": "2.30.0",
88
- "@modern-js/prod-server": "2.30.0",
89
- "@modern-js/upgrade": "2.30.0",
90
- "@modern-js/server-core": "2.30.0",
91
- "@modern-js/utils": "2.30.0",
92
- "@modern-js/plugin-lint": "2.30.0",
93
- "@modern-js/server": "2.30.0"
76
+ "@modern-js/builder": "2.31.0",
77
+ "@modern-js/builder-plugin-esbuild": "2.31.0",
78
+ "@modern-js/builder-plugin-node-polyfill": "2.31.0",
79
+ "@modern-js/builder-webpack-provider": "2.31.0",
80
+ "@modern-js/core": "2.31.0",
81
+ "@modern-js/builder-shared": "2.31.0",
82
+ "@modern-js/new-action": "2.31.0",
83
+ "@modern-js/node-bundle-require": "2.31.0",
84
+ "@modern-js/plugin": "2.31.0",
85
+ "@modern-js/plugin-data-loader": "2.31.0",
86
+ "@modern-js/plugin-i18n": "2.31.0",
87
+ "@modern-js/plugin-lint": "2.31.0",
88
+ "@modern-js/prod-server": "2.31.0",
89
+ "@modern-js/server": "2.31.0",
90
+ "@modern-js/types": "2.31.0",
91
+ "@modern-js/upgrade": "2.31.0",
92
+ "@modern-js/server-core": "2.31.0",
93
+ "@modern-js/utils": "2.31.0"
94
94
  },
95
95
  "devDependencies": {
96
96
  "@types/babel__traverse": "^7.14.2",
@@ -99,13 +99,13 @@
99
99
  "jest": "^29",
100
100
  "typescript": "^5",
101
101
  "webpack": "^5.88.1",
102
- "@scripts/jest-config": "2.30.0",
103
- "@scripts/build": "2.30.0",
104
- "@modern-js/builder-rspack-provider": "2.30.0",
105
- "@modern-js/builder-plugin-swc": "2.30.0"
102
+ "@modern-js/builder-plugin-swc": "2.31.0",
103
+ "@modern-js/builder-rspack-provider": "2.31.0",
104
+ "@scripts/jest-config": "2.31.0",
105
+ "@scripts/build": "2.31.0"
106
106
  },
107
107
  "peerDependencies": {
108
- "@modern-js/builder-rspack-provider": "^2.30.0"
108
+ "@modern-js/builder-rspack-provider": "^2.31.0"
109
109
  },
110
110
  "peerDependenciesMeta": {
111
111
  "@modern-js/builder-rspack-provider": {
@@ -1,54 +0,0 @@
1
- const JS_EXTENSIONS = [".js", ".ts", ".jsx", ".tsx"];
2
- const INDEX_FILE_NAME = "index";
3
- const APP_FILE_NAME = "App";
4
- const PAGES_DIR_NAME = "pages";
5
- const NESTED_ROUTES_DIR = "routes";
6
- const FILE_SYSTEM_ROUTES_FILE_NAME = "routes.js";
7
- const LOADER_EXPORT_NAME = "loader";
8
- const TEMP_LOADERS_DIR = "__loaders__";
9
- const ENTRY_POINT_FILE_NAME = "index.js";
10
- const ENTRY_BOOTSTRAP_FILE_NAME = "bootstrap.js";
11
- const FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP = /^\[(\S+)\]([*+?]?)$/;
12
- const FILE_SYSTEM_ROUTES_LAYOUT = "_layout";
13
- const FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT = "_app";
14
- const FILE_SYSTEM_ROUTES_INDEX = "index";
15
- const FILE_SYSTEM_ROUTES_IGNORED_REGEX = /\.(d|test|spec|e2e)\.(js|jsx|ts|tsx)$/;
16
- const HTML_PARTIALS_FOLDER = "html";
17
- const HTML_PARTIALS_EXTENSIONS = [".htm", ".html", ".ejs"];
18
- const FILE_SYSTEM_ROUTES_COMPONENTS_DIR = "internal_components";
19
- const NESTED_ROUTE = {
20
- LAYOUT_FILE: "layout",
21
- LAYOUT_LOADER_FILE: "layout.loader",
22
- PAGE_FILE: "page",
23
- PAGE_LOADER_FILE: "page.loader",
24
- LOADING_FILE: "loading",
25
- ERROR_FILE: "error",
26
- LOADER_FILE: "loader"
27
- };
28
- const APP_CONFIG_NAME = "config";
29
- const APP_INIT_EXPORTED = "init";
30
- const APP_INIT_IMPORTED = "appInit";
31
- export {
32
- APP_CONFIG_NAME,
33
- APP_FILE_NAME,
34
- APP_INIT_EXPORTED,
35
- APP_INIT_IMPORTED,
36
- ENTRY_BOOTSTRAP_FILE_NAME,
37
- ENTRY_POINT_FILE_NAME,
38
- FILE_SYSTEM_ROUTES_COMPONENTS_DIR,
39
- FILE_SYSTEM_ROUTES_DYNAMIC_REGEXP,
40
- FILE_SYSTEM_ROUTES_FILE_NAME,
41
- FILE_SYSTEM_ROUTES_GLOBAL_LAYOUT,
42
- FILE_SYSTEM_ROUTES_IGNORED_REGEX,
43
- FILE_SYSTEM_ROUTES_INDEX,
44
- FILE_SYSTEM_ROUTES_LAYOUT,
45
- HTML_PARTIALS_EXTENSIONS,
46
- HTML_PARTIALS_FOLDER,
47
- INDEX_FILE_NAME,
48
- JS_EXTENSIONS,
49
- LOADER_EXPORT_NAME,
50
- NESTED_ROUTE,
51
- NESTED_ROUTES_DIR,
52
- PAGES_DIR_NAME,
53
- TEMP_LOADERS_DIR
54
- };