@nuxt/docs-nightly 4.1.3-29314777.50febbbb → 4.1.3-29316215.910d159d

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 (139) hide show
  1. package/1.getting-started/03.configuration.md +19 -19
  2. package/1.getting-started/04.views.md +1 -1
  3. package/1.getting-started/05.assets.md +8 -2
  4. package/1.getting-started/06.styling.md +50 -40
  5. package/1.getting-started/07.routing.md +4 -4
  6. package/1.getting-started/08.seo-meta.md +46 -33
  7. package/1.getting-started/09.transitions.md +38 -33
  8. package/1.getting-started/10.data-fetching.md +47 -39
  9. package/1.getting-started/11.state-management.md +15 -8
  10. package/1.getting-started/12.error-handling.md +6 -4
  11. package/1.getting-started/13.server.md +3 -3
  12. package/1.getting-started/14.layers.md +18 -12
  13. package/1.getting-started/15.prerendering.md +24 -24
  14. package/1.getting-started/16.deployment.md +7 -7
  15. package/1.getting-started/17.testing.md +41 -41
  16. package/1.getting-started/18.upgrade.md +48 -66
  17. package/2.guide/1.directory-structure/1.app/1.components.md +36 -19
  18. package/2.guide/1.directory-structure/1.app/1.composables.md +7 -7
  19. package/2.guide/1.directory-structure/1.app/1.layouts.md +9 -5
  20. package/2.guide/1.directory-structure/1.app/1.middleware.md +20 -14
  21. package/2.guide/1.directory-structure/1.app/1.pages.md +19 -17
  22. package/2.guide/1.directory-structure/1.app/1.plugins.md +17 -17
  23. package/2.guide/1.directory-structure/1.app/1.utils.md +1 -1
  24. package/2.guide/1.directory-structure/1.app/3.app-config.md +6 -6
  25. package/2.guide/1.directory-structure/1.app/3.error.md +4 -4
  26. package/2.guide/1.directory-structure/1.content.md +4 -1
  27. package/2.guide/1.directory-structure/1.modules.md +4 -4
  28. package/2.guide/1.directory-structure/1.public.md +1 -1
  29. package/2.guide/1.directory-structure/1.server.md +28 -28
  30. package/2.guide/1.directory-structure/1.shared.md +1 -1
  31. package/2.guide/2.concepts/1.auto-imports.md +11 -11
  32. package/2.guide/2.concepts/2.vuejs-development.md +5 -5
  33. package/2.guide/2.concepts/3.rendering.md +14 -12
  34. package/2.guide/2.concepts/5.modules.md +2 -2
  35. package/2.guide/2.concepts/7.esm.md +14 -12
  36. package/2.guide/2.concepts/8.typescript.md +4 -4
  37. package/2.guide/3.going-further/1.events.md +2 -2
  38. package/2.guide/3.going-further/1.experimental-features.md +234 -73
  39. package/2.guide/3.going-further/1.features.md +44 -9
  40. package/2.guide/3.going-further/1.internals.md +15 -15
  41. package/2.guide/3.going-further/10.runtime-config.md +7 -7
  42. package/2.guide/3.going-further/2.hooks.md +8 -8
  43. package/2.guide/3.going-further/3.modules.md +76 -74
  44. package/2.guide/3.going-further/4.kit.md +3 -3
  45. package/2.guide/3.going-further/6.nuxt-app.md +1 -1
  46. package/2.guide/3.going-further/7.layers.md +50 -41
  47. package/2.guide/3.going-further/9.debugging.md +2 -2
  48. package/2.guide/4.recipes/1.custom-routing.md +19 -19
  49. package/2.guide/4.recipes/2.vite-plugin.md +3 -3
  50. package/2.guide/4.recipes/3.custom-usefetch.md +9 -9
  51. package/2.guide/4.recipes/4.sessions-and-authentication.md +33 -19
  52. package/2.guide/5.best-practices/performance.md +8 -8
  53. package/3.api/1.components/1.client-only.md +6 -3
  54. package/3.api/1.components/1.nuxt-client-fallback.md +9 -6
  55. package/3.api/1.components/11.teleports.md +4 -1
  56. package/3.api/1.components/12.nuxt-route-announcer.md +7 -7
  57. package/3.api/1.components/13.nuxt-time.md +44 -17
  58. package/3.api/1.components/2.nuxt-page.md +2 -2
  59. package/3.api/1.components/3.nuxt-layout.md +9 -4
  60. package/3.api/1.components/4.nuxt-link.md +38 -18
  61. package/3.api/1.components/6.nuxt-error-boundary.md +11 -9
  62. package/3.api/2.composables/on-prehydrate.md +2 -2
  63. package/3.api/2.composables/use-async-data.md +11 -11
  64. package/3.api/2.composables/use-cookie.md +26 -18
  65. package/3.api/2.composables/use-error.md +1 -1
  66. package/3.api/2.composables/use-fetch.md +13 -13
  67. package/3.api/2.composables/use-head-safe.md +5 -5
  68. package/3.api/2.composables/use-head.md +2 -2
  69. package/3.api/2.composables/use-hydration.md +5 -5
  70. package/3.api/2.composables/use-loading-indicator.md +10 -10
  71. package/3.api/2.composables/use-nuxt-app.md +9 -9
  72. package/3.api/2.composables/use-nuxt-data.md +7 -7
  73. package/3.api/2.composables/use-preview-mode.md +12 -15
  74. package/3.api/2.composables/use-request-fetch.md +1 -1
  75. package/3.api/2.composables/use-request-headers.md +3 -3
  76. package/3.api/2.composables/use-response-header.md +7 -8
  77. package/3.api/2.composables/use-route-announcer.md +3 -3
  78. package/3.api/2.composables/use-router.md +5 -3
  79. package/3.api/2.composables/use-runtime-config.md +6 -6
  80. package/3.api/2.composables/use-runtime-hook.md +1 -1
  81. package/3.api/2.composables/use-seo-meta.md +1 -1
  82. package/3.api/2.composables/use-server-seo-meta.md +1 -1
  83. package/3.api/2.composables/use-state.md +3 -3
  84. package/3.api/3.utils/$fetch.md +5 -3
  85. package/3.api/3.utils/abort-navigation.md +2 -2
  86. package/3.api/3.utils/add-route-middleware.md +3 -3
  87. package/3.api/3.utils/call-once.md +3 -3
  88. package/3.api/3.utils/clear-error.md +1 -1
  89. package/3.api/3.utils/clear-nuxt-data.md +2 -2
  90. package/3.api/3.utils/clear-nuxt-state.md +2 -2
  91. package/3.api/3.utils/create-error.md +1 -1
  92. package/3.api/3.utils/define-lazy-hydration-component.md +13 -13
  93. package/3.api/3.utils/define-nuxt-component.md +5 -5
  94. package/3.api/3.utils/define-nuxt-plugin.md +11 -11
  95. package/3.api/3.utils/define-nuxt-route-middleware.md +2 -2
  96. package/3.api/3.utils/define-page-meta.md +14 -14
  97. package/3.api/3.utils/define-route-rules.md +3 -3
  98. package/3.api/3.utils/navigate-to.md +9 -9
  99. package/3.api/3.utils/preload-components.md +1 -1
  100. package/3.api/3.utils/prerender-routes.md +2 -2
  101. package/3.api/3.utils/refresh-cookie.md +3 -3
  102. package/3.api/3.utils/refresh-nuxt-data.md +9 -4
  103. package/3.api/3.utils/reload-nuxt-app.md +2 -2
  104. package/3.api/3.utils/set-response-status.md +1 -1
  105. package/3.api/3.utils/show-error.md +2 -2
  106. package/3.api/3.utils/update-app-config.md +2 -1
  107. package/3.api/4.commands/prepare.md +4 -0
  108. package/3.api/5.kit/1.modules.md +36 -36
  109. package/3.api/5.kit/10.templates.md +8 -6
  110. package/3.api/5.kit/11.nitro.md +62 -62
  111. package/3.api/5.kit/12.resolving.md +2 -2
  112. package/3.api/5.kit/14.builder.md +1 -0
  113. package/3.api/5.kit/15.examples.md +2 -2
  114. package/3.api/5.kit/16.layers.md +26 -26
  115. package/3.api/5.kit/3.compatibility.md +12 -12
  116. package/3.api/5.kit/4.autoimports.md +12 -12
  117. package/3.api/5.kit/5.components.md +5 -5
  118. package/3.api/5.kit/6.context.md +3 -3
  119. package/3.api/5.kit/7.pages.md +4 -4
  120. package/3.api/5.kit/8.layout.md +1 -1
  121. package/3.api/5.kit/9.plugins.md +5 -4
  122. package/3.api/6.advanced/2.import-meta.md +3 -3
  123. package/3.api/6.nuxt-config.md +293 -858
  124. package/6.bridge/1.overview.md +1 -1
  125. package/6.bridge/10.configuration.md +2 -1
  126. package/6.bridge/2.typescript.md +2 -2
  127. package/6.bridge/3.bridge-composition-api.md +2 -2
  128. package/6.bridge/4.plugins-and-middleware.md +5 -5
  129. package/6.bridge/5.nuxt3-compatible-api.md +11 -8
  130. package/6.bridge/6.meta.md +15 -14
  131. package/6.bridge/8.nitro.md +2 -2
  132. package/6.bridge/9.vite.md +3 -3
  133. package/7.migration/2.configuration.md +17 -15
  134. package/7.migration/4.meta.md +17 -14
  135. package/7.migration/5.plugins-and-middleware.md +5 -5
  136. package/7.migration/6.pages-and-layouts.md +15 -11
  137. package/7.migration/7.component-options.md +3 -3
  138. package/7.migration/8.runtime-config.md +3 -3
  139. package/package.json +1 -1
