@bleedingdev/modern-js-app-tools 3.5.0-ultramodern.98 → 3.5.0-ultramodern.99

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 (368) hide show
  1. package/dist/cjs/builder/generator/createBuilderProviderConfig.js +5 -1
  2. package/dist/cjs/builder/generator/getBuilderEnvironments.js +7 -0
  3. package/dist/cjs/commands/build.js +2 -1
  4. package/dist/cjs/commands/deploy.js +4 -2
  5. package/dist/cjs/commands/index.js +0 -4
  6. package/dist/cjs/config/default.js +2 -0
  7. package/dist/cjs/index.js +56 -15
  8. package/dist/cjs/plugins/analyze/index.js +2 -2
  9. package/dist/cjs/plugins/analyze/utils.js +3 -2
  10. package/dist/cjs/plugins/initialize/index.js +4 -3
  11. package/dist/cjs/plugins/serverBuild.js +3 -2
  12. package/dist/esm/builder/generator/createBuilderProviderConfig.mjs +5 -1
  13. package/dist/esm/builder/generator/getBuilderEnvironments.mjs +7 -0
  14. package/dist/esm/commands/build.mjs +2 -1
  15. package/dist/esm/commands/deploy.mjs +4 -2
  16. package/dist/esm/commands/index.mjs +0 -4
  17. package/dist/esm/config/default.mjs +2 -0
  18. package/dist/esm/index.mjs +15 -1
  19. package/dist/esm/plugins/analyze/index.mjs +2 -2
  20. package/dist/esm/plugins/analyze/utils.mjs +3 -2
  21. package/dist/esm/plugins/initialize/index.mjs +4 -3
  22. package/dist/esm/plugins/serverBuild.mjs +3 -2
  23. package/dist/esm-node/builder/generator/createBuilderProviderConfig.mjs +5 -1
  24. package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +7 -0
  25. package/dist/esm-node/commands/build.mjs +2 -1
  26. package/dist/esm-node/commands/deploy.mjs +4 -2
  27. package/dist/esm-node/commands/index.mjs +0 -4
  28. package/dist/esm-node/config/default.mjs +2 -0
  29. package/dist/esm-node/index.mjs +15 -1
  30. package/dist/esm-node/plugins/analyze/index.mjs +2 -2
  31. package/dist/esm-node/plugins/analyze/utils.mjs +3 -2
  32. package/dist/esm-node/plugins/initialize/index.mjs +4 -3
  33. package/dist/esm-node/plugins/serverBuild.mjs +3 -2
  34. package/dist/types/commands/deploy.d.ts +2 -1
  35. package/dist/types/index.d.ts +4 -1
  36. package/dist/types/plugins/analyze/utils.d.ts +1 -1
  37. package/dist/types/types/config/dev.d.ts +6 -0
  38. package/docs/_nav.json +36 -0
  39. package/docs/apis/_meta.json +13 -0
  40. package/docs/apis/app/commands.mdx +205 -0
  41. package/docs/apis/app/hooks/_meta.json +28 -0
  42. package/docs/apis/app/hooks/api/lambda.mdx +13 -0
  43. package/docs/apis/app/hooks/config/_meta.json +1 -0
  44. package/docs/apis/app/hooks/config/favicon.mdx +29 -0
  45. package/docs/apis/app/hooks/config/html.mdx +9 -0
  46. package/docs/apis/app/hooks/config/icon.mdx +29 -0
  47. package/docs/apis/app/hooks/config/mock.mdx +10 -0
  48. package/docs/apis/app/hooks/config/public.mdx +30 -0
  49. package/docs/apis/app/hooks/config/upload.mdx +54 -0
  50. package/docs/apis/app/hooks/modern-config.mdx +9 -0
  51. package/docs/apis/app/hooks/server/server.mdx +10 -0
  52. package/docs/apis/app/hooks/shared.mdx +7 -0
  53. package/docs/apis/app/hooks/src/app.mdx +30 -0
  54. package/docs/apis/app/hooks/src/entry.mdx +39 -0
  55. package/docs/apis/app/hooks/src/entry.server.mdx +56 -0
  56. package/docs/apis/app/hooks/src/modern.runtime.mdx +9 -0
  57. package/docs/apis/app/hooks/src/routes.mdx +90 -0
  58. package/docs/apis/app/hooks/src/server.mdx +7 -0
  59. package/docs/apis/app/runtime/_meta.json +32 -0
  60. package/docs/apis/app/runtime/bff/use-backend-context.mdx +30 -0
  61. package/docs/apis/app/runtime/core/create-root.mdx +22 -0
  62. package/docs/apis/app/runtime/core/render.mdx +42 -0
  63. package/docs/apis/app/runtime/core/runtime-context.mdx +160 -0
  64. package/docs/apis/app/runtime/router/router.mdx +288 -0
  65. package/docs/apis/app/runtime/ssr/no-ssr.mdx +38 -0
  66. package/docs/apis/app/runtime/ssr/renderStreaming.mdx +71 -0
  67. package/docs/apis/app/runtime/ssr/renderString.mdx +64 -0
  68. package/docs/apis/app/runtime/ssr/requestHandler.mdx +48 -0
  69. package/docs/apis/app/runtime/utility/css-in-js.mdx +44 -0
  70. package/docs/apis/app/runtime/utility/head.mdx +38 -0
  71. package/docs/apis/app/runtime/utility/loadable.mdx +85 -0
  72. package/docs/components/auto-upgrade.mdx +0 -0
  73. package/docs/components/bff-upload.mdx +97 -0
  74. package/docs/components/build-output.mdx +45 -0
  75. package/docs/components/bundler.mdx +3 -0
  76. package/docs/components/convention-routing-motivation.mdx +0 -0
  77. package/docs/components/debug-app.mdx +15 -0
  78. package/docs/components/default-browserslist.mdx +7 -0
  79. package/docs/components/deploy-command.mdx +14 -0
  80. package/docs/components/deploy.mdx +1 -0
  81. package/docs/components/enable-bff-caution.mdx +3 -0
  82. package/docs/components/enable-bff.mdx +56 -0
  83. package/docs/components/enable-ssg.mdx +49 -0
  84. package/docs/components/entry-mode.mdx +0 -0
  85. package/docs/components/entry-scan-logic.mdx +7 -0
  86. package/docs/components/extend-bff-function.mdx +3 -0
  87. package/docs/components/hono.mdx +120 -0
  88. package/docs/components/init-app.mdx +93 -0
  89. package/docs/components/init-rspack-app.mdx +5 -0
  90. package/docs/components/internal-logger.mdx +25 -0
  91. package/docs/components/internal-metrics.mdx +20 -0
  92. package/docs/components/international/custom-instance-code.mdx +16 -0
  93. package/docs/components/international/init-options-desc.mdx +1 -0
  94. package/docs/components/international/install-command.mdx +10 -0
  95. package/docs/components/international/instance-code.mdx +16 -0
  96. package/docs/components/international/introduce.mdx +5 -0
  97. package/docs/components/international/platform-support.mdx +0 -0
  98. package/docs/components/language-config.mdx +9 -0
  99. package/docs/components/micro-frontend.mdx +6 -0
  100. package/docs/components/micro-master-manifest-config.mdx +15 -0
  101. package/docs/components/micro-runtime-config.mdx +17 -0
  102. package/docs/components/module-federation.mdx +7 -0
  103. package/docs/components/new-entry-tooltip.mdx +0 -0
  104. package/docs/components/nodeVersion.mdx +28 -0
  105. package/docs/components/other-plugins.mdx +0 -0
  106. package/docs/components/output-asset-prefix-extend.mdx +0 -0
  107. package/docs/components/output-distpath-warning.mdx +0 -0
  108. package/docs/components/output-polyfill-extend.mdx +1 -0
  109. package/docs/components/prerequisites.mdx +18 -0
  110. package/docs/components/release-note.mdx +1 -0
  111. package/docs/components/routes-practice.mdx +0 -0
  112. package/docs/components/rsbuild-config-tooltip.mdx +5 -0
  113. package/docs/components/rsbuild.mdx +3 -0
  114. package/docs/components/rsc-deploy-tip.mdx +1 -0
  115. package/docs/components/rspack.mdx +3 -0
  116. package/docs/components/rspackTip.mdx +7 -0
  117. package/docs/components/runtime-cli-config.mdx +0 -0
  118. package/docs/components/serve-command.mdx +22 -0
  119. package/docs/components/ssr-monitor.mdx +3 -0
  120. package/docs/components/stream-ssr-performance.mdx +0 -0
  121. package/docs/components/swc.mdx +3 -0
  122. package/docs/components/tech-stack-node-framework.mdx +1 -0
  123. package/docs/components/turtorials-example-list.mdx +2 -0
  124. package/docs/components/ua-polyfill.mdx +44 -0
  125. package/docs/components/upgrade-browserslist.mdx +0 -0
  126. package/docs/components/upgrade-config-deploy.mdx +0 -0
  127. package/docs/components/upgrade-faq.mdx +0 -0
  128. package/docs/configure/_meta.json +78 -0
  129. package/docs/configure/app/bff/cross-project.mdx +24 -0
  130. package/docs/configure/app/bff/effect.mdx +319 -0
  131. package/docs/configure/app/bff/prefix.mdx +33 -0
  132. package/docs/configure/app/bff/runtime-framework.mdx +30 -0
  133. package/docs/configure/app/builder-plugins.mdx +70 -0
  134. package/docs/configure/app/dev/asset-prefix.mdx +18 -0
  135. package/docs/configure/app/dev/before-start-url.mdx +21 -0
  136. package/docs/configure/app/dev/client.mdx +45 -0
  137. package/docs/configure/app/dev/hmr.mdx +14 -0
  138. package/docs/configure/app/dev/host.mdx +22 -0
  139. package/docs/configure/app/dev/https.mdx +81 -0
  140. package/docs/configure/app/dev/lazy-compilation.mdx +45 -0
  141. package/docs/configure/app/dev/live-reload.mdx +14 -0
  142. package/docs/configure/app/dev/mock-dir.mdx +35 -0
  143. package/docs/configure/app/dev/progress-bar.mdx +23 -0
  144. package/docs/configure/app/dev/server.mdx +128 -0
  145. package/docs/configure/app/dev/setup-middlewares.mdx +36 -0
  146. package/docs/configure/app/dev/start-url.mdx +53 -0
  147. package/docs/configure/app/dev/watch-files.mdx +31 -0
  148. package/docs/configure/app/dev/write-to-disk.mdx +14 -0
  149. package/docs/configure/app/experiments/source-build.mdx +33 -0
  150. package/docs/configure/app/html/app-icon.mdx +32 -0
  151. package/docs/configure/app/html/crossorigin.mdx +14 -0
  152. package/docs/configure/app/html/favicon.mdx +20 -0
  153. package/docs/configure/app/html/inject.mdx +14 -0
  154. package/docs/configure/app/html/meta.mdx +28 -0
  155. package/docs/configure/app/html/mount-id.mdx +14 -0
  156. package/docs/configure/app/html/output-structure.mdx +14 -0
  157. package/docs/configure/app/html/script-loading.mdx +14 -0
  158. package/docs/configure/app/html/tags.mdx +19 -0
  159. package/docs/configure/app/html/template-parameters.mdx +37 -0
  160. package/docs/configure/app/html/template.mdx +14 -0
  161. package/docs/configure/app/html/title.mdx +22 -0
  162. package/docs/configure/app/output/asset-prefix.mdx +18 -0
  163. package/docs/configure/app/output/assets-retry.mdx +81 -0
  164. package/docs/configure/app/output/charset.mdx +14 -0
  165. package/docs/configure/app/output/clean-dist-path.mdx +20 -0
  166. package/docs/configure/app/output/convert-to-rem.mdx +83 -0
  167. package/docs/configure/app/output/copy.mdx +14 -0
  168. package/docs/configure/app/output/css-modules.mdx +52 -0
  169. package/docs/configure/app/output/data-uri-limit.mdx +30 -0
  170. package/docs/configure/app/output/disable-css-module-extension.mdx +59 -0
  171. package/docs/configure/app/output/disable-inline-runtime-chunk.mdx +45 -0
  172. package/docs/configure/app/output/disable-svgr.mdx +22 -0
  173. package/docs/configure/app/output/disable-ts-checker.mdx +53 -0
  174. package/docs/configure/app/output/dist-path.mdx +51 -0
  175. package/docs/configure/app/output/enable-asset-manifest.mdx +40 -0
  176. package/docs/configure/app/output/enable-css-module-tsdeclaration.mdx +32 -0
  177. package/docs/configure/app/output/enable-inline-route-manifests.mdx +20 -0
  178. package/docs/configure/app/output/externals.mdx +24 -0
  179. package/docs/configure/app/output/filename-hash.mdx +14 -0
  180. package/docs/configure/app/output/filename.mdx +59 -0
  181. package/docs/configure/app/output/inject-styles.mdx +14 -0
  182. package/docs/configure/app/output/inline-scripts.mdx +33 -0
  183. package/docs/configure/app/output/inline-styles.mdx +33 -0
  184. package/docs/configure/app/output/legal-comments.mdx +22 -0
  185. package/docs/configure/app/output/minify.mdx +26 -0
  186. package/docs/configure/app/output/override-browserslist.mdx +26 -0
  187. package/docs/configure/app/output/polyfill.mdx +18 -0
  188. package/docs/configure/app/output/source-map.mdx +34 -0
  189. package/docs/configure/app/output/split-route-chunks.mdx +20 -0
  190. package/docs/configure/app/output/ssg.mdx +85 -0
  191. package/docs/configure/app/output/ssgByEntries.mdx +93 -0
  192. package/docs/configure/app/output/svg-default-export.mdx +34 -0
  193. package/docs/configure/app/output/temp-dir.mdx +24 -0
  194. package/docs/configure/app/performance/build-cache.mdx +48 -0
  195. package/docs/configure/app/performance/chunk-split.mdx +44 -0
  196. package/docs/configure/app/performance/dns-prefetch.mdx +19 -0
  197. package/docs/configure/app/performance/preconnect.mdx +20 -0
  198. package/docs/configure/app/performance/prefetch.mdx +25 -0
  199. package/docs/configure/app/performance/preload.mdx +27 -0
  200. package/docs/configure/app/performance/print-file-size.mdx +44 -0
  201. package/docs/configure/app/performance/profile.mdx +14 -0
  202. package/docs/configure/app/performance/remove-console.mdx +14 -0
  203. package/docs/configure/app/performance/remove-moment-locale.mdx +14 -0
  204. package/docs/configure/app/performance/rsdoctor.mdx +42 -0
  205. package/docs/configure/app/plugins.mdx +59 -0
  206. package/docs/configure/app/resolve/alias-strategy.mdx +14 -0
  207. package/docs/configure/app/resolve/alias.mdx +13 -0
  208. package/docs/configure/app/resolve/condition-names.mdx +18 -0
  209. package/docs/configure/app/resolve/dedupe.mdx +13 -0
  210. package/docs/configure/app/resolve/extensions.mdx +18 -0
  211. package/docs/configure/app/runtime/0-intro.mdx +61 -0
  212. package/docs/configure/app/runtime/plugins.mdx +58 -0
  213. package/docs/configure/app/runtime/router.mdx +39 -0
  214. package/docs/configure/app/security/check-syntax.mdx +73 -0
  215. package/docs/configure/app/security/nonce.mdx +19 -0
  216. package/docs/configure/app/security/sri.mdx +24 -0
  217. package/docs/configure/app/server/base-url.mdx +30 -0
  218. package/docs/configure/app/server/port.mdx +22 -0
  219. package/docs/configure/app/server/public-routes.mdx +26 -0
  220. package/docs/configure/app/server/routes.mdx +90 -0
  221. package/docs/configure/app/server/rsc.mdx +30 -0
  222. package/docs/configure/app/server/ssr-by-entries.mdx +29 -0
  223. package/docs/configure/app/server/ssr.mdx +85 -0
  224. package/docs/configure/app/server/tsconfig-path.mdx +63 -0
  225. package/docs/configure/app/source/alias-strategy.mdx +18 -0
  226. package/docs/configure/app/source/alias.mdx +27 -0
  227. package/docs/configure/app/source/config-dir.mdx +24 -0
  228. package/docs/configure/app/source/decorators.mdx +29 -0
  229. package/docs/configure/app/source/define.mdx +20 -0
  230. package/docs/configure/app/source/disable-default-entries.mdx +32 -0
  231. package/docs/configure/app/source/enable-async-entry.mdx +54 -0
  232. package/docs/configure/app/source/enable-async-pre-entry.mdx +30 -0
  233. package/docs/configure/app/source/entries-dir.mdx +39 -0
  234. package/docs/configure/app/source/entries.mdx +183 -0
  235. package/docs/configure/app/source/exclude.mdx +14 -0
  236. package/docs/configure/app/source/global-vars.mdx +110 -0
  237. package/docs/configure/app/source/include.mdx +40 -0
  238. package/docs/configure/app/source/main-entry-name.mdx +28 -0
  239. package/docs/configure/app/source/pre-entry.mdx +14 -0
  240. package/docs/configure/app/source/react-compiler.mdx +72 -0
  241. package/docs/configure/app/source/transform-import.mdx +31 -0
  242. package/docs/configure/app/split-chunks.mdx +17 -0
  243. package/docs/configure/app/tools/autoprefixer.mdx +48 -0
  244. package/docs/configure/app/tools/bundler-chain.mdx +30 -0
  245. package/docs/configure/app/tools/css-extract.mdx +37 -0
  246. package/docs/configure/app/tools/css-loader.mdx +21 -0
  247. package/docs/configure/app/tools/dev-server.mdx +117 -0
  248. package/docs/configure/app/tools/html-plugin.mdx +45 -0
  249. package/docs/configure/app/tools/less.mdx +85 -0
  250. package/docs/configure/app/tools/lightningcss-loader.mdx +39 -0
  251. package/docs/configure/app/tools/minify-css.mdx +57 -0
  252. package/docs/configure/app/tools/postcss.mdx +38 -0
  253. package/docs/configure/app/tools/rspack.mdx +14 -0
  254. package/docs/configure/app/tools/sass.mdx +82 -0
  255. package/docs/configure/app/tools/style-loader.mdx +14 -0
  256. package/docs/configure/app/tools/swc.mdx +69 -0
  257. package/docs/configure/app/tools/ts-checker.mdx +103 -0
  258. package/docs/configure/app/usage.mdx +276 -0
  259. package/docs/guides/_meta.json +37 -0
  260. package/docs/guides/advanced-features/_meta.json +32 -0
  261. package/docs/guides/advanced-features/bff/_meta.json +10 -0
  262. package/docs/guides/advanced-features/bff/cross-project.mdx +110 -0
  263. package/docs/guides/advanced-features/bff/data-platform.mdx +120 -0
  264. package/docs/guides/advanced-features/bff/extend-server.mdx +120 -0
  265. package/docs/guides/advanced-features/bff/frameworks.mdx +131 -0
  266. package/docs/guides/advanced-features/bff/function.mdx +265 -0
  267. package/docs/guides/advanced-features/bff/operators.mdx +629 -0
  268. package/docs/guides/advanced-features/bff/sdk.mdx +116 -0
  269. package/docs/guides/advanced-features/bff/upload.mdx +7 -0
  270. package/docs/guides/advanced-features/bff.mdx +22 -0
  271. package/docs/guides/advanced-features/build-performance.mdx +134 -0
  272. package/docs/guides/advanced-features/compatibility.mdx +81 -0
  273. package/docs/guides/advanced-features/international/_meta.json +10 -0
  274. package/docs/guides/advanced-features/international/advanced.mdx +132 -0
  275. package/docs/guides/advanced-features/international/api.mdx +271 -0
  276. package/docs/guides/advanced-features/international/best-practices.mdx +290 -0
  277. package/docs/guides/advanced-features/international/configuration.mdx +222 -0
  278. package/docs/guides/advanced-features/international/locale-detection.mdx +130 -0
  279. package/docs/guides/advanced-features/international/quick-start.mdx +112 -0
  280. package/docs/guides/advanced-features/international/resource-loading.mdx +158 -0
  281. package/docs/guides/advanced-features/international/routing.mdx +177 -0
  282. package/docs/guides/advanced-features/international.mdx +29 -0
  283. package/docs/guides/advanced-features/low-level.mdx +50 -0
  284. package/docs/guides/advanced-features/page-performance/_meta.json +1 -0
  285. package/docs/guides/advanced-features/page-performance/code-split.mdx +81 -0
  286. package/docs/guides/advanced-features/page-performance/inline-assets.mdx +163 -0
  287. package/docs/guides/advanced-features/page-performance/optimize-bundle.mdx +101 -0
  288. package/docs/guides/advanced-features/page-performance/react-compiler.mdx +51 -0
  289. package/docs/guides/advanced-features/server-monitor/_meta.json +1 -0
  290. package/docs/guides/advanced-features/server-monitor/logger.mdx +19 -0
  291. package/docs/guides/advanced-features/server-monitor/metrics.mdx +41 -0
  292. package/docs/guides/advanced-features/server-monitor/monitors.mdx +242 -0
  293. package/docs/guides/advanced-features/source-build.mdx +168 -0
  294. package/docs/guides/advanced-features/web-server.mdx +296 -0
  295. package/docs/guides/basic-features/_meta.json +49 -0
  296. package/docs/guides/basic-features/alias.mdx +106 -0
  297. package/docs/guides/basic-features/css/_meta.json +1 -0
  298. package/docs/guides/basic-features/css/css-in-js.mdx +69 -0
  299. package/docs/guides/basic-features/css/css-modules.mdx +212 -0
  300. package/docs/guides/basic-features/css/css.mdx +31 -0
  301. package/docs/guides/basic-features/css/tailwindcss.mdx +27 -0
  302. package/docs/guides/basic-features/data/_meta.json +1 -0
  303. package/docs/guides/basic-features/data/data-cache.mdx +515 -0
  304. package/docs/guides/basic-features/data/data-fetch.mdx +419 -0
  305. package/docs/guides/basic-features/data/data-write.mdx +230 -0
  306. package/docs/guides/basic-features/debug/_meta.json +1 -0
  307. package/docs/guides/basic-features/debug/mock.mdx +113 -0
  308. package/docs/guides/basic-features/debug/proxy.mdx +25 -0
  309. package/docs/guides/basic-features/debug/rsdoctor.mdx +47 -0
  310. package/docs/guides/basic-features/debug/using-storybook.mdx +100 -0
  311. package/docs/guides/basic-features/deploy.mdx +448 -0
  312. package/docs/guides/basic-features/env-vars.mdx +181 -0
  313. package/docs/guides/basic-features/html.mdx +259 -0
  314. package/docs/guides/basic-features/output-files.mdx +145 -0
  315. package/docs/guides/basic-features/render/_meta.json +1 -0
  316. package/docs/guides/basic-features/render/before-render.mdx +108 -0
  317. package/docs/guides/basic-features/render/overview.mdx +51 -0
  318. package/docs/guides/basic-features/render/rsc.mdx +533 -0
  319. package/docs/guides/basic-features/render/ssg.mdx +167 -0
  320. package/docs/guides/basic-features/render/ssr-cache.mdx +201 -0
  321. package/docs/guides/basic-features/render/ssr.mdx +323 -0
  322. package/docs/guides/basic-features/render/streaming-ssr.mdx +267 -0
  323. package/docs/guides/basic-features/routes/_meta.json +1 -0
  324. package/docs/guides/basic-features/routes/config-routes.mdx +427 -0
  325. package/docs/guides/basic-features/routes/routes.mdx +532 -0
  326. package/docs/guides/basic-features/static-assets/_meta.json +1 -0
  327. package/docs/guides/basic-features/static-assets/json-files.mdx +124 -0
  328. package/docs/guides/basic-features/static-assets/svg-assets.mdx +172 -0
  329. package/docs/guides/basic-features/static-assets/wasm-assets.mdx +66 -0
  330. package/docs/guides/basic-features/static-assets.mdx +164 -0
  331. package/docs/guides/basic-features/testing/_meta.json +1 -0
  332. package/docs/guides/basic-features/testing/playwright.mdx +111 -0
  333. package/docs/guides/basic-features/testing/rstest.mdx +192 -0
  334. package/docs/guides/concept/_meta.json +1 -0
  335. package/docs/guides/concept/builder.mdx +60 -0
  336. package/docs/guides/concept/entries.mdx +325 -0
  337. package/docs/guides/concept/server.mdx +35 -0
  338. package/docs/guides/get-started/_meta.json +9 -0
  339. package/docs/guides/get-started/ai-coding-agents.mdx +63 -0
  340. package/docs/guides/get-started/glossary.mdx +63 -0
  341. package/docs/guides/get-started/introduction.mdx +45 -0
  342. package/docs/guides/get-started/quick-start.mdx +92 -0
  343. package/docs/guides/get-started/tech-stack.mdx +97 -0
  344. package/docs/guides/get-started/ultramodern.mdx +433 -0
  345. package/docs/guides/get-started/upgrade.mdx +114 -0
  346. package/docs/guides/topic-detail/_meta.json +8 -0
  347. package/docs/guides/topic-detail/module-federation/_meta.json +1 -0
  348. package/docs/guides/topic-detail/module-federation/application.mdx +116 -0
  349. package/docs/guides/topic-detail/module-federation/deploy.mdx +104 -0
  350. package/docs/guides/topic-detail/module-federation/i18n.mdx +670 -0
  351. package/docs/guides/topic-detail/module-federation/introduce.mdx +36 -0
  352. package/docs/guides/topic-detail/module-federation/ssr.mdx +177 -0
  353. package/docs/guides/topic-detail/module-federation/usage.mdx +202 -0
  354. package/docs/guides/troubleshooting/_meta.json +1 -0
  355. package/docs/guides/troubleshooting/builder.mdx +114 -0
  356. package/docs/guides/troubleshooting/cli.mdx +39 -0
  357. package/docs/guides/troubleshooting/dependencies.mdx +123 -0
  358. package/docs/guides/troubleshooting/hmr.mdx +148 -0
  359. package/docs/guides/upgrade/_meta.json +1 -0
  360. package/docs/guides/upgrade/config.mdx +951 -0
  361. package/docs/guides/upgrade/entry.mdx +463 -0
  362. package/docs/guides/upgrade/other.mdx +183 -0
  363. package/docs/guides/upgrade/overview.mdx +33 -0
  364. package/docs/guides/upgrade/tailwindcss.mdx +92 -0
  365. package/docs/guides/upgrade/web-server.md +109 -0
  366. package/docs/index.md +4 -0
  367. package/package.json +43 -20
  368. package/scripts/copy-main-doc.mjs +50 -0
