@modern-js/app-tools 3.9.3 → 3.10.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 (291) hide show
  1. package/dist/cjs/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.js +54 -2
  2. package/dist/cjs/compat/hooks.js +0 -5
  3. package/dist/cjs/compat/index.js +0 -5
  4. package/dist/cjs/compat/utils.js +0 -5
  5. package/dist/cjs/plugins/initialize/index.js +0 -1
  6. package/dist/esm/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.mjs +54 -2
  7. package/dist/esm/compat/hooks.mjs +0 -5
  8. package/dist/esm/compat/index.mjs +0 -5
  9. package/dist/esm/compat/utils.mjs +0 -5
  10. package/dist/esm/plugins/initialize/index.mjs +0 -1
  11. package/dist/esm-node/builder/shared/bundlerPlugins/HtmlAsyncChunkPlugin.mjs +54 -2
  12. package/dist/esm-node/compat/hooks.mjs +0 -5
  13. package/dist/esm-node/compat/index.mjs +0 -5
  14. package/dist/esm-node/compat/utils.mjs +0 -5
  15. package/dist/esm-node/plugins/initialize/index.mjs +0 -1
  16. package/dist/types/types/config/index.d.ts +0 -2
  17. package/dist/types/types/config/tools.d.ts +0 -8
  18. package/docs/apis/app/commands.md +2 -0
  19. package/docs/apis/app/hooks/api/lambda.md +2 -0
  20. package/docs/apis/app/hooks/config/favicon.md +2 -0
  21. package/docs/apis/app/hooks/config/html.md +2 -0
  22. package/docs/apis/app/hooks/config/icon.md +2 -0
  23. package/docs/apis/app/hooks/config/mock.md +2 -0
  24. package/docs/apis/app/hooks/config/public.md +2 -0
  25. package/docs/apis/app/hooks/config/upload.md +3 -3
  26. package/docs/apis/app/hooks/modern-config.md +2 -0
  27. package/docs/apis/app/hooks/server/server.md +2 -0
  28. package/docs/apis/app/hooks/shared.md +2 -0
  29. package/docs/apis/app/hooks/src/app.md +2 -0
  30. package/docs/apis/app/hooks/src/entry.md +2 -0
  31. package/docs/apis/app/hooks/src/entry.server.md +2 -0
  32. package/docs/apis/app/hooks/src/modern.runtime.md +2 -0
  33. package/docs/apis/app/hooks/src/routes.md +2 -0
  34. package/docs/apis/app/hooks/src/server.md +2 -0
  35. package/docs/apis/app/runtime/bff/use-hono-context.md +2 -0
  36. package/docs/apis/app/runtime/core/create-root.md +5 -1
  37. package/docs/apis/app/runtime/core/render.md +7 -2
  38. package/docs/apis/app/runtime/core/runtime-context.md +18 -16
  39. package/docs/apis/app/runtime/router/router.md +11 -6
  40. package/docs/apis/app/runtime/ssr/no-ssr.md +2 -0
  41. package/docs/apis/app/runtime/ssr/renderStreaming.md +2 -0
  42. package/docs/apis/app/runtime/ssr/renderString.md +2 -0
  43. package/docs/apis/app/runtime/ssr/requestHandler.md +2 -0
  44. package/docs/apis/app/runtime/utility/css-in-js.md +2 -0
  45. package/docs/apis/app/runtime/utility/head.md +2 -0
  46. package/docs/apis/app/runtime/utility/loadable.md +2 -0
  47. package/docs/community/blog/2022-0708-updates.md +2 -0
  48. package/docs/community/blog/2022-0910-updates.md +2 -0
  49. package/docs/community/blog/overview.md +2 -0
  50. package/docs/community/blog/v2-release-note.md +2 -0
  51. package/docs/community/blog/v3-release-note.md +18 -13
  52. package/docs/community/contributing-guide.md +17 -33
  53. package/docs/community/releases.md +2 -0
  54. package/docs/community/showcase.md +2 -0
  55. package/docs/community/team.md +2 -0
  56. package/docs/configure/app/bff/cross-project.md +2 -0
  57. package/docs/configure/app/bff/prefix.md +2 -0
  58. package/docs/configure/app/builder-plugins.md +2 -0
  59. package/docs/configure/app/dev/asset-prefix.md +2 -0
  60. package/docs/configure/app/dev/before-start-url.md +2 -0
  61. package/docs/configure/app/dev/client.md +2 -0
  62. package/docs/configure/app/dev/hmr.md +2 -0
  63. package/docs/configure/app/dev/host.md +2 -0
  64. package/docs/configure/app/dev/https.md +2 -0
  65. package/docs/configure/app/dev/lazy-compilation.md +19 -1
  66. package/docs/configure/app/dev/live-reload.md +2 -0
  67. package/docs/configure/app/dev/mock-dir.md +2 -0
  68. package/docs/configure/app/dev/progress-bar.md +2 -0
  69. package/docs/configure/app/dev/server.md +2 -0
  70. package/docs/configure/app/dev/setup-middlewares.md +2 -0
  71. package/docs/configure/app/dev/start-url.md +2 -0
  72. package/docs/configure/app/dev/watch-files.md +2 -0
  73. package/docs/configure/app/dev/write-to-disk.md +2 -0
  74. package/docs/configure/app/experiments/source-build.md +2 -0
  75. package/docs/configure/app/html/app-icon.md +2 -0
  76. package/docs/configure/app/html/crossorigin.md +2 -0
  77. package/docs/configure/app/html/favicon.md +2 -0
  78. package/docs/configure/app/html/inject.md +2 -0
  79. package/docs/configure/app/html/meta.md +2 -0
  80. package/docs/configure/app/html/mount-id.md +2 -0
  81. package/docs/configure/app/html/output-structure.md +2 -0
  82. package/docs/configure/app/html/script-loading.md +2 -0
  83. package/docs/configure/app/html/tags.md +2 -0
  84. package/docs/configure/app/html/template-parameters.md +2 -0
  85. package/docs/configure/app/html/template.md +2 -0
  86. package/docs/configure/app/html/title.md +2 -0
  87. package/docs/configure/app/output/asset-prefix.md +2 -0
  88. package/docs/configure/app/output/assets-retry.md +2 -0
  89. package/docs/configure/app/output/charset.md +2 -0
  90. package/docs/configure/app/output/clean-dist-path.md +2 -0
  91. package/docs/configure/app/output/convert-to-rem.md +2 -0
  92. package/docs/configure/app/output/copy.md +2 -0
  93. package/docs/configure/app/output/css-modules.md +3 -5
  94. package/docs/configure/app/output/data-uri-limit.md +2 -0
  95. package/docs/configure/app/output/disable-css-module-extension.md +2 -0
  96. package/docs/configure/app/output/disable-inline-runtime-chunk.md +2 -0
  97. package/docs/configure/app/output/disable-svgr.md +2 -0
  98. package/docs/configure/app/output/disable-ts-checker.md +2 -0
  99. package/docs/configure/app/output/dist-path.md +2 -0
  100. package/docs/configure/app/output/enable-asset-manifest.md +2 -0
  101. package/docs/configure/app/output/enable-css-module-tsdeclaration.md +2 -0
  102. package/docs/configure/app/output/enable-inline-route-manifests.md +2 -0
  103. package/docs/configure/app/output/externals.md +2 -0
  104. package/docs/configure/app/output/filename-hash.md +2 -0
  105. package/docs/configure/app/output/filename.md +2 -0
  106. package/docs/configure/app/output/inject-styles.md +2 -0
  107. package/docs/configure/app/output/inline-scripts.md +3 -2
  108. package/docs/configure/app/output/inline-styles.md +3 -2
  109. package/docs/configure/app/output/legal-comments.md +2 -0
  110. package/docs/configure/app/output/minify.md +2 -0
  111. package/docs/configure/app/output/override-browserslist.md +2 -0
  112. package/docs/configure/app/output/polyfill.md +2 -0
  113. package/docs/configure/app/output/source-map.md +2 -0
  114. package/docs/configure/app/output/split-route-chunks.md +3 -1
  115. package/docs/configure/app/output/ssg.md +2 -0
  116. package/docs/configure/app/output/ssgByEntries.md +2 -0
  117. package/docs/configure/app/output/svg-default-export.md +2 -0
  118. package/docs/configure/app/output/temp-dir.md +2 -0
  119. package/docs/configure/app/performance/build-cache.md +2 -0
  120. package/docs/configure/app/performance/chunk-split.md +3 -4
  121. package/docs/configure/app/performance/dns-prefetch.md +2 -0
  122. package/docs/configure/app/performance/preconnect.md +2 -0
  123. package/docs/configure/app/performance/prefetch.md +2 -0
  124. package/docs/configure/app/performance/preload.md +2 -0
  125. package/docs/configure/app/performance/print-file-size.md +2 -0
  126. package/docs/configure/app/performance/profile.md +2 -0
  127. package/docs/configure/app/performance/remove-console.md +2 -0
  128. package/docs/configure/app/performance/remove-moment-locale.md +2 -0
  129. package/docs/configure/app/plugins.md +2 -0
  130. package/docs/configure/app/resolve/alias-strategy.md +2 -0
  131. package/docs/configure/app/resolve/alias.md +2 -0
  132. package/docs/configure/app/resolve/condition-names.md +2 -0
  133. package/docs/configure/app/resolve/dedupe.md +2 -0
  134. package/docs/configure/app/resolve/extensions.md +2 -0
  135. package/docs/configure/app/runtime/0-intro.md +2 -0
  136. package/docs/configure/app/runtime/plugins.md +8 -4
  137. package/docs/configure/app/runtime/router.md +2 -0
  138. package/docs/configure/app/security/check-syntax.md +2 -0
  139. package/docs/configure/app/security/nonce.md +2 -0
  140. package/docs/configure/app/security/sri.md +2 -0
  141. package/docs/configure/app/server/base-url.md +2 -0
  142. package/docs/configure/app/server/port.md +2 -0
  143. package/docs/configure/app/server/public-routes.md +2 -0
  144. package/docs/configure/app/server/routes.md +2 -0
  145. package/docs/configure/app/server/rsc.md +2 -0
  146. package/docs/configure/app/server/ssr-by-entries.md +2 -0
  147. package/docs/configure/app/server/ssr.md +3 -1
  148. package/docs/configure/app/server/tsconfig-path.md +4 -2
  149. package/docs/configure/app/source/alias-strategy.md +2 -0
  150. package/docs/configure/app/source/alias.md +2 -0
  151. package/docs/configure/app/source/config-dir.md +2 -0
  152. package/docs/configure/app/source/decorators.md +2 -0
  153. package/docs/configure/app/source/define.md +2 -0
  154. package/docs/configure/app/source/disable-default-entries.md +2 -0
  155. package/docs/configure/app/source/enable-async-entry.md +2 -0
  156. package/docs/configure/app/source/enable-async-pre-entry.md +2 -0
  157. package/docs/configure/app/source/entries-dir.md +2 -0
  158. package/docs/configure/app/source/entries.md +2 -0
  159. package/docs/configure/app/source/exclude.md +2 -0
  160. package/docs/configure/app/source/global-vars.md +2 -0
  161. package/docs/configure/app/source/include.md +2 -0
  162. package/docs/configure/app/source/main-entry-name.md +2 -0
  163. package/docs/configure/app/source/pre-entry.md +2 -0
  164. package/docs/configure/app/source/react-compiler.md +2 -0
  165. package/docs/configure/app/source/transform-import.md +2 -0
  166. package/docs/configure/app/split-chunks.md +2 -0
  167. package/docs/configure/app/tools/autoprefixer.md +2 -0
  168. package/docs/configure/app/tools/bundler-chain.md +2 -0
  169. package/docs/configure/app/tools/css-extract.md +2 -0
  170. package/docs/configure/app/tools/css-loader.md +2 -0
  171. package/docs/configure/app/tools/dev-server.md +2 -0
  172. package/docs/configure/app/tools/html-plugin.md +2 -0
  173. package/docs/configure/app/tools/less.md +2 -0
  174. package/docs/configure/app/tools/lightningcss-loader.md +2 -0
  175. package/docs/configure/app/tools/minify-css.md +2 -0
  176. package/docs/configure/app/tools/postcss.md +2 -0
  177. package/docs/configure/app/tools/rspack.md +2 -0
  178. package/docs/configure/app/tools/sass.md +8 -6
  179. package/docs/configure/app/tools/style-loader.md +2 -0
  180. package/docs/configure/app/tools/svgr.md +2 -0
  181. package/docs/configure/app/tools/swc.md +2 -0
  182. package/docs/configure/app/tools/ts-checker.md +2 -0
  183. package/docs/configure/app/usage.md +3 -5
  184. package/docs/guides/advanced-features/bff/cross-project.md +6 -4
  185. package/docs/guides/advanced-features/bff/extend-server.md +2 -0
  186. package/docs/guides/advanced-features/bff/frameworks.md +2 -0
  187. package/docs/guides/advanced-features/bff/function.md +2 -0
  188. package/docs/guides/advanced-features/bff/operators.md +2 -0
  189. package/docs/guides/advanced-features/bff/sdk.md +2 -0
  190. package/docs/guides/advanced-features/bff/upload.md +2 -0
  191. package/docs/guides/advanced-features/bff.md +2 -0
  192. package/docs/guides/advanced-features/build-performance.md +2 -0
  193. package/docs/guides/advanced-features/compatibility.md +2 -0
  194. package/docs/guides/advanced-features/international/advanced.md +3 -1
  195. package/docs/guides/advanced-features/international/api.md +21 -13
  196. package/docs/guides/advanced-features/international/best-practices.md +17 -15
  197. package/docs/guides/advanced-features/international/configuration.md +3 -1
  198. package/docs/guides/advanced-features/international/locale-detection.md +15 -4
  199. package/docs/guides/advanced-features/international/quick-start.md +2 -0
  200. package/docs/guides/advanced-features/international/resource-loading.md +11 -7
  201. package/docs/guides/advanced-features/international/routing.md +5 -1
  202. package/docs/guides/advanced-features/international.md +2 -0
  203. package/docs/guides/advanced-features/low-level.md +2 -0
  204. package/docs/guides/advanced-features/page-performance/code-split.md +2 -0
  205. package/docs/guides/advanced-features/page-performance/inline-assets.md +2 -0
  206. package/docs/guides/advanced-features/page-performance/optimize-bundle.md +2 -0
  207. package/docs/guides/advanced-features/page-performance/react-compiler.md +2 -0
  208. package/docs/guides/advanced-features/server-monitor/logger.md +2 -0
  209. package/docs/guides/advanced-features/server-monitor/metrics.md +2 -0
  210. package/docs/guides/advanced-features/server-monitor/monitors.md +3 -3
  211. package/docs/guides/advanced-features/source-build.md +3 -1
  212. package/docs/guides/advanced-features/web-server.md +5 -3
  213. package/docs/guides/basic-features/alias.md +2 -0
  214. package/docs/guides/basic-features/css/css-in-js.md +2 -0
  215. package/docs/guides/basic-features/css/css-modules.md +2 -0
  216. package/docs/guides/basic-features/css/css.md +2 -0
  217. package/docs/guides/basic-features/css/tailwindcss.md +2 -0
  218. package/docs/guides/basic-features/data/data-cache.md +2 -0
  219. package/docs/guides/basic-features/data/data-fetch.md +3 -3
  220. package/docs/guides/basic-features/data/data-write.md +25 -28
  221. package/docs/guides/basic-features/debug/mock.md +4 -2
  222. package/docs/guides/basic-features/debug/proxy.md +2 -0
  223. package/docs/guides/basic-features/debug/rsdoctor.md +2 -0
  224. package/docs/guides/basic-features/debug/using-storybook.md +6 -4
  225. package/docs/guides/basic-features/deploy.md +2 -0
  226. package/docs/guides/basic-features/env-vars.md +2 -0
  227. package/docs/guides/basic-features/html.md +4 -3
  228. package/docs/guides/basic-features/output-files.md +3 -1
  229. package/docs/guides/basic-features/render/before-render.md +2 -0
  230. package/docs/guides/basic-features/render/overview.md +2 -0
  231. package/docs/guides/basic-features/render/rsc.md +12 -2
  232. package/docs/guides/basic-features/render/ssg.md +2 -0
  233. package/docs/guides/basic-features/render/ssr-cache.md +2 -0
  234. package/docs/guides/basic-features/render/ssr.md +10 -12
  235. package/docs/guides/basic-features/render/streaming-ssr.md +4 -1
  236. package/docs/guides/basic-features/routes/config-routes.md +54 -54
  237. package/docs/guides/basic-features/routes/routes.md +2 -0
  238. package/docs/guides/basic-features/static-assets/json-files.md +2 -0
  239. package/docs/guides/basic-features/static-assets/svg-assets.md +2 -0
  240. package/docs/guides/basic-features/static-assets/wasm-assets.md +2 -0
  241. package/docs/guides/basic-features/static-assets.md +2 -0
  242. package/docs/guides/basic-features/testing/playwright.md +8 -6
  243. package/docs/guides/basic-features/testing/rstest.md +7 -5
  244. package/docs/guides/concept/builder.md +2 -0
  245. package/docs/guides/concept/entries.md +2 -0
  246. package/docs/guides/concept/server.md +2 -0
  247. package/docs/guides/get-started/ai-coding-agents.md +5 -3
  248. package/docs/guides/get-started/glossary.md +2 -0
  249. package/docs/guides/get-started/introduction.md +2 -0
  250. package/docs/guides/get-started/quick-start.md +13 -5
  251. package/docs/guides/get-started/tech-stack.md +2 -0
  252. package/docs/guides/get-started/upgrade.md +2 -0
  253. package/docs/guides/topic-detail/module-federation/application.md +2 -0
  254. package/docs/guides/topic-detail/module-federation/deploy.md +4 -2
  255. package/docs/guides/topic-detail/module-federation/i18n.md +2 -0
  256. package/docs/guides/topic-detail/module-federation/introduce.md +2 -0
  257. package/docs/guides/topic-detail/module-federation/ssr.md +2 -0
  258. package/docs/guides/topic-detail/module-federation/usage.md +2 -0
  259. package/docs/guides/troubleshooting/builder.md +2 -0
  260. package/docs/guides/troubleshooting/cli.md +2 -0
  261. package/docs/guides/troubleshooting/dependencies.md +2 -0
  262. package/docs/guides/troubleshooting/hmr.md +2 -0
  263. package/docs/guides/upgrade/config.md +14 -0
  264. package/docs/guides/upgrade/entry.md +2 -0
  265. package/docs/guides/upgrade/other.md +2 -0
  266. package/docs/guides/upgrade/overview.md +2 -0
  267. package/docs/guides/upgrade/tailwindcss.md +2 -0
  268. package/docs/guides/upgrade/web-server.md +25 -6
  269. package/docs/index.md +2 -0
  270. package/docs/llms.txt +5 -5
  271. package/docs/plugin/cli-plugins/api.md +2 -0
  272. package/docs/plugin/cli-plugins/life-cycle.md +2 -0
  273. package/docs/plugin/introduction.md +2 -0
  274. package/docs/plugin/official/cli-plugins/plugin-bff.md +2 -0
  275. package/docs/plugin/official/cli-plugins/plugin-ssg.md +2 -0
  276. package/docs/plugin/official/cli-plugins/plugin-styled-components.md +2 -0
  277. package/docs/plugin/official/cli-plugins.md +2 -0
  278. package/docs/plugin/plugin-system.md +3 -3
  279. package/docs/plugin/runtime-plugins/api.md +2 -0
  280. package/docs/plugin/runtime-plugins/life-cycle.md +2 -0
  281. package/docs/plugin/server-plugins/api.md +2 -0
  282. package/docs/plugin/server-plugins/life-cycle.md +2 -0
  283. package/docs/tutorials/examples/csr-auth.md +2 -0
  284. package/docs/tutorials/foundations/introduction.md +2 -0
  285. package/lib/types.d.ts +0 -1
  286. package/package.json +16 -17
  287. package/{rslib.config.mts → rstack.config.mts} +4 -4
  288. package/dist/cjs/types/config/testing.js +0 -18
  289. package/dist/esm/types/config/testing.mjs +0 -0
  290. package/dist/esm-node/types/config/testing.mjs +0 -1
  291. package/dist/types/types/config/testing.d.ts +0 -8
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Monitors
2
4
 