@@ -57,11 +57,11 @@ You can manually specify routes that [Nitro](/docs/4.x/guide/concepts/server-eng
57
57
  export default defineNuxtConfig({
58
58
  nitro: {
59
59
  prerender: {
60
- routes: ["/user/1", "/user/2"],
61
- ignore: ["/dynamic"],
60
+ routes: ['/user/1', '/user/2'],
61
+ ignore: ['/dynamic'],
62
62
  },
63
63
  },
64
- });
64
+ })
65
65
  ```
66
66
 
67
67
  You can combine this with the `crawlLinks` option to pre-render a set of routes that the crawler can't discover like your `/sitemap.xml` or `/robots.txt`:
@@ -71,10 +71,10 @@ export default defineNuxtConfig({
71
71
  nitro: {
72
72
  prerender: {
73
73
  crawlLinks: true,
74
- routes: ["/sitemap.xml", "/robots.txt"],
74
+ routes: ['/sitemap.xml', '/robots.txt'],
75
75
  },
76
76
  },
77
- });
77
+ })
78
78
  ```
79
79
 
80
80
  Setting `nitro.prerender` to `true` is similar to `nitro.prerender.crawlLinks` to `true`.
@@ -89,14 +89,14 @@ Lastly, you can manually configure this using routeRules.
89
89
  export default defineNuxtConfig({
90
90
  routeRules: {
91
91
  // Set prerender to true to configure it to be prerendered
92
- "/rss.xml": { prerender: true },
92
+ '/rss.xml': { prerender: true },
93
93
  // Set it to false to configure it to be skipped for prerendering
94
- "/this-DOES-NOT-get-prerendered": { prerender: false },
94
+ '/this-DOES-NOT-get-prerendered': { prerender: false },
95
95
  // Everything under /blog gets prerendered as long as it
96
96
  // is linked to from another page
97
- "/blog/**": { prerender: true },
97
+ '/blog/**': { prerender: true },
98
98
  },
99
- });
99
+ })
100
100
  ```
101
101
 
102
102
  ::read-more{to="https://nitro.build/config#routerules"}
@@ -114,7 +114,7 @@ This feature is experimental and in order to use it you must enable the `experim
114
114
  // Or set at the page level
