@modern-js/app-tools 2.30.1-alpha.0 → 2.31.1

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 +76 -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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,81 @@
1
1
  # @modern-js/app-tools
2
2
 
3
+ ## 2.31.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [fe70fdf]
8
+ - @modern-js/builder-rspack-provider@2.31.1
9
+ - @modern-js/builder@2.31.1
10
+ - @modern-js/builder-plugin-node-polyfill@2.31.1
11
+ - @modern-js/builder-shared@2.31.1
12
+ - @modern-js/builder-webpack-provider@2.31.1
13
+ - @modern-js/builder-plugin-esbuild@2.31.1
14
+ - @modern-js/core@2.31.1
15
+ - @modern-js/plugin-data-loader@2.31.1
16
+ - @modern-js/plugin-i18n@2.31.1
17
+ - @modern-js/plugin-lint@2.31.1
18
+ - @modern-js/new-action@2.31.1
19
+ - @modern-js/server-core@2.31.1
20
+ - @modern-js/prod-server@2.31.1
21
+ - @modern-js/server@2.31.1
22
+ - @modern-js/node-bundle-require@2.31.1
23
+ - @modern-js/plugin@2.31.1
24
+ - @modern-js/types@2.31.1
25
+ - @modern-js/upgrade@2.31.1
26
+ - @modern-js/utils@2.31.1
27
+
28
+ ## 2.31.0
29
+
30
+ ### Patch Changes
31
+
32
+ - 71bcc55: fix: inline the route manifests into the html
33
+ fix: 内联路由信息到 html 中
34
+ - 2361ce8: feat: support partials html in Document
35
+ feat: 支持 partials html 在 Document 中也生效
36
+ - 30be1ad: fix(app-tools): inject nonce attr to route manifest script
37
+
38
+ fix(app-tools): 向 route manifest 脚本注入 nonce 属性
39
+
40
+ - 4c03d9a: fix(core): remove testing config type and schema
41
+
42
+ fix(core): 移除 testing 配置类型和 schema
43
+
44
+ - 1882366: chore(deps): bump build dependencies
45
+
46
+ chore(deps): 升级构建相关依赖
47
+
48
+ - Updated dependencies [0f09d7c]
49
+ - Updated dependencies [bfdf7b4]
50
+ - Updated dependencies [56eaa0b]
51
+ - Updated dependencies [2361ce8]
52
+ - Updated dependencies [8ab3e2a]
53
+ - Updated dependencies [4c03d9a]
54
+ - Updated dependencies [1eece3e]
55
+ - Updated dependencies [fa8e948]
56
+ - Updated dependencies [83bf560]
57
+ - Updated dependencies [d9cc4d8]
58
+ - Updated dependencies [1882366]
59
+ - @modern-js/builder-rspack-provider@2.31.0
60
+ - @modern-js/builder-webpack-provider@2.31.0
61
+ - @modern-js/builder-shared@2.31.0
62
+ - @modern-js/prod-server@2.31.0
63
+ - @modern-js/core@2.31.0
64
+ - @modern-js/builder@2.31.0
65
+ - @modern-js/utils@2.31.0
66
+ - @modern-js/builder-plugin-node-polyfill@2.31.0
67
+ - @modern-js/builder-plugin-esbuild@2.31.0
68
+ - @modern-js/server@2.31.0
69
+ - @modern-js/plugin-data-loader@2.31.0
70
+ - @modern-js/plugin-lint@2.31.0
71
+ - @modern-js/plugin-i18n@2.31.0
72
+ - @modern-js/new-action@2.31.0
73
+ - @modern-js/server-core@2.31.0
74
+ - @modern-js/node-bundle-require@2.31.0
75
+ - @modern-js/plugin@2.31.0
76
+ - @modern-js/upgrade@2.31.0
77
+ - @modern-js/types@2.31.0
78
+
3
79
  ## 2.30.0
4
80
 
5
81
  ### Patch Changes
