@bleedingdev/modern-js-app-tools 3.2.0-ultramodern.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 (432) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/bin/modern.js +36 -0
  4. package/dist/cjs/baseline.js +83 -0
  5. package/dist/cjs/builder/builder-rspack/index.js +40 -0
  6. package/dist/cjs/builder/generator/adapterCopy.js +79 -0
  7. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +100 -0
  8. package/dist/cjs/builder/generator/createCopyPattern.js +67 -0
  9. package/dist/cjs/builder/generator/getBuilderEnvironments.js +90 -0
  10. package/dist/cjs/builder/generator/index.js +80 -0
  11. package/dist/cjs/builder/index.js +50 -0
  12. package/dist/cjs/builder/shared/builderPlugins/adapterBasic.js +133 -0
  13. package/dist/cjs/builder/shared/builderPlugins/adapterHtml.js +89 -0
  14. package/dist/cjs/builder/shared/builderPlugins/adapterPrecompress.js +112 -0
  15. package/dist/cjs/builder/shared/builderPlugins/adapterSSR.js +151 -0
  16. package/dist/cjs/builder/shared/builderPlugins/builderHooks.js +51 -0
  17. package/dist/cjs/builder/shared/builderPlugins/index.js +86 -0
  18. package/dist/cjs/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +71 -0
  19. package/dist/cjs/builder/shared/bundlerPlugins/HtmlBottomTemplate.js +56 -0
  20. package/dist/cjs/builder/shared/bundlerPlugins/RouterPlugin.js +191 -0
  21. package/dist/cjs/builder/shared/bundlerPlugins/index.js +72 -0
  22. package/dist/cjs/builder/shared/createCopyInfo.js +59 -0
  23. package/dist/cjs/builder/shared/index.js +72 -0
  24. package/dist/cjs/builder/shared/loaders/serverModuleLoader.js +39 -0
  25. package/dist/cjs/builder/shared/types.js +18 -0
  26. package/dist/cjs/commands/build.js +107 -0
  27. package/dist/cjs/commands/deploy.js +44 -0
  28. package/dist/cjs/commands/dev.js +121 -0
  29. package/dist/cjs/commands/index.js +99 -0
  30. package/dist/cjs/commands/info.js +110 -0
  31. package/dist/cjs/commands/inspect.js +49 -0
  32. package/dist/cjs/commands/runtime.js +159 -0
  33. package/dist/cjs/commands/serve.js +92 -0
  34. package/dist/cjs/compat/hooks.js +104 -0
  35. package/dist/cjs/compat/index.js +62 -0
  36. package/dist/cjs/compat/utils.js +135 -0
  37. package/dist/cjs/config/default.js +125 -0
  38. package/dist/cjs/config/index.js +65 -0
  39. package/dist/cjs/config/initialize/index.js +41 -0
  40. package/dist/cjs/config/initialize/inits.js +101 -0
  41. package/dist/cjs/constants.js +40 -0
  42. package/dist/cjs/defineConfig.js +36 -0
  43. package/dist/cjs/esm/register-esm.js +48 -0
  44. package/dist/cjs/esm/register-esm.mjs +10 -0
  45. package/dist/cjs/esm/ts-paths-loader.js +73 -0
  46. package/dist/cjs/esm/ts-paths-loader.mjs +35 -0
  47. package/dist/cjs/exports/server.js +18 -0
  48. package/dist/cjs/index.js +358 -0
  49. package/dist/cjs/locale/en.js +79 -0
  50. package/dist/cjs/locale/index.js +46 -0
  51. package/dist/cjs/locale/zh.js +79 -0
  52. package/dist/cjs/plugins/analyze/constants.js +48 -0
  53. package/dist/cjs/plugins/analyze/getBundleEntry.js +97 -0
  54. package/dist/cjs/plugins/analyze/getFileSystemEntry.js +117 -0
  55. package/dist/cjs/plugins/analyze/getHtmlTemplate.js +144 -0
  56. package/dist/cjs/plugins/analyze/getServerRoutes.js +177 -0
  57. package/dist/cjs/plugins/analyze/index.js +237 -0
  58. package/dist/cjs/plugins/analyze/isDefaultExportFunction.js +86 -0
  59. package/dist/cjs/plugins/analyze/templates.js +56 -0
  60. package/dist/cjs/plugins/analyze/utils.js +126 -0
  61. package/dist/cjs/plugins/deploy/index.js +77 -0
  62. package/dist/cjs/plugins/deploy/platforms/gh-pages.js +87 -0
  63. package/dist/cjs/plugins/deploy/platforms/netlify.js +140 -0
  64. package/dist/cjs/plugins/deploy/platforms/node.js +100 -0
  65. package/dist/cjs/plugins/deploy/platforms/platform.js +18 -0
  66. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.cjs +57 -0
  67. package/dist/cjs/plugins/deploy/platforms/templates/netlify-entry.mjs +59 -0
  68. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.cjs +44 -0
  69. package/dist/cjs/plugins/deploy/platforms/templates/node-entry.mjs +46 -0
  70. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.cjs +57 -0
  71. package/dist/cjs/plugins/deploy/platforms/templates/vercel-entry.mjs +58 -0
  72. package/dist/cjs/plugins/deploy/platforms/vercel.js +159 -0
  73. package/dist/cjs/plugins/deploy/types.js +18 -0
  74. package/dist/cjs/plugins/deploy/utils/generator.js +104 -0
  75. package/dist/cjs/plugins/deploy/utils/index.js +123 -0
  76. package/dist/cjs/plugins/initialize/index.js +93 -0
  77. package/dist/cjs/plugins/serverBuild.js +90 -0
  78. package/dist/cjs/plugins/serverRuntime.js +49 -0
  79. package/dist/cjs/presetUltramodern.js +41 -0
  80. package/dist/cjs/rsbuild.js +90 -0
  81. package/dist/cjs/run/index.js +98 -0
  82. package/dist/cjs/types/config/deploy.js +18 -0
  83. package/dist/cjs/types/config/dev.js +18 -0
  84. package/dist/cjs/types/config/experiments.js +18 -0
  85. package/dist/cjs/types/config/html.js +18 -0
  86. package/dist/cjs/types/config/index.js +58 -0
  87. package/dist/cjs/types/config/output.js +18 -0
  88. package/dist/cjs/types/config/performance.js +18 -0
  89. package/dist/cjs/types/config/resolve.js +18 -0
  90. package/dist/cjs/types/config/security.js +18 -0
  91. package/dist/cjs/types/config/source.js +18 -0
  92. package/dist/cjs/types/config/testing.js +18 -0
  93. package/dist/cjs/types/config/tools.js +18 -0
  94. package/dist/cjs/types/index.js +58 -0
  95. package/dist/cjs/types/plugin.js +18 -0
  96. package/dist/cjs/types/utils.js +18 -0
  97. package/dist/cjs/ultramodern/designSystem.js +119 -0
  98. package/dist/cjs/utils/config.js +45 -0
  99. package/dist/cjs/utils/createServer.js +52 -0
  100. package/dist/cjs/utils/env.js +46 -0
  101. package/dist/cjs/utils/generateWatchFiles.js +54 -0
  102. package/dist/cjs/utils/getConfigFile.js +49 -0
  103. package/dist/cjs/utils/getSelectedEntries.js +60 -0
  104. package/dist/cjs/utils/initAppContext.js +71 -0
  105. package/dist/cjs/utils/loadPlugins.js +85 -0
  106. package/dist/cjs/utils/printInstructions.js +43 -0
  107. package/dist/cjs/utils/register.js +128 -0
  108. package/dist/cjs/utils/restart.js +52 -0
  109. package/dist/cjs/utils/routes.js +65 -0
  110. package/dist/cjs/utils/types.js +18 -0
  111. package/dist/esm/baseline.mjs +46 -0
  112. package/dist/esm/builder/builder-rspack/index.mjs +6 -0
  113. package/dist/esm/builder/generator/adapterCopy.mjs +35 -0
  114. package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +66 -0
  115. package/dist/esm/builder/generator/createCopyPattern.mjs +30 -0
  116. package/dist/esm/builder/generator/getBuilderEnvironments.mjs +56 -0
  117. package/dist/esm/builder/generator/index.mjs +46 -0
  118. package/dist/esm/builder/index.mjs +7 -0
  119. package/dist/esm/builder/shared/builderPlugins/adapterBasic.mjs +89 -0
  120. package/dist/esm/builder/shared/builderPlugins/adapterHtml.mjs +55 -0
  121. package/dist/esm/builder/shared/builderPlugins/adapterPrecompress.mjs +68 -0
  122. package/dist/esm/builder/shared/builderPlugins/adapterSSR.mjs +117 -0
  123. package/dist/esm/builder/shared/builderPlugins/builderHooks.mjs +17 -0
  124. package/dist/esm/builder/shared/builderPlugins/index.mjs +5 -0
  125. package/dist/esm/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.mjs +37 -0
  126. package/dist/esm/builder/shared/bundlerPlugins/HtmlBottomTemplate.mjs +22 -0
  127. package/dist/esm/builder/shared/bundlerPlugins/RouterPlugin.mjs +157 -0
  128. package/dist/esm/builder/shared/bundlerPlugins/index.mjs +3 -0
  129. package/dist/esm/builder/shared/createCopyInfo.mjs +15 -0
  130. package/dist/esm/builder/shared/index.mjs +3 -0
  131. package/dist/esm/builder/shared/loaders/serverModuleLoader.mjs +5 -0
  132. package/dist/esm/builder/shared/types.mjs +0 -0
  133. package/dist/esm/commands/build.mjs +63 -0
  134. package/dist/esm/commands/deploy.mjs +10 -0
  135. package/dist/esm/commands/dev.mjs +77 -0
  136. package/dist/esm/commands/index.mjs +47 -0
  137. package/dist/esm/commands/info.mjs +76 -0
  138. package/dist/esm/commands/inspect.mjs +15 -0
  139. package/dist/esm/commands/runtime.mjs +116 -0
  140. package/dist/esm/commands/serve.mjs +48 -0
  141. package/dist/esm/compat/hooks.mjs +67 -0
  142. package/dist/esm/compat/index.mjs +28 -0
  143. package/dist/esm/compat/utils.mjs +95 -0
  144. package/dist/esm/config/default.mjs +91 -0
  145. package/dist/esm/config/index.mjs +2 -0
  146. package/dist/esm/config/initialize/index.mjs +7 -0
  147. package/dist/esm/config/initialize/inits.mjs +54 -0
  148. package/dist/esm/constants.mjs +3 -0
  149. package/dist/esm/defineConfig.mjs +2 -0
  150. package/dist/esm/esm/register-esm.mjs +11 -0
  151. package/dist/esm/esm/ts-paths-loader.mjs +36 -0
  152. package/dist/esm/exports/server.mjs +0 -0
  153. package/dist/esm/index.mjs +131 -0
  154. package/dist/esm/locale/en.mjs +45 -0
  155. package/dist/esm/locale/index.mjs +9 -0
  156. package/dist/esm/locale/zh.mjs +45 -0
  157. package/dist/esm/plugins/analyze/constants.mjs +8 -0
  158. package/dist/esm/plugins/analyze/getBundleEntry.mjs +53 -0
  159. package/dist/esm/plugins/analyze/getFileSystemEntry.mjs +66 -0
  160. package/dist/esm/plugins/analyze/getHtmlTemplate.mjs +97 -0
  161. package/dist/esm/plugins/analyze/getServerRoutes.mjs +130 -0
  162. package/dist/esm/plugins/analyze/index.mjs +203 -0
  163. package/dist/esm/plugins/analyze/isDefaultExportFunction.mjs +41 -0
  164. package/dist/esm/plugins/analyze/templates.mjs +22 -0
  165. package/dist/esm/plugins/analyze/utils.mjs +63 -0
  166. package/dist/esm/plugins/deploy/index.mjs +43 -0
  167. package/dist/esm/plugins/deploy/platforms/gh-pages.mjs +43 -0
  168. package/dist/esm/plugins/deploy/platforms/netlify.mjs +96 -0
  169. package/dist/esm/plugins/deploy/platforms/node.mjs +56 -0
  170. package/dist/esm/plugins/deploy/platforms/platform.mjs +0 -0
  171. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.cjs +57 -0
  172. package/dist/esm/plugins/deploy/platforms/templates/netlify-entry.mjs +59 -0
  173. package/dist/esm/plugins/deploy/platforms/templates/node-entry.cjs +44 -0
  174. package/dist/esm/plugins/deploy/platforms/templates/node-entry.mjs +46 -0
  175. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.cjs +57 -0
  176. package/dist/esm/plugins/deploy/platforms/templates/vercel-entry.mjs +58 -0
  177. package/dist/esm/plugins/deploy/platforms/vercel.mjs +115 -0
  178. package/dist/esm/plugins/deploy/types.mjs +0 -0
  179. package/dist/esm/plugins/deploy/utils/generator.mjs +48 -0
  180. package/dist/esm/plugins/deploy/utils/index.mjs +67 -0
  181. package/dist/esm/plugins/initialize/index.mjs +59 -0
  182. package/dist/esm/plugins/serverBuild.mjs +45 -0
  183. package/dist/esm/plugins/serverRuntime.mjs +15 -0
  184. package/dist/esm/presetUltramodern.mjs +4 -0
  185. package/dist/esm/rsbuild.mjs +47 -0
  186. package/dist/esm/rslib-runtime.mjs +18 -0
  187. package/dist/esm/run/index.mjs +61 -0
  188. package/dist/esm/types/config/deploy.mjs +0 -0
  189. package/dist/esm/types/config/dev.mjs +0 -0
  190. package/dist/esm/types/config/experiments.mjs +0 -0
  191. package/dist/esm/types/config/html.mjs +0 -0
  192. package/dist/esm/types/config/index.mjs +1 -0
  193. package/dist/esm/types/config/output.mjs +0 -0
  194. package/dist/esm/types/config/performance.mjs +0 -0
  195. package/dist/esm/types/config/resolve.mjs +0 -0
  196. package/dist/esm/types/config/security.mjs +0 -0
  197. package/dist/esm/types/config/source.mjs +0 -0
  198. package/dist/esm/types/config/testing.mjs +0 -0
  199. package/dist/esm/types/config/tools.mjs +0 -0
  200. package/dist/esm/types/index.mjs +1 -0
  201. package/dist/esm/types/plugin.mjs +0 -0
  202. package/dist/esm/types/utils.mjs +0 -0
  203. package/dist/esm/ultramodern/designSystem.mjs +73 -0
  204. package/dist/esm/utils/config.mjs +11 -0
  205. package/dist/esm/utils/createServer.mjs +12 -0
  206. package/dist/esm/utils/env.mjs +12 -0
  207. package/dist/esm/utils/generateWatchFiles.mjs +10 -0
  208. package/dist/esm/utils/getConfigFile.mjs +5 -0
  209. package/dist/esm/utils/getSelectedEntries.mjs +26 -0
  210. package/dist/esm/utils/initAppContext.mjs +27 -0
  211. package/dist/esm/utils/loadPlugins.mjs +45 -0
  212. package/dist/esm/utils/printInstructions.mjs +9 -0
  213. package/dist/esm/utils/register.mjs +81 -0
  214. package/dist/esm/utils/restart.mjs +18 -0
  215. package/dist/esm/utils/routes.mjs +15 -0
  216. package/dist/esm/utils/types.mjs +0 -0
  217. package/dist/esm-node/baseline.mjs +47 -0
  218. package/dist/esm-node/builder/builder-rspack/index.mjs +7 -0
  219. package/dist/esm-node/builder/generator/adapterCopy.mjs +36 -0
  220. package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +67 -0
  221. package/dist/esm-node/builder/generator/createCopyPattern.mjs +31 -0
  222. package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +57 -0
  223. package/dist/esm-node/builder/generator/index.mjs +47 -0
  224. package/dist/esm-node/builder/index.mjs +8 -0
  225. package/dist/esm-node/builder/shared/builderPlugins/adapterBasic.mjs +93 -0
  226. package/dist/esm-node/builder/shared/builderPlugins/adapterHtml.mjs +56 -0
  227. package/dist/esm-node/builder/shared/builderPlugins/adapterPrecompress.mjs +69 -0
  228. package/dist/esm-node/builder/shared/builderPlugins/adapterSSR.mjs +119 -0
  229. package/dist/esm-node/builder/shared/builderPlugins/builderHooks.mjs +18 -0
  230. package/dist/esm-node/builder/shared/builderPlugins/index.mjs +6 -0
  231. package/dist/esm-node/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.mjs +38 -0
  232. package/dist/esm-node/builder/shared/bundlerPlugins/HtmlBottomTemplate.mjs +23 -0
  233. package/dist/esm-node/builder/shared/bundlerPlugins/RouterPlugin.mjs +158 -0
  234. package/dist/esm-node/builder/shared/bundlerPlugins/index.mjs +4 -0
  235. package/dist/esm-node/builder/shared/createCopyInfo.mjs +16 -0
  236. package/dist/esm-node/builder/shared/index.mjs +4 -0
  237. package/dist/esm-node/builder/shared/loaders/serverModuleLoader.mjs +6 -0
  238. package/dist/esm-node/builder/shared/types.mjs +1 -0
  239. package/dist/esm-node/commands/build.mjs +64 -0
  240. package/dist/esm-node/commands/deploy.mjs +11 -0
  241. package/dist/esm-node/commands/dev.mjs +78 -0
  242. package/dist/esm-node/commands/index.mjs +48 -0
  243. package/dist/esm-node/commands/info.mjs +77 -0
  244. package/dist/esm-node/commands/inspect.mjs +16 -0
  245. package/dist/esm-node/commands/runtime.mjs +117 -0
  246. package/dist/esm-node/commands/serve.mjs +49 -0
  247. package/dist/esm-node/compat/hooks.mjs +68 -0
  248. package/dist/esm-node/compat/index.mjs +29 -0
  249. package/dist/esm-node/compat/utils.mjs +96 -0
  250. package/dist/esm-node/config/default.mjs +92 -0
  251. package/dist/esm-node/config/index.mjs +3 -0
  252. package/dist/esm-node/config/initialize/index.mjs +8 -0
  253. package/dist/esm-node/config/initialize/inits.mjs +55 -0
  254. package/dist/esm-node/constants.mjs +4 -0
  255. package/dist/esm-node/defineConfig.mjs +3 -0
  256. package/dist/esm-node/esm/register-esm.mjs +12 -0
  257. package/dist/esm-node/esm/ts-paths-loader.mjs +37 -0
  258. package/dist/esm-node/exports/server.mjs +1 -0
  259. package/dist/esm-node/index.mjs +133 -0
  260. package/dist/esm-node/locale/en.mjs +46 -0
  261. package/dist/esm-node/locale/index.mjs +10 -0
  262. package/dist/esm-node/locale/zh.mjs +46 -0
  263. package/dist/esm-node/plugins/analyze/constants.mjs +9 -0
  264. package/dist/esm-node/plugins/analyze/getBundleEntry.mjs +54 -0
  265. package/dist/esm-node/plugins/analyze/getFileSystemEntry.mjs +67 -0
  266. package/dist/esm-node/plugins/analyze/getHtmlTemplate.mjs +98 -0
  267. package/dist/esm-node/plugins/analyze/getServerRoutes.mjs +131 -0
  268. package/dist/esm-node/plugins/analyze/index.mjs +204 -0
  269. package/dist/esm-node/plugins/analyze/isDefaultExportFunction.mjs +42 -0
  270. package/dist/esm-node/plugins/analyze/templates.mjs +23 -0
  271. package/dist/esm-node/plugins/analyze/utils.mjs +64 -0
  272. package/dist/esm-node/plugins/deploy/index.mjs +44 -0
  273. package/dist/esm-node/plugins/deploy/platforms/gh-pages.mjs +44 -0
  274. package/dist/esm-node/plugins/deploy/platforms/netlify.mjs +98 -0
  275. package/dist/esm-node/plugins/deploy/platforms/node.mjs +58 -0
  276. package/dist/esm-node/plugins/deploy/platforms/platform.mjs +1 -0
  277. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.cjs +57 -0
  278. package/dist/esm-node/plugins/deploy/platforms/templates/netlify-entry.mjs +59 -0
  279. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.cjs +44 -0
  280. package/dist/esm-node/plugins/deploy/platforms/templates/node-entry.mjs +46 -0
  281. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.cjs +57 -0
  282. package/dist/esm-node/plugins/deploy/platforms/templates/vercel-entry.mjs +58 -0
  283. package/dist/esm-node/plugins/deploy/platforms/vercel.mjs +117 -0
  284. package/dist/esm-node/plugins/deploy/types.mjs +1 -0
  285. package/dist/esm-node/plugins/deploy/utils/generator.mjs +49 -0
  286. package/dist/esm-node/plugins/deploy/utils/index.mjs +71 -0
  287. package/dist/esm-node/plugins/initialize/index.mjs +60 -0
  288. package/dist/esm-node/plugins/serverBuild.mjs +46 -0
  289. package/dist/esm-node/plugins/serverRuntime.mjs +16 -0
  290. package/dist/esm-node/presetUltramodern.mjs +5 -0
  291. package/dist/esm-node/rsbuild.mjs +48 -0
  292. package/dist/esm-node/rslib-runtime.mjs +19 -0
  293. package/dist/esm-node/run/index.mjs +62 -0
  294. package/dist/esm-node/types/config/deploy.mjs +1 -0
  295. package/dist/esm-node/types/config/dev.mjs +1 -0
  296. package/dist/esm-node/types/config/experiments.mjs +1 -0
  297. package/dist/esm-node/types/config/html.mjs +1 -0
  298. package/dist/esm-node/types/config/index.mjs +2 -0
  299. package/dist/esm-node/types/config/output.mjs +1 -0
  300. package/dist/esm-node/types/config/performance.mjs +1 -0
  301. package/dist/esm-node/types/config/resolve.mjs +1 -0
  302. package/dist/esm-node/types/config/security.mjs +1 -0
  303. package/dist/esm-node/types/config/source.mjs +1 -0
  304. package/dist/esm-node/types/config/testing.mjs +1 -0
  305. package/dist/esm-node/types/config/tools.mjs +1 -0
  306. package/dist/esm-node/types/index.mjs +2 -0
  307. package/dist/esm-node/types/plugin.mjs +1 -0
  308. package/dist/esm-node/types/utils.mjs +1 -0
  309. package/dist/esm-node/ultramodern/designSystem.mjs +74 -0
  310. package/dist/esm-node/utils/config.mjs +12 -0
  311. package/dist/esm-node/utils/createServer.mjs +13 -0
  312. package/dist/esm-node/utils/env.mjs +13 -0
  313. package/dist/esm-node/utils/generateWatchFiles.mjs +11 -0
  314. package/dist/esm-node/utils/getConfigFile.mjs +6 -0
  315. package/dist/esm-node/utils/getSelectedEntries.mjs +27 -0
  316. package/dist/esm-node/utils/initAppContext.mjs +28 -0
  317. package/dist/esm-node/utils/loadPlugins.mjs +46 -0
  318. package/dist/esm-node/utils/printInstructions.mjs +10 -0
  319. package/dist/esm-node/utils/register.mjs +83 -0
  320. package/dist/esm-node/utils/restart.mjs +19 -0
  321. package/dist/esm-node/utils/routes.mjs +16 -0
  322. package/dist/esm-node/utils/types.mjs +1 -0
  323. package/dist/types/baseline.d.ts +46 -0
  324. package/dist/types/builder/builder-rspack/index.d.ts +2 -0
  325. package/dist/types/builder/generator/adapterCopy.d.ts +3 -0
  326. package/dist/types/builder/generator/createBuilderProviderConfig.d.ts +3 -0
  327. package/dist/types/builder/generator/createCopyPattern.d.ts +16 -0
  328. package/dist/types/builder/generator/getBuilderEnvironments.d.ts +6 -0
  329. package/dist/types/builder/generator/index.d.ts +8 -0
  330. package/dist/types/builder/index.d.ts +3 -0
  331. package/dist/types/builder/shared/builderPlugins/adapterBasic.d.ts +3 -0
  332. package/dist/types/builder/shared/builderPlugins/adapterHtml.d.ts +3 -0
  333. package/dist/types/builder/shared/builderPlugins/adapterPrecompress.d.ts +3 -0
  334. package/dist/types/builder/shared/builderPlugins/adapterSSR.d.ts +3 -0
  335. package/dist/types/builder/shared/builderPlugins/builderHooks.d.ts +3 -0
  336. package/dist/types/builder/shared/builderPlugins/index.d.ts +5 -0
  337. package/dist/types/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.d.ts +7 -0
  338. package/dist/types/builder/shared/bundlerPlugins/HtmlBottomTemplate.d.ts +9 -0
  339. package/dist/types/builder/shared/bundlerPlugins/RouterPlugin.d.ts +32 -0
  340. package/dist/types/builder/shared/bundlerPlugins/index.d.ts +3 -0
  341. package/dist/types/builder/shared/createCopyInfo.d.ts +8 -0
  342. package/dist/types/builder/shared/index.d.ts +3 -0
  343. package/dist/types/builder/shared/loaders/serverModuleLoader.d.ts +3 -0
  344. package/dist/types/builder/shared/types.d.ts +6 -0
  345. package/dist/types/commands/build.d.ts +4 -0
  346. package/dist/types/commands/deploy.d.ts +3 -0
  347. package/dist/types/commands/dev.d.ts +9 -0
  348. package/dist/types/commands/index.d.ts +10 -0
  349. package/dist/types/commands/info.d.ts +18 -0
  350. package/dist/types/commands/inspect.d.ts +4 -0
  351. package/dist/types/commands/runtime.d.ts +11 -0
  352. package/dist/types/commands/serve.d.ts +8 -0
  353. package/dist/types/compat/hooks.d.ts +7 -0
  354. package/dist/types/compat/index.d.ts +2 -0
  355. package/dist/types/compat/utils.d.ts +13 -0
  356. package/dist/types/config/default.d.ts +3 -0
  357. package/dist/types/config/index.d.ts +2 -0
  358. package/dist/types/config/initialize/index.d.ts +3 -0
  359. package/dist/types/config/initialize/inits.d.ts +4 -0
  360. package/dist/types/constants.d.ts +2 -0
  361. package/dist/types/defineConfig.d.ts +11 -0
  362. package/dist/types/esm/register-esm.d.mts +11 -0
  363. package/dist/types/esm/ts-node-loader.d.mts +6 -0
  364. package/dist/types/esm/ts-paths-loader.d.mts +6 -0
  365. package/dist/types/exports/server.d.ts +1 -0
  366. package/dist/types/index.d.ts +17 -0
  367. package/dist/types/locale/en.d.ts +44 -0
  368. package/dist/types/locale/index.d.ts +90 -0
  369. package/dist/types/locale/zh.d.ts +44 -0
  370. package/dist/types/plugins/analyze/constants.d.ts +3 -0
  371. package/dist/types/plugins/analyze/getBundleEntry.d.ts +4 -0
  372. package/dist/types/plugins/analyze/getFileSystemEntry.d.ts +7 -0
  373. package/dist/types/plugins/analyze/getHtmlTemplate.d.ts +27 -0
  374. package/dist/types/plugins/analyze/getServerRoutes.d.ts +8 -0
  375. package/dist/types/plugins/analyze/index.d.ts +3 -0
  376. package/dist/types/plugins/analyze/isDefaultExportFunction.d.ts +1 -0
  377. package/dist/types/plugins/analyze/templates.d.ts +5 -0
  378. package/dist/types/plugins/analyze/utils.d.ts +10 -0
  379. package/dist/types/plugins/deploy/index.d.ts +3 -0
  380. package/dist/types/plugins/deploy/platforms/gh-pages.d.ts +2 -0
  381. package/dist/types/plugins/deploy/platforms/netlify.d.ts +2 -0
  382. package/dist/types/plugins/deploy/platforms/node.d.ts +2 -0
  383. package/dist/types/plugins/deploy/platforms/platform.d.ts +17 -0
  384. package/dist/types/plugins/deploy/platforms/templates/netlify-entry.d.cts +2 -0
  385. package/dist/types/plugins/deploy/platforms/templates/netlify-entry.d.mts +2 -0
  386. package/dist/types/plugins/deploy/platforms/templates/node-entry.d.cts +1 -0
  387. package/dist/types/plugins/deploy/platforms/templates/node-entry.d.mts +1 -0
  388. package/dist/types/plugins/deploy/platforms/templates/vercel-entry.d.cts +2 -0
  389. package/dist/types/plugins/deploy/platforms/templates/vercel-entry.d.mts +2 -0
  390. package/dist/types/plugins/deploy/platforms/vercel.d.ts +2 -0
  391. package/dist/types/plugins/deploy/types.d.ts +3 -0
  392. package/dist/types/plugins/deploy/utils/generator.d.ts +24 -0
  393. package/dist/types/plugins/deploy/utils/index.d.ts +16 -0
  394. package/dist/types/plugins/initialize/index.d.ts +3 -0
  395. package/dist/types/plugins/serverBuild.d.ts +3 -0
  396. package/dist/types/plugins/serverRuntime.d.ts +3 -0
  397. package/dist/types/presetUltramodern.d.ts +6 -0
  398. package/dist/types/rsbuild.d.ts +12 -0
  399. package/dist/types/run/index.d.ts +20 -0
  400. package/dist/types/types/config/deploy.d.ts +38 -0
  401. package/dist/types/types/config/dev.d.ts +55 -0
  402. package/dist/types/types/config/experiments.d.ts +3 -0
  403. package/dist/types/types/config/html.d.ts +3 -0
  404. package/dist/types/types/config/index.d.ts +48 -0
  405. package/dist/types/types/config/output.d.ts +61 -0
  406. package/dist/types/types/config/performance.d.ts +3 -0
  407. package/dist/types/types/config/resolve.d.ts +2 -0
  408. package/dist/types/types/config/security.d.ts +2 -0
  409. package/dist/types/types/config/source.d.ts +61 -0
  410. package/dist/types/types/config/testing.d.ts +8 -0
  411. package/dist/types/types/config/tools.d.ts +21 -0
  412. package/dist/types/types/index.d.ts +10 -0
  413. package/dist/types/types/plugin.d.ts +114 -0
  414. package/dist/types/types/utils.d.ts +1 -0
  415. package/dist/types/ultramodern/designSystem.d.ts +54 -0
  416. package/dist/types/utils/config.d.ts +2 -0
  417. package/dist/types/utils/createServer.d.ts +5 -0
  418. package/dist/types/utils/env.d.ts +2 -0
  419. package/dist/types/utils/generateWatchFiles.d.ts +2 -0
  420. package/dist/types/utils/getConfigFile.d.ts +1 -0
  421. package/dist/types/utils/getSelectedEntries.d.ts +5 -0
  422. package/dist/types/utils/initAppContext.d.ts +31 -0
  423. package/dist/types/utils/loadPlugins.d.ts +13 -0
  424. package/dist/types/utils/printInstructions.d.ts +3 -0
  425. package/dist/types/utils/register.d.ts +19 -0
  426. package/dist/types/utils/restart.d.ts +2 -0
  427. package/dist/types/utils/routes.d.ts +4 -0
  428. package/dist/types/utils/types.d.ts +49 -0
  429. package/lib/types.d.ts +252 -0
  430. package/package.json +138 -0
  431. package/rslib.config.mts +39 -0
  432. package/rstest.config.mts +20 -0