115
115
  defineRouteRules({
116
116
  prerender: true,
117
- });
117
+ })
118
118
  </script>
119
119
 
120
120
  <template>
@@ -130,9 +130,9 @@ This will be translated to:
130
130
  ```ts [nuxt.config.ts]
131
131
  export default defineNuxtConfig({
132
132
  routeRules: {
133
- "/": { prerender: true },
133
+ '/': { prerender: true },
134
134
  },
135
- });
135
+ })
136
136
  ```
137
137
 
138
138
  ## Runtime Prerender Configuration
@@ -143,8 +143,8 @@ You can use this at runtime within a [Nuxt context](/docs/4.x/guide/going-furthe
143
143
 
144
144
  ```vue [app/pages/index.vue]
145
145
  <script setup>
146
- prerenderRoutes(["/some/other/url"]);
147
- prerenderRoutes("/api/content/article/my-article");
146
+ prerenderRoutes(['/some/other/url'])
147
+ prerenderRoutes('/api/content/article/my-article')
148
148
  </script>
149
149
 
150
150
  <template>
@@ -163,16 +163,16 @@ This is called before prerendering for additional routes to be registered.
163
163
  ```ts [nuxt.config.ts]
164
164
  export default defineNuxtConfig({
165
165
  hooks: {
166
- async "prerender:routes"(ctx) {
167
- const { pages } = await fetch("https://api.some-cms.com/pages").then(
168
- (res) => res.json(),
169
- );
166
+ async 'prerender:routes' (ctx) {
167
+ const { pages } = await fetch('https://api.some-cms.com/pages').then(
168
+ res => res.json(),
169
+ )
170
170
  for (const page of pages) {
171
- ctx.routes.add(`/${page.name}`);
171
+ ctx.routes.add(`/${page.name}`)
172
172
  }
173
173
  },
174
174
  },
175
- });
175
+ })
176
176
  ```
177
177
 
178
178
  ### `prerender:generate` Nitro hook
@@ -183,12 +183,12 @@ This is called for each route during prerendering. You can use this for fine-gra
183
183
  export default defineNuxtConfig({
184
184
  nitro: {
185
185
  hooks: {
186
- "prerender:generate"(route) {
187
- if (route.route?.includes("private")) {
188
- route.skip = true;
186
+ 'prerender:generate' (route) {
187
+ if (route.route?.includes('private')) {
188
+ route.skip = true
189
189
  }
190
190
  },
191
191
  },
192
192
  },
193
- });
193
+ })
194
194
  ```