@@ -38,6 +38,7 @@ const getHtmlTemplate = async (entrypoints, api, { appContext, config }) => {
38
38
  const { source: { configDir } } = config;
39
39
  const htmlDir = _path.default.resolve(appDirectory, configDir || "", _constants.HTML_PARTIALS_FOLDER);
40
40
  const htmlTemplates = {};
41
+ const partialsByEntrypoint = {};
41
42
  for (const entrypoint of entrypoints) {
42
43
  const { entryName, isMainEntry } = entrypoint;
43
44
  const name = entrypoints.length === 1 && isMainEntry ? "" : entryName;
@@ -67,11 +68,16 @@ const getHtmlTemplate = async (entrypoints, api, { appContext, config }) => {
67
68
  const templatePath = _path.default.resolve(internalDirectory, entryName, "index.html");
68
69
  _utils.fs.outputFileSync(templatePath, _templates.html(partials), "utf8");
69
70
  htmlTemplates[entryName] = templatePath;
71
+ partialsByEntrypoint[entryName] = partials;
70
72
  const bottomTemplate = findPartials(htmlDir, name, PartialPosition.BOTTOM);
71
73
  if (bottomTemplate) {
72
74
  htmlTemplates[`__${entryName}-bottom__`] = bottomTemplate.content;
73
75
  }
74
76
  }
75
77
  }
78
+ api.setAppContext({
79
+ ...api.useAppContext(),
80
+ partialsByEntrypoint
81
+ });
76
82
  return htmlTemplates;
77
83
  };
@@ -66,8 +66,7 @@ const optimizeRoute = (routeTree) => {
66
66
  ];
67
67
  }
68
68
  const { children } = routeTree;