@@ -0,0 +1,271 @@
1
+ ---
2
+ title: API Reference
3
+ ---
4
+
5
+ # API Reference
6
+
7
+ ## useModernI18n
8
+
9
+ `useModernI18n` is a React Hook provided by the plugin. Use it to access internationalization state and actions in components.
10
+
11
+ ### Return Value
12
+
13
+ | Field | Type | Description |
14
+ | --- | --- | --- |
15
+ | `language` | `string` | Current language code |
16
+ | `changeLanguage` | `(lang: string) => Promise<void>` | Switches language |
17
+ | `supportedLanguages` | `string[]` | Supported language list, from `localeDetection.languages` |
18
+ | `localisedUrls` | `boolean \| Record<string, Record<string, string>>` | Localised URL mapping from `localeDetection.localisedUrls` |
19
+ | `isLanguageSupported` | `(lang: string) => boolean` | Checks whether a language is in the supported list |
20
+ | `isResourcesReady` | `boolean` | Whether translation resources for the current language have finished loading |
21
+ | `i18nInstance` | `I18nInstance` | i18next instance for advanced scenarios |
22
+
23
+ When `localePathRedirect` is enabled and `localisedUrls` is omitted, Modern.js keeps prefix-only paths such as `/en/about`. Translated path segments are enabled only by a non-empty `localisedUrls` map. Route generation validates every localisable path and every configured language only while that map is enabled.
24
+
25
+ ### Basic Usage
26
+
27
+ ```tsx
28
+ import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
29
+ import { useTranslation } from 'react-i18next';
30
+
31
+ function LanguageSwitcher() {
32
+ const { language, changeLanguage, supportedLanguages } = useModernI18n();
33
+ const { t } = useTranslation();
34
+
35
+ return (
36
+ <div>
37
+ <p>{t('welcome')}</p>
38
+ {supportedLanguages.map(lang => (
39
+ <button
40
+ key={lang}
41
+ onClick={() => changeLanguage(lang)}
42
+ disabled={lang === language}
43
+ >
44
+ {lang}
45
+ </button>
46
+ ))}
47
+ </div>
48
+ );
49
+ }
50
+ ```
51
+
52
+ ### changeLanguage
53
+
54
+ When switching language, the following happens in order:
55
+
56
+ 1. The language of the i18next instance is updated.
57
+ 2. Browser cache is updated (Cookie / LocalStorage, depending on the `caches` configuration).
58
+ 3. The URL path prefix is updated if `localePathRedirect` is enabled.
59
+
60
+ `changeLanguage` is asynchronous, so use `await` when calling it:
61
+
62
+ ```ts
63
+ await changeLanguage('zh');
64
+ ```
65
+
66
+ ### isResourcesReady
67
+
68
+ In custom backend scenarios, translation resources are loaded asynchronously. Use `isResourcesReady` to avoid rendering before resources are ready:
69
+
70
+ ```tsx
71
+ function MyComponent() {
72
+ const { isResourcesReady } = useModernI18n();
73
+ const { t } = useTranslation();
74
+
75
+ if (!isResourcesReady) {
76
+ return <div>Loading translations...</div>;
77
+ }
78
+
79
+ return <div>{t('content')}</div>;
80
+ }
81
+ ```
82
+
83
+ `isResourcesReady` checks whether the i18n instance is initialized, whether resources are currently loading for the current language, and whether all required namespaces have finished loading.
84
+
85
+ ## I18nLink Component
86
+
87
+ A route link component with a locale prefix.
88
+
89
+ ### Props
90
+
91
+ | Prop | Type | Required | Description |
92
+ | --- | --- | --- | --- |
93
+ | `to` | `string` | Yes | Target path. Do not include the locale prefix |
94
+ | `children` | `React.ReactNode` | Yes | Link content |
95
+ | `replace` | `boolean` | No | Uses `history.replace` instead of `push` |
96
+ | `state` | `any` | No | State passed to the target route |
97
+ | Other Link props | - | No | Passed to the active router link when a router is available |
98
+
99
+ ### Usage
100
+
101
+ ```tsx
102
+ import { I18nLink } from '@modern-js/plugin-i18n/runtime';
103
+
104
+ <I18nLink to="/about">About</I18nLink>
105
+ <I18nLink to="/contact" replace>Contact</I18nLink>
106
+ <I18nLink to="/profile" state={{ from: 'home' }}>Profile</I18nLink>
107
+ ```
108
+
109
+ ## Runtime Plugin API
110
+
111
+ The i18n plugin mounts `changeLanguage` and `i18nInstance` on the `context` of the `onBeforeRender` hook for other runtime plugins:
112
+
113
+ ```ts
114
+ import type { RuntimePlugin } from '@modern-js/runtime';
115
+
116
+ const myPlugin = (): RuntimePlugin => ({
117
+ name: 'my-plugin',
118
+ setup: api => {
119
+ api.onBeforeRender(async context => {
120
+ if (!context.changeLanguage) return; // Make sure the i18n plugin is loaded.
121
+
122
+ const lang = detectLangFromRequest(context);
123
+ const supported = context.i18nInstance?.options?.supportedLngs ?? [];
124
+
125
+ if (supported.includes(lang)) {
126
+ try {
127
+ await context.changeLanguage(lang);
128
+ } catch (e) {
129
+ console.error('Language change failed:', e);
130
+ }
131
+ }
132
+ });
133
+ },
134
+ });
135
+ ```
136
+
137
+ **Notes:**
138
+
139
+ - Make sure the i18n plugin is registered before plugins that use `context.changeLanguage`.
140
+ - `changeLanguage` does not update the URL path on the server. Use it together with the routing plugin or handle the path manually.
141
+
142
+ ## Type Definitions
143
+
144
+ ### I18nInstance
145
+
146
+ The i18next instance type used by the plugin. It is a subset of the i18next `i18n` type and only lists fields actually used by the plugin:
147
+
148
+ :::warning BREAKING (UltraModern)
149
+ `I18nInstance` no longer declares a top-level `[key: string]: unknown` index
150
+ signature: TypeScript never grants an interface an implicit index signature, so
151
+ that member made the documented `runtime: { i18n: { i18nInstance: i18next } }`
152
+ usage fail to typecheck. Reading a property that is not declared below is now a
153
+ type error (TS2339) — cast to the concrete instance type instead. `t` is now a
154
+ REQUIRED member, so object literals that produce an `I18nInstance` must supply
155
+ one.
156
+ :::
157
+
158
+ ```ts
159
+ type TranslateFn = (
160
+ key: string | string[],
161
+ options?: Record<string, unknown>,
162
+ ) => string;
163
+
164
+ interface I18nInstance {
165
+ language: string;
166
+ isInitialized?: boolean;
167
+ init(options?: any, callback?: any): Promise<any>;
168
+ changeLanguage?(lng?: string, callback?: any): Promise<any>;
169
+ setLang?: (lang: string) => void | Promise<void>;
170
+ use(plugin: any): unknown;
171
+ t: TranslateFn;
172
+ exists?: (key: string | string[], options?: Record<string, unknown>) => boolean;
173
+ getFixedT?: (
174
+ lng: string | readonly string[] | null,
175
+ ns?: string | readonly string[] | null,
176
+ keyPrefix?: string,
177
+ ) => TranslateFn;
178
+ hasLoadedNamespace?: (
179
+ ns: string | readonly string[],
180
+ options?: Record<string, unknown>,
181
+ ) => boolean;
182
+ dir?: (lng?: string) => string;
183
+ languages?: readonly string[];
184
+ resolvedLanguage?: string;
185
+ createInstance?(options?: any, callback?: any): I18nInstance;
186
+ cloneInstance?(options?: any, callback?: any): I18nInstance;
187
+ options?: {
188
+ detection?: any;
189
+ backend?: any;
190
+ ns?: any;
191
+ defaultNS?: any;
192
+ };
193
+ // ...see src/runtime/i18n/instance.ts for the full member list.
194
+ }
195
+ ```
196
+
197
+ ### I18nSdkLoader
198
+
199
+ Type of the custom backend loader function:
200
+
201
+ ```ts
202
+ type I18nSdkLoader = (options: I18nSdkLoadOptions) => Promise<Resources>;
203
+
204
+ interface I18nSdkLoadOptions {
205
+ lng?: string; // Single language code
206
+ ns?: string; // Single namespace
207
+ lngs?: string[]; // Multiple language codes
208
+ nss?: string[]; // Multiple namespaces
209
+ all?: boolean; // Load all resources
210
+ }
211
+
212
+ type Resources = {
213
+ [lng: string]: {
214
+ [ns: string]: Record<string, any>;
215
+ };
216
+ };
217
+ ```
218
+
219
+ ### LanguageDetectorOptions
220
+
221
+ ```ts
222
+ interface LanguageDetectorOptions {
223
+ order?: string[];
224
+ lookupQuerystring?: string; // Default: 'lng'
225
+ lookupCookie?: string; // Default: 'i18next'
226
+ lookupLocalStorage?: string; // Default: 'i18nextLng'
227
+ lookupSession?: string;
228
+ lookupHeader?: string; // Default: 'accept-language'
229
+ lookupFromPathIndex?: number; // Default: 0
230
+ caches?: false | string[];
231
+ cookieMinutes?: number; // Default: 525600 (1 year)
232
+ cookieExpirationDate?: Date;
233
+ cookieDomain?: string;
234
+ }
235
+ ```
236
+
237
+ ## Integration with react-i18next
238
+
239
+ The plugin is fully compatible with react-i18next, and the two API sets can be used together:
240
+
241
+ - **`useTranslation`** (react-i18next): Gets the `t()` function for translation. This is the most commonly used Hook.
242
+ - **`useModernI18n`** (provided by the plugin): Gets plugin-level state such as language switching, supported language list, and resource loading status.
243
+
244
+ Most components only need `useTranslation`. Use `useModernI18n` only when you need language switching or resource loading status:
245
+
246
+ ```tsx
247
+ import { useTranslation } from 'react-i18next';
248
+ import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
249
+
250
+ function App() {
251
+ const { t } = useTranslation(); // Translate text
252
+ const { language, changeLanguage } = useModernI18n(); // Switch language
253
+
254
+ return (
255
+ <div>
256
+ <h1>{t('welcome')}</h1>
257
+ <button onClick={() => changeLanguage('zh')}>Chinese</button>
258
+ <button onClick={() => changeLanguage('en')}>English</button>
259
+ </div>
260
+ );
261
+ }
262
+ ```
263
+
264
+ You can also get the i18next instance from `useModernI18n` and call capabilities outside react-i18next directly:
265
+
266
+ ```tsx
267
+ const { i18nInstance } = useModernI18n();
268
+
269
+ // Dynamically add translation resources.
270
+ i18nInstance.addResourceBundle('zh', 'translation', { key: 'Value' }, true, true);
271
+ ```
@@ -0,0 +1,290 @@
1
+ ---
2
+ title: Best Practices
3
+ ---
4
+
5
+ # Best Practices
6
+
7
+ ## Resource File Organization
8
+
9
+ Namespaces are used to split translation files by business module. The default namespace is `translation`. Splitting by module can reduce the initial loading size and load only the namespaces that are actually used.
10
+
11
+ Recommended directory structure:
12
+
13
+ ```
14
+ locales/
15
+ ├── en/
16
+ │ ├── translation.json <- Default namespace for common text
17
+ │ ├── common.json <- Common UI text such as buttons and labels
18
+ │ └── errors.json <- Error messages
19
+ └── zh/
20
+ ├── translation.json
21
+ ├── common.json
22
+ └── errors.json
23
+ ```
24
+
25
+ Declare multiple namespaces:
26
+
27
+ ```ts
28
+ // src/modern.runtime.ts
29
+ export default defineRuntimeConfig({
30
+ i18n: {
31
+ initOptions: {
32
+ ns: ['translation', 'common', 'errors'],
33
+ defaultNS: 'translation',
34
+ },
35
+ },
36
+ });
37
+ ```
38
+
39
+ Use a specific namespace in components:
40
+
41
+ ```tsx
42
+ import { useTranslation } from 'react-i18next';
43
+
44
+ // Use a single namespace.
45
+ function MyButton() {
46
+ const { t } = useTranslation('common');
47
+ return <button>{t('submit')}</button>;
48
+ }
49
+
50
+ // Use multiple namespaces and access keys with namespace:key.
51
+ function Dashboard() {
52
+ const { t } = useTranslation(['dashboard', 'common']);
53
+ return (
54
+ <header>
55
+ <h1>{t('dashboard:title')}</h1>
56
+ <button>{t('common:button.refresh')}</button>
57
+ </header>
58
+ );
59
+ }
60
+
61
+ // keyPrefix can omit repeated prefixes.
62
+ function ButtonGroup() {
63
+ const { t } = useTranslation('common', { keyPrefix: 'button' });
64
+ return (
65
+ <>
66
+ <button>{t('submit')}</button> {/* common:button.submit */}
67
+ <button>{t('cancel')}</button> {/* common:button.cancel */}
68
+ </>
69
+ );
70
+ }
71
+ ```
72
+
73
+ ## Translation Key Naming
74
+
75
+ The quality of translation key names directly affects maintenance cost. Recommendations:
76
+
77
+ - **Use semantic words** and avoid abbreviations: `button.submit` is better than `btn.sbm`.
78
+ - **Use module-based prefixes**: `dashboard.table.header`, `auth.login.title`.
79
+ - **Do not use complete source-language text as keys**: Keys should be stable identifiers, not the translation content itself.
80
+ - **Use dots for hierarchy**: Match the nested JSON structure.
81
+
82
+ ```json
83
+ // Recommended
84
+ {
85
+ "page": {
86
+ "title": "User Settings",
87
+ "description": "Manage your account information"
88
+ },
89
+ "form": {
90
+ "username": { "label": "Username", "placeholder": "Enter username" },
91
+ "submit": "Save changes"
92
+ }
93
+ }
94
+ ```
95
+
96
+ ```tsx
97
+ t('page.title')
98
+ t('form.username.label')
99
+ t('form.submit', { defaultValue: 'Save' }) // defaultValue prevents showing the key string when the key is missing.
100
+ ```
101
+
102
+ ## Plurals
103
+
104
+ i18next automatically selects the correct plural form based on the `count` parameter. **Note: since i18next v21, JSON v4 format is used by default**. Plural suffixes changed to CLDR standards such as `_zero`, `_one`, and `_other`; the old `_plural` format is deprecated.
105
+
106
+ ```json
107
+ // locales/en/translation.json (JSON v4 format)
108
+ {
109
+ "item_zero": "No items",
110
+ "item_one": "{{count}} item",
111
+ "item_other": "{{count}} items"
112
+ }
113
+ ```
114
+
115
+ ```json
116
+ // locales/zh/translation.json
117
+ {
118
+ "item_zero": "没有条目",
119
+ "item_other": "{{count}} 个条目"
120
+ }
121
+ ```
122
+
123
+ ```tsx
124
+ t('item', { count: 0 }) // "没有条目" / "No items"
125
+ t('item', { count: 1 }) // "没有条目" / "1 item" (Chinese usually has only one form)
126
+ t('item', { count: 5 }) // "5 个条目" / "5 items"
127
+ ```
128
+
129
+ Different languages have different plural rules. English has singular and plural, while Russian has one/few/many forms. i18next automatically matches CLDR rules based on the language code.
130
+
131
+ :::tip
132
+ Use the `_plural` format only if your project uses an old i18next version or explicitly configures `compatibilityJSON: 'v3'`. New projects should use v4 format.
133
+ :::
134
+
135
+ ## Nested Keys
136
+
137
+ Nested structures can clearly reflect UI hierarchy and are accessed with dots:
138
+
139
+ ```json
140
+ {
141
+ "modal": {
142
+ "confirm": {
143
+ "title": "Confirm deletion",
144
+ "message": "This action cannot be undone. Continue?",
145
+ "actions": {
146
+ "ok": "Confirm",
147
+ "cancel": "Cancel"
148
+ }
149
+ }
150
+ }
151
+ }
152
+ ```
153
+
154
+ ```tsx
155
+ t('modal.confirm.title')
156
+ t('modal.confirm.actions.ok')
157
+ ```
158
+
159
+ Avoid nesting deeper than 4 levels. Excessive depth makes key names long and hard to maintain.
160
+
161
+ ## Formatting Interpolation
162
+
163
+ Use the `interpolation.format` function to handle number, date, currency, and other formatting consistently, instead of calling `Intl` APIs separately in each component:
164
+
165
+ ```ts
166
+ // src/modern.runtime.ts
167
+ export default defineRuntimeConfig({
168
+ i18n: {
169
+ initOptions: {
170
+ interpolation: {
171
+ escapeValue: false, // React already escapes text. Disable this to avoid double escaping.
172
+ format(value, format, lng) {
173
+ if (format === 'currency') {
174
+ return new Intl.NumberFormat(lng, {
175
+ style: 'currency',
176
+ currency: lng === 'zh' ? 'CNY' : 'USD',
177
+ }).format(Number(value));
178
+ }
179
+ if (format === 'date') {
180
+ return new Intl.DateTimeFormat(lng, { dateStyle: 'medium' }).format(
181
+ value instanceof Date ? value : new Date(value),
182
+ );
183
+ }
184
+ return value;
185
+ },
186
+ },
187
+ },
188
+ },
189
+ });
190
+ ```
191
+
192
+ Use `, format` in translation files to specify the formatting type:
193
+
194
+ ```json
195
+ {
196
+ "price": "Current price: {{value, currency}}",
197
+ "expiry": "Expiry date: {{date, date}}"
198
+ }
199
+ ```
200
+
201
+ ```tsx
202
+ t('price', { value: 99.5 }) // "当前价格:¥99.50" (zh) / "$99.50" (en)
203
+ t('expiry', { date: new Date() }) // "到期日:2025年5月12日" (zh)
204
+ ```
205
+
206
+ ## Error Handling
207
+
208
+ ### Loading State Handling
209
+
210
+ When using a custom backend, translation resources are loaded asynchronously. Use `isResourcesReady` to handle the loading state:
211
+
212
+ ```tsx
213
+ import { useModernI18n } from '@modern-js/plugin-i18n/runtime';
214
+ import { useTranslation } from 'react-i18next';
215
+
216
+ function MyComponent() {
217
+ const { isResourcesReady } = useModernI18n();
218
+ const { t } = useTranslation();
219
+
220
+ if (!isResourcesReady) {
221
+ return <div>Loading translations...</div>;
222
+ }
223
+
224
+ return <div>{t('content', { defaultValue: 'Default content' })}</div>;
225
+ }
226
+ ```
227
+
228
+ Static resources (HTTP/FS backend) load quickly, so loading state handling is usually unnecessary. If you need to check, use `i18n.isInitialized`:
229
+
230
+ ```tsx
231
+ const { t, i18n } = useTranslation();
232
+ if (!i18n.isInitialized) return null;
233
+ ```
234
+
235
+ ### Missing Translation Keys
236
+
237
+ Provide fallback text with `defaultValue` to prevent key strings from appearing in the UI:
238
+
239
+ ```tsx
240
+ t('missing.key', { defaultValue: 'Default text' })
241
+ ```
242
+
243
+ In development, you can enable `saveMissing` to output missing keys to the console for debugging:
244
+
245
+ ```ts
246
+ initOptions: {
247
+ fallbackLng: 'en',
248
+ saveMissing: true, // Recommended only in development.
249
+ }
250
+ ```
251
+
252
+ ### Network Failures and Resource 404s
253
+
254
+ When translation file loading fails, i18next falls back to the resources for `fallbackLng`. If those also fail, `t()` returns the key string directly. Recommendations:
255
+
256
+ - In production, make sure the translation files for `fallbackLng`, usually `en`, are complete and stable.
257
+ - When using chained backend, use local files as the fallback to reduce dependency on remote services.
258
+
259
+ ## Type Safety
260
+
261
+ Extend react-i18next type definitions so TypeScript can check whether translation keys exist and provide autocomplete:
262
+
263
+ ```ts
264
+ // types/i18n.d.ts
265
+ import 'react-i18next';
266
+ import type translation from '../locales/en/translation.json';
267
+ import type common from '../locales/en/common.json';
268
+
269
+ declare module 'react-i18next' {
270
+ interface CustomTypeOptions {
271
+ defaultNS: 'translation';
272
+ resources: {
273
+ translation: typeof translation;
274
+ common: typeof common;
275
+ };
276
+ }
277
+ }
278
+ ```
279
+
280
+ Referencing JSON file types directly is less likely to drift from actual translation files than manually written interfaces:
281
+
282
+ ```tsx
283
+ const { t } = useTranslation();
284
+ t('welcome'); // TypeScript autocomplete
285
+ t('nonExistent'); // TypeScript error
286
+ ```
287
+
288
+ :::tip Large projects
289
+ When there are many translation files, manually maintaining type files is costly. You can use [i18next-parser](https://github.com/i18next/i18next-parser) or [i18next-resources-for-ts](https://github.com/i18next/i18next-resources-for-ts) to generate TypeScript types from translation files automatically.
290
+ :::