@@ -48,9 +48,9 @@ module.exports = {
48
48
  port: '3000',
49
49
  exec_mode: 'cluster',
50
50
  instances: 'max',
51
- script: './.output/server/index.mjs'
52
- }
53
- ]
51
+ script: './.output/server/index.mjs',
52
+ },
53
+ ],
54
54
  }
55
55
  ```
56
56
 
@@ -81,7 +81,7 @@ If you don't want to pre-render your routes, another way of using static hosting
81
81
 
82
82
  ```ts twoslash [nuxt.config.ts]
83
83
  export default defineNuxtConfig({
84
- ssr: false
84
+ ssr: false,
85
85
  })
86
86
  ```
87
87
 
@@ -97,11 +97,11 @@ In addition to Node.js servers and static hosting services, a Nuxt project can b
97
97
 
98
98
  You can explicitly set the desired preset in the [`nuxt.config.ts`](/docs/4.x/guide/directory-structure/nuxt-config) file:
99
99
 
100
- ```js twoslash [nuxt.config.ts]
100
+ ```ts twoslash [nuxt.config.ts]
101
101
  export default defineNuxtConfig({
102
102
  nitro: {
103
- preset: 'node-server'
104
- }
103
+ preset: 'node-server',
104
+ },
105
105
  })
106
106
  ```
107
107
 
@@ -46,8 +46,8 @@ We currently ship an environment for unit testing code that needs a [Nuxt](https
46
46
  ```ts twoslash
47
47
  export default defineNuxtConfig({
48
48
  modules: [
49
- '@nuxt/test-utils/module'
50
- ]
49
+ '@nuxt/test-utils/module',
50
+ ],
51
51
  })
52
52
  ```
53
53
 
@@ -115,7 +115,7 @@ export default defineVitestConfig({
115
115
  // }
116
116
  // }
117
117
  // }
118
- }
118
+ },
119
119
  })
120
120
  ```
121
121
 
@@ -199,10 +199,10 @@ export default defineVitestConfig({
199
199
  mock: {
200
200
  intersectionObserver: true,
201
201
  indexedDb: true,
202
- }
203
- }
204
- }
205
- }
202
+ },
203
+ },
204
+ },
205
+ },
206
206
  })
207
207
  ```
208
208
 
@@ -222,8 +222,9 @@ For example:
222
222
 
223
223
  ```ts twoslash
224
224
  // @noErrors
225
- import { it, expect } from 'vitest'
225
+ import { expect, it } from 'vitest'
226
226
  import type { Component } from 'vue'
227
+
227
228
  declare module '#components' {
228
229
  export const SomeComponent: Component
229
230
  }
@@ -233,17 +234,16 @@ import { mountSuspended } from '@nuxt/test-utils/runtime'
233
234
  import { SomeComponent } from '#components'
234
235
 
235
236
  it('can mount some component', async () => {
236
- const component = await mountSuspended(SomeComponent)
237
- expect(component.text()).toMatchInlineSnapshot(
238
- '"This is an auto-imported component"'
239
- )
237
+ const component = await mountSuspended(SomeComponent)
238
+ expect(component.text()).toMatchInlineSnapshot(
239
+ '"This is an auto-imported component"',
240
+ )
240
241
  })
241
-
242
242
  ```
243
243
 