3
5
  Modern.js is a full-stack framework that supports both client-side and server-side development. When server-side rendering (SSR), the framework automatically injects additional logs and metrics during server runtime to help production issue diagnosis.
@@ -129,9 +131,7 @@ const myMonitorPlugin = (): ServerPlugin => ({
129
131
  console.log(`[${event.payload.level}] ${event.payload.message}`);
130
132
  } else if (event.type === 'timing') {
131
133
  // Handle timing events
132
- console.log(
133
- `Timing: ${event.payload.name} = ${event.payload.dur}ms`,
134
- );
134
+ console.log(`Timing: ${event.payload.name} = ${event.payload.dur}ms`);
135
135
  } else if (event.type === 'counter') {
136
136
  // Handle counter events
137
137
  console.log(`Counter: ${event.payload.name}`);
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Source Code Build Mode
2
4
 
3
5
  The source code build mode is used in the monorepo development scenario, allowing developers to directly reference the source code of other sub-projects within the monorepo for development.
@@ -138,7 +140,7 @@ At the same time, we need to set `composite` to `true` in the lib project's `tsc
138
140
  {
139
141
  "compilerOptions": {
140
142
  "composite": true
141
- },
143
+ }
142
144
  }
143
145
  ```
144
146
 
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Custom Web Server
2
4
 
3
5
  Modern.js encapsulates most server-side capabilities required by projects, typically eliminating the need for server-side development. However, in certain scenarios such as user authentication, request preprocessing, or adding page skeletons, custom server-side logic may still be necessary.
@@ -46,13 +48,13 @@ After creating the file, you can write custom logic in this file.
46
48
 
47
49
  3. Include `server` directory in `tsconfig.json`
48
50
 
49
- ```json5
51
+ ```jsonc
50
52
  {
51
53
  // ...
52
54
  "include": [
53
55
  // ...
54
- "server"
55
- ]
56
+ "server",
57
+ ],
56
58
  }
57
59
  ```
58
60
 
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Path Alias
2
4
 
3
5
  Path aliases allow developers to define aliases for modules, making it easier to reference them in code. This can be useful when you want to use a short, easy-to-remember name for a module instead of a long, complex path.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Using CSS-in-JS
2
4
 
3
5
  CSS-in-JS is a technique that allows you to write CSS styles within JS files.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Use CSS Modules
2
4
 
3
5
  [CSS Modules](https://github.com/css-modules/css-modules) allows us to write CSS code in a modular way, and these styles can be imported and used in JavaScript files. Using CSS Modules can automatically generate unique class names, isolate styles between different modules, and avoid class name conflicts.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Styling
2
4
 
3
5
  Modern.js has built-in a variety of commonly used CSS solutions, including Less / Sass / Stylus preprocessors, PostCSS, CSS Modules, CSS-in-JS, and Tailwind CSS.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Using Tailwind CSS
2
4
 
3
5
  [Tailwind CSS](https://tailwindcss.com/) is a CSS framework and design system based on Utility Class, which can quickly add common styles to components, and support flexible extension of theme styles.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Data Caching
2
4
 
3
5
  The `cache` function allows you to cache the results of data fetching or computation, Compared to full-page [rendering cache](/guides/basic-features/render/ssr-cache.md), it provides more fine-grained control over data granularity and is applicable to various scenarios such as Client-Side Rendering (CSR), Server-Side Rendering (SSR), and API services (BFF).
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Data Fetching
2
4
 
3
5
  Modern.js provides out-of-the-box data fetching capabilities. Developers can use these APIs to fetch data in their projects. It's important to note that these APIs do not help the application make requests but assist developers in managing data better and improving project performance.
@@ -20,9 +22,7 @@ Modern.js recommends managing routes using [conventional routing](/guides/basic-
20
22
  In the `routes/user/page.data.ts` file, you can export a Data Loader function:
21
23
 
22
24
  ```ts title="routes/user/page.data.ts"
23
- export type ProfileData = {
24
- /* some types */
25
- };
25
+ export type ProfileData = {/* some types */};
26
26
 
27
27
  export const loader = async (): Promise<ProfileData> => {
28
28
  const res = await fetch('https://api/user/profile');
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Data Writing
2
4
 
3
5
  In the [Data Fetching](/guides/basic-features/data/data-fetch.md) section, we introduced how Modern.js fetches data. This might bring up two questions:
@@ -38,7 +40,7 @@ import {
38
40
  useFetcher,
39
41
  useLoaderData,
40
42
  useParams,
41
- Outlet
43
+ Outlet,
42
44
  } from '@modern-js/runtime/router';
43
45
 
44
46
  export default () => {
@@ -46,23 +48,21 @@ export default () => {
46
48
  const { submit } = useFetcher();
47
49
  const editUser = () => {
48
50
  const newUser = {
49
- name: 'Modern.js'
50
- }
51
+ name: 'Modern.js',
52
+ };
51
53
  return submit(newUser, {
52
54
  method: 'post',
53
55
  encType: 'application/json',
54
- })
55
- }
56
+ });
57
+ };
56
58
  return (
57
59
  <div>
58
60
  <button onClick={editUser}>edit user</button>
59
- <div className="user-profile">
60
- {userInfo}
61
- </div>
61
+ <div className="user-profile">{userInfo}</div>
62
62
  <Outlet context={userInfo}></Outlet>
63
63
  </div>
64
- )
65
- }
64
+ );
65
+ };
66
66
  ```
67
67
 
68
68
  After executing `submit`, the defined `action` function will be triggered. You can get the submitted data from the [parameters](/guides/basic-features/data/data-write.md#parameters) in the `action` function and ultimately send the data to the server.
@@ -119,14 +119,14 @@ useSubmit:
119
119
 
120
120
  ```ts
121
121
  const submit = useSubmit();
122
- submit(null, { method: "post", action: "/logout" });
122
+ submit(null, { method: 'post', action: '/logout' });
123
123
  ```
124
124
 
125
125
  useFetcher:
126
126
 
127
127
  ```ts
128
128
  const { submit } = useFetcher();
129
- submit(null, { method: "post", action: "/logout" });
129
+ submit(null, { method: 'post', action: '/logout' });
130
130
  ```
131
131
 
132
132
  The `submit` function takes two parameters. The first parameter is the `formData` passed to the server. The second parameter is an optional object where:
@@ -148,7 +148,7 @@ For example, `FormData`:
148
148
 
149
149
  ```ts
150
150
  let formData = new FormData();
151
- formData.append("cheese", "gouda");
151
+ formData.append('cheese', 'gouda');
152
152
  submit(formData);
153
153
  // In the action, you can get the data by request.json
154
154
  ```
@@ -157,7 +157,7 @@ or `URLSearchParams`:
157
157
 
158
158
  ```ts
159
159
  let searchParams = new URLSearchParams();
160
- searchParams.append("cheese", "gouda");
160
+ searchParams.append('cheese', 'gouda');
161
161
  submit(searchParams);
162
162
  // In the action, you can get the data by request.json
163
163
  ```
@@ -165,10 +165,10 @@ submit(searchParams);
165
165
  or any value that the `URLSearchParams` constructor accepts:
166
166
 
167
167
  ```ts
168
- submit("cheese=gouda&toasted=yes");
168
+ submit('cheese=gouda&toasted=yes');
169
169
  submit([
170
- ["cheese", "gouda"],
171
- ["toasted", "yes"],
170
+ ['cheese', 'gouda'],
171
+ ['toasted', 'yes'],
172
172
  ]);
173
173
  // In the action, you can get the data by request.json
174
174
  ```
@@ -177,11 +177,11 @@ By default, if the first parameter of the `submit` function is an object, the co
177
177
 
178
178
  ```ts
179
179
  submit(
180
- { key: "value" },
180
+ { key: 'value' },
181
181
  {
182
- method: "post",
183
- encType: "application/x-www-form-urlencoded",
184
- }
182
+ method: 'post',
183
+ encType: 'application/x-www-form-urlencoded',
184
+ },
185
185
  );
186
186
 
187
187
  // In the action, you can get the data by request.formData
@@ -190,14 +190,11 @@ submit(
190
190
  You can also specify the encoding type via the second parameter:
191
191
 
192
192
  ```tsx
193
- submit(
194
- { key: "value" },
195
- { method: "post", encType: "application/json" }
196
- );
193
+ submit({ key: 'value' }, { method: 'post', encType: 'application/json' });
197
194
 
198
195
  submit('{"key":"value"}', {
199
- method: "post",
200
- encType: "application/json",
196
+ method: 'post',
197
+ encType: 'application/json',
201
198
  });
202
199
 
203
200
  // In the action, you can get the data by request.json
@@ -206,7 +203,7 @@ submit('{"key":"value"}', {
206
203
  or submit plain text:
207
204
 
208
205
  ```ts
209
- submit("value", { method: "post", encType: "text/plain" });
206
+ submit('value', { method: 'post', encType: 'text/plain' });
210
207
  // In the action, you can get the data by request.text
211
208
  ```
212
209
 
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Data Mocking
2
4
 
3
5
  Modern.js allows you to easily generate mock data so that the front-end can develop independently without depending on the back-end API.
@@ -98,8 +100,8 @@ type MockConfig = {
98
100
  };
99
101
 
100
102
  export const config = {
101
- enable: false
102
- }
103
+ enable: false,
104
+ };
103
105
  ```
104
106
 
105
107
  Currently only the `enable` configuration is supported, which allows developers to control whether to execute mock.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Local Proxy
2
4
 
3
5
  Modern.js provides a way to configure the development proxy in [`dev.server.proxy`](/configure/app/dev/server.md).
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Using Rsdoctor
2
4
 
3
5
  Rsdoctor is a Rspack build analysis tool. In Modern.js, we recommend using Rsdoctor to diagnose and analyze the build process and build outputs.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Using Storybook
2
4
 
3
5
  [Storybook](https://storybook.js.org/) is a tool specifically designed for component debugging. It provides:
@@ -46,14 +48,14 @@ You need to install `@rsbuild/core` in your project, otherwise the plugin may no
46
48
  ## Configure `.storybook/main.ts`
47
49
 
48
50
  ```ts
49
- import type { StorybookConfig } from 'storybook-react-rsbuild'
51
+ import type { StorybookConfig } from 'storybook-react-rsbuild';
50
52
 
51
53
  const config: StorybookConfig = {
52
54
  stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
53
55
  addons: ['storybook-addon-modernjs'],
54
56
  framework: 'storybook-react-rsbuild',
55
- }
56
- export default config
57
+ };
58
+ export default config;
57
59
  ```
58
60
 
59
61
  ## BFF Integrated Calls in Storybook
@@ -68,7 +70,7 @@ Add the following scripts to `package.json` to start the BFF server and Storyboo
68
70
  {
69
71
  "scripts": {
70
72
  "dev:api": "modern dev --api-only",
71
- "storybook": "BFF_PROXY=1 storybook dev -p 6006 --no-open",
73
+ "storybook": "BFF_PROXY=1 storybook dev -p 6006 --no-open"
72
74
  }
73
75
  }
74
76
  ```
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Deploy Application
2
4
 
3
5
  Currently, Modern.js offers two deployment way:
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Environment Variables
2
4
 
3
5
  Modern.js provides support for environment variables, including built-in environment variables and custom environment variables.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # HTML Template
2
4
 
3
5
  Modern.js provides **JSX syntax** and **HTML(EJS) syntax** to customize the HTML template.
@@ -15,9 +17,8 @@ For example, consider the following directory structure:
15
17
  ├── entry-a
16
18
  │ ├── Document.tsx
17
19
  │ └── routes
18
- ├── entry-b
19
- │ └── routes
20
- └── modern-app-env.d.ts
20
+ └── entry-b
21
+ └── routes
21
22
  ```
22
23
 
23
24
  `entry-a` will use the `Document.tsx` file under the current entry as the template. If there is no `Document.tsx` file under the current entry, like `entry-b`, it will look for the `Document.tsx` file under the root directory.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Output Files
2
4
 
3
5
  This chapter will introduces the directory structure of output files and how to control the output directory of different types of files.
@@ -109,7 +111,7 @@ export default {
109
111
  },
110
112
  html: {
111
113
  outputStructure: 'flat',
112
- }
114
+ },
113
115
  };
114
116
  ```
115
117
 
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Render Preprocessing
2
4
 
3
5
  In certain scenarios, applications need to perform preprocessing operations before rendering. Modern.js recommends using **[Runtime Plugins](/plugin/introduction.md#runtime-plugins)** to implement this type of logic.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Rendering Mode Overview
2
4
 
3
5
  Modern.js supports multiple rendering modes, and different rendering modes are suitable for different scenarios. Choosing the right rendering mode can significantly improve application performance and user experience.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # React Server Components (RSC)
2
4
 
3
5
  React Server Components (RSC) is a new component type that allows components to be rendered in a server environment, bringing better performance and developer experience to modern web applications.
@@ -264,7 +266,11 @@ In Modern.js RSC projects, Server Components can receive data returned by Data L
264
266
 
265
267
  ```tsx title="routes/user/page.tsx"
266
268
  // Server Component receives loaderData through props
267
- export default function UserPage({ loaderData }: { loaderData: { name: string } }) {
269
+ export default function UserPage({
270
+ loaderData,
271
+ }: {
272
+ loaderData: { name: string };
273
+ }) {
268
274
  return <div>Welcome, {loaderData.name}</div>;
269
275
  }
270
276
  ```
@@ -272,7 +278,11 @@ export default function UserPage({ loaderData }: { loaderData: { name: string }
272
278
  ```tsx title="routes/user/page.tsx"
273
279
  'use client';
274
280
  // Client Component can also receive loaderData through props
275
- export default function UserPage({ loaderData }: { loaderData: { name: string } }) {
281
+ export default function UserPage({
282
+ loaderData,
283
+ }: {
284
+ loaderData: { name: string };
285
+ }) {
276
286
  return <div>Welcome, {loaderData.name}</div>;
277
287
  }
278
288
  ```
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Static Site Generation
2
4
 
3
5
  SSG (Static Site Generation) is a technical solution that generates complete static web pages at build time based on data and templates. This means that in a production environment, pages are pre-rendered with content and can be cached by a CDN. SSG can offer better performance and higher security for pages that do not require dynamic data.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Rendering Cache
2
4
 
3
5
  When developing applications, sometimes we cache computation results using hooks like React's `useMemo` and `useCallback`. By leveraging caching, we can reduce the number of computations, thus saving CPU resources and improving user experience.
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Server-Side Rendering
2
4
 
3
5
  Server-Side Rendering (SSR) generates complete HTML pages on the server and sends them to the browser for direct display, without requiring additional client-side rendering.
@@ -90,7 +92,7 @@ export async function loader({ params }) {
90
92
  const data = await res.json();
91
93
  return {
92
94
  message: data.message,
93
- }
95
+ };
94
96
  }
95
97
  ```
96
98
 
@@ -124,11 +126,7 @@ const Page = () => {
124
126
  const undefinedVars = data.unDefined;
125
127
  const definedVars = data.defined;
126
128
 
127
- return (
128
- <div>
129
- {isNode ? undefinedVars.msg : definedVars.msg}
130
- </div>
131
- );
129
+ return <div>{isNode ? undefinedVars.msg : definedVars.msg}</div>;
132
130
  };
133
131
 
134
132
  export default Page;
@@ -212,7 +210,7 @@ document.addEventListener('load', () => {
212
210
  console.log('document load');
213
211
  });
214
212
 
215
- export const doSomething = () => {}
213
+ export const doSomething = () => {};
216
214
  ```
217
215
 
218
216
  Directly referencing this in a component will cause SSR to throw errors, even if you use environment variables to conditionally load the code. The side effects in the dependency will still execute.
@@ -224,8 +222,8 @@ export const Page = () => {
224
222
  if (process.env.MODERN_TARGET === 'browser') {
225
223
  doSomething();
226
224
  }
227
- return <div>Hello World</div>
228
- }
225
+ return <div>Hello World</div>;
226
+ };
229
227
  ```
230
228
 
231
229
  Modern.js supports distinguishing between SSR and CSR bundles by using `.server.` suffix files. You can create `.ts` and `.server.ts` files with the same name to create a proxy:
@@ -241,12 +239,12 @@ export const doSomething: any = () => {};
241
239
  Import `./a` in the file, and the SSR bundle will prioritize the `.server.ts` files, while the CSR bundle will prioritize the `.ts` files.
242
240
 
243
241
  ```tsx title="routes/page.tsx"
244
- import { doSomething } from './a'
242
+ import { doSomething } from './a';
245
243
 
246
244
  export const Page = () => {
247
245
  doSomething();
248
- return <div>Hello World</div>
249
- }
246
+ return <div>Hello World</div>;
247
+ };
250
248
  ```
251
249
 
252
250
  ## Common Issues
@@ -1,3 +1,5 @@
1
+ > For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.
2
+
1
3
  # Streaming Server-Side Rendering
2
4
 
3
5
  Streaming rendering is an advanced rendering method that progressively returns content during the page rendering process, significantly improving user experience.
@@ -245,7 +247,8 @@ Set the header in your middleware to choose the behavior dynamically:
245
247
  ```ts title="middleware example"
246
248
  export const middleware = async (ctx, next) => {
247
249
  const ua = ctx.req.header('user-agent') || '';
248
- const shouldWaitAll = /Lighthouse|Googlebot/i.test(ua) || ctx.req.path === '/marketing';
250
+ const shouldWaitAll =
251
+ /Lighthouse|Googlebot/i.test(ua) || ctx.req.path === '/marketing';
249
252
 
250
253
  // Write a boolean string: true -> onAllReady, false -> onShellReady
251
254
  ctx.req.headers.set('x-should-stream-all', String(shouldWaitAll));