69
- const hasPage = children.some((child) => child.index);
70
- if (!routeTree._component && !routeTree.error && !routeTree.loading && !routeTree.config && !hasPage) {
69
+ if (!routeTree._component && !routeTree.error && !routeTree.loading && !routeTree.config) {
71
70
  const newRoutes = children.map((child) => {
72
71
  const routePath = `${routeTree.path ? routeTree.path : ""}${child.path ? `/${child.path}` : ""}`;
73
72
  const newRoute = {
@@ -31,7 +31,7 @@ const builderPluginAdapterSSR = (options) => ({
31
31
  api.modifyBundlerChain(async (chain, { target, CHAIN_ID, isProd, HtmlPlugin: HtmlBundlerPlugin, isServer }) => {
32
32
  const builderConfig = api.getNormalizedConfig();
33
33
  const { normalizedConfig: normalizedConfig2 } = options;
34
- applyRouterPlugin(chain, options);
34
+ applyRouterPlugin(chain, options, HtmlBundlerPlugin);
35
35
  if ((0, _utils.isSSR)(normalizedConfig2)) {
36
36
  await applySSRLoaderEntry(chain, options, isServer);
37
37
  applySSRDataLoader(chain, options);
@@ -80,7 +80,7 @@ function applyAsyncChunkHtmlPlugin({ chain, modernConfig, CHAIN_ID, HtmlBundlerP
80
80
  ]);
81
81
  }
82
82
  }
83
- function applyRouterPlugin(chain, options) {
83
+ function applyRouterPlugin(chain, options, HtmlBundlerPlugin) {
84
84
  var _normalizedConfig_runtime, _normalizedConfig, _routerConfig, _normalizedConfig_deploy_worker;
85
85
  const { appContext, normalizedConfig } = options;
86
86
  const { entrypoints } = appContext;
@@ -89,7 +89,17 @@ function applyRouterPlugin(chain, options) {
89
89
  const routerManifest = Boolean((_routerConfig = routerConfig) === null || _routerConfig === void 0 ? void 0 : _routerConfig.manifest);
90
90
  const workerSSR = Boolean((_normalizedConfig_deploy_worker = normalizedConfig.deploy.worker) === null || _normalizedConfig_deploy_worker === void 0 ? void 0 : _normalizedConfig_deploy_worker.ssr);
91
91
  if (existNestedRoutes || routerManifest || workerSSR) {
92
- chain.plugin("route-plugin").use(_bundlerPlugins.RouterPlugin);
92
+ var _normalizedConfig_output_distPath, _normalizedConfig_output, _normalizedConfig_output1, _normalizedConfig_html, _normalizedConfig_security;
93
+ chain.plugin("route-plugin").use(_bundlerPlugins.RouterPlugin, [
94
+ {
95
+ HtmlBundlerPlugin,
96
+ enableInlineRouteManifests: normalizedConfig.output.enableInlineRouteManifests,
97
+ staticJsDir: (_normalizedConfig_output = normalizedConfig.output) === null || _normalizedConfig_output === void 0 ? void 0 : (_normalizedConfig_output_distPath = _normalizedConfig_output.distPath) === null || _normalizedConfig_output_distPath === void 0 ? void 0 : _normalizedConfig_output_distPath.js,
98
+ disableFilenameHash: (_normalizedConfig_output1 = normalizedConfig.output) === null || _normalizedConfig_output1 === void 0 ? void 0 : _normalizedConfig_output1.disableFilenameHash,
99
+ scriptLoading: (_normalizedConfig_html = normalizedConfig.html) === null || _normalizedConfig_html === void 0 ? void 0 : _normalizedConfig_html.scriptLoading,
100
+ nonce: (_normalizedConfig_security = normalizedConfig.security) === null || _normalizedConfig_security === void 0 ? void 0 : _normalizedConfig_security.nonce
101
+ }
102
+ ]);
93
103
  }
94
104
  }
95
105
  function applyFilterEntriesBySSRConfig({ isProd, chain, appNormalizedConfig }) {
@@ -8,13 +8,15 @@ Object.defineProperty(exports, "RouterPlugin", {
8
8
  return RouterPlugin;
9
9
  }
10
10
  });
11
- const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
12
- const _path = /* @__PURE__ */ _interop_require_default._(require("path"));
11
+ const _define_property = require("@swc/helpers/_/_define_property");
12
+ const _crypto = require("crypto");
13
13
  const _lodash = require("@modern-js/utils/lodash");
14
14
  const _utils = require("@modern-js/utils");
15
15
  const _constants = require("@modern-js/utils/universal/constants");
16
- const _esbuild = require("esbuild");
17
16
  const PLUGIN_NAME = "ModernjsRoutePlugin";
17
+ const generateContentHash = (content) => {
18
+ return (0, _crypto.createHash)("md5").update(content).digest("hex").slice(0, 8);
19
+ };
18
20
  class RouterPlugin {
19
21
  isTargetNodeOrWebWorker(target) {
20
22
  if (target === "node" || Array.isArray(target) && target.includes("node")) {
@@ -48,76 +50,23 @@ class RouterPlugin {
48
50
  }
49
51
  const { webpack } = compiler;
50
52
  const { Compilation, sources } = webpack;
51
- const { RawSource, SourceMapSource } = sources;
53
+ const { RawSource } = sources;
52
54
  const normalizePath = (path) => {
53
55
  if (!path.endsWith("/")) {
54
56
  return `${path}/`;
55
57
  }
56
58
  return path;
57
59
  };
58
- const chunkToSource = /* @__PURE__ */ new Map();
59
- const chunkToMap = /* @__PURE__ */ new Map();
60
- const { minimize } = compiler.options.optimization;
60
+ const chunksToHtmlName = /* @__PURE__ */ new Map();
61
+ const ROUTE_MANIFEST_HOLDER = `route-manifest`;
62
+ const placeholder = `<!--<?- ${ROUTE_MANIFEST_HOLDER} ?>-->`;
61
63
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
62
- compilation.hooks.processAssets.tapPromise({
63
- name: PLUGIN_NAME,
64
- stage: Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING
65
- }, async () => {
66
- const stats = compilation.getStats().toJson({
67
- all: false,
68
- chunkGroups: true,
69
- chunks: true,
70
- ids: true
71
- });
72
- const { chunks = [], namedChunkGroups } = stats;
73
- if (!namedChunkGroups) {
74
- return;
75
- }
76
- const entryChunks = this.getEntryChunks(compilation, chunks);
77
- const entryChunkFiles = entryChunks.map((chunk) => [
78
- ...chunk.files || []
79
- ].find((fname) => fname.includes(".js")));
80
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
81
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
82
- const file = entryChunkFiles[i];
83
- const chunkId = entryChunkFileIds[i];
84
- const asset = compilation.assets[file];
85
- if (!asset) {
86
- continue;
87
- }
88
- const { map } = asset.sourceAndMap();
89
- chunkToMap.set(chunkId, map);
90
- }
91
- });
92
- compilation.hooks.processAssets.tapPromise({
93
- name: PLUGIN_NAME,
94
- stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER
95
- }, async () => {
96
- const stats = compilation.getStats().toJson({
97
- all: false,
98
- chunkGroups: true,
99
- chunks: true,
100
- ids: true
101
- });
102
- const { chunks = [], namedChunkGroups } = stats;
103
- if (!namedChunkGroups) {
104
- return;
105
- }
106
- const entryChunks = this.getEntryChunks(compilation, chunks);
107
- const entryChunkFiles = entryChunks.map((chunk) => [
108
- ...chunk.files || []
109
- ].find((fname) => fname.includes(".js")));
110
- const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
111
- for (let i = 0; i <= entryChunkFiles.length - 1; i++) {
112
- const file = entryChunkFiles[i];
113
- const chunkId = entryChunkFileIds[i];
114
- const asset = compilation.assets[file];
115
- if (!asset) {
116
- continue;
117
- }
118
- const { source } = asset.sourceAndMap();
119
- chunkToSource.set(chunkId, source);
120
- }
64
+ this.HtmlBundlerPlugin.getHooks(compilation).beforeEmit.tapAsync("RouterManifestPlugin", (data, callback) => {
65
+ const { outputName } = data;
66
+ const { chunks } = data.plugin.options;
67
+ chunksToHtmlName.set(chunks, outputName);
68
+ data.html = data.html.replace("</script>", `</script>${placeholder}`);
69
+ callback(null, data);
121
70
  });
122
71
  compilation.hooks.processAssets.tapPromise({
123
72
  name: PLUGIN_NAME,
@@ -164,11 +113,12 @@ class RouterPlugin {
164
113
  const manifest = {
165
114
  routeAssets
166
115
  };
116
+ const entryNames = Array.from(compilation.entrypoints.keys());
167
117
  const entryChunks = this.getEntryChunks(compilation, chunks);
168
118
  const entryChunkFiles = this.getEntryChunkFiles(entryChunks);
169
119
  const entryChunkFileIds = entryChunks.map((chunk) => chunk.id);
170
120
  for (let i = 0; i < entryChunkFiles.length; i++) {
171
- var _source, _source1;
121
+ const entryName = entryNames[i];
172
122
  const file = entryChunkFiles[i];
173
123
  const chunkNames = entryChunks[i].names;
174
124
  const chunkId = entryChunkFileIds[i];
@@ -204,21 +154,39 @@ class RouterPlugin {
204
154
  })};
205
155
  })();
206
156
  `;
207
- const source = chunkToSource.get(chunkId);
208
- const map = chunkToMap.get(chunkId);
209
- const newContent = `${injectedContent}${(_source = source) === null || _source === void 0 ? void 0 : _source.toString()}`;
210
- const result = await (0, _esbuild.transform)(newContent, {
211
- loader: _path.default.extname(file).slice(1),
212
- sourcemap: true,
213
- minify: minimize
214
- });
215
- const newSource = new SourceMapSource(result.code, file, result.map, (_source1 = source) === null || _source1 === void 0 ? void 0 : _source1.toString(), map);
216
- compilation.updateAsset(
217
- file,
218
- newSource,
219
- // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
220
- void 0
221
- );
157
+ let htmlName;
158
+ for (const [chunks2, name] of chunksToHtmlName.entries()) {
159
+ if (Array.isArray(chunkNames) && Array.isArray(chunks2) && chunkNames.every((value, index) => value === chunks2[index])) {
160
+ htmlName = name;
161
+ break;
162
+ }
163
+ }
164
+ const oldHtml = compilation.assets[htmlName];
165
+ const { enableInlineRouteManifests, disableFilenameHash, staticJsDir, scriptLoading, nonce } = this;
166
+ const nonceAttr = nonce ? `nonce="${nonce}"` : "";
167
+ if (enableInlineRouteManifests) {
168
+ compilation.updateAsset(
169
+ htmlName,
170
+ new RawSource(oldHtml.source().toString().replace(placeholder, `<script ${nonceAttr}>${injectedContent}</script>`)),
171
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
172
+ void 0
173
+ );
174
+ } else {
175
+ const scriptPath = `${staticJsDir}/${ROUTE_MANIFEST_HOLDER}-${entryName}${disableFilenameHash ? ".js" : `.${generateContentHash(injectedContent)}.js`}`;
176
+ const scriptUrl = `${publicPath}${scriptPath}`;
177
+ const scriptLoadingAttr = (
178
+ // eslint-disable-next-line no-nested-ternary
179
+ scriptLoading === "defer" ? scriptLoading : scriptLoading === "module" ? `type="module"` : ""
180
+ );
181
+ const script = `<script ${scriptLoadingAttr} ${nonceAttr} src="${scriptUrl}"></script>`;
182
+ compilation.updateAsset(
183
+ htmlName,
184
+ new RawSource(oldHtml.source().toString().replace(placeholder, script)),
185
+ // FIXME: The arguments third of updatgeAsset is a optional function in webpack.
186
+ void 0
187
+ );
188
+ compilation.emitAsset(scriptPath, new RawSource(injectedContent));
189
+ }
222
190
  }
223
191
  if (prevManifestAsset) {
224
192
  compilation.updateAsset(
@@ -233,4 +201,18 @@ class RouterPlugin {
233
201
  });
234
202
  });
235
203
  }
204
+ constructor({ staticJsDir = "static/js", HtmlBundlerPlugin, enableInlineRouteManifests, disableFilenameHash = false, scriptLoading = "defer", nonce }) {
205
+ _define_property._(this, "HtmlBundlerPlugin", void 0);
206
+ _define_property._(this, "enableInlineRouteManifests", void 0);
207
+ _define_property._(this, "staticJsDir", void 0);
208
+ _define_property._(this, "disableFilenameHash", void 0);
209
+ _define_property._(this, "scriptLoading", void 0);
210
+ _define_property._(this, "nonce", void 0);
211
+ this.HtmlBundlerPlugin = HtmlBundlerPlugin;
212
+ this.enableInlineRouteManifests = enableInlineRouteManifests;
213
+ this.staticJsDir = staticJsDir;
214
+ this.disableFilenameHash = disableFilenameHash;
215
+ this.scriptLoading = scriptLoading;
216
+ this.nonce = nonce;
217
+ }
236
218
  }
@@ -30,7 +30,8 @@ function createDefaultConfig(appContext, bundler) {
30
30
  };
31
31
  const output = {
32
32
  ...defaultBuilderConfig.output,
33
- disableNodePolyfill: true
33
+ disableNodePolyfill: true,
34
+ enableInlineRouteManifests: true
34
35
  };
35
36
  const source = {
36
37
  ...defaultBuilderConfig.source,
@@ -108,6 +108,9 @@ const output = {
108
108
  },
109
109
  disableNodePolyfill: {
110
110
  type: "boolean"
111
+ },
112
+ enableInlineRouteManifests: {
113
+ type: "boolean"
111
114
  }
112
115
  };
113
116
  const dev = {};
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -1,4 +1,6 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
+ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
2
4
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
5
  import { _ as _ts_values } from "@swc/helpers/_/_ts_values";
4
6
  import path from "path";
@@ -30,7 +32,7 @@ var findPartials = function(dir, entryName, position) {
30
32
  };
31
33
  export var getHtmlTemplate = function() {
32
34
  var _ref = _async_to_generator(function(entrypoints, api, param) {
33
- var appContext, config, appDirectory, internalDirectory, configDir, htmlDir, htmlTemplates, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err;
35
+ var appContext, config, appDirectory, internalDirectory, configDir, htmlDir, htmlTemplates, partialsByEntrypoint, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err;
34
36
  return _ts_generator(this, function(_state) {
35
37
  switch (_state.label) {
36
38
  case 0:
@@ -39,6 +41,7 @@ export var getHtmlTemplate = function() {
39
41
  configDir = config.source.configDir;
40
42
  htmlDir = path.resolve(appDirectory, configDir || "", HTML_PARTIALS_FOLDER);
41
43
  htmlTemplates = {};
44
+ partialsByEntrypoint = {};
42
45
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
43
46
  _state.label = 1;
44
47
  case 1:
@@ -95,6 +98,7 @@ export var getHtmlTemplate = function() {
95
98
  templatePath = path.resolve(internalDirectory, entryName, "index.html");
96
99
  fs.outputFileSync(templatePath, templates.html(partials), "utf8");
97
100
  htmlTemplates[entryName] = templatePath;
101
+ partialsByEntrypoint[entryName] = partials;
98
102
  bottomTemplate = findPartials(htmlDir, name, PartialPosition.BOTTOM);
99
103
  if (bottomTemplate) {
100
104
  htmlTemplates["__".concat(entryName, "-bottom__")] = bottomTemplate.content;
@@ -155,6 +159,9 @@ export var getHtmlTemplate = function() {
155
159
  7
156
160
  ];
157
161
  case 8:
162
+ api.setAppContext(_object_spread_props(_object_spread({}, api.useAppContext()), {
163
+ partialsByEntrypoint: partialsByEntrypoint
164
+ }));
158
165
  return [
159
166
  2,
160
167
  htmlTemplates
@@ -45,10 +45,7 @@ export var optimizeRoute = function(routeTree) {
45
45
  ];
46
46
  }
47
47
  var children = routeTree.children;
48
- var hasPage = children.some(function(child) {
49
- return child.index;
50
- });
51
- if (!routeTree._component && !routeTree.error && !routeTree.loading && !routeTree.config && !hasPage) {
48
+ if (!routeTree._component && !routeTree.error && !routeTree.loading && !routeTree.config) {
52
49
  var newRoutes = children.map(function(child) {
53
50
  var routePath = "".concat(routeTree.path ? routeTree.path : "").concat(child.path ? "/".concat(child.path) : "");
54
51
  var newRoute = _object_spread_props(_object_spread({}, child), {
@@ -29,7 +29,7 @@ export var builderPluginAdapterSSR = function(options) {
29
29
  target = param.target, CHAIN_ID = param.CHAIN_ID, isProd = param.isProd, HtmlBundlerPlugin = param.HtmlPlugin, isServer = param.isServer;
30
30
  builderConfig = api.getNormalizedConfig();
31
31
  normalizedConfig2 = options.normalizedConfig;
32
- applyRouterPlugin(chain, options);
32
+ applyRouterPlugin(chain, options, HtmlBundlerPlugin);
33
33
  if (!isSSR(normalizedConfig2))
34
34
  return [
35
35
  3,
@@ -118,7 +118,7 @@ function applyAsyncChunkHtmlPlugin(param) {
118
118
  ]);
119
119
  }
120
120
  }
121
- function applyRouterPlugin(chain, options) {
121
+ function applyRouterPlugin(chain, options, HtmlBundlerPlugin) {
122
122
  var _normalizedConfig_runtime, _normalizedConfig, _routerConfig, _normalizedConfig_deploy_worker;
123
123
  var appContext = options.appContext, normalizedConfig = options.normalizedConfig;
124
124
  var entrypoints = appContext.entrypoints;
@@ -129,7 +129,17 @@ function applyRouterPlugin(chain, options) {
129
129
  var routerManifest = Boolean((_routerConfig = routerConfig) === null || _routerConfig === void 0 ? void 0 : _routerConfig.manifest);
130
130
  var workerSSR = Boolean((_normalizedConfig_deploy_worker = normalizedConfig.deploy.worker) === null || _normalizedConfig_deploy_worker === void 0 ? void 0 : _normalizedConfig_deploy_worker.ssr);
131
131
  if (existNestedRoutes || routerManifest || workerSSR) {
132
- chain.plugin("route-plugin").use(RouterPlugin);
132
+ var _normalizedConfig_output_distPath, _normalizedConfig_output, _normalizedConfig_output1, _normalizedConfig_html, _normalizedConfig_security;
133
+ chain.plugin("route-plugin").use(RouterPlugin, [
134
+ {
135
+ HtmlBundlerPlugin: HtmlBundlerPlugin,
136
+ enableInlineRouteManifests: normalizedConfig.output.enableInlineRouteManifests,
137
+ staticJsDir: (_normalizedConfig_output = normalizedConfig.output) === null || _normalizedConfig_output === void 0 ? void 0 : (_normalizedConfig_output_distPath = _normalizedConfig_output.distPath) === null || _normalizedConfig_output_distPath === void 0 ? void 0 : _normalizedConfig_output_distPath.js,
138
+ disableFilenameHash: (_normalizedConfig_output1 = normalizedConfig.output) === null || _normalizedConfig_output1 === void 0 ? void 0 : _normalizedConfig_output1.disableFilenameHash,
139
+ scriptLoading: (_normalizedConfig_html = normalizedConfig.html) === null || _normalizedConfig_html === void 0 ? void 0 : _normalizedConfig_html.scriptLoading,
140
+ nonce: (_normalizedConfig_security = normalizedConfig.security) === null || _normalizedConfig_security === void 0 ? void 0 : _normalizedConfig_security.nonce
141
+ }
142
+ ]);
133
143
  }
134
144
  }
135
145
  function applyFilterEntriesBySSRConfig(param) {