244
244
  ```ts twoslash
245
245
  // @noErrors
246
- import { it, expect } from 'vitest'
246
+ import { expect, it } from 'vitest'
247
247
  // ---cut---
248
248
  // tests/components/SomeComponents.nuxt.spec.ts
249
249
  import { mountSuspended } from '@nuxt/test-utils/runtime'
@@ -251,8 +251,8 @@ import App from '~/app.vue'
251
251
 
252
252
  // tests/App.nuxt.spec.ts
253
253
  it('can also mount an app', async () => {
254
- const component = await mountSuspended(App, { route: '/test' })
255
- expect(component.html()).toMatchInlineSnapshot(`
254
+ const component = await mountSuspended(App, { route: '/test' })
255
+ expect(component.html()).toMatchInlineSnapshot(`
256
256
  "<div>This is an auto-imported component</div>
257
257
  <div> I am a global component </div>
258
258
  <div>/</div>
@@ -275,8 +275,9 @@ Examples:
275
275
 
276
276
  ```ts twoslash
277
277
  // @noErrors
278
- import { it, expect } from 'vitest'
278
+ import { expect, it } from 'vitest'
279
279
  import type { Component } from 'vue'
280
+
280
281
  declare module '#components' {
281
282
  export const SomeComponent: Component
282
283
  }
@@ -294,7 +295,7 @@ it('can render some component', async () => {
294
295
 
295
296
  ```ts twoslash
296
297
  // @noErrors
297
- import { it, expect } from 'vitest'
298
+ import { expect, it } from 'vitest'
298
299
  // ---cut---
299
300
  // tests/App.nuxt.spec.ts
300
301
  import { renderSuspended } from '@nuxt/test-utils/runtime'
@@ -341,8 +342,8 @@ import { mockNuxtImport } from '@nuxt/test-utils/runtime'
341
342
  const { useStorageMock } = vi.hoisted(() => {
342
343
  return {
343
344
  useStorageMock: vi.fn(() => {
344
- return { value: 'mocked storage'}
345
- })
345
+ return { value: 'mocked storage' }
346
+ }),
346
347
  }
347
348
  })
348
349
 
@@ -369,20 +370,20 @@ import { mockComponent } from '@nuxt/test-utils/runtime'
369
370
 
370
371
  mockComponent('MyComponent', {
371
372
  props: {
372
- value: String
373
+ value: String,
373
374
  },
374
- setup(props) {
375
+ setup (props) {
375
376
  // ...
376
- }
377
+ },
377
378
  })
378
379
 
379
380
  // relative path or alias also works
380
- mockComponent('~/components/my-component.vue', async () => {
381
+ mockComponent('~/components/my-component.vue', () => {
381
382
  // or a factory function
382
383
  return defineComponent({
383
- setup(props) {
384
+ setup (props) {
384
385
  // ...
385
- }
386
+ },
386
387
  })
387
388
  })
388
389
 
@@ -401,10 +402,10 @@ mockComponent('MyComponent', async () => {
401
402
  const { ref, h } = await import('vue')
402
403
 
403
404
  return defineComponent({
404
- setup(props) {
405
+ setup (props) {
405
406
  const counter = ref(0)
406
407
  return () => h('div', null, counter.value)
407
- }
408
+ },
408
409
  })
409
410
  })
410
411
  ```
@@ -422,7 +423,7 @@ For example, to mock `/test/` endpoint, you can do:
422
423
  import { registerEndpoint } from '@nuxt/test-utils/runtime'
423
424
 
424
425
  registerEndpoint('/test/', () => ({
425
- test: 'test-field'
426
+ test: 'test-field',
426
427
  }))
427
428
  ```
428
429
 
@@ -433,7 +434,7 @@ import { registerEndpoint } from '@nuxt/test-utils/runtime'
433
434
 
434
435
  registerEndpoint('/test/', {
435
436
  method: 'POST',
436
- handler: () => ({ test: 'test-field' })
437
+ handler: () => ({ test: 'test-field' }),
437
438
  })
438
439
  ```
439
440
 
@@ -455,13 +456,12 @@ mockNuxtImport('useStorage', () => {
455
456
  return { value: 'mocked storage' }
456
457
  }
457
458
  })
458
-
459
459
  ```
460
460
 
461
461
  `app.e2e.spec.ts`
462
462
 
463
463
  ```ts twoslash
464
- import { setup, $fetch } from '@nuxt/test-utils/e2e'
464
+ import { $fetch, setup } from '@nuxt/test-utils/e2e'
465
465
 
466
466
  await setup({
467
467
  setupTimeout: 10000,
@@ -502,7 +502,7 @@ If you prefer to use `@vue/test-utils` on its own for unit testing in Nuxt, and
502
502
  test: {
503
503
  environment: 'happy-dom',
504
504
  },
505
- });
505
+ })
506
506
  ```
507
507
 
508
508
  3. Add a new command for test in your `package.json`
@@ -527,7 +527,7 @@ If you prefer to use `@vue/test-utils` on its own for unit testing in Nuxt, and
527
527
  5. Create a simple unit test for this newly created component `~/components/HelloWorld.spec.ts`
528
528
 
529
529
  ```ts twoslash