@@ -0,0 +1,77 @@
1
+ import node_path from "node:path";
2
+ import { applyPlugins } from "@modern-js/prod-server";
3
+ import { createDevServer } from "@modern-js/server";
4
+ import { DEFAULT_DEV_HOST, SERVER_DIR, getMeta, logger } from "@modern-js/utils";
5
+ import { setServer } from "../utils/createServer.mjs";
6
+ import { loadServerPlugins } from "../utils/loadPlugins.mjs";
7
+ import { printInstructions } from "../utils/printInstructions.mjs";
8
+ import { setupTsRuntime } from "../utils/register.mjs";
9
+ import { generateRoutes } from "../utils/routes.mjs";
10
+ const dev = async (api, options, devServerOptions)=>{
11
+ if (options.analyze) process.env.BUNDLE_ANALYZE = 'true';
12
+ const normalizedConfig = api.getNormalizedConfig();
13
+ const appContext = api.getAppContext();
14
+ const hooks = api.getHooks();
15
+ const combinedAlias = [].concat(normalizedConfig?.resolve?.alias ?? []).concat(normalizedConfig?.source?.alias ?? []);
16
+ await setupTsRuntime(appContext.appDirectory, appContext.distDirectory, combinedAlias, {
17
+ moduleType: appContext.moduleType,
18
+ tsconfigPath: normalizedConfig?.server?.tsconfigPath
19
+ });
20
+ const { appDirectory, port, apiOnly, metaName, serverRoutes } = appContext;
21
+ const meta = getMeta(metaName);
22
+ const serverConfigPath = node_path.resolve(appDirectory, SERVER_DIR, `${meta}.server`);
23
+ await hooks.onBeforeDev.call();
24
+ if (!appContext.builder && !apiOnly) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
25
+ await generateRoutes(appContext);
26
+ const pluginInstances = await loadServerPlugins(api, appDirectory, metaName);
27
+ const serverOptions = {
28
+ metaName,
29
+ dev: {
30
+ https: normalizedConfig.dev.https,
31
+ setupMiddlewares: normalizedConfig.dev.setupMiddlewares
32
+ },
33
+ appContext: {
34
+ appDirectory,
35
+ internalDirectory: appContext.internalDirectory,
36
+ apiDirectory: appContext.apiDirectory,
37
+ lambdaDirectory: appContext.lambdaDirectory,
38
+ sharedDirectory: appContext.sharedDirectory,
39
+ bffRuntimeFramework: appContext.bffRuntimeFramework
40
+ },
41
+ serverConfigPath,
42
+ routes: serverRoutes,
43
+ pwd: appDirectory,
44
+ config: normalizedConfig,
45
+ plugins: pluginInstances,
46
+ ...devServerOptions
47
+ };
48
+ const host = normalizedConfig.dev?.host || DEFAULT_DEV_HOST;
49
+ if (apiOnly) {
50
+ const { server } = await createDevServer({
51
+ ...serverOptions,
52
+ runCompile: false
53
+ }, devServerOptions?.applyPlugins || applyPlugins);
54
+ server.listen({
55
+ port,
56
+ host
57
+ }, ()=>{
58
+ printInstructions(hooks, appContext, normalizedConfig);
59
+ });
60
+ setServer(server);
61
+ } else {
62
+ const { server, afterListen } = await createDevServer({
63
+ ...serverOptions,
64
+ builder: appContext.builder
65
+ }, devServerOptions?.applyPlugins || applyPlugins);
66
+ server.listen({
67
+ port,
68
+ host
69
+ }, async (err)=>{
70
+ if (err) logger.error('Occur error %s, when start dev server', err);
71
+ logger.debug('listen dev server done');
72
+ await afterListen();
73
+ });
74
+ setServer(server);
75
+ }
76
+ };
77
+ export { dev };
@@ -0,0 +1,47 @@
1
+ import { i18n, localeKeys } from "../locale/index.mjs";
2
+ import { runtimeCommand } from "./runtime.mjs";
3
+ const devCommand = async (program, api)=>{
4
+ program.command('dev').alias('start').usage('[options]').description(i18n.t(localeKeys.command.dev.describe)).option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('-e --entry [entry...]', i18n.t(localeKeys.command.dev.entry)).option('--analyze', i18n.t(localeKeys.command.shared.analyze)).option('--api-only', i18n.t(localeKeys.command.dev.apiOnly)).option('--web-only', i18n.t(localeKeys.command.dev.webOnly)).action(async (options)=>{
5
+ const { dev } = await import("./dev.mjs");
6
+ await dev(api, options);
7
+ });
8
+ };
9
+ const buildCommand = async (program, api)=>{
10
+ program.command('build').usage('[options]').description(i18n.t(localeKeys.command.build.describe)).option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('--analyze', i18n.t(localeKeys.command.shared.analyze)).option('-w --watch', i18n.t(localeKeys.command.build.watch)).action(async (options)=>{
11
+ const { build } = await import("./build.mjs");
12
+ await build(api, options);
13
+ });
14
+ };
15
+ const serverCommand = (program, api)=>{
16
+ program.command('serve').usage('[options]').description(i18n.t(localeKeys.command.serve.describe)).option('--api-only', i18n.t(localeKeys.command.dev.apiOnly)).option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).action(async ()=>{
17
+ const { serve } = await import("./serve.mjs");
18
+ await serve(api);
19
+ });
20
+ };
21
+ const deployCommand = (program, api)=>{
22
+ program.command('deploy').usage('[options]').option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('-s --skip-build', i18n.t(localeKeys.command.shared.skipBuild)).description(i18n.t(localeKeys.command.deploy.describe)).action(async (options)=>{
23
+ if (!options.skipBuild) {
24
+ const { build } = await import("./build.mjs");
25
+ await build(api);
26
+ }
27
+ const { deploy } = await import("./deploy.mjs");
28
+ await deploy(api, options);
29
+ process.exit(0);
30
+ });
31
+ };
32
+ const inspectCommand = (program, api)=>{
33
+ program.command('inspect').description('inspect the internal configs').option("--env <env>", i18n.t(localeKeys.command.inspect.env), 'development').option('--output <output>', i18n.t(localeKeys.command.inspect.output), './').option('--verbose', i18n.t(localeKeys.command.inspect.verbose)).option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).action(async (options)=>{
34
+ const { inspect } = await import("./inspect.mjs");
35
+ inspect(api, options);
36
+ });
37
+ };
38
+ const infoCommand = (program, api)=>{
39
+ program.command('info').usage('[options]').description(i18n.t(localeKeys.command.info.describe)).option('-c --config <config>', i18n.t(localeKeys.command.shared.config)).option('--json', 'output as JSON format for machine reading').action(async (options)=>{
40
+ const { info } = await import("./info.mjs");
41
+ await info(api, options);
42
+ });
43
+ };
44
+ const runtimeOperationsCommand = async (program, api)=>{
45
+ await runtimeCommand(program, api);
46
+ };
47
+ export { buildCommand, deployCommand, devCommand, infoCommand, inspectCommand, runtimeOperationsCommand, serverCommand };
@@ -0,0 +1,76 @@
1
+ import { getEntryOptions, isApiOnly } from "@modern-js/utils";
2
+ import { isMainEntry } from "../utils/routes.mjs";
3
+ const info = async (api, options = {})=>{
4
+ const normalizedConfig = api.getNormalizedConfig();
5
+ const appContext = api.getAppContext();
6
+ const hooks = api.getHooks();
7
+ const apiOnly = await isApiOnly(appContext.appDirectory, normalizedConfig.source?.entriesDir, appContext.apiDirectory);
8
+ if (apiOnly) {
9
+ const projectInfo = {
10
+ entries: [],
11
+ apiOnly: true
12
+ };
13
+ printProjectInfo(projectInfo, options.json);
14
+ return;
15
+ }
16
+ const [{ getBundleEntry }] = await Promise.all([
17
+ import("../plugins/analyze/getBundleEntry.mjs")
18
+ ]);
19
+ const { entrypoints } = await hooks.modifyEntrypoints.call({
20
+ entrypoints: await getBundleEntry(hooks, appContext, normalizedConfig)
21
+ });
22
+ const { source: { mainEntryName }, server: { ssr, ssrByEntries }, output: { ssg, ssgByEntries } } = normalizedConfig;
23
+ const { packageName } = appContext;
24
+ const entries = entrypoints.map((entrypoint)=>{
25
+ const { entryName, entry, isAutoMount, isCustomSourceEntry, customEntry } = entrypoint;
26
+ const isMain = isMainEntry(entryName, mainEntryName);
27
+ const ssrOptions = getEntryOptions(entryName, isMain, ssr, ssrByEntries, packageName);
28
+ const ssgOptions = getEntryOptions(entryName, isMain, ssg, ssgByEntries, packageName);
29
+ let ssrMode = false;
30
+ if (ssrOptions) {
31
+ if ('boolean' == typeof ssrOptions) ssrMode = 'stream';
32
+ else if ('object' == typeof ssrOptions) ssrMode = 'string' === ssrOptions.mode ? 'string' : 'stream';
33
+ }
34
+ return {
35
+ entryName,
36
+ isMainEntry: isMain,
37
+ entry,
38
+ isAutoMount: isAutoMount ?? true,
39
+ isCustomSourceEntry: isCustomSourceEntry ?? false,
40
+ customEntry: customEntry ?? false,
41
+ ssr: ssrMode,
42
+ ssg: Boolean(ssgOptions)
43
+ };
44
+ });
45
+ const projectInfo = {
46
+ entries,
47
+ apiOnly: false
48
+ };
49
+ printProjectInfo(projectInfo, options.json);
50
+ };
51
+ function printProjectInfo(projectInfo, jsonOnly) {
52
+ if (jsonOnly) return void console.log(JSON.stringify(projectInfo, null, 2));
53
+ console.log('');
54
+ console.log('===== Modern.js Project Info =====');
55
+ console.log('');
56
+ console.log(JSON.stringify(projectInfo, null, 2));
57
+ console.log('');
58
+ console.log('===== Entry Details =====');
59
+ console.log('');
60
+ if (projectInfo.apiOnly) return void console.log('This is an API-only project (no page entries).');
61
+ if (0 === projectInfo.entries.length) return void console.log('No entries found.');
62
+ for (const entry of projectInfo.entries){
63
+ console.log(`Entry: ${entry.entryName}`);
64
+ console.log(` - Path: ${entry.entry}`);
65
+ console.log(` - Main Entry: ${entry.isMainEntry}`);
66
+ console.log(` - Auto Mount: ${entry.isAutoMount}`);
67
+ console.log(` - Custom Entry: ${entry.customEntry}`);
68
+ console.log(` - Custom Source Entry: ${entry.isCustomSourceEntry}`);
69
+ console.log(" - Rendering Mode:");
70
+ if (entry.ssg) console.log(" - SSG: enabled");
71
+ else if (entry.ssr) console.log(` - SSR: ${entry.ssr} mode`);
72
+ else console.log(" - CSR: enabled (default)");
73
+ console.log('');
74
+ }
75
+ }
76
+ export { info };
@@ -0,0 +1,15 @@
1
+ const inspect = async (api, options)=>{
2
+ const appContext = api.getAppContext();
3
+ if (!appContext.builder) throw new Error('Expect the Builder to have been initialized, But the appContext.builder received `undefined`');
4
+ const metaName = 'modern-js' === appContext.metaName ? 'modern.js' : appContext.metaName;
5
+ return appContext.builder.inspectConfig({
6
+ mode: options.env,
7
+ verbose: options.verbose,
8
+ outputPath: options.output,
9
+ writeToDisk: true,
10
+ extraConfigs: {
11
+ [metaName]: api.getNormalizedConfig()
12
+ }
13
+ });
14
+ };
15
+ export { inspect };
@@ -0,0 +1,116 @@
1
+ const DEFAULT_RUNTIME_HOST = 'http://127.0.0.1:8080';
2
+ const DEFAULT_RUNTIME_STATUS_PATH = '/_modern/runtime/status';
3
+ const DEFAULT_RUNTIME_FALLBACK_SIGNAL_PATH = '/_modern/contract-gates/runtime-fallback';
4
+ const DEFAULT_RUNTIME_TOKEN_HEADER = 'x-modernjs-runtime-signal-token';
5
+ const DEFAULT_TIMEOUT_MS = 5000;
6
+ const resolveRuntimeEndpoint = (input, defaultPath)=>{
7
+ const rawInput = input?.trim();
8
+ if (!rawInput) return `${DEFAULT_RUNTIME_HOST}${defaultPath}`;
9
+ if (rawInput.startsWith('http://') || rawInput.startsWith('https://')) return rawInput;
10
+ const normalized = rawInput.startsWith('/') ? rawInput : `/${rawInput}`;
11
+ return `${DEFAULT_RUNTIME_HOST}${normalized}`;
12
+ };
13
+ const resolveToken = ({ token, tokenEnv })=>{
14
+ if ('string' == typeof token && token.trim().length > 0) return token.trim();
15
+ if ('string' == typeof tokenEnv && tokenEnv.trim().length > 0) {
16
+ const value = process.env[tokenEnv.trim()];
17
+ if ('string' == typeof value && value.trim().length > 0) return value.trim();
18
+ }
19
+ };
20
+ const parseTimeoutMs = (value)=>{
21
+ if ('string' != typeof value || 0 === value.trim().length) return DEFAULT_TIMEOUT_MS;
22
+ const parsed = Number.parseInt(value, 10);
23
+ if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_TIMEOUT_MS;
24
+ return parsed;
25
+ };
26
+ const parseMetadata = (metadata)=>{
27
+ if ('string' != typeof metadata || 0 === metadata.trim().length) return;
28
+ const parsed = JSON.parse(metadata);
29
+ if (!parsed || 'object' != typeof parsed || Array.isArray(parsed)) throw new Error('metadata must be a JSON object');
30
+ return parsed;
31
+ };
32
+ const fetchWithTimeout = async (url, init, timeoutMs)=>{
33
+ const controller = new AbortController();
34
+ const timeout = setTimeout(()=>{
35
+ controller.abort();
36
+ }, timeoutMs);
37
+ try {
38
+ return await fetch(url, {
39
+ ...init,
40
+ signal: controller.signal
41
+ });
42
+ } finally{
43
+ clearTimeout(timeout);
44
+ }
45
+ };
46
+ const parseResponseBody = async (response)=>{
47
+ const text = await response.text();
48
+ if (!text) return {};
49
+ try {
50
+ return JSON.parse(text);
51
+ } catch (_error) {
52
+ return {
53
+ raw: text
54
+ };
55
+ }
56
+ };
57
+ const printOutput = (payload, jsonOnly)=>{
58
+ if (jsonOnly) return void console.log(JSON.stringify(payload, null, 2));
59
+ console.log(JSON.stringify(payload, null, 2));
60
+ };
61
+ const createRuntimeFallbackSignalPayload = (options)=>{
62
+ const payload = {
63
+ appName: options.app,
64
+ reason: options.reason || 'runtime_fallback',
65
+ phase: options.phase || 'load'
66
+ };
67
+ if (options.entry) payload.entry = options.entry;
68
+ if (options.runtimeDigest) payload.runtimeDigest = options.runtimeDigest;
69
+ const metadata = parseMetadata(options.metadata);
70
+ if (metadata) payload.metadata = metadata;
71
+ return payload;
72
+ };
73
+ const runtimeCommand = async (program, _api)=>{
74
+ const runtime = program.command('runtime').description('runtime operations');
75
+ runtime.command('status').description('read runtime status snapshot').option('--endpoint <endpoint>', 'runtime status endpoint URL or path').option('--token <token>', 'runtime status auth token').option('--token-env <name>', 'environment variable name that stores runtime status auth token', 'MODERN_RUNTIME_SIGNAL_TOKEN').option('--header-name <name>', 'auth header name', DEFAULT_RUNTIME_TOKEN_HEADER).option('--timeout <ms>', 'request timeout in milliseconds', '5000').option('--json', 'output as JSON format for machine reading').action(async (options)=>{
76
+ const endpoint = resolveRuntimeEndpoint(options.endpoint, DEFAULT_RUNTIME_STATUS_PATH);
77
+ const timeoutMs = parseTimeoutMs(options.timeout);
78
+ const token = resolveToken({
79
+ token: options.token,
80
+ tokenEnv: options.tokenEnv
81
+ });
82
+ const headerName = options.headerName?.trim() || DEFAULT_RUNTIME_TOKEN_HEADER;
83
+ const headers = new Headers();
84
+ if (token) headers.set(headerName, token);
85
+ const response = await fetchWithTimeout(endpoint, {
86
+ method: 'GET',
87
+ headers
88
+ }, timeoutMs);
89
+ const payload = await parseResponseBody(response);
90
+ if (!response.ok) throw new Error(`runtime status request failed with ${response.status}: ${JSON.stringify(payload)}`);
91
+ printOutput(payload, options.json);
92
+ });
93
+ runtime.command('fallback-signal').description('emit runtime fallback signal for canary gate mutation').requiredOption('--app <appName>', 'remote app name').option('--endpoint <endpoint>', 'runtime fallback signal endpoint URL or path').option('--reason <reason>', 'fallback reason', 'runtime_fallback').option('--phase <phase>', 'fallback phase', 'load').option('--entry <entry>', 'remote entry URL').option('--runtime-digest <digest>', 'runtime digest value').option('--metadata <json>', 'metadata JSON object string').option('--token <token>', 'runtime signal auth token').option('--token-env <name>', 'environment variable name that stores runtime signal auth token', 'MODERN_RUNTIME_SIGNAL_TOKEN').option('--header-name <name>', 'auth header name', DEFAULT_RUNTIME_TOKEN_HEADER).option('--timeout <ms>', 'request timeout in milliseconds', '5000').option('--json', 'output as JSON format for machine reading').action(async (options)=>{
94
+ const endpoint = resolveRuntimeEndpoint(options.endpoint, DEFAULT_RUNTIME_FALLBACK_SIGNAL_PATH);
95
+ const timeoutMs = parseTimeoutMs(options.timeout);
96
+ const token = resolveToken({
97
+ token: options.token,
98
+ tokenEnv: options.tokenEnv
99
+ });
100
+ const headerName = options.headerName?.trim() || DEFAULT_RUNTIME_TOKEN_HEADER;
101
+ const payload = createRuntimeFallbackSignalPayload(options);
102
+ const headers = new Headers({
103
+ 'content-type': 'application/json'
104
+ });
105
+ if (token) headers.set(headerName, token);
106
+ const response = await fetchWithTimeout(endpoint, {
107
+ method: 'POST',
108
+ headers,
109
+ body: JSON.stringify(payload)
110
+ }, timeoutMs);
111
+ const responsePayload = await parseResponseBody(response);
112
+ if (!response.ok) throw new Error(`runtime fallback signal request failed with ${response.status}: ${JSON.stringify(responsePayload)}`);
113
+ printOutput(responsePayload, options.json);
114
+ });
115
+ };
116
+ export { createRuntimeFallbackSignalPayload, resolveRuntimeEndpoint, resolveToken, runtimeCommand };
@@ -0,0 +1,48 @@
1
+ import { createProdServer } from "@modern-js/prod-server";
2
+ import { SERVER_DIR, getMeta, getTargetDir, isApiOnly, logger } from "@modern-js/utils";
3
+ import path from "path";
4
+ import { loadServerPlugins } from "../utils/loadPlugins.mjs";
5
+ import { printInstructions } from "../utils/printInstructions.mjs";
6
+ const serve = async (api, serverOptions)=>{
7
+ const appContext = api.getAppContext();
8
+ const userConfig = api.getNormalizedConfig();
9
+ const hooks = api.getHooks();
10
+ const { distDirectory, appDirectory, internalDirectory, port, metaName, serverRoutes } = appContext;
11
+ const { isCrossProjectServer } = userConfig?.bff || {};
12
+ logger.info("Starting production server...");
13
+ const apiOnly = await isApiOnly(appContext.appDirectory, userConfig?.source?.entriesDir, appContext.apiDirectory);
14
+ let runMode;
15
+ if (apiOnly) runMode = 'apiOnly';
16
+ const meta = getMeta(metaName);
17
+ const serverConfigPath = path.resolve(distDirectory, SERVER_DIR, `${meta}.server`);
18
+ const pluginInstances = await loadServerPlugins(api, appDirectory, metaName);
19
+ const app = await (serverOptions?.launcher || createProdServer)({
20
+ metaName,
21
+ pwd: distDirectory,
22
+ config: {
23
+ ...userConfig,
24
+ dev: userConfig.dev,
25
+ tools: userConfig.tools,
26
+ output: {
27
+ path: userConfig.output.distPath?.root,
28
+ ...userConfig.output || {}
29
+ }
30
+ },
31
+ routes: serverRoutes,
32
+ plugins: pluginInstances,
33
+ serverConfigPath,
34
+ appContext: {
35
+ appDirectory,
36
+ internalDirectory,
37
+ sharedDirectory: getTargetDir(appContext.sharedDirectory, appContext.appDirectory, appContext.distDirectory),
38
+ apiDirectory: isCrossProjectServer ? appContext.apiDirectory : getTargetDir(appContext.apiDirectory, appContext.appDirectory, appContext.distDirectory),
39
+ lambdaDirectory: isCrossProjectServer ? appContext.lambdaDirectory : getTargetDir(appContext.lambdaDirectory, appContext.appDirectory, appContext.distDirectory),
40
+ bffRuntimeFramework: appContext.bffRuntimeFramework
41
+ },
42
+ runMode
43
+ });
44
+ app.listen(port, async ()=>{
45
+ await printInstructions(hooks, appContext, userConfig);
46
+ });
47
+ };
48
+ export { serve };
@@ -0,0 +1,67 @@
1
+ import { getModifyHtmlPartials } from "../plugins/analyze/getHtmlTemplate.mjs";
2
+ import { transformHookParams, transformHookResult, transformHookRunner } from "./utils.mjs";
3
+ function getHookRunners(context) {
4
+ const { hooks } = context;
5
+ return {
6
+ afterPrepare: async ()=>hooks.onAfterPrepare.call(),
7
+ deploy: async ()=>hooks.deploy.call(),
8
+ _internalRuntimePlugins: async (params)=>hooks._internalRuntimePlugins.call(params),
9
+ _internalServerPlugins: async (params)=>hooks._internalServerPlugins.call(params),
10
+ checkEntryPoint: async (params)=>hooks.checkEntryPoint.call(params),
11
+ modifyEntrypoints: async (params)=>hooks.modifyEntrypoints.call(params),
12
+ modifyFileSystemRoutes: async (params)=>hooks.modifyFileSystemRoutes.call(params),
13
+ modifyServerRoutes: async (params)=>hooks.modifyServerRoutes.call(params),
14
+ generateEntryCode: async (params)=>hooks.generateEntryCode.call(params),
15
+ beforeGenerateRoutes: async (params)=>hooks.onBeforeGenerateRoutes.call(params),
16
+ beforePrintInstructions: async (params)=>hooks.onBeforePrintInstructions.call(params),
17
+ appendEntryCode: async (params)=>{
18
+ const result = await hooks?.appendEntryCode.call(params);
19
+ return result;
20
+ },
21
+ jestConfig: async (utils)=>{
22
+ const result = await hooks?.jestConfig.call(utils, (utils)=>utils);
23
+ return result;
24
+ },
25
+ afterTest: async ()=>hooks.afterTest.call(),
26
+ config: async ()=>hooks.config.call(),
27
+ resolvedConfig: (params)=>hooks.modifyResolvedConfig.call(params),
28
+ htmlPartials: async (params)=>{
29
+ await hooks.modifyHtmlPartials.call({
30
+ entrypoint: params.entrypoint,
31
+ partials: getModifyHtmlPartials(params.partials)
32
+ });
33
+ return {
34
+ partials: params.partials
35
+ };
36
+ },
37
+ commands: async (params)=>hooks.addCommand.call(params),
38
+ watchFiles: async ()=>hooks.addWatchFiles.call(),
39
+ prepare: async ()=>hooks.onPrepare.call(),
40
+ fileChange: async (params)=>hooks.onFileChanged.call(params),
41
+ beforeCreateCompiler: async (params)=>hooks.onBeforeCreateCompiler.call(params),
42
+ afterCreateCompiler: async (params)=>hooks.onAfterCreateCompiler.call(params),
43
+ beforeBuild: async (params)=>hooks.onBeforeBuild.call(params),
44
+ afterBuild: async (params)=>hooks.onAfterBuild.call(params),
45
+ beforeDev: async ()=>hooks.onBeforeDev.call(),
46
+ afterDev: async (params)=>hooks.onDevCompileDone.call(params),
47
+ beforeDeploy: async (options)=>hooks.onBeforeDeploy.call(options),
48
+ afterDeploy: async (options)=>hooks.onAfterDeploy.call(options),
49
+ beforeExit: async ()=>hooks.onBeforeExit.call(),
50
+ beforeRestart: async ()=>hooks.onBeforeRestart.call()
51
+ };
52
+ }
53
+ function handleSetupResult(setupResult, api) {
54
+ if (!setupResult) return;
55
+ Object.keys(setupResult).forEach((key)=>{
56
+ const fn = setupResult[key];
57
+ if ('function' == typeof fn) {
58
+ const newAPI = transformHookRunner(key);
59
+ if (newAPI && api[newAPI]) api[newAPI](async (...params)=>{
60
+ const { isMultiple, params: transformParams } = transformHookParams(key, params);
61
+ if (isMultiple) return transformHookResult(key, await fn(...transformParams));
62
+ return transformHookResult(key, await fn(transformParams));
63
+ });
64
+ }
65
+ });
66
+ }
67
+ export { getHookRunners, handleSetupResult };
@@ -0,0 +1,28 @@
1
+ import { createAsyncHook } from "@modern-js/plugin";
2
+ import { getHookRunners } from "./hooks.mjs";
3
+ const compatPlugin = ()=>({
4
+ name: '@modern-js/app-tools-compat',
5
+ _registryApi: (getAppContext, updateAppContext)=>{
6
+ const getInternalContext = ()=>getAppContext()._internalContext;
7
+ return {
8
+ useAppContext: ()=>{
9
+ const { _internalContext, ...appContext } = getAppContext();
10
+ return appContext;
11
+ },
12
+ setAppContext: (context)=>updateAppContext(context),
13
+ useConfigContext: ()=>getInternalContext().config,
14
+ useResolvedConfigContext: ()=>getInternalContext().normalizedConfig,
15
+ useHookRunners: ()=>getHookRunners(getInternalContext())
16
+ };
17
+ },
18
+ registryHooks: {
19
+ jestConfig: createAsyncHook(),
20
+ afterTest: createAsyncHook()
21
+ },
22
+ setup: (api)=>{
23
+ api.updateAppContext({
24
+ toolsType: 'app-tools'
25
+ });
26
+ }
27
+ });
28
+ export { compatPlugin };
@@ -0,0 +1,95 @@
1
+ import { getModifyHtmlPartials } from "../plugins/analyze/getHtmlTemplate.mjs";
2
+ function transformHookRunner(hookRunnerName) {
3
+ switch(hookRunnerName){
4
+ case 'beforeConfig':
5
+ console.error('The `beforeConfig` hook has been deprecated. Please define your code directly in the setup function instead.');
6
+ return;
7
+ case 'prepare':
8
+ return 'onPrepare';
9
+ case 'afterPrepare':
10
+ return 'onAfterPrepare';
11
+ case 'beforeGenerateRoutes':
12
+ return 'onBeforeGenerateRoutes';
13
+ case 'beforePrintInstructions':
14
+ return 'onBeforePrintInstructions';
15
+ case 'resolvedConfig':
16
+ return 'modifyResolvedConfig';
17
+ case 'commands':
18
+ return 'addCommand';
19
+ case 'watchFiles':
20
+ return 'addWatchFiles';
21
+ case 'fileChange':
22
+ return 'onFileChanged';
23
+ case 'beforeCreateCompiler':
24
+ return 'onBeforeCreateCompiler';
25
+ case 'afterCreateCompiler':
26
+ return 'onAfterCreateCompiler';
27
+ case 'beforeBuild':
28
+ return 'onBeforeBuild';
29
+ case 'afterBuild':
30
+ return 'onAfterBuild';
31
+ case 'beforeDev':
32
+ return 'onBeforeDev';
33
+ case 'afterDev':
34
+ return 'onDevCompileDone';
35
+ case 'beforeDeploy':
36
+ return 'onBeforeDeploy';
37
+ case 'afterDeploy':
38
+ return 'onAfterDeploy';
39
+ case 'beforeExit':
40
+ return 'onBeforeExit';
41
+ case 'beforeRestart':
42
+ return 'onBeforeRestart';
43
+ case 'htmlPartials':
44
+ return 'modifyHtmlPartials';
45
+ default:
46
+ return hookRunnerName;
47
+ }
48
+ }
49
+ function transformHookParams(hookRunnerName, params) {
50
+ switch(hookRunnerName){
51
+ case 'resolvedConfig':
52
+ return {
53
+ isMultiple: false,
54
+ params: {
55
+ resolved: params[0]
56
+ }
57
+ };
58
+ case 'htmlPartials':
59
+ return {
60
+ isMultiple: false,
61
+ params: {
62
+ partials: {
63
+ top: params[0].partials.top.current,
64
+ head: params[0].partials.head.current,
65
+ body: params[0].partials.body.current
66
+ },
67
+ entrypoint: params[0].entrypoint
68
+ }
69
+ };
70
+ case 'jestConfig':
71
+ return {
72
+ isMultiple: true,
73
+ params: params
74
+ };
75
+ default:
76
+ return {
77
+ isMultiple: false,
78
+ params: params[0]
79
+ };
80
+ }
81
+ }
82
+ function transformHookResult(hookRunnerName, result) {
83
+ switch(hookRunnerName){
84
+ case 'resolvedConfig':
85
+ return result.resolved;
86
+ case 'htmlPartials':
87
+ return {
88
+ partials: getModifyHtmlPartials(result.partials),
89
+ entrypoint: result.entrypoint
90
+ };
91
+ default:
92
+ return result;
93
+ }
94
+ }
95
+ export { transformHookParams, transformHookResult, transformHookRunner };
@@ -0,0 +1,91 @@
1
+ import { DEFAULT_ENTRY_NAME } from "@modern-js/utils";
2
+ import { getAutoInjectEnv } from "../utils/env.mjs";
3
+ function createDefaultConfig(appContext) {
4
+ const dev = {
5
+ cliShortcuts: {
6
+ help: false,
7
+ custom: (shortcuts = [])=>shortcuts.filter(({ key })=>'r' !== key && 'u' !== key && 'o' !== key)
8
+ }
9
+ };
10
+ const output = {
11
+ distPath: {
12
+ root: 'dist',
13
+ html: 'html',
14
+ js: 'static/js',
15
+ css: 'static/css',
16
+ server: 'bundles',
17
+ worker: 'worker'
18
+ },
19
+ cleanDistPath: true,
20
+ enableInlineRouteManifests: true,
21
+ disableInlineRouteManifests: false
22
+ };
23
+ const source = {
24
+ entries: void 0,
25
+ mainEntryName: DEFAULT_ENTRY_NAME,
26
+ enableAsyncEntry: false,
27
+ enableAsyncPreEntry: false,
28
+ disableDefaultEntries: false,
29
+ entriesDir: './src',
30
+ configDir: './config',
31
+ globalVars: getAutoInjectEnv(appContext),
32
+ alias: {}
33
+ };
34
+ const resolve = {
35
+ alias: {
36
+ [appContext.internalDirAlias]: appContext.internalDirectory,
37
+ [appContext.internalSrcAlias]: appContext.srcDirectory,
38
+ '@': appContext.srcDirectory,
39
+ '@shared': appContext.sharedDirectory
40
+ }
41
+ };
42
+ const html = {
43
+ title: '',
44
+ mountId: 'root',
45
+ meta: {
46
+ charset: {
47
+ charset: 'utf-8'
48
+ },
49
+ viewport: 'width=device-width, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no',
50
+ 'http-equiv': {
51
+ 'http-equiv': 'x-ua-compatible',
52
+ content: 'ie=edge'
53
+ },
54
+ renderer: 'webkit',
55
+ layoutmode: 'standard',
56
+ imagemode: 'force',
57
+ 'wap-font-scale': 'no',
58
+ 'format-detection': 'telephone=no'
59
+ }
60
+ };
61
+ const server = {
62
+ routes: void 0,
63
+ publicRoutes: void 0,
64
+ ssr: void 0,
65
+ ssrByEntries: void 0,
66
+ baseUrl: '/',
67
+ port: 8080
68
+ };
69
+ return {
70
+ source,
71
+ resolve,
72
+ output,
73
+ server,
74
+ dev,
75
+ html,
76
+ tools: {
77
+ tsChecker: {
78
+ issue: {
79
+ exclude: [
80
+ {
81
+ file: '**/api/lambda/**/*'
82
+ }
83
+ ]
84
+ }
85
+ }
86
+ },
87
+ plugins: [],
88
+ builderPlugins: []
89
+ };
90
+ }
91
+ export { createDefaultConfig };
@@ -0,0 +1,2 @@
1
+ export * from "./default.mjs";
2
+ export * from "./initialize/index.mjs";