530
- import { describe, it, expect } from 'vitest'
530
+ import { describe, expect, it } from 'vitest'
531
531
  import { mount } from '@vue/test-utils'
532
532
 
533
533
  import HelloWorld from './HelloWorld.vue'
@@ -569,7 +569,7 @@ In each `describe` block where you are taking advantage of the `@nuxt/test-utils
569
569
 
570
570
  ```ts twoslash [test/my-test.spec.ts]
571
571
  import { describe, test } from 'vitest'
572
- import { setup, $fetch } from '@nuxt/test-utils/e2e'
572
+ import { $fetch, setup } from '@nuxt/test-utils/e2e'
573
573
 
574
574
  describe('My test', async () => {
575
575
  await setup({
@@ -648,8 +648,8 @@ For local development or automated deploy pipelines, testing against a separate
648
648
  To utilize a separate target host for end-to-end tests, simply provide the `host` property of the `setup` function with the desired URL.
649
649
 
650
650
  ```ts
651
- import { setup, createPage } from '@nuxt/test-utils/e2e'
652
- import { describe, it, expect } from 'vitest'
651
+ import { createPage, setup } from '@nuxt/test-utils/e2e'
652
+ import { describe, expect, it } from 'vitest'
653
653
 
654
654
  describe('login page', async () => {
655
655
  await setup({
@@ -742,8 +742,8 @@ import type { ConfigOptions } from '@nuxt/test-utils/playwright'
742
742
  export default defineConfig<ConfigOptions>({
743
743
  use: {
744
744
  nuxt: {
745
- rootDir: fileURLToPath(new URL('.', import.meta.url))
746
- }
745
+ rootDir: fileURLToPath(new URL('.', import.meta.url)),
746
+ },
747
747
  },
748
748
  // ...
749
749
  })
@@ -770,8 +770,8 @@ import { expect, test } from '@nuxt/test-utils/playwright'
770
770
 
771
771
  test.use({
772
772
  nuxt: {
773
- rootDir: fileURLToPath(new URL('..', import.meta.url))
774
- }
773
+ rootDir: fileURLToPath(new URL('..', import.meta.url)),
774
+ },
775
775
  })
776
776
 
777
777
  test('test', async ({ page, goto }) => {
@@ -186,8 +186,8 @@ export default defineNuxtConfig({
186
186
  srcDir: '.',
187
187
  // This specifies the directory prefix for `router.options.ts` and `spa-loading-template.html`
188
188
  dir: {
189
- app: 'app'
190
- }
189
+ app: 'app',
190
+ },
191
191
  })
192
192
  ```
193
193
 
@@ -224,14 +224,14 @@ These changes have been made to improve memory usage and increase consistency wi
224
224
  It may be beneficial to extract any calls to `useAsyncData` that share an explicit key (and have custom options) into their own composable:
225
225
 
226
226
  ```ts [app/composables/useUserData.ts]
227
- export function useUserData(userId: string) {
227
+ export function useUserData (userId: string) {
228
228
  return useAsyncData(
229
229
  `user-${userId}`,
230
230
  () => fetchUser(userId),
231
- {
231
+ {
232
232
  deep: true,
233
- transform: (user) => ({ ...user, lastAccessed: new Date() })
234
- }
233
+ transform: user => ({ ...user, lastAccessed: new Date() }),
234
+ },
235
235
  )
236
236
  }
237
237
  ```
@@ -260,8 +260,8 @@ Alternatively, for now, you can disable this behaviour with:
260
260
  export default defineNuxtConfig({
261
261
  experimental: {
262
262
  granularCachedData: false,
263
- purgeCachedData: false
264
- }
263
+ purgeCachedData: false,
264
+ },
265
265
  })
266
266
  ```
267
267
 
@@ -303,18 +303,18 @@ Example of the new correct order:
303
303
  ```ts
304
304
  // Layer: my-layer/nuxt.config.ts
305
305
  export default defineNuxtConfig({
306
- modules: ['layer-module-1', 'layer-module-2']
306
+ modules: ['layer-module-1', 'layer-module-2'],
307
307
  })
308
308
 
309
309
  // Project: nuxt.config.ts
310
310
  export default defineNuxtConfig({
311
311
  extends: ['./my-layer'],
312
- modules: ['project-module-1', 'project-module-2']
312
+ modules: ['project-module-1', 'project-module-2'],
313
313
  })
314
314
 
315
315
  // Loading order (corrected):
316
316
  // 1. layer-module-1
317
- // 2. layer-module-2
317
+ // 2. layer-module-2
318
318
  // 3. project-module-1 (can override layer modules)
319
319
  // 4. project-module-2 (can override layer modules)
320
320
  ```
@@ -380,8 +380,8 @@ Alternatively, for now, you can disable this behaviour with:
380
380
  ```ts twoslash [nuxt.config.ts]
381
381
  export default defineNuxtConfig({
382
382
  experimental: {
383
- normalizeComponentNames: false
384
- }
383
+ normalizeComponentNames: false,
384
+ },
385
385
  })
386
386
  ```
387
387
 
@@ -420,14 +420,14 @@ useHead({
420
420
  * If you're using [Template Params](https://unhead.unjs.io/docs/head/guides/plugins/template-params) or [Alias Tag Sorting](https://unhead.unjs.io/docs/head/guides/plugins/alias-sorting), you will need to explicitly opt in to these features now.
421
421
 
422
422
  ```ts
423
- import { TemplateParamsPlugin, AliasSortingPlugin } from '@unhead/vue/plugins'
423
+ import { AliasSortingPlugin, TemplateParamsPlugin } from '@unhead/vue/plugins'
424
424
 
425
425
  export default defineNuxtPlugin({
426
- setup() {
426
+ setup () {
427
427
  const unhead = injectHead()
428
428
  unhead.use(TemplateParamsPlugin)
429
429
  unhead.use(AliasSortingPlugin)
430
- }
430
+ },
431
431
  })
432
432
  ```
433
433
 
@@ -444,7 +444,7 @@ If you still have issues you may revert to the v1 behavior by enabling the `head
444
444
  export default defineNuxtConfig({
445
445
  unhead: {
446
446
  legacy: true,
447
- }
447
+ },
448
448
  })
449
449
  ```
450
450
 
@@ -483,7 +483,7 @@ Alternatively, you can revert to the previous behaviour with:
483
483
  export default defineNuxtConfig({
484
484
  experimental: {
485
485
  spaLoadingTemplateLocation: 'within',
486
- }
486
+ },
487
487
  })
488
488
  ```
489
489
 
@@ -527,8 +527,8 @@ This feature is fully configurable and you can revert to the previous behavior b
527
527
  ```ts twoslash [nuxt.config.ts]
528
528
  export default defineNuxtConfig({
529
529
  features: {
530
- inlineStyles: true
531
- }
530
+ inlineStyles: true,
531
+ },
532
532
  })
533
533
  ```
534
534
 
@@ -566,8 +566,8 @@ Alternatively, you can revert to the previous behaviour with:
566
566
  ```ts twoslash [nuxt.config.ts]
567
567
  export default defineNuxtConfig({
568
568
  experimental: {
569
- scanPageMeta: true
570
- }
569
+ scanPageMeta: true,
570
+ },
571
571
  })
572
572
  ```
573
573
 
@@ -607,8 +607,8 @@ Alternatively, you can disable this feature with:
607
607
  ```ts twoslash [nuxt.config.ts]
608
608
  export default defineNuxtConfig({
609
609
  experimental: {
610
- sharedPrerenderData: false
611
- }
610
+ sharedPrerenderData: false,
611
+ },
612
612
  })
613
613
  ```
614
614
 
@@ -632,24 +632,6 @@ If you were checking if `data.value` or `error.value` were `null`, you can updat
632
632
  You can automate this step by running `npx codemod@latest nuxt/4/default-data-error-value`
633
633
  ::
634
634
 
635
- If you encounter any issues you can revert back to the previous behavior with:
636
-
637
- ```ts twoslash [nuxt.config.ts]
638
- // @errors: 2353
639
- export default defineNuxtConfig({
640
- experimental: {
641
- defaults: {
642
- useAsyncData: {
643
- value: 'null',
644
- errorValue: 'null'
645
- }
646
- }
647
- }
648
- })
649
- ```
650
-
651
- Please report an issue if you are doing this, as we do not plan to keep this as configurable.
652
-
653
635
  ### Removal of deprecated `boolean` values for `dedupe` option when calling `refresh` in `useAsyncData` and `useFetch`
654
636
 
655
637
  🚦 **Impact Level**: Minimal
@@ -660,7 +642,7 @@ Previously it was possible to pass `dedupe: boolean` to `refresh`. These were al
660
642
 
661
643
  ```ts twoslash [app/app.vue]
662
644
  // @errors: 2322
663
- const { refresh } = await useAsyncData(async () => ({ message: 'Hello, Nuxt!' }))
645
+ const { refresh } = await useAsyncData(() => Promise.resolve({ message: 'Hello, Nuxt!' }))
664
646
 
665
647
  async function refreshData () {
666
648
  await refresh({ dedupe: true })
@@ -748,8 +730,8 @@ Alternatively, you can temporarily revert to the previous behavior with:
748
730
  ```ts twoslash [nuxt.config.ts]
749
731
  export default defineNuxtConfig({
750
732
  experimental: {
751
- pendingWhenIdle: true
752
- }
733
+ pendingWhenIdle: true,
734
+ },
753
735
  })
754
736
  ```
755
737
 
@@ -788,8 +770,8 @@ To opt out of this behavior:
788
770
  // Or globally in your Nuxt config
789
771
  export default defineNuxtConfig({
790
772
  experimental: {
791
- alwaysRunFetchOnKeyChange: true
792
- }
773
+ alwaysRunFetchOnKeyChange: true,
774
+ },
793
775
  })
794
776
  ```
795
777
 
@@ -822,10 +804,10 @@ In most cases, no migration steps are required, but if you rely on the reactivit
822
804
  experimental: {
823
805
  defaults: {
824
806
  useAsyncData: {
825
- deep: true
826
- }
827
- }
828
- }
807
+ deep: true,
808
+ },
809
+ },
810
+ },
829
811
  })
830
812
  ```
831
813
 
@@ -904,10 +886,10 @@ Probably no migration is necessary but if you wish to revert to previous behavio
904
886
  ```ts
905
887
  export default defineNuxtConfig({
906
888
  hooks: {
907
- 'app:resolve'(app) {
889
+ 'app:resolve' (app) {
908
890
  app.middleware = app.middleware.filter(mw => !/\/index\.[^/]+$/.test(mw.path))
909
- }
910
- }
891
+ },
892
+ },
911
893
  })
912
894
  ```
913
895
 
@@ -957,7 +939,7 @@ Finally, if you are using the template utilities (`serialize`, `importName`, `im
957
939
  ```ts
958
940
  import { genDynamicImport, genImport, genSafeVariableName } from 'knitwork'
959
941
 
960
- const serialize = (data: any) => JSON.stringify(data, null, 2).replace(/"{(.+)}"(?=,?$)/gm, r => JSON.parse(r).replace(/^{(.*)}$/, '$1'))
942
+ const serialize = (data: any) => JSON.stringify(data, null, 2).replace(/"\{(.+)\}"(?=,?$)/gm, r => JSON.parse(r).replace(/^\{(.*)\}$/, '$1'))
961
943
 
962
944
  const importSources = (sources: string | string[], { lazy = false } = {}) => {
963
945
  return toArray(sources).map((src) => {
@@ -1002,10 +984,10 @@ There are two approaches:
1002
984
  typescript: {
1003
985
  tsConfig: {
1004
986
  compilerOptions: {
1005
- noUncheckedIndexedAccess: false
1006
- }
1007
- }
1008
- }
987
+ noUncheckedIndexedAccess: false,
988
+ },
989
+ },
990
+ },
1009
991
  })
1010
992
  ```
1011
993
 
@@ -1090,16 +1072,16 @@ However, to take advantage of improved type checking, you can opt in to the new
1090
1072
  // Customize app/server TypeScript config
1091
1073
  tsConfig: {
1092
1074
  compilerOptions: {
1093
- strict: true
1094
- }
1075
+ strict: true,
1076
+ },
1095
1077
  },
1096
- // Customize build-time TypeScript config
1078
+ // Customize build-time TypeScript config
1097
1079
  nodeTsConfig: {
1098
1080
  compilerOptions: {
1099
- strict: true
1100
- }
1101
- }
1102
- }
1081
+ strict: true,
1082
+ },
1083
+ },
1084
+ },
1103
1085
  })
1104
1086
  ```
1105
1087