` with `display: contents;`
+::
+
+### Paired with a Client component
+
+In this case, the `.server` + `.client` components are two 'halves' of a component and can be used in advanced use cases for separate implementations of a component on server and client side.
+
+```bash [Directory Structure]
+| components/
+--| Comments.client.vue
+--| Comments.server.vue
+```
+
+```html [pages/example.vue]
-
Mountains
-
- Show List
- Home
+
+
```
## `
` Component
-Nuxt provides the `` component for purposely rendering a component only on client side. To import a component only on the client, register the component in a client-side only plugin.
+Nuxt provides the [``](/docs/api/components/client-only) component for purposely rendering a component only on client side.
```html [pages/example.vue]
@@ -241,115 +335,10 @@ Use a slot as fallback until `` is mounted on client side.
```
-
-## .client Components
-
-If a component is meant to be rendered only client-side, you can add the `.client` suffix to your component.
-
-```bash
-| components/
---| Comments.client.vue
-```
-
-```html [pages/example.vue]
-
-
-
-
-
-
-```
-
-::alert{type=warning}
-This feature only works with Nuxt auto-imports and `#components` imports. Explicitly importing these components from their real paths does not convert them into client-only components.
-::
-
-::alert{type=warning}
-`.client` components are rendered only after being mounted. To access the rendered template using `onMounted()`, add `await nextTick()` in the callback of the `onMounted()` hook.
-::
-
-## .server Components
-
-`.server` components can either be used on their own or paired with a `.client` component.
-
-### Standalone server components
-
-Standalone server components will always be rendered on the server. When their props update, this will result in a network request that will update the rendered HTML in-place.
-
-:video-player{src="https://www.youtube.com/watch?v=u1yyXe86xJM"}
-
-> A video made by [LearnVue](https://go.learnvue.co) for the Nuxt documentation.
-
-Server components are currently experimental and in order to use them, you need to enable the 'component islands' feature in your nuxt.config:
-
-```ts [nuxt.config.ts]
-export default defineNuxtConfig({
- experimental: {
- componentIslands: true
- }
-})
-```
-
-Now you can register server-only components with the `.server` suffix and use them anywhere in your application automatically.
-
-```bash
-| components/
---| HighlightedMarkdown.server.vue
-```
-
-```html [pages/example.vue]
-
-
-
-
-
-
-```
-
-Server-only components use `` under the hood, meaning that `lazy` prop and `#fallback` slot are both passed down to ``.
-
-#### Server Component Context
-
-When rendering a server-only or island component, `` makes a fetch request which comes back with a `NuxtIslandResponse`. (This is an internal request if rendered on the server, or a request that you can see in the network tab if it's rendering on client-side navigation.)
-
-This means:
-
-- A new Vue app will be created server-side to create the `NuxtIslandResponse`.
-- A new 'island context' will be created while rendering the component.
-- You can't access the 'island context' from the rest of your app and you can't access the context of the rest of your app from the island component. In other words, the server component or island is _isolated_ from the rest of your app.
-- Your plugins will run again when rendering the island, unless they have `env: { islands: false }` set (which you can do in an object-syntax plugin).
-
-Within an island component, you can access its island context through `nuxtApp.ssrContext.islandContext`. Note that while island components are still marked as experimental, the format of this context may change.
-
-::alert{type=info}
-Slots can be interactive and are wrapped within a `` with `display: contents;`
-::
-
-### Paired with a `.client` component
-
-In this case, the `.server` + `.client` components are two 'halves' of a component and can be used in advanced use cases for separate implementations of a component on server and client side.
-
-```bash
-| components/
---| Comments.client.vue
---| Comments.server.vue
-```
-
-```html [pages/example.vue]
-
-
-
-
-
-
-```
-
## `
` Component
Nuxt provides the `` component to render a component only during development.
@@ -400,7 +389,7 @@ You can use the `components:dirs` hook to extend the directory list without requ
Imagine a directory structure like this:
-```bash
+```bash [Directory Structure]
| node_modules/
---| awesome-ui/
------| components/
@@ -452,4 +441,4 @@ export default defineNuxtConfig({
It will automatically import the components only if used and also support HMR when updating your components in `node_modules/awesome-ui/components/`.
-:LinkExample{link="/docs/examples/features/auto-imports"}
+:link-example{to="/docs/examples/features/auto-imports"}
diff --git a/docs/2.guide/2.directory-structure/1.composables.md b/docs/2.guide/2.directory-structure/1.composables.md
index 102f22e826..5b672d1fb0 100644
--- a/docs/2.guide/2.directory-structure/1.composables.md
+++ b/docs/2.guide/2.directory-structure/1.composables.md
@@ -1,18 +1,10 @@
---
-navigation.icon: IconDirectory
title: 'composables'
head.title: 'composables/'
description: Use the composables/ directory to auto-import your Vue composables into your application.
+navigation.icon: i-ph-folder-duotone
---
-# Composables Directory
-
-Nuxt 3 uses the [`composables/` directory](/docs/guide/directory-structure/composables) to automatically import your Vue composables into your application using [auto-imports](/docs/guide/concepts/auto-imports)!
-
-Under the hood, Nuxt auto generates the file `.nuxt/imports.d.ts` to declare the types.
-
-Be aware that you have to run `nuxi prepare`, `nuxi dev` or `nuxi build` in order to let Nuxt generate the types. If you create a composable without having the dev server running, TypeScript will throw an error, such as `Cannot find name 'useBar'.`
-
## Usage
**Method 1:** Using named export
@@ -46,7 +38,18 @@ const foo = useFoo()
```
-::LinkExample{link="/docs/examples/features/auto-imports"}
+:read-more{to="/docs/guide/concepts/auto-imports"}
+
+:link-example{to="/docs/examples/features/auto-imports"}
+
+## Types
+
+Under the hood, Nuxt auto generates the file `.nuxt/imports.d.ts` to declare the types.
+
+Be aware that you have to run [`nuxi prepare`](/docs/api/commands/prepare), [`nuxi dev`](/docs/api/commands/dev) or [`nuxi build`](/docs/api/commands/build) in order to let Nuxt generate the types.
+
+::callout
+If you create a composable without having the dev server running, TypeScript will throw an error, such as `Cannot find name 'useBar'.`
::
## Examples
@@ -77,12 +80,12 @@ export const useHello = () => {
Nuxt only scans files at the top level of the [`composables/` directory](/docs/guide/directory-structure/composables), e.g.:
-```bash
-composables
- | - index.ts // scanned
- | - useFoo.ts // scanned
- | - nested
- | --- utils.ts // not scanned
+```bash [Directory Structure]
+| composables/
+---| index.ts // scanned
+---| useFoo.ts // scanned
+-----| nested/
+-------| utils.ts // not scanned
```
Only `composables/index.ts` and `composables/useFoo.ts` would be searched for imports.
diff --git a/docs/2.guide/2.directory-structure/1.content.md b/docs/2.guide/2.directory-structure/1.content.md
index beec4019f2..0a39c4cc6e 100644
--- a/docs/2.guide/2.directory-structure/1.content.md
+++ b/docs/2.guide/2.directory-structure/1.content.md
@@ -1,65 +1,32 @@
---
-navigation.icon: IconDirectory
title: 'content'
head.title: 'content/'
-description: The Content module reads the content/ directory to create a file-based CMS for your application.
+description: Use the content/ directory to create a file-based CMS for your application.
+navigation.icon: i-ph-folder-duotone
---
-# Content Directory
-
-The [Nuxt Content module](https://content.nuxtjs.org) reads the [`content/` directory](/docs/guide/directory-structure/content) in your project and parses `.md`, `.yml`, `.csv` and `.json` files to create a file-based CMS for your application.
-
-::list{type=success}
+[Nuxt Content](https://content.nuxt.com) reads the [`content/` directory](/docs/guide/directory-structure/content) in your project and parses `.md`, `.yml`, `.csv` and `.json` files to create a file-based CMS for your application.
- Render your content with built-in components.
- Query your content with a MongoDB-like API.
- Use your Vue components in Markdown files with the MDC syntax.
- Automatically generate your navigation.
+::read-more{to="https://content.nuxt.com" target="_blank"}
+Learn more in **Nuxt Content** documentation.
::
-## Get Started
+## Enable Nuxt Content
-### Installation
+Install the `@nuxt/content` module in your project as well as adding it to your `nuxt.config.ts` with one command:
-Install the `@nuxt/content` module in your project:
-
-::code-group
-
- ```bash [yarn]
- yarn add --dev @nuxt/content
- ```
-
- ```bash [npm]
- npm install --save-dev @nuxt/content
- ```
-
- ```bash [pnpm]
- pnpm add -D @nuxt/content
- ```
-
- ```bash [bun]
- bun add -D @nuxt/content
- ```
-
-::
-
-Then, add `@nuxt/content` to the `modules` section of `nuxt.config.ts`:
-
-```ts [nuxt.config.ts]
-export default defineNuxtConfig({
- modules: [
- '@nuxt/content'
- ],
- content: {
- // https://content.nuxtjs.org/api/configuration
- }
-})
+```bash [Terminal]
+npx nuxi module add content
```
-### Create Content
+## Create Content
-Place your markdown files inside the [`content/` directory](/docs/guide/directory-structure/content) in the root directory of your project:
+Place your markdown files inside the `content/` directory:
```md [content/index.md]
# Hello Content
@@ -67,20 +34,20 @@ Place your markdown files inside the [`content/` directory](/docs/guide/director
The module automatically loads and parses them.
-### Render Pages
+## Render Content
-To render content pages, add a [catch-all route](/docs/guide/directory-structure/pages/#catch-all-route) using the `ContentDoc` component:
+To render content pages, add a [catch-all route](/docs/guide/directory-structure/pages/#catch-all-route) using the [``](https://content.nuxt.com/components/content-doc) component:
```vue [pages/[...slug\\].vue]
-
+
```
## Documentation
-::alert{type=info}
-Head over to to learn more about the Content module features, such as how to build queries and use Vue components in your Markdown files with the MDC syntax.
+::callout
+Head over to to learn more about the Content module features, such as how to build queries and use Vue components in your Markdown files with the MDC syntax.
::
diff --git a/docs/2.guide/2.directory-structure/1.layouts.md b/docs/2.guide/2.directory-structure/1.layouts.md
index 4d77c15788..5b7ac1810f 100644
--- a/docs/2.guide/2.directory-structure/1.layouts.md
+++ b/docs/2.guide/2.directory-structure/1.layouts.md
@@ -1,58 +1,86 @@
---
-navigation.icon: IconDirectory
title: "layouts"
-description: "Nuxt provides a layouts framework to extract common UI patterns into reusable layouts."
head.title: "layouts/"
+description: "Nuxt provides a layouts framework to extract common UI patterns into reusable layouts."
+navigation.icon: i-ph-folder-duotone
---
-# Layouts Directory
+::callout{icon="i-ph-rocket-launch-duotone"}
+For best performance, components placed in this directory will be automatically loaded via asynchronous import when used.
+::
-Nuxt provides a customizable layouts framework you can use throughout your application, ideal for extracting common UI or code patterns into reusable layout components.
+## Enable Layouts
-Layouts are placed in the [`layouts/` directory](/docs/guide/directory-structure/layouts) and will be automatically loaded via asynchronous import when used. Layouts are used by adding `` to your `app.vue`, and either setting a `layout` property as part of your page metadata (if you are using the `~/pages` integration), or by manually specifying it as a prop to ``. (**Note**: The layout name is normalized to kebab-case, so `someLayout` becomes `some-layout`.)
+Layouts are enabled by adding [``](/docs/api/components/nuxt-layout) to your [`app.vue`](/docs/guide/directory-structure/app):
-If you only have a single layout in your application, we recommend using [app.vue](/docs/guide/directory-structure/app) instead.
+```vue [app.vue]
+
+
+
+
+
+```
-::alert{type=warning}
+To use a layout:
+- Set a `layout` property in your with with [definePageMeta](/docs/api/utils/define-page-meta)
+- Set the `name` prop of ``.
+
+::callout{color="blue" icon="i-ph-info-duotone"}
+The layout name is normalized to kebab-case, so `someLayout` becomes `some-layout`.
+::
+
+::callout{color="blue" icon="i-ph-info-duotone"}
+If not layout is specified, `layouts/default.vue` will be used.
+::
+
+::callout{icon="i-ph-lightbulb-duotone"}
+If you only have a single layout in your application, we recommend using [`app.vue`](/docs/guide/directory-structure/app) instead.
+::
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
Unlike other components, your layouts must have a single root element to allow Nuxt to apply transitions between layout changes - and this root element cannot be a ` `.
::
-## Enabling the Default Layout
+## Default Layout
Add a `~/layouts/default.vue`:
```vue [layouts/default.vue]
- Some default layout shared across all pages
+
Some default layout content shared across all pages
```
-In a layout file, the content of the layout will be loaded in the ` `, rather than using a special component.
+In a layout file, the content of the page will be displayed in the ` ` component.
-If you use a `app.vue` you will also need to add ``:
+## Named Layout
-```vue [app.vue]
-
-
- some page content
-
-
-```
-
-## Setting Another Layout
-
-```bash
+```bash [Directory Structure]
-| layouts/
---| default.vue
---| custom.vue
```
-You can directly override the default layout like this:
+Then you can use the `custom` layout in your page:
-```vue{}[app.vue]
+```vue [pages/about.vue]
+
+```
+
+::read-more{to="/docs/guide/directory-structure/pages#page-metadata"}
+Learn more about `definePageMeta`.
+::
+
+You can directly override the default layout for all pages using the `name` property of [``](/docs/api/components/nuxt-layout):
+
+```vue [app.vue]
-```
+For clarity, we recommend that the layout's filename matches its name:
-```vue{}[app.vue]
-
-
-
-
-
-```
+File | Layout Name
+-- | --
+`~/layouts/desktop/DesktopDefault.vue` | `desktop-default`
+`~/layouts/desktop-base/DesktopBase.vue` | `desktop-base`
+`~/layouts/desktop/Desktop.vue` | `desktop`
-```vue [layouts/custom.vue]
-
-
- Some *custom* layout
-
-
-
-```
-
-```vue [layouts/default.vue]
-
-
- A *default* layout
-
-
-
-```
-
-::
-
-::alert{type=info}
-Learn more about [defining page meta](/docs/guide/directory-structure/pages#page-metadata).
-::
+:link-example{to="/docs/examples/features/layouts"}
## Changing the Layout Dynamically
-You can also use a ref or computed property for your layout.
+You can also use the [`setPageLayout`](/docs/api/utils/set-page-layout) helper to change the layout dynamically:
```vue
@@ -175,27 +175,6 @@ definePageMeta({
::
-::alert{type=warning}
-If you use `` within your pages, make sure it is not the root element (or disable layout/page transitions).
-::
-
-## Layout Names
-
-If you have a layout in nested directories such as:
-
-```bash
-| layouts/
---| base/
-----| foo/
-------| Layout.vue
-```
-
-... then the layout's name will be based on its own path directory and filename, with duplicate segments being removed. Therefore, the layout's name will be:
-
-```html
-
-```
-
-::alert
-For clarity, we recommend that the layout's filename matches its name. (So, in the example above, you could rename `Layout.vue` to be `BaseFooLayout.vue`.)
+::callout
+If you use `` within your pages, make sure it is not the root element (or [disable layout/page transitions](/docs/getting-started/transitions#disable-transitions)).
::
diff --git a/docs/2.guide/2.directory-structure/1.middleware.md b/docs/2.guide/2.directory-structure/1.middleware.md
index 5520b4eaa9..2d7f55c43c 100644
--- a/docs/2.guide/2.directory-structure/1.middleware.md
+++ b/docs/2.guide/2.directory-structure/1.middleware.md
@@ -1,31 +1,33 @@
---
-navigation.icon: IconDirectory
title: "middleware"
description: "Nuxt provides middleware to run code before navigating to a particular route."
head.title: "middleware/"
+navigation.icon: i-ph-folder-duotone
---
-# Middleware Directory
-
Nuxt provides a customizable **route middleware** framework you can use throughout your application, ideal for extracting code that you want to run before navigating to a particular route.
-::alert{type=info}
-Route middleware run within the Vue part of your Nuxt app. Despite the similar name, they are completely different from server middleware, which are run in the Nitro server part of your app.
-::
-
There are three kinds of route middleware:
-1. Anonymous (or inline) route middleware, which are defined directly in the pages where they are used.
-2. Named route middleware, which are placed in the [`middleware/` directory](/docs/guide/directory-structure/middleware) and will be automatically loaded via asynchronous import when used on a page. (**Note**: The route middleware name is normalized to kebab-case, so `someMiddleware` becomes `some-middleware`.)
-3. Global route middleware, which are placed in the [`middleware/` directory](/docs/guide/directory-structure/middleware) (with a `.global` suffix) and will be automatically run on every route change.
+1. Anonymous (or inline) route middleware are defined directly within the page
+2. Named route middleware, placed in the `middleware/` and automatically loaded via asynchronous import when used on a page.
+3. Global route middleware, placed in the `middleware/` with a `.global` suffix and is run on every route change.
-The first two kinds of route middleware can be [defined in `definePageMeta`](/docs/guide/directory-structure/pages).
+The first two kinds of route middleware can be defined in [`definePageMeta`](/docs/api/utils/define-page-meta).
-## Format
+::callout
+Name of middleware are normalized to kebab-case: `myMiddleware` becomes `my-middleware`.
+::
+
+::callout
+Route middleware run within the Vue part of your Nuxt app. Despite the similar name, they are completely different from [server middleware](/docs/guide/directory-structure/server#server-middleware), which are run in the Nitro server part of your app.
+::
+
+## Usage
Route middleware are navigation guards that receive the current route and the next route as arguments.
-```js
+```ts [middleware/my-middleware.ts]
export default defineNuxtRouteMiddleware((to, from) => {
if (to.params.id === '1') {
return abortNavigation()
@@ -39,31 +41,29 @@ export default defineNuxtRouteMiddleware((to, from) => {
})
```
-Nuxt provides two globally available helpers that can be returned directly from the middleware:
+Nuxt provides two globally available helpers that can be returned directly from the middleware.
-1. `navigateTo (to: RouteLocationRaw | undefined | null, options?: { replace: boolean, redirectCode: number, external: boolean )` - Redirects to the given route, within plugins or middleware. It can also be called directly to perform page navigation.
-2. `abortNavigation (err?: string | Error)` - Aborts the navigation, with an optional error message.
+1. [`navigateTo`](/docs/api/utils/navigate-to) - Redirects to the given route
+2. [`abortNavigation`](/docs/api/utils/abort-navigation) - Aborts the navigation, with an optional error message.
-Unlike navigation guards in [the vue-router docs](https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards), a third `next()` argument is not passed, and redirects or route cancellation is handled by returning a value from the middleware. Possible return values are:
+Unlike [navigation guards](https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards) from `vue-router`, a third `next()` argument is not passed, and **redirect or route cancellation is handled by returning a value from the middleware**.
+
+Possible return values are:
* nothing - does not block navigation and will move to the next middleware function, if any, or complete the route navigation
-* `return navigateTo('/')` or `return navigateTo({ path: '/' })` - redirects to the given path and will set the redirect code to [`302` Found](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) if the redirect happens on the server side
+* `return navigateTo('/')` - redirects to the given path and will set the redirect code to [`302` Found](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302) if the redirect happens on the server side
* `return navigateTo('/', { redirectCode: 301 })` - redirects to the given path and will set the redirect code to [`301` Moved Permanently](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/301) if the redirect happens on the server side
-
-::ReadMore{link="/docs/api/utils/navigate-to"}
-::
-
* `return abortNavigation()` - stops the current navigation
* `return abortNavigation(error)` - rejects the current navigation with an error
-::ReadMore{link="/docs/api/utils/abort-navigation"}
-::
+:read-more{to="/docs/api/utils/navigate-to"}
+:read-more{to="/docs/api/utils/abort-navigation"}
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
We recommend using the helper functions above for performing redirects or stopping navigation. Other possible return values described in [the vue-router docs](https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards) may work but there may be breaking changes in future.
::
-## What Order Middleware Runs In
+## Middleware Order
Middleware runs in the following order:
@@ -105,14 +105,14 @@ By default, global middleware is executed alphabetically based on the filename.
However, there may be times you want to define a specific order. For example, in the last scenario, `setup.global.ts` may need to run before `analytics.global.ts`. In that case, we recommend prefixing global middleware with 'alphabetical' numbering.
-```text [middleware/ directory]
+```text [Directory structure]
middleware/
--| 01.setup.global.ts
--| 02.analytics.global.ts
--| auth.ts
```
-::alert{type=info icon=💡}
+::callout{color="blue" icon="i-ph-info-duotone"}
In case you're new to 'alphabetical' numbering, remember that filenames are sorted as strings, not as numeric values. For example, `10.new.global.ts` would come before `2.new.global.ts`. This is why the example prefixes single digit numbers with `0`.
::
@@ -122,7 +122,7 @@ If your site is server-rendered or generated, middleware for the initial page wi
However, if you want to avoid this behaviour you can do so:
-```js
+```js [middleware/example.ts]
export default defineNuxtRouteMiddleware(to => {
// skip middleware on server
if (process.server) return
@@ -136,7 +136,7 @@ export default defineNuxtRouteMiddleware(to => {
## Adding Middleware Dynamically
-It is possible to add global or named route middleware manually using the `addRouteMiddleware()` helper function, such as from within a plugin.
+It is possible to add global or named route middleware manually using the [`addRouteMiddleware()`](/docs/api/utils/add-route-middleware) helper function, such as from within a plugin.
```ts
export default defineNuxtPlugin(() => {
@@ -150,9 +150,9 @@ export default defineNuxtPlugin(() => {
})
```
-## Example: A Named Route Middleware
+## Example
-```bash
+```bash [Directory Structure]
-| middleware/
---| auth.ts
```
@@ -170,5 +170,4 @@ definePageMeta({
Now, before navigation to that page can complete, the `auth` route middleware will be run.
-::LinkExample{link="/docs/examples/routing/middleware"}
-::
+:link-example{to="/docs/examples/routing/middleware"}
diff --git a/docs/2.guide/2.directory-structure/1.modules.md b/docs/2.guide/2.directory-structure/1.modules.md
index d2b781604c..b57c0ae602 100644
--- a/docs/2.guide/2.directory-structure/1.modules.md
+++ b/docs/2.guide/2.directory-structure/1.modules.md
@@ -1,13 +1,11 @@
---
-navigation.icon: IconDirectory
title: 'modules'
head.title: 'modules/'
description: Use the modules/ directory to automatically register local modules within your application.
+navigation.icon: i-ph-folder-duotone
---
-# Modules Directory
-
-Nuxt scans the [`modules/` directory](/docs/guide/directory-structure/modules) and loads them before starting. It is a good place to place any local modules you develop while building your application.
+It is a good place to place any local modules you develop while building your application.
The auto-registered files patterns are:
- `modules/*/index.ts`
@@ -50,11 +48,11 @@ When starting Nuxt, the `hello` module will be registered and the `/api/hello` r
Local modules are registered in alphabetical order. You can change the order by adding a number to the front of each directory name:
-```md
+```bash [Directory structure]
modules/
1.first-module/
index.ts
2.second-module.ts
```
-:ReadMore{link="/docs/guide/going-further/modules"}
+:read-more{to="/docs/guide/going-further/modules"}
diff --git a/docs/2.guide/2.directory-structure/1.node_modules.md b/docs/2.guide/2.directory-structure/1.node_modules.md
index 4193c48716..d4eca819ad 100644
--- a/docs/2.guide/2.directory-structure/1.node_modules.md
+++ b/docs/2.guide/2.directory-structure/1.node_modules.md
@@ -1,10 +1,12 @@
---
-navigation.icon: IconDirectory
title: "node_modules"
description: "The package manager stores the dependencies of your project in the node_modules/ directory."
head.title: "node_modules/"
+navigation.icon: i-ph-folder-duotone
---
-# Node modules Directory
+The package manager ([`npm`](https://docs.npmjs.com/cli/commands/npm) or [`yarn`](https://yarnpkg.com/) or [`pnpm`](https://pnpm.io/cli/install) or [`bun`](https://bun.sh/package-manager)) creates this directory to store the dependencies of your project.
-The package manager ([`npm`](https://docs.npmjs.com/cli/commands/npm) or [`yarn`](https://yarnpkg.com/) or [`pnpm`](https://pnpm.io/cli/install) or [`bun`](https://bun.sh/package-manager)) creates the [`node_modules/` directory](/docs/guide/directory-structure/node_modules) to store the dependencies of your project.
+::callout
+This directory should be added to your [`.gitignore`](/docs/guide/directory-structure/gitignore) file to avoid pushing the dependencies to your repository.
+::
diff --git a/docs/2.guide/2.directory-structure/1.pages.md b/docs/2.guide/2.directory-structure/1.pages.md
index 3caab9c2ae..c7ca936450 100644
--- a/docs/2.guide/2.directory-structure/1.pages.md
+++ b/docs/2.guide/2.directory-structure/1.pages.md
@@ -1,21 +1,19 @@
---
-navigation.icon: IconDirectory
title: "pages"
description: "Nuxt provides a file-based routing to create routes within your web application."
head.title: "pages/"
+navigation.icon: i-ph-folder-duotone
---
-# Pages Directory
-
-Nuxt provides a file-based routing to create routes within your web application using [Vue Router](https://router.vuejs.org) under the hood.
-
-::alert{type="info"}
-This directory is **optional**, meaning that [`vue-router`](https://router.vuejs.org) won't be included if you only use [app.vue](/docs/guide/directory-structure/app) (unless you set `pages: true` in `nuxt.config` or have a [`app/router.options.ts`](/docs/guide/directory-structure/pages#router-options)), reducing your application's bundle size.
+::callout
+To reduce your application's bundle size, this directory is **optional**, meaning that [`vue-router`](https://router.vuejs.org) won't be included if you only use [`app.vue`](/docs/guide/directory-structure/app). To force the pages sytem, set `pages: true` in `nuxt.config` or have a [`app/router.options.ts`](/docs/guide/directory-structure/pages#router-options).
::
## Usage
-Pages are Vue components and can have any [valid extension](https://nuxt.com/docs/api/configuration/nuxt-config#extensions) that Nuxt supports (by default `.vue`, `.js`, `.jsx`, `.mjs`, `.ts` or `.tsx`). Nuxt will automatically create a route for every page in your `~/pages/` directory.
+Pages are Vue components and can have any [valid extension](/docs/api/configuration/nuxt-config#extensions) that Nuxt supports (by default `.vue`, `.js`, `.jsx`, `.mjs`, `.ts` or `.tsx`).
+
+Nuxt will automatically create a route for every page in your `~/pages/` directory.
::code-group
@@ -48,7 +46,7 @@ export default defineComponent({
The `pages/index.vue` file will be mapped to the `/` route of your application.
-If you are using [app.vue](/docs/guide/directory-structure/app), make sure to use the ` ` component to display the current page:
+If you are using [`app.vue`](/docs/guide/directory-structure/app), make sure to use the [` `](/docs/api/components/nuxt-page) component to display the current page:
```vue [app.vue]
@@ -59,7 +57,7 @@ If you are using [app.vue](/docs/guide/directory-structure/app), make sure to us
```
-Pages **must have a single root element** to allow route transitions between pages. (HTML comments are considered elements as well.)
+Pages **must have a single root element** to allow [route transitions](/docs/getting-started/transitions) between pages, HTML comments are considered elements as well.
This means that when the route is server-rendered, or statically generated, you will be able to see its contents correctly, but when you navigate towards that route during client-side navigation the transition between routes will fail and you'll see that the route will not be rendered.
@@ -99,9 +97,7 @@ If you place anything within square brackets, it will be turned into a [dynamic
If you want a parameter to be _optional_, you must enclose it in double square brackets - for example, `~/pages/[[slug]]/index.vue` or `~/pages/[[slug]].vue` will match both `/` and `/test`.
-### Example
-
-```bash
+```bash [Directory Structure]
-| pages/
---| index.vue
---| users-[group]/
@@ -134,8 +130,8 @@ if (route.params.group === 'admins' && !route.params.id) {
```
-::alert{type="info"}
-Named parent routes will take priority over nested dynamic routes. For the `/foo/hello` route, `~/pages/foo.vue` will take priority over `~/pages/foo/[slug].vue` . Use `~/pages/foo/index.vue` and `~/pages/foo/[slug].vue` to match `/foo` and `/foo/hello` with different pages,.
+::callout
+Named parent routes will take priority over nested dynamic routes. For the `/foo/hello` route, `~/pages/foo.vue` will take priority over `~/pages/foo/[slug].vue`. :br Use `~/pages/foo/index.vue` and `~/pages/foo/[slug].vue` to match `/foo` and `/foo/hello` with different pages,.
::
## Catch-all Route
@@ -160,7 +156,7 @@ It is possible to display [nested routes](https://next.router.vuejs.org/guide/es
Example:
-```bash
+```bash [Directory Structure]
-| pages/
---| parent/
------| child.vue
@@ -220,8 +216,7 @@ definePageMeta({
```
-::LinkExample{link="/docs/examples/routing/pages"}
-::
+:link-example{to="/docs/examples/routing/pages"}
## Page Metadata
@@ -276,7 +271,7 @@ Nuxt will automatically wrap your page in [the Vue `` component](http
When your goal is to preserve state for parent routes use this syntax: ` `. You can also set props to be passed to `` (see a full list [here](https://vuejs.org/api/built-in-components.html#keepalive)).
-You can set a default value for this property [in your `nuxt.config`](/docs/api/configuration/nuxt-config#keepalive).
+You can set a default value for this property [in your `nuxt.config`](/docs/api/nuxt-config#keepalive).
#### `key`
@@ -290,7 +285,7 @@ You can define the layout used to render the route. This can be either false (to
You can define transition properties for the `` component that wraps your pages and layouts, or pass `false` to disable the `` wrapper for that route. You can see a list of options that can be passed [here](https://vuejs.org/api/built-in-components.html#transition) or read [more about how transitions work](https://vuejs.org/guide/built-ins/transition.html#transition).
-You can set default values for these properties [in your `nuxt.config`](/docs/api/configuration/nuxt-config#layouttransition).
+You can set default values for these properties [in your `nuxt.config`](/docs/api/nuxt-config#layouttransition).
#### `middleware`
@@ -333,8 +328,8 @@ A simple link to the `index.vue` page in your `pages` folder:
```
-::alert{type="info"}
-Learn more about [``](/docs/api/components/nuxt-link) usage.
+::read-more{to="/docs/api/components/nuxt-link"}
+Learn more about `` usage.
::
## Programmatic Navigation
@@ -364,32 +359,32 @@ function navigate(){
As your app gets bigger and more complex, your routing might require more flexibility. For this reason, Nuxt directly exposes the router, routes and router options for customization in different ways.
-:ReadMore{link="/docs/guide/going-further/custom-routing"}
+:read-more{to="/docs/guide/going-further/custom-routing"}
## Multiple pages directories
By default, all your pages should be in one `pages` directory at the root of your project.
-However, you can use Layers to create groupings of your app's pages.
-Example:
+However, you can use [Nuxt Layers](/docs/getting-started/layers) to create groupings of your app's pages:
-```bash
--| nuxt.config.ts
+```bash [Directory Structure]
-| some-app/
---| nuxt.config.ts
---| pages
-----| app-page.vue
+-| nuxt.config.ts
```
-```ts
+```ts [some-app/nuxt.config.ts]
// some-app/nuxt.config.ts
export default defineNuxtConfig({
})
+```
-// nuxt.config.ts
+```ts [nuxt.config.ts]
export default defineNuxtConfig({
extends: ['./some-app'],
})
```
-:ReadMore{link="/docs/guide/going-further/layers"}
+:read-more{to="/docs/guide/going-further/layers"}
diff --git a/docs/2.guide/2.directory-structure/1.plugins.md b/docs/2.guide/2.directory-structure/1.plugins.md
index 015250f586..c92a8b233a 100644
--- a/docs/2.guide/2.directory-structure/1.plugins.md
+++ b/docs/2.guide/2.directory-structure/1.plugins.md
@@ -1,40 +1,51 @@
---
-navigation.icon: IconDirectory
title: "plugins"
-description: "Nuxt reads the files in your plugins directory and loads them at the creation of the Vue application."
+description: "Nuxt has a plugins system to use Vue plugins and more at the creation of your Vue application."
head.title: "plugins/"
+navigation.icon: i-ph-folder-duotone
---
-# Plugins Directory
+Nuxt automatically reads the files in the `plugins/` directory and loads them at the creation of the Vue application.
-Nuxt automatically reads the files in your `plugins` directory and loads them at the creation of the Vue application. You can use `.server` or `.client` suffix in the file name to load a plugin only on the server or client side.
-
-::alert{type=warning}
-All plugins in your [`plugins/` directory](/docs/guide/directory-structure/plugins) are auto-registered, so you should not add them to your `nuxt.config` separately.
+::callout{color="blue" icon="i-ph-info-duotone"}
+All plugins inside are auto-registered, you don't need not add them to your `nuxt.config` separately.
::
-## Which Files Are Registered
+::callout{color="yellow" icon="i-ph-lightbulb-duotone"}
+You can use `.server` or `.client` suffix in the file name to load a plugin only on the server or client side.
+::
-Only files at the top level of the [`plugins/` directory](/docs/guide/directory-structure/plugins) (or index files within any subdirectories) will be registered as plugins.
+## Registered Plugins
-For example:
+Only files at the top level of the directory (or index files within any subdirectories) will be auto-registered as plugins.
-```bash
-plugins
- | - myPlugin.ts // scanned
- | - myOtherPlugin
- | --- supportingFile.ts // not scanned
- | --- componentToRegister.vue // not scanned
- | --- index.ts // currently scanned but deprecated
+```bash [Directory sturcture]
+-| plugins/
+---| foo.ts // scanned
+---| bar/
+-----| baz.ts // not scanned
+-----| foz.vue // not scanned
+-----| index.ts // currently scanned but deprecated
```
-Only `myPlugin.ts` and `myOtherPlugin/index.ts` would be registered. You can configure [`plugins`](/docs/api/configuration/nuxt-config#plugins-1) to include unscanned files.
+Only `foo.ts` and `bar/index.ts` would be registered.
+
+To add plugins in subdirectories, you can use the [`plugins`](/docs/api/nuxt-config#plugins-1) option in `nuxt.config.ts`:
+
+```ts [nuxt.config.ts]
+export default defineNuxtConfig({
+ plugins: [
+ '~/plugins/bar/baz',
+ '~/plugins/bar/foz'
+ ]
+})
+```
## Creating Plugins
The only argument passed to a plugin is [`nuxtApp`](/docs/api/composables/use-nuxt-app).
-```ts
+```ts [plugins/hello.ts]
export default defineNuxtPlugin(nuxtApp => {
// Doing something with nuxtApp
})
@@ -44,7 +55,7 @@ export default defineNuxtPlugin(nuxtApp => {
It is also possible to define a plugin using an object syntax, for more advanced use cases. For example:
-```ts
+```ts [plugins/hello.ts]
export default defineNuxtPlugin({
name: 'my-plugin',
enforce: 'pre', // or 'post'
@@ -52,32 +63,29 @@ export default defineNuxtPlugin({
// this is the equivalent of a normal functional plugin
},
hooks: {
- // You can directly register Nuxt app hooks here
+ // You can directly register Nuxt app runtime hooks here
'app:created'() {
const nuxtApp = useNuxtApp()
//
}
+ },
+ env: {
+ // Set this value to `false` if you don't want the plugin to run when rendering server-only or island components.
+ islands: true
}
})
```
-You can also use the `env` property to define the environments in which your plugin will run.
-
-- **islands**
- - **default**: `true`
- - **description**: You can set this value to `false` if you don't want the plugin to run when rendering server-only or island components.
-
-::alert
-If you are using an object-syntax plugin, the properties may be statically analyzed in future to produce a more optimized build. So you should not define them at runtime. For example, setting `enforce: process.server ? 'pre' : 'post'` would defeat any future optimization Nuxt is able to do for your plugins.
+::callout
+If you are using the object-syntax, the properties may be statically analyzed in future to produce a more optimized build. So you should not define them at runtime. :br
+For example, setting `enforce: process.server ? 'pre' : 'post'` would defeat any future optimization Nuxt is able to do for your plugins.
::
-## Plugin Registration Order
+## Registration Order
You can control the order in which plugins are registered by prefixing with 'alphabetical' numbering to the file names.
-For example:
-
-```bash
+```bash [Directory structure]
plugins/
| - 01.myPlugin.ts
| - 02.myOtherPlugin.ts
@@ -87,15 +95,15 @@ In this example, `02.myOtherPlugin.ts` will be able to access anything that was
This is useful in situations where you have a plugin that depends on another plugin.
-::alert{type=info icon=💡}
+::callout{color="blue" icon="i-ph-info-duotone"}
In case you're new to 'alphabetical' numbering, remember that filenames are sorted as strings, not as numeric values. For example, `10.myPlugin.ts` would come before `2.myOtherPlugin.ts`. This is why the example prefixes single digit numbers with `0`.
::
-## Loading strategy
+## Loading Strategy
By default, Nuxt loads plugins sequentially. You can define a plugin as `parallel` so Nuxt won't wait the end of the plugin's execution before loading the next plugin.
-```ts
+```ts [plugins/hello.ts]
export default defineNuxtPlugin({
name: 'my-plugin',
parallel: true,
@@ -105,31 +113,35 @@ export default defineNuxtPlugin({
})
```
-## Using Composables Within Plugins
+## Using Composables
-You can use [composables](/docs/guide/directory-structure/composables) within Nuxt plugins:
+You can use [composables](/docs/guide/directory-structure/composables) as well as [utils](/docs/guide/directory-structure/utils) within Nuxt plugins:
-```ts
-export default defineNuxtPlugin((NuxtApp) => {
+```ts [plugins/hello.ts]
+export default defineNuxtPlugin((nuxtApp) => {
const foo = useFoo()
})
```
However, keep in mind there are some limitations and differences:
-**If a composable depends on another plugin registered later, it might not work.**
+::callout
+**If a composable depends on another plugin registered later, it might not work.** :br
-**Reason:** Plugins are called in order sequentially and before everything else. You might use a composable that depends on another plugin which has not been called yet.
+Plugins are called in order sequentially and before everything else. You might use a composable that depends on another plugin which has not been called yet.
+::
-**If a composable depends on the Vue.js lifecycle, it won't work.**
+::callout
+**If a composable depends on the Vue.js lifecycle, it won't work.** :br
-**Reason:** Normally, Vue.js composables are bound to the current component instance while plugins are only bound to `nuxtApp` instance.
+Normally, Vue.js composables are bound to the current component instance while plugins are only bound to [`nuxtApp`](/docs/api/composables/use-nuxt-app) instance.
+::
-## Automatically Providing Helpers
+## Providing Helpers
-If you would like to provide a helper on the `NuxtApp` instance, return it from the plugin under a `provide` key. For example:
+If you would like to provide a helper on the [`NuxtApp`](/docs/api/composables/use-nuxt-app) instance, return it from the plugin under a `provide` key.
-```ts
+```ts [plugins/hello.ts]
export default defineNuxtPlugin(() => {
return {
provide: {
@@ -139,9 +151,9 @@ export default defineNuxtPlugin(() => {
})
```
-In another file you can use this:
+You can then use the helper in your components:
-```vue
+```vue [components/Hello.vue]
+```
+
+::callout{to="https://v2.nuxt.com/docs/directory-structure/static" target="_blank"}
+This is known as the [`static/`] directory in Nuxt 2.
::
diff --git a/docs/2.guide/2.directory-structure/1.server.md b/docs/2.guide/2.directory-structure/1.server.md
index 5e0499f08f..e31ee0a565 100644
--- a/docs/2.guide/2.directory-structure/1.server.md
+++ b/docs/2.guide/2.directory-structure/1.server.md
@@ -1,23 +1,26 @@
---
-navigation.icon: IconDirectory
title: server
head.title: 'server/'
description: The server/ directory is used to register API and server handlers to your application.
+navigation.icon: i-ph-folder-duotone
---
-# Server Directory
+Nuxt automatically scans files inside these directories to register API and server handlers with HMR support.
-Nuxt automatically scans files inside these directories to register API and server handlers with HMR support:
-- `~/server/api`
-- `~/server/routes`
-- `~/server/middleware`
+```bash [Directory structure]
+-| server/
+---| api/
+-----| hello.ts # /api/hello
+---| routes/
+-----| bonjour.ts # /bonjour
+---| middleware/
+-----| log.ts # log all requests
+```
Each file should export a default function defined with `defineEventHandler()` or `eventHandler()` (alias).
The handler can directly return JSON data, a `Promise`, or use `event.node.res.end()` to send a response.
-**Example:** Create the `/api/hello` route with `server/api/hello.ts` file:
-
```ts [server/api/hello.ts]
export default defineEventHandler((event) => {
return {
@@ -38,10 +41,6 @@ const { data } = await useFetch('/api/hello')
```
-Note that [h3 utilities](https://github.com/unjs/h3#utilities) are auto-imported.
-
-:ReadMore{link="https://nitro.unjs.io/guide/routing" title="Nitro Route Handling Docs"}
-
## Server Routes
Files inside the `~/server/api` are automatically prefixed with `/api` in their route.
@@ -56,8 +55,8 @@ export default defineEventHandler(() => 'Hello World!')
Given the example above, the `/hello` route will be accessible at .
-::alert{type=info icon=💡}
-Note that currently server routes do not support the full functionality of dynamic routes as [pages](https://nuxt.com/docs/guide/directory-structure/pages#dynamic-routes) do.
+::callout
+Note that currently server routes do not support the full functionality of dynamic routes as [pages](/docs/guide/directory-structure/pages#dynamic-routes) do.
::
## Server Middleware
@@ -66,7 +65,7 @@ Nuxt will automatically read in any file in the `~/server/middleware` to create
Middleware handlers will run on every request before any other server route to add or check headers, log requests, or extend the event's request object.
-::alert{type=warning}
+::callout
Middleware handlers should not return anything (nor close or respond to the request) and only inspect or extend the request context or throw an error.
::
@@ -96,13 +95,13 @@ export default defineNitroPlugin((nitroApp) => {
})
```
-:ReadMore{link="https://nitro.unjs.io/guide/plugins" title="Nitro Plugins"}
+:read-more{to="https://nitro.unjs.io/guide/plugins" title="Nitro Plugins" target="_blank"}
## Server Utilities
Server routes are powered by [unjs/h3](https://github.com/unjs/h3) which comes with a handy set of helpers.
-:ReadMore{link="https://www.jsdocs.io/package/h3#package-index-functions" title="Available H3 Request Helpers"}
+:read-more{to="https://www.jsdocs.io/package/h3#package-index-functions" title="Available H3 Request Helpers" target="_blank"}
You can add more helpers yourself inside the `~/server/utils` directory.
@@ -131,7 +130,7 @@ export const defineWrappedResponseHandler = (
## Server Types
-::alert{type="info"}
+::callout
This feature is available from Nuxt >= 3.5
::
@@ -143,24 +142,23 @@ To improve clarity within your IDE between the auto-imports from 'nitro' and 'vu
}
```
-Although right now these values won't be respected when type checking (`nuxi typecheck`), you should get better type hints in your IDE.
+Although right now these values won't be respected when type checking ([`nuxi typecheck`](/docs/api/commands/typecheck)), you should get better type hints in your IDE.
-## Usage Examples
+## Recipes
-### Matching Route Parameters
+### Route Parameters
Server routes can use dynamic parameters within brackets in the file name like `/api/hello/[name].ts` and be accessed via `event.context.params`.
-**Example:**
-
```ts [server/api/hello/[name\\].ts]
export default defineEventHandler((event) => {
const name = getRouterParam(event, 'name')
+
return `Hello, ${name}!`
})
```
-You can now universally call this API using `await $fetch('/api/hello/nuxt')` and get `Hello, nuxt!`.
+You can now universally call this API on `/api/hello/nuxt` and get `Hello, nuxt!`.
### Matching HTTP Method
@@ -180,87 +178,99 @@ Given the example above, fetching `/test` with:
- **POST** method: Returns `Test post handler`
- Any other method: Returns 405 error
-You can also use `index.[method].ts` inside a directory for structuring your code differently.
-
-**Example:**
-
-```ts [server/api/foo/index.ts]
-export default defineEventHandler((event) => {
- // handle the `api/foo` endpoint
-})
-```
-
-This is useful to create API namespaces.
-
-**Examples:**
+You can also use `index.[method].ts` inside a directory for structuring your code differently, this is useful to create API namespaces.
+::code-group
```ts [server/api/foo/index.get.ts]
export default defineEventHandler((event) => {
// handle GET requests for the `api/foo` endpoint
})
```
-
```ts [server/api/foo/index.post.ts]
export default defineEventHandler((event) => {
// handle POST requests for the `api/foo` endpoint
})
```
-
```ts [server/api/foo/bar.get.ts]
export default defineEventHandler((event) => {
// handle GET requests for the `api/foo/bar` endpoint
})
```
+::
### Catch-all Route
-Catch-all routes are helpful for fallback route handling. For example, creating a file named `~/server/api/foo/[...].ts` will register a catch-all route for all requests that do not match any route handler, such as `/api/foo/bar/baz`.
+Catch-all routes are helpful for fallback route handling.
-**Examples:**
+For example, creating a file named `~/server/api/foo/[...].ts` will register a catch-all route for all requests that do not match any route handler, such as `/api/foo/bar/baz`.
```ts [server/api/foo/[...\\].ts]
-export default defineEventHandler(() => `Default foo handler`)
-```
-
-```ts [server/api/[...\\].ts]
-export default defineEventHandler(() => `Default api handler`)
-```
-
-### Handling Requests with Body
-
-```ts [server/api/submit.post.ts]
-export default defineEventHandler(async (event) => {
- const body = await readBody(event)
- return { body }
+export default defineEventHandler((event) => {
+ // event.context.path to get the route path: '/api/foo/bar/baz'
+ // event.context.params._ to get the route segment: 'bar/baz'
+ return `Default foo handler`
})
```
-You can now universally call this API using `$fetch('/api/submit', { method: 'post', body: { test: 123 } })`.
+You can set a name for the catch-all route by using `~/server/api/foo/[...slug].ts` and access it via `event.context.params.slug`.
-::alert{type=warning title=Attention}
+```ts [server/api/foo/[...slug\\].ts]
+export default defineEventHandler((event) => {
+ // event.context.params.slug to get the route segment: 'bar/baz'
+ return `Default foo handler`
+})
+```
+
+### Body Handling
+
+```ts [server/api/submit.post.ts]
+export default defineEventHandler(async (event) => {
+ const body = await readBody(event)
+ return { body }
+})
+```
+
+You can now universally call this API using:
+
+```vue [app.vue]
+
+```
+
+::callout
We are using `submit.post.ts` in the filename only to match requests with `POST` method that can accept the request body. When using `readBody` within a GET request, `readBody` will throw a `405 Method Not Allowed` HTTP error.
::
-### Handling Requests With Query Parameters
+### Query Parameters
-Sample query `/api/query?param1=a¶m2=b`
+Sample query `/api/query?foo=bar&baz=qux`
```ts [server/api/query.get.ts]
export default defineEventHandler((event) => {
const query = getQuery(event)
- return { a: query.param1, b: query.param2 }
+
+ return { a: query.foo, b: query.baz }
})
```
-### Error handling
+### Error Handling
-If no errors are thrown, a status code of `200 OK` will be returned. Any uncaught errors will return a `500 Internal Server Error` HTTP Error.
+If no errors are thrown, a status code of `200 OK` will be returned.
-To return other error codes, throw an exception with `createError`
+Any uncaught errors will return a `500 Internal Server Error` HTTP Error.
+
+To return other error codes, throw an exception with [`createError`](/docs/api/utils/create-error):
```ts [server/api/validation/[id\\].ts]
export default defineEventHandler((event) => {
const id = parseInt(event.context.params.id) as number
+
if (!Number.isInteger(id)) {
throw createError({
statusCode: 400,
@@ -271,9 +281,9 @@ export default defineEventHandler((event) => {
})
```
-### Returning other status codes
+### Status Codes
-To return other status codes, you can use the `setResponseStatus` utility.
+To return other status codes, use the [`setResponseStatus`](/docs/api/utils/set-response-status) utility.
For example, to return `202 Accepted`
@@ -283,32 +293,55 @@ export default defineEventHandler((event) => {
})
```
-### Accessing Runtime Config
+### Runtime Config
+::code-group
```ts [server/api/foo.ts]
+export default defineEventHandler(async (event) => {
+ const config = useRuntimeConfig(event)
-export default defineEventHandler((event) => {
- const config = useRuntimeConfig()
- return { key: config.KEY }
+ const repo = await $fetch('https://api.github.com/repos/nuxt/nuxt', {
+ headers: {
+ Authorization: `token ${config.githubToken}`
+ }
+ })
+
+ return repo
})
```
+```ts [nuxt.config.ts]
+export default defineNuxtConfig({
+ runtimeConfig: {
+ githubToken: ''
+ }
+})
+```
+```bash [.env]
+NUXT_GITHUB_TOKEN=''
+```
+::
-### Accessing Request Cookies
+::callout
+Giving the `event` as argument to `useRuntimeConfig` is optional, but it is recommended to pass it to get the runtime config overwritten by [environment variables](/docs/guide/going-further/runtime-config#environment-variables) at runtime for server routes.
+::
-```ts
+### Request Cookies
+
+```ts [server/api/cookies.ts]
export default defineEventHandler((event) => {
const cookies = parseCookies(event)
+
return { cookies }
})
```
-## Advanced Usage Examples
+## Advanced Usage
-### Nitro Configuration
+### Nitro Config
You can use `nitro` key in `nuxt.config` to directly set [Nitro configuration](https://nitro.unjs.io/config).
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
This is an advanced option. Custom config can affect production deployments, as the configuration interface might change over time when Nitro is upgraded in semver-minor versions of Nuxt.
::
@@ -319,7 +352,9 @@ export default defineNuxtConfig({
})
```
-### Using a Nested Router
+:read-more{to="/docs/guide/concepts/server-engine"}
+
+### Nested Router
```ts [server/api/hello/[...slug\\].ts]
import { createRouter, defineEventHandler, useBase } from 'h3'
@@ -331,9 +366,11 @@ router.get('/test', defineEventHandler(() => 'Hello World'))
export default useBase('/api/hello', router.handler)
```
-### Sending Streams (Experimental)
+### Sending Streams
-**Note:** This is an experimental feature and is only available within Node.js environments.
+::callout
+This is an experimental feature and is only available in all environments.
+::
```ts [server/api/foo.get.ts]
import fs from 'node:fs'
@@ -352,7 +389,7 @@ export default defineEventHandler(async (event) => {
})
```
-### Return a Legacy Handler or Middleware
+### Legacy Handler or Middleware
```ts [server/api/legacy.ts]
export default fromNodeMiddleware((req, res) => {
@@ -360,7 +397,7 @@ export default fromNodeMiddleware((req, res) => {
})
```
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Legacy support is possible using [unjs/h3](https://github.com/unjs/h3), but it is advised to avoid legacy handlers as much as you can.
::
@@ -371,15 +408,15 @@ export default fromNodeMiddleware((req, res, next) => {
})
```
-::alert{type=warning}
-Never combine `next()` callback with a legacy middleware that is `async` or returns a `Promise`!
+::callout{color="amber" icon="i-ph-warning-duotone"}
+Never combine `next()` callback with a legacy middleware that is `async` or returns a `Promise`.
::
### Server Storage
Nitro provides a cross-platform [storage layer](https://nitro.unjs.io/guide/storage). In order to configure additional storage mount points, you can use `nitro.storage`, or [server plugins](#server-plugins).
-#### Example: Using Redis
+**Example of adding a Redis storage:**
Using `nitro.storage`:
@@ -387,7 +424,7 @@ Using `nitro.storage`:
export default defineNuxtConfig({
nitro: {
storage: {
- 'redis': {
+ redis: {
driver: 'redis',
/* redis connector options */
port: 6379, // Redis port
@@ -402,10 +439,30 @@ export default defineNuxtConfig({
})
```
-Alternatively, using server plugins:
+Then in your API handler:
+
+```ts [server/api/storage/test.ts]
+export default defineEventHandler(async (event) => {
+ // List all keys with
+ const keys = await useStorage('redis').getKeys()
+
+ // Set a key with
+ await useStorage('redis').setItem('foo', 'bar')
+
+ // Remove a key with
+ await useStorage('redis').removeItem('foo')
+
+ return {}
+})
+```
+
+::read-more{to="https://nitro.unjs.io/guide/storage" target="_blank"}
+Read more about Nitro Storage Layer.
+::
+
+Alternatively, you can create a storage mount point using a server plugin and runtime config:
::code-group
-
```ts [server/plugins/storage.ts]
import redisDriver from 'unstorage/drivers/redis'
@@ -436,45 +493,4 @@ export default defineNuxtConfig({
}
})
```
-
::
-
-Create a new file in `server/api/test.post.ts`:
-
-```ts [server/api/test.post.ts]
-export default defineEventHandler(async (event) => {
- const body = await readBody(event)
- await useStorage().setItem('redis:test', body)
- return 'Data is set'
-})
-```
-
-Create a new file in `server/api/test.get.ts`:
-
-```ts [server/api/test.get.ts]
-export default defineEventHandler(async (event) => {
- const data = await useStorage().getItem('redis:test')
- return data
-})
-```
-
-Create a new file in `app.vue`:
-
-```vue [app.vue]
-
-
-
-
-
Post state: {{ resDataSuccess }}
-
Get Data: {{ resData.text }}
-
-
-```
-
-::ReadMore{link="/docs/guide/directory-structure/server"}
diff --git a/docs/2.guide/2.directory-structure/1.utils.md b/docs/2.guide/2.directory-structure/1.utils.md
index 97d257f3cc..9201dc37fb 100644
--- a/docs/2.guide/2.directory-structure/1.utils.md
+++ b/docs/2.guide/2.directory-structure/1.utils.md
@@ -1,20 +1,49 @@
---
-navigation.icon: IconDirectory
title: 'utils'
head.title: 'utils/'
description: Use the utils/ directory to auto-import your utility functions throughout your application.
+navigation.icon: i-ph-folder-duotone
---
-# Utils Directory
-
-Nuxt 3 uses the [`utils/` directory](/docs/guide/directory-structure/utils) to automatically import helper functions and other utilities throughout your application using [auto-imports](/docs/guide/concepts/auto-imports)!
-
-::alert{type=info}
The main purpose of the [`utils/` directory](/docs/guide/directory-structure/utils) is to allow a semantic distinction between your Vue composables and other auto-imported utility functions.
-The way `utils/` auto-imports work and are scanned is identical to [the composables/ directory](/docs/guide/directory-structure/composables). You can see examples and more information about how they work in that section of the docs.
+## Usage
+
+**Method 1:** Using named export
+
+```js [utils/index.ts]
+export const { format: formatNumber } = Intl.NumberFormat('en-GB', {
+ notation: 'compact',
+ maximumFractionDigits: 1
+})
+```
+
+**Method 2:** Using default export
+
+```js [utils/random-entry.ts or utils/randomEntry.ts]
+// It will be available as randomEntry() (camelCase of file name without extension)
+export default function (arr: Array) {
+ return arr[Math.floor(Math.random() * arr.length)]
+}
+```
+
+You can now use auto imported utility functions in `.js`, `.ts` and `.vue` files
+
+```vue [app.vue]
+
+ {{ formatNumber(1234) }}
+
+```
+
+:read-more{to="/docs/guide/concepts/auto-imports"}
+
+:link-example{to="/docs/examples/features/auto-imports"}
+
+::callout
+The way `utils/` auto-imports work and are scanned is identical to the [`composables/`](/docs/guide/directory-structure/composables) directory.
::
-::alert{type=info}
-These utils are only available within the Vue part of your app. Within the [server directory](/docs/guide/directory-structure/server#server-utilities), we auto import exported functions and variables from `~/server/utils` instead.
+::callout{color="amber" icon="i-ph-warning-duotone"}
+These utils are only available within the Vue part of your app. :br
+Only `server/utils` are auto-imported in the [`server/`](/docs/guide/directory-structure/server#server-utilities) directory.
::
diff --git a/docs/2.guide/2.directory-structure/2.env.md b/docs/2.guide/2.directory-structure/2.env.md
index 1d353907b6..3932c4e2ad 100644
--- a/docs/2.guide/2.directory-structure/2.env.md
+++ b/docs/2.guide/2.directory-structure/2.env.md
@@ -1,50 +1,57 @@
---
-navigation.icon: IconFile
title: ".env"
description: "A .env file specifies your build/dev-time environment variables."
head.title: ".env"
+navigation.icon: i-ph-file-duotone
---
-# .env File
-
-## At Build, Dev, and Generate Time
-
-Nuxt CLI has built-in [dotenv](https://github.com/motdotla/dotenv) support in development mode and when running `nuxi build` and `nuxi generate`.
-
-In addition to any process environment variables, if you have a `.env` file in your project root directory, it will be automatically loaded **at build, dev, and generate time**, and any environment variables set there will be accessible within your `nuxt.config` file and modules.
-
-::alert
-If you want to use a different file - for example, to use `.env.local` or `.env.production` - you can do so by passing the `--dotenv` flag when using `nuxi`. For example:
-
-```bash
-npx nuxi dev --dotenv .env.local
-```
-
-Just as above, this will only apply in development mode and when running `nuxi build` and `nuxi generate`.
+::callout{icon="i-ph-warning-duotone" color="amber"}
+This file should be added to your [`.gitignore`](/docs/guide/directory-structure/gitignore) file to avoid pushing secrets to your repository.
::
-When updating `.env` in development mode, the Nuxt instance is automatically restarted to apply new values to the `process.env`.
+## Dev, Build and Generate Time
-::alert{type=warning}
+Nuxt CLI has built-in [dotenv](https://github.com/motdotla/dotenv) support in development mode and when running [`nuxi build`](/docs/api/commands/build) and [`nuxi generate`](/docs/api/commands/generate).
+
+In addition to any process environment variables, if you have a `.env` file in your project root directory, it will be automatically loaded **at dev, build and generate time**. Any environment variables set there will be accessible within your `nuxt.config` file and modules.
+
+```bash [.env]
+MY_ENV_VARIABLE=hello
+```
+
+::callout
Note that removing a variable from `.env` or removing the `.env` file entirely will not unset values that have already been set.
::
+## Custom File
+
+If you want to use a different file - for example, to use `.env.local` or `.env.production` - you can do so by passing the `--dotenv` flag when using `nuxi`.
+
+```bash [Terminal]
+npx nuxi dev --dotenv .env.local
+```
+
+When updating `.env` in development mode, the Nuxt instance is automatically restarted to apply new values to the `process.env`.
+
## Production Preview
-**After your server is built**, you are responsible for setting environment variables when you run the server. Your `.env` file will not be read at this point. How you do this is different for every environment.
+**After your server is built**, you are responsible for setting environment variables when you run the server.
-For local production preview purpose, we recommend using [`nuxi preview`](https://nuxt.com/docs/api/commands/preview) since using this command, the `.env` file will be loaded into `process.env` for convenience. Note that this command requires dependencies to be installed in the package directory.
+Your `.env` file will not be read at this point. How you do this is different for every environment.
+
+For local production preview purpose, we recommend using [`nuxi preview`](/docs/api/commands/preview) since using this command, the `.env` file will be loaded into `process.env` for convenience. Note that this command requires dependencies to be installed in the package directory.
Or you could pass the environment variables as arguments using the terminal. For example, on Linux or macOS:
-```bash
+```bash [Terminal]
DATABASE_HOST=mydatabaseconnectionstring node .output/server/index.mjs
```
Note that for a purely static site, it is not possible to set runtime configuration config after your project is prerendered.
-:ReadMore{link="/docs/guide/going-further/runtime-config"}
+:read-more{to="/docs/guide/going-further/runtime-config"}
+::callout
If you want to use environment variables set at build time but do not care about updating these down the line (or only need to update them reactively _within_ your app) then `appConfig` may be a better choice. You can define `appConfig` both within your `nuxt.config` (using environment variables) and also within an `~/app.config.ts` file in your project.
-
-:ReadMore{link="/docs/guide/directory-structure/app-config"}
+:read-more{to="/docs/guide/directory-structure/app-config"}
+::
diff --git a/docs/2.guide/2.directory-structure/2.gitignore.md b/docs/2.guide/2.directory-structure/2.gitignore.md
index d2020a77fb..515959e0c0 100644
--- a/docs/2.guide/2.directory-structure/2.gitignore.md
+++ b/docs/2.guide/2.directory-structure/2.gitignore.md
@@ -1,13 +1,13 @@
---
-navigation.icon: IconFile
title: ".gitignore"
description: "A .gitignore file specifies intentionally untracked files that git should ignore."
head.title: ".gitignore"
+navigation.icon: i-ph-file-duotone
---
-# Git Ignore File
+A `.gitignore` file specifies intentionally untracked files that git should ignore.
-A `.gitignore` file specifies intentionally untracked files that git should ignore. Learn more about it in [the git documentation](https://git-scm.com/docs/gitignore).
+:read-more{icon="i-simple-icons-git" color="gray" title="the git documentation" to="https://git-scm.com/docs/gitignore" target="_blank"}
We recommend having a `.gitignore` file that has **at least** the following entries present:
diff --git a/docs/2.guide/2.directory-structure/2.nuxtignore.md b/docs/2.guide/2.directory-structure/2.nuxtignore.md
index 4fbdb38b47..b222f4dab9 100644
--- a/docs/2.guide/2.directory-structure/2.nuxtignore.md
+++ b/docs/2.guide/2.directory-structure/2.nuxtignore.md
@@ -1,17 +1,19 @@
---
-navigation.icon: IconFile
title: .nuxtignore
head.title: '.nuxtignore'
description: The .nuxtignore file lets Nuxt ignore files in your project’s root directory during the build phase.
+navigation.icon: i-ph-file-duotone
---
-# Nuxt Ignore File
+The `.nuxtignore` file tells Nuxt to ignore files in your project’s root directory ([`rootDir`](/docs/api/nuxt-config#rootdir)) during the build phase.
-The `.nuxtignore` file lets Nuxt ignore `layouts`, `pages`, `components`, `composables` and `middleware` files in your project’s root directory (`rootDir`) during the build phase. The `.nuxtignore` file is subject to the same specification as `.gitignore` and `.eslintignore` files, in which each line is a glob pattern indicating which files should be ignored.
+It is subject to the same specification as [`.gitignore`](/docs/guide/directory-structure/gitignore) and `.eslintignore` files, in which each line is a glob pattern indicating which files should be ignored.
-**Note**: You can also configure [`ignoreOptions`](/docs/api/configuration/nuxt-config#ignoreoptions), [`ignorePrefix`](/docs/api/configuration/nuxt-config#ignoreprefix) and [`ignore`](/docs/api/configuration/nuxt-config#ignore) in your `nuxt.config` file.
+::callout
+You can also configure [`ignoreOptions`](/docs/api/nuxt-config#ignoreoptions), [`ignorePrefix`](/docs/api/nuxt-config#ignoreprefix) and [`ignore`](/docs/api/nuxt-config#ignore) in your `nuxt.config` file.
+::
-## Example
+## Usage
```bash [.nuxtignore]
# ignore layout foo.vue
@@ -29,4 +31,6 @@ middleware/foo/*.js
!middleware/foo/bar.js
```
-> More details about the spec are in the [gitignore doc](https://git-scm.com/docs/gitignore).
+::read-more{icon="i-simple-icons-git" color="gray" title="the git documentation" to="https://git-scm.com/docs/gitignore" target="_blank"}
+More details about the spec are in the **gitignore documentation**.
+::
diff --git a/docs/2.guide/2.directory-structure/3.app-config.md b/docs/2.guide/2.directory-structure/3.app-config.md
index 5aa08da7b0..b2e9dba7f3 100644
--- a/docs/2.guide/2.directory-structure/3.app-config.md
+++ b/docs/2.guide/2.directory-structure/3.app-config.md
@@ -1,12 +1,10 @@
---
-navigation.icon: IconFile
title: app.config.ts
head.title: 'app.config.ts'
-description: Nuxt 3 provides the app.config file to expose reactive configuration within your application.
+description: Expose reactive configuration within your application with the App Config file.
+navigation.icon: i-ph-file-duotone
---
-# App Config File
-
Nuxt 3 provides an `app.config` config file to expose reactive configuration within your application with the ability to update it at runtime within lifecycle or using a nuxt plugin and editing it with HMR (hot-module-replacement).
You can easily provide runtime app configuration using `app.config.ts` file. It can have either of `.ts`, `.js`, or `.mjs` extensions.
@@ -17,16 +15,14 @@ export default defineAppConfig({
})
```
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Do not put any secret values inside `app.config` file. It is exposed to the user client bundle.
::
-## Defining App Config
+## Usage
To expose config and environment variables to the rest of your app, you will need to define configuration in `app.config` file.
-**Example:**
-
```ts [app.config.ts]
export default defineAppConfig({
theme: {
@@ -35,21 +31,23 @@ export default defineAppConfig({
})
```
-When adding `theme` to the `app.config`, Nuxt uses Vite or webpack to bundle the code. We can universally access `theme` both when server-rendering the page and in the browser using [useAppConfig](/docs/api/composables/use-app-config) composable.
+When adding `theme` to the `app.config`, Nuxt uses Vite or webpack to bundle the code. We can universally access `theme` both when server-rendering the page and in the browser using [`useAppConfig`](/docs/api/composables/use-app-config) composable.
-```js
+```vue [pages/index.vue]
+
```
-### Manually Typing App Config
+## Typing App Config
-Nuxt tries to automatically generate a TypeScript interface from provided app config.
+Nuxt tries to automatically generate a TypeScript interface from provided app config so you won't have to type it yourself.
-It is also possible to type app config manually. There are two possible things you might want to type.
+However, there are some cases where you might want to type it yourself. There are two possible things you might want to type.
-#### Typing App Config Input
+### App Config Input
`AppConfigInput` might be used by module authors who are declaring what valid _input_ options are when setting app config. This will not affect the type of `useAppConfig()`.
@@ -68,11 +66,11 @@ declare module 'nuxt/schema' {
export {}
```
-#### Typing App Config Output
+### App Config Output
-If you want to type the result of calling `useAppConfig()`, then you will want to extend `AppConfig`.
+If you want to type the result of calling [`useAppConfig()`](/docs/api/composables/use-app-config), then you will want to extend `AppConfig`.
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Be careful when typing `AppConfig` as you will overwrite the types Nuxt infers from your actually defined app config.
::
@@ -92,12 +90,13 @@ declare module 'nuxt/schema' {
export {}
```
-### App Config Merging Strategy in Layers
+## Merging Strategy
+
+Nuxt uses a custom merging strategy for the `AppConfig` within [the layers](/docs/getting-started/layers) of your application.
-Nuxt uses a custom merging strategy for the `AppConfig` within the layers of your application.
This strategy is implemented using a [Function Merger](https://github.com/unjs/defu#function-merger), which allows defining a custom merging strategy for every key in `app.config` that has an array as value.
-::alert{type=warning}
+::callout
The Function Merger should only be used in the base `app.config` of your application.
::
diff --git a/docs/2.guide/2.directory-structure/3.app.md b/docs/2.guide/2.directory-structure/3.app.md
index da3facadba..e56bea7691 100644
--- a/docs/2.guide/2.directory-structure/3.app.md
+++ b/docs/2.guide/2.directory-structure/3.app.md
@@ -1,15 +1,11 @@
---
-navigation.icon: IconFile
title: "app.vue"
-description: "The app.vue file is the main component in your Nuxt 3 applications."
+description: "The app.vue file is the main component of your Nuxt application."
head.title: "app.vue"
+navigation.icon: i-ph-file-duotone
---
-# App file
-
-The `app.vue` file is the main component in your Nuxt 3 applications.
-
-## Minimal usage
+## Minimal Usage
With Nuxt 3, the [`pages/`](/docs/guide/directory-structure/pages) directory is optional. If not present, Nuxt won't include [vue-router](https://router.vuejs.org/) dependency. This is useful when working on a landing page or an application that does not need routing.
@@ -19,9 +15,11 @@ With Nuxt 3, the [`pages/`](/docs/guide/directory-structure/pages) directory is
```
-## Usage With Pages
+:link-example{to="/docs/examples/hello-world"}
-If you have a [`pages/`](/docs/guide/directory-structure/pages) directory, to display the current page, use the `` component:
+## Usage with Pages
+
+If you have a [`pages/`](/docs/guide/directory-structure/pages) directory, to display the current page, use the [``](/docs/api/components/nuxt-page) component:
```vue [app.vue]
@@ -33,12 +31,14 @@ If you have a [`pages/`](/docs/guide/directory-structure/pages) directory, to di
```
-::alert{type=danger}
-Since `` internally uses the [``](https://vuejs.org/guide/built-ins/suspense.html#suspense) component, `` cannot be set as a root element.
+::callout{color="amber" icon="i-ph-warning-duotone"}
+Since [``](/docs/api/components/nuxt-page) internally uses Vue's [``](https://vuejs.org/guide/built-ins/suspense.html#suspense) component, it cannot be set as a root element.
::
-::alert{type=warning}
+::callout{color="blue" icon="i-ph-info-duotone"}
Remember that `app.vue` acts as the main component of your Nuxt application. Anything you add to it (JS and CSS) will be global and included in every page.
::
-If you want to have the possibility to customize the structure around the page between pages, check out the [`layouts/`](/docs/guide/directory-structure/layouts) directory.
+::read-more{to="/docs/guide/directory-structure/layouts"}
+If you want to have the possibility to customize the structure around the page between pages, check out the `layouts/` directory.
+::
diff --git a/docs/2.guide/2.directory-structure/3.nuxt.config.md b/docs/2.guide/2.directory-structure/3.nuxt.config.md
index fda0cee7b8..e7a81c8240 100644
--- a/docs/2.guide/2.directory-structure/3.nuxt.config.md
+++ b/docs/2.guide/2.directory-structure/3.nuxt.config.md
@@ -1,28 +1,26 @@
---
-navigation.icon: IconFile
title: "nuxt.config.ts"
description: "Nuxt can be easily configured with a single nuxt.config file."
head.title: "nuxt.config.ts"
+navigation.icon: i-ph-file-duotone
---
-# Nuxt Config File
+The `nuxt.config` file extension can either be `.js`, `.ts` or `.mjs`.
-Nuxt can be easily configured with a single `nuxt.config` file, which can have either a `.js`, `.ts` or `.mjs` extension.
-
-```ts
+```ts [nuxt.config.ts]
export default defineNuxtConfig({
// My Nuxt config
})
```
-::alert
+::callout
`defineNuxtConfig` helper is globally available without import.
::
You can explicitly import `defineNuxtConfig` from `nuxt/config` if you prefer:
-```js
+```ts [nuxt.config.ts]
import { defineNuxtConfig } from 'nuxt/config'
export default defineNuxtConfig({
@@ -30,7 +28,17 @@ export default defineNuxtConfig({
})
```
-To ensure your configuration is up to date, Nuxt will make a full restart when detecting changes in the main configuration file, the `.env`, `.nuxtignore` and `.nuxtrc` dotfiles.
-
-::ReadMore{link="/docs/api/configuration/nuxt-config"}
+::read-more{to="/docs/api/configuration/nuxt-config"}
+Discover all the available options in the **Nuxt configuration** documentation.
::
+
+To ensure your configuration is up to date, Nuxt will make a full restart when detecting changes in the main configuration file, the [`.env`](/docs/guide/directory-structure/env), [`.nuxtignore`](/docs/guide/directory-structure/nuxtignore) and `.nuxtrc` dotfiles.
+
+
+The `.nuxtrc` file is a file that can be used to configure Nuxt with a fla syntax, it is based on [`unjs/rc9`](https://github.com/unjs/rc9).
+
+``` [.nuxtrc]
+ssr=false
+```
+
+If prevent the properties in `.nuxtrc` file will overwrite the properties in the `nuxt.config` file.
diff --git a/docs/2.guide/2.directory-structure/3.package.md b/docs/2.guide/2.directory-structure/3.package.md
index bb9d7c98e0..ad5757fbf0 100644
--- a/docs/2.guide/2.directory-structure/3.package.md
+++ b/docs/2.guide/2.directory-structure/3.package.md
@@ -1,10 +1,33 @@
---
-navigation.icon: IconFile
title: package.json
head.title: package.json
description: The package.json file contains all the dependencies and scripts for your application.
+navigation.icon: i-ph-file-duotone
---
-# Package.json File
+The minimal `package.json` of your Nuxt application should looks like:
-The `package.json` file contains all the dependencies and scripts for your application ([learn more](https://docs.npmjs.com/cli/configuring-npm/package-json)).
+```json [package.json]
+{
+ "name": "nuxt-app",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "build": "nuxt build",
+ "dev": "nuxt dev",
+ "generate": "nuxt generate",
+ "preview": "nuxt preview",
+ "postinstall": "nuxt prepare"
+ },
+ "devDependencies": {
+ "@nuxt/devtools": "latest",
+ "nuxt": "latest",
+ "vue": "latest",
+ "vue-router": "latest"
+ }
+}
+```
+
+::read-more{icon="i-simple-icons-npm" color="gray" to="https://docs.npmjs.com/cli/configuring-npm/package-json" target="_blank"}
+Read more about the `package.json` file.
+::
diff --git a/docs/2.guide/2.directory-structure/3.tsconfig.md b/docs/2.guide/2.directory-structure/3.tsconfig.md
index 8210ce9d4c..edcc1a7cbc 100644
--- a/docs/2.guide/2.directory-structure/3.tsconfig.md
+++ b/docs/2.guide/2.directory-structure/3.tsconfig.md
@@ -1,18 +1,24 @@
---
-navigation.icon: IconFile
title: "tsconfig.json"
description: "Nuxt generates a .nuxt/tsconfig.json file with sensible defaults and your aliases."
head.title: "tsconfig.json"
+navigation.icon: i-ph-file-duotone
---
-# TypeScript Configuration File
+Nuxt [automatically generates](/docs/guide/concepts/typescript) a `.nuxt/tsconfig.json` file with the resolved aliases you are using in your Nuxt project, as well as with other sensible defaults.
-Nuxt [automatically generates](/docs/guide/concepts/typescript) a `.nuxt/tsconfig.json` file with the resolved aliases you are using in your Nuxt project, as well as with other sensible defaults. You can benefit from this by creating a `tsconfig.json` in the root of your project with the following content:
+You can benefit from this by creating a `tsconfig.json` in the root of your project with the following content:
-```json
+```json [tsconfig.json]
{
"extends": "./.nuxt/tsconfig.json"
}
```
-As you need to, you can customize the contents of this file. However, it is recommended that you don't overwrite `target`, `module` and `moduleResolution`. Moreover, note that if you need to customize your `paths`, this will override the auto-generated path aliases. Instead, we recommend that you add any path aliases you need to the `alias` property within your `nuxt.config`, where they will get picked up and added to the auto-generated `tsconfig`.
+::callout
+As you need to, you can customize the contents of this file. However, it is recommended that you don't overwrite `target`, `module` and `moduleResolution`.
+::
+
+::callout
+If you need to customize your `paths`, this will override the auto-generated path aliases. Instead, we recommend that you add any path aliases you need to the [`alias`](/docs/api/nuxt-config#alias) property within your `nuxt.config`, where they will get picked up and added to the auto-generated `tsconfig`.
+::
diff --git a/docs/2.guide/2.directory-structure/_dir.yml b/docs/2.guide/2.directory-structure/_dir.yml
index af618270a4..4d663658ad 100644
--- a/docs/2.guide/2.directory-structure/_dir.yml
+++ b/docs/2.guide/2.directory-structure/_dir.yml
@@ -1,4 +1,3 @@
title: Directory Structure
titleTemplate: '%s · Nuxt Directory Structure'
-navigation.icon: uil:folder-open
-image: '/socials/directory-structure.jpg'
+icon: i-ph-folders-duotone
diff --git a/docs/2.guide/2.directory-structure/index.md b/docs/2.guide/2.directory-structure/index.md
deleted file mode 100644
index 1f32316657..0000000000
--- a/docs/2.guide/2.directory-structure/index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-navigation: false
-redirect: /guide/directory-structure/nuxt
----
diff --git a/docs/2.guide/3.going-further/1.experimental-features.md b/docs/2.guide/3.going-further/1.experimental-features.md
index 6f77a2b8d2..e80d1218f7 100644
--- a/docs/2.guide/3.going-further/1.experimental-features.md
+++ b/docs/2.guide/3.going-further/1.experimental-features.md
@@ -1,31 +1,42 @@
---
title: "Experimental Features"
-description: "Nuxt experimental features needs to be enabled manually."
+description: "Enable Nuxt experimental features to unlock new possibilities."
---
-# Experimental Features
-
The Nuxt experimental features can be enabled in the Nuxt configuration file.
-Internally, Nuxt uses `@nuxt/schema` to define these experimental features. You can refer to the [API documentation](https://nuxt.com/docs/api/configuration/nuxt-config#experimental) or the [source code](https://github.com/nuxt/nuxt/blob/main/packages/schema/src/config/experimental.ts) for more information.
-::alert{type=info icon=💡}
+Internally, Nuxt uses `@nuxt/schema` to define these experimental features. You can refer to the [API documentation](/docs/api/configuration/nuxt-config#experimental) or the [source code](https://github.com/nuxt/nuxt/blob/main/packages/schema/src/config/experimental.ts) for more information.
+
+::callout
Note that these features are experimental and could be removed or modified in the future.
::
## asyncContext
-Enable native async context to be accessible for nested composables in Nuxt and in Nitro. See [full explanation in #20918](https://github.com/nuxt/nuxt/pull/20918).
+Enable native async context to be accessible for nested composables in Nuxt and in Nitro. This opens the possibility to use composables inside async composables and reduce the chance to get the `Nuxt instance is unavailable` error.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { asyncContext: true } })
+export defineNuxtConfig({
+ experimental: {
+ asyncContext: true
+ }
+})
```
+::read-more{icon="i-simple-icons-github" color="gray" to="https://github.com/nuxt/nuxt/pull/20918" target="_blank"}
+See full explanation on the GitHub pull-request.
+::
+
## asyncEntry
Enables generation of an async entry point for the Vue bundle, aiding module federation support.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { asyncEntry: true } })
+export defineNuxtConfig({
+ experimental: {
+ asyncEntry: true
+ }
+})
```
## reactivityTransform
@@ -33,65 +44,111 @@ export defineNuxtConfig({ experimental: { asyncEntry: true } })
Enables Vue's reactivity transform. Note that this feature has been marked as deprecated in Vue 3.3 and is planned to be removed from core in Vue 3.4.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { reactivityTransform: true } })
+export defineNuxtConfig({
+ experimental: {
+ reactivityTransform: true
+ }
+})
```
-::ReadMore{link="/docs/getting-started/configuration#enabling-experimental-vue-features"}
-::
+:read-more{to="/docs/getting-started/configuration#enabling-experimental-vue-features"}
## externalVue
Externalizes `vue`, `@vue/*` and `vue-router` when building.
+
*Enabled by default.*
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { externalVue: true } })
+export defineNuxtConfig({
+ experimental: {
+ externalVue: true
+ }
+})
```
-::alert{type=warning icon=⚠️}
-This feature will likely be removed in Nuxt 3.6.
+::callout{color="amber" icon="i-ph-warning-duotone"}
+This feature will likely be removed in a near future.
::
## treeshakeClientOnly
Tree shakes contents of client-only components from server bundle.
+
*Enabled by default.*
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { treeshakeClientOnly: true } })
+export defineNuxtConfig({
+ experimental: {
+ treeshakeClientOnly: true
+ }
+})
```
## emitRouteChunkError
Emits `app:chunkError` hook when there is an error loading vite/webpack chunks. Default behavior is to perform a hard reload of the new route when a chunk fails to load.
+
You can disable automatic handling by setting this to `false`, or handle chunk errors manually by setting it to `manual`.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { emitRouteChunkError: 'automatic' } }) // or 'manual' or false
+export defineNuxtConfig({
+ experimental: {
+ emitRouteChunkError: 'automatic' // or 'manual' or false
+ }
+})
```
## restoreState
-Allows Nuxt app state to be restored from `sessionStorage` when reloading the page after a chunk error or manual `reloadNuxtApp()` call.
- To avoid hydration errors, it will be applied only after the Vue app has been mounted,
- meaning there may be a flicker on initial load.
+Allows Nuxt app state to be restored from `sessionStorage` when reloading the page after a chunk error or manual [`reloadNuxtApp()`](/docs/api/utils/reload-nuxt-app) call.
-::alert{type=warning icon=⚠️}
+To avoid hydration errors, it will be applied only after the Vue app has been mounted, meaning there may be a flicker on initial load.
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
Consider carefully before enabling this as it can cause unexpected behavior,
and consider providing explicit keys to [`useState`](/docs/api/composables/use-state) as auto-generated keys may not match across builds.
::
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { restoreState: true } })
+export defineNuxtConfig({
+ experimental: {
+ restoreState: true
+ }
+})
```
+## inlineRouteRules
+
+Define route rules at the page level using [`defineRouteRules`](/docs/api/utils/define-route-rules).
+
+```ts [nuxt.config.ts]
+export defineNuxtConfig({
+ experimental: {
+ inlineRouteRules: true
+ }
+})
+```
+
+Matching route rules will be created, based on the page's `path`.
+
+::read-more{to="/docs/api/utils/define-route-rules" icon="i-ph-function-duotone"}
+Read more in `defineRouteRules` utility.
+::
+
+:read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal-duotone"}
+
## inlineSSRStyles
Inlines styles when rendering HTML. This is currently available only when using Vite.
You can also pass a function that receives the path of a Vue component and returns a boolean indicating whether to inline the styles for that component.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { inlineSSRStyles: true } }) // or a function to determine inlining
+export defineNuxtConfig({
+ experimental: {
+ inlineSSRStyles: true // or a function to determine inlining
+ }
+})
```
## noScripts
@@ -99,16 +156,25 @@ export defineNuxtConfig({ experimental: { inlineSSRStyles: true } }) // or a fun
Disables rendering of Nuxt scripts and JS resource hints. Can also be configured granularly within `routeRules`.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { noScripts: true } })
+export defineNuxtConfig({
+ experimental: {
+ noScripts: true
+ }
+})
```
## renderJsonPayloads
Allows rendering of JSON payloads with support for revivifying complex types.
+
*Enabled by default.*
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { renderJsonPayloads: true } })
+export defineNuxtConfig({
+ experimental: {
+ renderJsonPayloads: true
+ }
+})
```
## noVueServer
@@ -116,7 +182,11 @@ export defineNuxtConfig({ experimental: { renderJsonPayloads: true } })
Disables Vue server renderer endpoint within Nitro.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { noVueServer: true } })
+export defineNuxtConfig({
+ experimental: {
+ noVueServer: true
+ }
+})
```
## payloadExtraction
@@ -124,15 +194,23 @@ export defineNuxtConfig({ experimental: { noVueServer: true } })
Enables extraction of payloads of pages generated with `nuxt generate`.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { payloadExtraction: true } })
+export defineNuxtConfig({
+ experimental: {
+ payloadExtraction: true
+ }
+})
```
## clientFallback
-Enables the experimental `` component for rendering content on the client if there's an error in SSR.
+Enables the experimental [``](/docs/api/components/nuxt-client-fallback) component for rendering content on the client if there's an error in SSR.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { clientFallback: true } })
+export defineNuxtConfig({
+ experimental: {
+ clientFallback: true
+ }
+})
```
## crossOriginPrefetch
@@ -140,18 +218,33 @@ export defineNuxtConfig({ experimental: { clientFallback: true } })
Enables cross-origin prefetch using the Speculation Rules API.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { crossOriginPrefetch: true } })
+export defineNuxtConfig({
+ experimental: {
+ crossOriginPrefetch: true
+ }
+})
```
+::read-more{icon="i-simple-icons-w3c" color="gray" to="https://wicg.github.io/nav-speculation/prefetch.html" target="_blank"}
+Read more about the **Speculation Rules API**.
+::
+
## viewTransition
Enables View Transition API integration with client-side router.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { viewTransition: true } })
+export defineNuxtConfig({
+ experimental: {
+ viewTransition: true
+ }
+})
```
-::ReadMore{link="/docs/getting-started/transitions#view-transitions-api-experimental"}
+:link-example{to="https://stackblitz.com/edit/nuxt-view-transitions?file=app.vue" target="_blank"}
+
+::read-more{icon="i-simple-icons-mdnwebdocs" color="gray" to="https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API" target="_blank"}
+Read more about the **View Transition API**.
::
## writeEarlyHints
@@ -159,29 +252,43 @@ export defineNuxtConfig({ experimental: { viewTransition: true } })
Enables writing of early hints when using node server.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { writeEarlyHints: true } })
+export defineNuxtConfig({
+ experimental: {
+ writeEarlyHints: true
+ }
+})
```
## componentIslands
-Enables experimental component islands support with `` and `.island.vue` files.
+Enables experimental component islands support with [``](/docs/api/components/nuxt-island) and `.island.vue` files.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { componentIslands: true } })
+export defineNuxtConfig({
+ experimental: {
+ componentIslands: true // false or 'local+remote'
+ }
+})
```
-::ReadMore{link="/docs/guide/directory-structure/components#server-components"}
-::
+:read-more{to="/docs/guide/directory-structure/components#server-components"}
-You can follow the server components roadmap on [GitHub](https://github.com/nuxt/nuxt/issues/19772).
+::read-more{icon="i-simple-icons-github" color="gray" to="https://github.com/nuxt/nuxt/issues/19772" target="_blank"}
+You can follow the server components roadmap on GitHub.
+::
## configSchema
Enables config schema support.
+
*Enabled by default.*
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { configSchema: true } })
+export defineNuxtConfig({
+ experimental: {
+ configSchema: true
+ }
+})
```
## polyfillVueUseHead
@@ -189,7 +296,11 @@ export defineNuxtConfig({ experimental: { configSchema: true } })
Adds a compatibility layer for modules, plugins, or user code relying on the old `@vueuse/head` API.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { polyfillVueUseHead: false } })
+export defineNuxtConfig({
+ experimental: {
+ polyfillVueUseHead: false
+ }
+})
```
## respectNoSSRHeader
@@ -197,42 +308,59 @@ export defineNuxtConfig({ experimental: { polyfillVueUseHead: false } })
Allow disabling Nuxt SSR responses by setting the `x-nuxt-no-ssr` header.
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { respectNoSSRHeader: false } })
+export defineNuxtConfig({
+ experimental: {
+ respectNoSSRHeader: false
+ }
+})
```
## localLayerAliases
Resolve `~`, `~~`, `@` and `@@` aliases located within layers with respect to their layer source and root directories.
+
*Enabled by default.*
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { localLayerAliases: true } })
+export defineNuxtConfig({
+ experimental: {
+ localLayerAliases: true
+ }
+})
```
## typedPages
-Enable the new experimental typed router using [unplugin-vue-router](https://github.com/posva/unplugin-vue-router).
+Enable the new experimental typed router using [`unplugin-vue-router`](https://github.com/posva/unplugin-vue-router).
```ts [nuxt.config.ts]
-export defineNuxtConfig({ experimental: { typedPages: false } })
+export defineNuxtConfig({
+ experimental: {
+ typedPages: false
+ }
+})
```
-Out of the box, this will enable typed usage of `navigateTo`, ``, `router.push()` and more.
+Out of the box, this will enable typed usage of [`navigateTo`](/docs/api/utils/navigate-to), [``](/docs/api/components/nuxt-link), [`router.push()`](/docs/api/composables/use-router) and more.
+
You can even get typed params within a page by using `const route = useRoute('route-name')`.
## watcher
Set an alternative watcher that will be used as the watching service for Nuxt.
+
Nuxt uses `chokidar-granular` by default, which will ignore top-level directories
(like `node_modules` and `.git`) that are excluded from watching.
+
You can set this instead to `parcel` to use `@parcel/watcher`, which may improve
performance in large projects or on Windows platforms.
+
You can also set this to `chokidar` to watch all files in your source directory.
```ts [nuxt.config.ts]
export defineNuxtConfig({
- experimental: {
- watcher: 'chokidar-granular' // 'chokidar' or 'parcel' are also options
- }
+ experimental: {
+ watcher: 'chokidar-granular' // 'chokidar' or 'parcel' are also options
+ }
})
```
diff --git a/docs/2.guide/3.going-further/1.internals.md b/docs/2.guide/3.going-further/1.internals.md
index ea1134b960..e0e60f733d 100644
--- a/docs/2.guide/3.going-further/1.internals.md
+++ b/docs/2.guide/3.going-further/1.internals.md
@@ -3,18 +3,16 @@ title: "How Nuxt Works?"
description: "Nuxt is a minimal but highly customizable framework to build web applications."
---
-# How Nuxt Works?
-
-Nuxt is a minimal but highly customizable framework to build web applications. This guide helps you better understand Nuxt internals to develop new solutions and module integrations on top of Nuxt.
+This guide helps you better understand Nuxt internals to develop new solutions and module integrations on top of Nuxt.
## The Nuxt Interface
-When you start Nuxt in development mode with `nuxi dev` or building a production application with `nuxi build`,
+When you start Nuxt in development mode with [`nuxi dev`](/docs/api/commands/dev) or building a production application with [`nuxi build`](/docs/api/commands/build),
a common context will be created, referred to as `nuxt` internally. It holds normalized options merged with `nuxt.config` file,
some internal state, and a powerful [hooking system](/docs/api/advanced/hooks) powered by [unjs/hookable](https://github.com/unjs/hookable)
allowing different components to communicate with each other. You can think of it as **Builder Core**.
-This context is globally available to be used with [nuxt/kit](/docs/api/advanced/kit) composables.
+This context is globally available to be used with [Nuxt Kit](/docs/guide/going-further/kit) composables.
Therefore only one instance of Nuxt is allowed to run per process.
To extend the Nuxt interface and hook into different stages of the build process, we can use [Nuxt Modules](/docs/guide/going-further/modules).
@@ -27,7 +25,7 @@ When rendering a page in the browser or on the server, a shared context will be
This context keeps vue instance, runtime hooks, and internal states like ssrContext and payload for hydration.
You can think of it as **Runtime Core**.
-This context can be accessed using `useNuxtApp()` composable within Nuxt plugins and `
+```
+
+:link-example{to="/docs/examples/routing/pages"}
+
+## Page's Ref
+
+To get the `ref` of a page component, access it through `ref.value.pageRef`
+
+````vue [app.vue]
+
+
+
+
+
+````
+
+## Custom Props
+
+In addition, `` also accepts custom props that you may need to pass further down the hierarchy.
+
+These custom props are accessible via `attrs` in the Nuxt app.
+
+```html
+
+```
+
+For example, in the above example, the value of `foobar` will be available using `$attrs.foobar` in the template or `useAttrs().foobar` in `
```
-## Layout and Transition
+## Transitions
` ` renders incoming content via ` `, which is then wrapped around Vue’s ` ` component to activate layout transition. For this to work as expected, it is recommended that ` ` is **not** the root element of the page component.
@@ -81,13 +93,16 @@ In the above example, the value of `title` will be available using `$attrs.title
```
-## Accessing a layout's component ref
+:read-more{to="/docs/getting-started/transitions"}
+
+## Layout's Ref
To get the ref of a layout component, access it through `ref.value.layoutRef`
-````html
+````vue [app.vue]
-
-
-
- {{ pending ? 'Loading' : count }}
-
-
-```
-
-::alert{type=warning}
-`useLazyAsyncData` is a reserved function name transformed by the compiler, so you should not name your own function `useLazyAsyncData`.
-::
-
-:ReadMore{link="/docs/getting-started/data-fetching#uselazyasyncdata"}
diff --git a/docs/3.api/1.composables/use-request-url.md b/docs/3.api/1.composables/use-request-url.md
deleted file mode 100644
index ff2b497523..0000000000
--- a/docs/3.api/1.composables/use-request-url.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# useRequestURL
-
-`useRequestURL` is a helper function that returns an [URL object](https://developer.mozilla.org/en-US/docs/Web/API/URL/URL) working on both server-side and client-side.
-
-::code-group
-
-```vue [pages/about.vue]
-
-
-
- URL is: {{ url }}
- Path is: {{ url.pathname }}
-
-```
-
-```html [Result in development]
-URL is: http://localhost:3000/about
-Path is: /about
-```
-
-::
-
-You can find the list of the [URL instance properties](https://developer.mozilla.org/en-US/docs/Web/API/URL#instance_properties) on the MDN documentation.
diff --git a/docs/3.api/1.composables/use-router.md b/docs/3.api/1.composables/use-router.md
deleted file mode 100644
index 396ed0c2a1..0000000000
--- a/docs/3.api/1.composables/use-router.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: "useRouter"
-description: "The useRouter composable returns the router instance."
----
-
-# `useRouter`
-
-The [`useRouter`](/docs/api/composables/use-router) composable returns the router instance and must be called in a setup function, plugin, or route middleware.
-
-Within the template of a Vue component, you can access the router using `$router` instead.
-
-If you have a `pages/` folder, [`useRouter`](/docs/api/composables/use-router) is identical in behavior to the one provided by `vue-router`. Feel free to read the router documentation for more information on what each method does.
-
-::ReadMore{link="https://router.vuejs.org/api/interfaces/Router.html#Properties-currentRoute"}
-::
-
-## Basic Manipulation
-
-- **addRoute:** Add a new route to the router instance. `parentName` can be provided to add new route as the child of an existing route.
-- **removeRoute:** Remove an existing route by its name.
-- **getRoutes:** Get a full list of all the route records.
-- **hasRoute:** Checks if a route with a given name exists.
-
-## Based on History API
-
-- **back:** Go back in history if possible, same as `router.go(-1)`.
-- **forward:** Go forward in history if possible, same as `router.go(1)`.
-- **go:** Move forward or backward through the history without the hierarchical restrictions enforced in `router.back()` and `router.forward()`.
-- **push:** Programmatically navigate to a new URL by pushing an entry in the history stack. **It is recommended to use [`navigateTo`](/docs/api/utils/navigate-to) instead.**
-- **replace:** Programmatically navigate to a new URL by replacing the current entry in the routes history stack. **It is recommended to use [`navigateTo`](/docs/api/utils/navigate-to) instead.**
-
-> TIP: `router.addRoute()` adds route details into an array of routes and it is useful while building Nuxt plugins while `router.push()` on the other hand, triggers a new navigation immediately and it is useful in Nuxt Page components, Vue components and composable.
-
-```js [js]
-const router = useRouter();
-router.back();
-router.forward();
-router.go();
-router.push({ path: "/home" });
-router.replace({ hash: "#bio" });
-````
-
-::ReadMore{link="https://developer.mozilla.org/en-US/docs/Web/API/History"}
-::
-
-## Navigation Guards
-
-`useRouter` composable provides `afterEach`, `beforeEach` and `beforeResolve` helper methods that acts as navigation guards.
-
-However, Nuxt has a concept of **route middleware** that simplifies the implementation of navigation guards and provides a better developer experience.
-
-::ReadMore{link="/docs/guide/directory-structure/middleware"}
-::
-
-## Promise and Error Handling
-
-- **isReady:** Returns a Promise that resolves when the router has completed the initial navigation.
-- **onError:** Adds an error handler that is called every time a non caught error happens during navigation.
-- **resolve:** Returns the normalized version of a route location. Also includes an `href` property that includes any existing base.
-
-::ReadMore{link="https://router.vuejs.org/api/interfaces/Router.html#Methods"}
-::
-
-## Universal Router Instance
-
-If you do not have a `pages/` folder, then [`useRouter`](/docs/api/composables/use-router) will return a universal router instance with similar helper methods, but be aware that not all features may be supported or behave in exactly the same way as with `vue-router`.
diff --git a/docs/3.api/1.composables/use-server-seo-meta.md b/docs/3.api/1.composables/use-server-seo-meta.md
deleted file mode 100644
index 60b8f94060..0000000000
--- a/docs/3.api/1.composables/use-server-seo-meta.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-description: The useServerSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.
----
-
-# `useServerSeoMeta`
-
-Just like [`useSeoMeta`](/docs/api/composables/use-seo-meta), [`useServerSeoMeta`](/docs/api/composables/use-server-seo-meta) composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.
-:ReadMore{link="/docs/api/composables/use-seo-meta"}
-
-In most instances, the meta doesn't need to be reactive as robots will only scan the initial load. So we recommend using [`useServerSeoMeta`](/docs/api/composables/use-server-seo-meta) as a performance-focused utility that will not do anything (or return a `head` object) on the client.
-Parameters are exactly the same as with [`useSeoMeta`](/docs/api/composables/use-seo-meta)
diff --git a/docs/3.api/1.composables/use-state.md b/docs/3.api/1.composables/use-state.md
deleted file mode 100644
index 9c82f7af60..0000000000
--- a/docs/3.api/1.composables/use-state.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: "useState"
-description: The useState composable creates a reactive and SSR-friendly shared state.
----
-
-# `useState`
-
-```ts
-useState(init?: () => T | Ref): Ref
-useState(key: string, init?: () => T | Ref): Ref
-```
-
-* **key**: A unique key ensuring that data fetching is properly de-duplicated across requests. If you do not provide a key, then a key that is unique to the file and line number of the instance of [`useState`](/docs/api/composables/use-state) will be generated for you.
-* **init**: A function that provides initial value for the state when not initiated. This function can also return a `Ref`.
-* **T**: (typescript only) Specify the type of state
-
-::alert{type=warning}
-Because the data inside [`useState`](/docs/api/composables/use-state) will be serialized to JSON, it is important that it does not contain anything that cannot be serialized, such as classes, functions or symbols.
-::
-
-::alert{type=warning}
-[`useState`](/docs/api/composables/use-state) is a reserved function name transformed by the compiler, so you should not name your own function `useState`.
-::
-
-::ReadMore{link="/docs/getting-started/state-management"}
-::
-
-## Using `shallowRef`
-
-If you don't need your state to be deeply reactive, you can combine `useState` with [`shallowRef`](https://vuejs.org/api/reactivity-advanced.html#shallowref). This can improve performance when your state contains large objects and arrays.
-
-```ts
-const state = useState('my-shallow-state', () => shallowRef({ deep: 'not reactive' }))
-// isShallow(state) === true
-```
diff --git a/docs/3.api/2.components/2.nuxt-page.md b/docs/3.api/2.components/2.nuxt-page.md
deleted file mode 100644
index 9d050c5c86..0000000000
--- a/docs/3.api/2.components/2.nuxt-page.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: ""
-description: The NuxtPage component is required to display pages located in the pages/ directory.
----
-
-# ``
-
-`` is a built-in component that comes with Nuxt. `NuxtPage` is required to display top-level or nested pages located in the [`pages/` directory](/docs/guide/directory-structure/pages).
-
-`NuxtPage` is a wrapper around [``](https://router.vuejs.org/api/interfaces/RouterViewProps.html#interface-routerviewprops) component from Vue Router. `NuxtPage` component accepts same `name` and `route` props.
-
-- **name:** type: `string`
-
-`name` helps `RouterView` render the component with the corresponding name in the matched route record's components option.
-
-- **route:** type: `RouteLocationNormalized`
-
-`route` is a route location that has all of its components resolved.
-
-> **Nuxt automatically resolves the `name` and `route` by scanning and rendering all Vue component files found in the `/pages` directory.**
-
-Apart from the `name` and `route`, `NuxtPage` component also accepts `pageKey` props.
-
-- **pageKey:** type: `string` or `function`
-
-`pageKey` helps control when the `NuxtPage` component is re-rendered.
-
-## Example
-
-For example, passing `static` key, `NuxtPage` component is rendered only once when it is mounted.
-
-```html
-
-
-```
-
-You can also use a dynamic key based on the current route. (Don't use `$route` object here as it can cause problems with how `` renders pages with ``.)
-
-```html
-
-```
-
-Alternatively, `pageKey` can be passed as a `key` value via `definePageMeta` from the `
-```
-
-:button-link[Open on StackBlitz]{href="https://stackblitz.com/github/nuxt/examples/tree/main/routing/pages?file=app.vue" blank}
-
-## Accessing a page's component ref
-
-To get the ref of a page component, access it through `ref.value.pageRef`
-
-````html
-
-
-
-
-
-````
-
-## Custom Props
-
-In addition, `NuxtPage` also accepts custom props that you may need to pass further down the hierarchy. These custom props are accessible via `attrs` in the Nuxt app.
-
-```html
-
-```
-
-For example, in the above example, the value of `foobar` will be available using `$attrs.foobar` in the template or `useAttrs().foobar` in `
+```
+
+### Watch Params
+
+The built-in `watch` option allows automatically rerunning the fetcher function when any changes are detected.
+
+```vue [pages/index.vue]
+
+```
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
+[`useAsyncData`](/docs/api/composables/use-async-data) is a reserved function name transformed by the compiler, so you should not name your own function [`useAsyncData`](/docs/api/composables/use-async-data) .
+::
+
+:read-more{to="/docs/getting-started/data-fetching#useasyncdata"}
+
+## Params
+
+- `key`: a unique key to ensure that data fetching can be properly de-duplicated across requests. If you do not provide a key, then a key that is unique to the file name and line number of the instance of `useAsyncData` will be generated for you.
+- `handler`: an asynchronous function that must return a truthy value (for example, it should not be `undefined` or `null`) or the request may be duplicated on the client side
+- `options`:
+ - `server`: whether to fetch the data on the server (defaults to `true`)
+ - `lazy`: whether to resolve the async function after loading the route, instead of blocking client-side navigation (defaults to `false`)
+ - `immediate`: when set to `false`, will prevent the request from firing immediately. (defaults to `true`)
+ - `default`: a factory function to set the default value of the `data`, before the async function resolves - useful with the `lazy: true` or `immediate: false` option
+ - `transform`: a function that can be used to alter `handler` function result after resolving
+ - `pick`: only pick specified keys in this array from the `handler` function result
+ - `watch`: watch reactive sources to auto-refresh
+ - `deep`: return data in a deep ref object (it is `true` by default). It can be set to `false` to return data in a shallow ref object, which can improve performance if your data does not need to be deeply reactive.
+
+::callout
+Under the hood, `lazy: false` uses `` to block the loading of the route before the data has been fetched. Consider using `lazy: true` and implementing a loading state instead for a snappier user experience.
+::
+
+::read-more{to="/docs/api/composables/use-lazy-async-data"}
+You can use `useLazyAsyncData` to have the same behavior as `lazy: true` with `useAsyncData`.
+::
+
+## Return Values
+
+- `data`: the result of the asynchronous function that is passed in.
+- `pending`: a boolean indicating whether the data is still being fetched.
+- `refresh`/`execute`: a function that can be used to refresh the data returned by the `handler` function.
+- `error`: an error object if the data fetching failed.
+- `status`: a string indicating the status of the data request (`"idle"`, `"pending"`, `"success"`, `"error"`).
+
+By default, Nuxt waits until a `refresh` is finished before it can be executed again.
+
+::callout
+If you have not fetched data on the server (for example, with `server: false`), then the data _will not_ be fetched until hydration completes. This means even if you await [`useAsyncData`](/docs/api/composables/use-async-data) on the client side, `data` will remain `null` within `
@@ -38,7 +39,7 @@ counter.value = counter.value || Math.round(Math.random() * 1000)
```
-:button-link[Open on StackBlitz]{href="https://stackblitz.com/github/nuxt/examples/tree/main/advanced/use-cookie?terminal=dev&file=app.vue" blank}
+:link-example{to="/docs/examples/advanced/use-cookie"}
## Options
@@ -48,20 +49,22 @@ Most of the options will be directly passed to the [cookie](https://github.com/j
### `maxAge` / `expires`
-**`maxAge`** Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.2).
+Use these options to set the expiration of the cookie.
+
+`maxAge`: Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.2).
The given number will be converted to an integer by rounding down. By default, no maximum age is set.
-**`expires`**: Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.1).
+`expires`: Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.1).
By default, no expiration is set. Most clients will consider this a "non-persistent cookie" and
will delete it on a condition like exiting a web browser application.
-::alert{icon=💡}
-**Note:** The [cookie storage model specification](https://tools.ietf.org/html/rfc6265#section-5.3) states that if both `expires` and
+::callout
+The [cookie storage model specification](https://tools.ietf.org/html/rfc6265#section-5.3) states that if both `expires` and
`maxAge` is set, then `maxAge` takes precedence, but not all clients may obey this,
so if both are set, they should point to the same date and time!
::
-::alert
+::callout
If neither of `expires` and `maxAge` is set, the cookie will be session-only and removed when the user closes their browser.
::
@@ -70,8 +73,8 @@ If neither of `expires` and `maxAge` is set, the cookie will be session-only and
Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.6). When truthy,
the `HttpOnly` attribute is set; otherwise it is not. By default, the `HttpOnly` attribute is not set.
-::alert{icon=💡}
-**Note:** Be careful when setting this to `true`, as compliant clients will not allow client-side
+::callout
+Be careful when setting this to `true`, as compliant clients will not allow client-side
JavaScript to see the cookie in `document.cookie`.
::
@@ -80,20 +83,18 @@ JavaScript to see the cookie in `document.cookie`.
Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.5). When truthy,
the `Secure` attribute is set; otherwise it is not. By default, the `Secure` attribute is not set.
-::alert{icon=💡}
-**Note:** Be careful when setting this to `true`, as compliant clients will not send the cookie back to
+::callout
+Be careful when setting this to `true`, as compliant clients will not send the cookie back to
the server in the future if the browser does not have an HTTPS connection. This can lead to hydration errors.
::
### `domain`
-Specifies the value for the [`Domain` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.3). By default, no
-domain is set, and most clients will consider applying the cookie only to the current domain.
+Specifies the value for the [`Domain` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.3). By default, no domain is set, and most clients will consider applying the cookie only to the current domain.
### `path`
-Specifies the value for the [`Path` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.4). By default, the path
-is considered the ["default path"](https://tools.ietf.org/html/rfc6265#section-5.1.4).
+Specifies the value for the [`Path` `Set-Cookie` attribute](https://tools.ietf.org/html/rfc6265#section-5.2.4). By default, the path is considered the ["default path"](https://tools.ietf.org/html/rfc6265#section-5.1.4).
### `sameSite`
@@ -123,8 +124,8 @@ a previously encoded cookie value into a JavaScript string or other object.
The default decoder is `decodeURIComponent` + [destr](https://github.com/unjs/destr).
-::alert{icon=💡}
-**Note:** If an error is thrown from this function, the original, non-decoded cookie value will
+::callout
+If an error is thrown from this function, the original, non-decoded cookie value will
be returned as the cookie's value.
::
@@ -136,9 +137,9 @@ Specifies a function that returns the cookie's default value. The function can a
Specifies the `boolean` or `string` value for [watch](https://vuejs.org/api/reactivity-core.html#watch) cookie ref data.
-- `true` - Will watch cookie ref data changes and its nested properties. (default)
+- `true` - Will watch cookie ref data changes and its nested properties (default).
- `shallow` - Will watch cookie ref data changes for only top level properties
-- `false` Will not watch cookie ref data changes.
+- `false` - Will not watch cookie ref data changes.
**Example 1:**
@@ -197,13 +198,11 @@ function save() {
```
-## Handling Cookies in API Routes
+## Cookies in API Routes
You can use `getCookie` and `setCookie` from [`h3`](https://github.com/unjs/h3) package to set cookies in server API routes.
-**Example:**
-
-```js
+```ts [server/api/counter.ts]
export default defineEventHandler(event => {
// Read counter cookie
let counter = getCookie(event, 'counter') || 0
@@ -216,5 +215,4 @@ export default defineEventHandler(event => {
})
```
-::LinkExample{link="/docs/examples/advanced/use-cookie"}
-::
+:link-example{to="/docs/examples/advanced/use-cookie"}
diff --git a/docs/3.api/2.composables/use-error.md b/docs/3.api/2.composables/use-error.md
new file mode 100644
index 0000000000..1368128d14
--- /dev/null
+++ b/docs/3.api/2.composables/use-error.md
@@ -0,0 +1,32 @@
+---
+title: "useError"
+description: useError composable returns the global Nuxt error that is being handled.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/error.ts
+ size: xs
+---
+
+The composable returns the global Nuxt error that is being handled and it is available on both client and server.
+
+```ts
+const error = useError()
+```
+
+`useError` sets an error in the state and creates a reactive as well as SSR-friendly global Nuxt error across components.
+
+Nuxt errors have the following properties:
+
+```ts
+interface {
+ // HTTP response status code
+ statusCode: number
+ // HTTP response status message
+ statusMessage: string
+ // Error message
+ message: string
+}
+```
+
+:read-more{to="/docs/getting-started/error-handling"}
diff --git a/docs/3.api/1.composables/use-fetch.md b/docs/3.api/2.composables/use-fetch.md
similarity index 57%
rename from docs/3.api/1.composables/use-fetch.md
rename to docs/3.api/2.composables/use-fetch.md
index 7abfc8d972..e26231098c 100644
--- a/docs/3.api/1.composables/use-fetch.md
+++ b/docs/3.api/2.composables/use-fetch.md
@@ -1,10 +1,117 @@
-# `useFetch`
+---
+title: 'useFetch'
+description: 'Fetch data from an API endpoint with a SSR-friendly composable.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/fetch.ts
+ size: xs
+---
This composable provides a convenient wrapper around [`useAsyncData`](/docs/api/composables/use-async-data) and [`$fetch`](/docs/api/utils/dollarfetch).
It automatically generates a key based on URL and fetch options, provides type hints for request url based on server routes, and infers API response type.
-::alert{type=warning}
-[`useFetch`](/docs/api/composables/use-fetch) is a composable meant to be called directly in a setup function, plugin, or route middleware. It returns reactive composables and handles adding responses to the Nuxt payload so they can be passed from server to client without re-fetching the data on client side when the page hydrates.
+::callout
+`useFetch` is a composable meant to be called directly in a setup function, plugin, or route middleware. It returns reactive composables and handles adding responses to the Nuxt payload so they can be passed from server to client without re-fetching the data on client side when the page hydrates.
+::
+
+## Usage
+
+```vue [pages/index.vue]
+
+```
+
+Using the `query` option, you can add search parameters to your query. This option is extended from [unjs/ofetch](https://github.com/unjs/ofetch) and is using [unjs/ufo](https://github.com/unjs/ufo) to create the URL. Objects are automatically stringified.
+
+```ts
+const param1 = ref('value1')
+const { data, pending, error, refresh } = await useFetch('https://api.nuxtjs.dev/mountains', {
+ query: { param1, param2: 'value2' }
+})
+```
+
+Results in `https://api.nuxtjs.dev/mountains?param1=value1¶m2=value2`
+
+You can also use [interceptors](https://github.com/unjs/ofetch#%EF%B8%8F-interceptors):
+
+```ts
+const { data, pending, error, refresh } = await useFetch('/api/auth/login', {
+ onRequest({ request, options }) {
+ // Set the request headers
+ options.headers = options.headers || {}
+ options.headers.authorization = '...'
+ },
+ onRequestError({ request, options, error }) {
+ // Handle the request errors
+ },
+ onResponse({ request, response, options }) {
+ // Process the response data
+ localStorage.setItem('token', response._data.token)
+ },
+ onResponseError({ request, response, options }) {
+ // Handle the response errors
+ }
+})
+```
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
+`useFetch` is a reserved function name transformed by the compiler, so you should not name your own function `useFetch`.
+::
+
+:link-example{to="/docs/examples/advanced/use-custom-fetch-composable"}
+
+:read-more{to="/docs/getting-started/data-fetching"}
+
+:link-example{to="/docs/examples/features/data-fetching"}
+
+## Params
+
+- `URL`: The URL to fetch.
+- `Options` (extends [unjs/ofetch](https://github.com/unjs/ofetch) options & [AsyncDataOptions](/docs/api/composables/use-async-data#params)):
+ - `method`: Request method.
+ - `query`: Adds query search params to URL using [ufo](https://github.com/unjs/ufo)
+ - `params`: Alias for `query`
+ - `body`: Request body - automatically stringified (if an object is passed).
+ - `headers`: Request headers.
+ - `baseURL`: Base URL for the request.
+
+::callout
+All fetch options can be given a `computed` or `ref` value. These will be watched and new requests made automatically with any new values if they are updated.
+::
+
+- `Options` (from [`useAsyncData`](/docs/api/composables/use-async-data)):
+ - `key`: a unique key to ensure that data fetching can be properly de-duplicated across requests, if not provided, it will be generated based on the static code location where `useAsyncData` is used.
+ - `server`: whether to fetch the data on the server (defaults to `true`)
+ - `lazy`: whether to resolve the async function after loading the route, instead of blocking client-side navigation (defaults to `false`)
+ - `immediate`: when set to `false`, will prevent the request from firing immediately. (defaults to `true`)
+ - `default`: a factory function to set the default value of the `data`, before the async function resolves - useful with the `lazy: true` or `immediate: false` option
+ - `transform`: a function that can be used to alter `handler` function result after resolving
+ - `pick`: only pick specified keys in this array from the `handler` function result
+ - `watch`: watch an array of reactive sources and auto-refresh the fetch result when they change. Fetch options and URL are watched by default. You can completely ignore reactive sources by using `watch: false`. Together with `immediate: false`, this allows for a fully-manual `useFetch`.
+ - `deep`: return data in a deep ref object (it is `true` by default). It can be set to `false` to return data in a shallow ref object, which can improve performance if your data does not need to be deeply reactive.
+
+::callout
+If you provide a function or ref as the `url` parameter, or if you provide functions as arguments to the `options` parameter, then the `useFetch` call will not match other `useFetch` calls elsewhere in your codebase, even if the options seem to be identical. If you wish to force a match, you may provide your own key in `options`.
+::
+
+## Return Values
+
+- `data`: the result of the asynchronous function that is passed in.
+- `pending`: a boolean indicating whether the data is still being fetched.
+- `refresh`/`execute`: a function that can be used to refresh the data returned by the `handler` function.
+- `error`: an error object if the data fetching failed.
+- `status`: a string indicating the status of the data request (`"idle"`, `"pending"`, `"success"`, `"error"`).
+
+By default, Nuxt waits until a `refresh` is finished before it can be executed again.
+
+::callout
+If you have not fetched data on the server (for example, with `server: false`), then the data _will not_ be fetched until hydration completes. This means even if you await `useFetch` on client-side, `data` will remain null within `
+
+
+
+ {{ pending ? 'Loading' : count }}
+
+
+```
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
+`useLazyAsyncData` is a reserved function name transformed by the compiler, so you should not name your own function `useLazyAsyncData`.
+::
+
+:read-more{to="/docs/getting-started/data-fetching#uselazyasyncdata"}
diff --git a/docs/3.api/1.composables/use-lazy-fetch.md b/docs/3.api/2.composables/use-lazy-fetch.md
similarity index 52%
rename from docs/3.api/1.composables/use-lazy-fetch.md
rename to docs/3.api/2.composables/use-lazy-fetch.md
index c79f9be1b5..3e5bd0a6e1 100644
--- a/docs/3.api/1.composables/use-lazy-fetch.md
+++ b/docs/3.api/2.composables/use-lazy-fetch.md
@@ -1,22 +1,26 @@
---
+title: 'useLazyFetch'
description: This wrapper around useFetch triggers navigation immediately.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/fetch.ts
+ size: xs
---
-# `useLazyFetch`
-
-`useLazyFetch` provides a wrapper around [`useFetch`](/docs/api/composables/use-fetch) that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
-
## Description
-By default, [useFetch](/docs/api/composables/use-fetch) blocks navigation until its async handler is resolved.
+By default, [`useFetch`](/docs/api/composables/use-fetch) blocks navigation until its async handler is resolved. `useLazyFetch` provides a wrapper around [`useFetch`](/docs/api/composables/use-fetch) that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
-> [`useLazyFetch`](/docs/api/composables/use-lazy-fetch) has the same signature as `useFetch`.
+::callout
+`useLazyFetch` has the same signature as [`useFetch`](/docs/api/composables/use-fetch).
+::
-:ReadMore{link="/docs/api/composables/use-fetch"}
+:read-more{to="/docs/api/composables/use-fetch"}
## Example
-```vue
+```vue [pages/index.vue]
-```
+ ::code-group
+ ```vue [app.vue]
+
+ ```
+ ```ts [server/api/count.ts]
+ export default defineEventHandler(event => {
+ return { count: 1 }
+ })
+ ```
+ ::
-After fetching the value of `count` using [`useAsyncData`](/docs/api/composables/use-async-data) in the example above, if you access `payload.data`, you will see `{ count: 1 }` recorded there. The value of `count` is updated whenever the page count increases.
+ After fetching the value of `count` using [`useAsyncData`](/docs/api/composables/use-async-data) in the example above, if you access `payload.data`, you will see `{ count: 1 }` recorded there.
-When accessing the same `payload.data` from [ssrcontext](#ssrcontext), you can access the same value on the server side as well.
+ When accessing the same `payload.data` from [`ssrcontext`](#ssrcontext), you can access the same value on the server side as well.
-- **state** (object) - When you use [`useState`](/docs/api/composables/use-state) composable in Nuxt to set shared state, this state data is accessed through `payload.state.[name-of-your-state]`.
+- `state` (object) - When you use [`useState`](/docs/api/composables/use-state) composable in Nuxt to set shared state, this state data is accessed through `payload.state.[name-of-your-state]`.
-```js [plugins/my-plugin.ts]
-export const useColor = () => useState('color', () => 'pink')
+ ```ts [plugins/my-plugin.ts]
+ export const useColor = () => useState('color', () => 'pink')
-export default defineNuxtPlugin((nuxtApp) => {
- if (process.server) {
- const color = useColor()
- }
-})
-```
+ export default defineNuxtPlugin((nuxtApp) => {
+ if (process.server) {
+ const color = useColor()
+ }
+ })
+ ```
-It is also possible to use more advanced types, such as `ref`, `reactive`, `shallowRef`, `shallowReactive` and `NuxtError`.
+ It is also possible to use more advanced types, such as `ref`, `reactive`, `shallowRef`, `shallowReactive` and `NuxtError`.
-You can also add your own types, with a special plugin helper:
+ You can also add your own types, with a special plugin helper:
-```ts [plugins/custom-payload.ts]
- /**
- * This kind of plugin runs very early in the Nuxt lifecycle, before we revive the payload.
- * You will not have access to the router or other Nuxt-injected properties.
- */
-export default definePayloadPlugin((nuxtApp) => {
- definePayloadReducer('BlinkingText', data => data === '' && '_')
- definePayloadReviver('BlinkingText', () => '')
-})
-```
+ ```ts [plugins/custom-payload.ts]
+ /**
+ * This kind of plugin runs very early in the Nuxt lifecycle, before we revive the payload.
+ * You will not have access to the router or other Nuxt-injected properties.
+ */
+ export default definePayloadPlugin((nuxtApp) => {
+ definePayloadReducer('BlinkingText', data => data === '' && '_')
+ definePayloadReviver('BlinkingText', () => '')
+ })
+ ```
### `isHydrating`
Use `nuxtApp.isHydrating` (boolean) to check if the Nuxt app is hydrating on the client side.
-**Example:**
-
```ts [components/nuxt-error-boundary.ts]
export default defineComponent({
setup (_props, { slots, emit }) {
@@ -147,23 +158,13 @@ export default defineComponent({
### `runWithContext`
-::alert
-
-
-
-You are likely here because you got a "Nuxt instance unavailable" message. Please use this method sparingly, and report
-examples that are causing issues, so that it can ultimately be solved at the framework level.
-
-
-
+::callout
+You are likely here because you got a "Nuxt instance unavailable" message. Please use this method sparingly, and report examples that are causing issues, so that it can ultimately be solved at the framework level.
::
-The `runWithContext` method is meant to be used to call a function and give it an explicit Nuxt context. Typically, the
-Nuxt context is passed around implicitly and you do not need to worry about this. However, when working with complex
-`async`/`await` scenarios in middleware/plugins, you can run into instances where the current instance has been unset
-after an async call.
+The `runWithContext` method is meant to be used to call a function and give it an explicit Nuxt context. Typically, the Nuxt context is passed around implicitly and you do not need to worry about this. However, when working with complex `async`/`await` scenarios in middleware/plugins, you can run into instances where the current instance has been unset after an async call.
-```js
+```ts [middleware/auth.ts]
export default defineNuxtRouteMiddleware(async (to, from) => {
const nuxtApp = useNuxtApp()
let user
@@ -186,18 +187,12 @@ export default defineNuxtRouteMiddleware(async (to, from) => {
const result = nuxtApp.runWithContext(() => functionWithContext())
```
-##### `functionWithContext`
-
-Any function that requires the context of the current Nuxt application. This context will be correctly applied automatically.
-
-##### Return value
+- `functionWithContext`: Any function that requires the context of the current Nuxt application. This context will be correctly applied automatically.
`runWithContext` will return whatever is returned by `functionWithContext`.
#### A Deeper Explanation of Context
-##### Background
-
Vue.js Composition API (and Nuxt composables similarly) work by depending on an implicit context. During the lifecycle, Vue sets the temporary instance of the current component (and Nuxt temporary instance of nuxtApp) to a global variable and unsets it in same tick. When rendering on the server side, there are multiple requests from different users and nuxtApp running in a same global context. Because of this, Nuxt and Vue immediately unset this global instance to avoid leaking a shared reference between two users or components.
What it does mean? The Composition API and Nuxt Composables are only available during lifecycle and in same tick before any async operation:
@@ -230,7 +225,7 @@ getCurrentInstance() // Still works!
For a better description of what Vue actually does, see [unjs/unctx#2 (comment)](https://github.com/unjs/unctx/issues/2#issuecomment-942193723).
-##### Solution
+#### Solution
This is where `runWithContext` can be used to restore context, similarly to how `
```
-```ts [single.vue]
-// Access to the cached value of useFetch in archive.vue
+```ts [pages/posts/[id\\].vue]
+// Access to the cached value of useFetch in posts.vue (parent route)
+const { id } = useRoute().params
const { data: posts } = useNuxtData('posts')
-
-const { data } = await useFetch(`/api/posts/${postId}`, {
- key: `post-${postId}`,
- default: () => {
+const { data } = useLazyFetch(`/api/posts/${id}`, {
+ key: `post-${id}`,
+ default() {
// Find the individual post from the cache and set it as the default value.
- return posts.value.find(post => post.id === postId)
+ return posts.value.find(post => post.id === id)
}
})
```
-### Optimistic Updates
+## Optimistic Updates
We can leverage the cache to update the UI after a mutation, while the data is being invalidated in the background.
-```ts [todos.vue]
+```vue [pages/todos.vue]
+
```
-```ts [add-todo.vue]
+```vue [components/NewTodo.vue]
+
+```
+
+## Type
+
+```ts
+useNuxtData (key: string): { data: Ref }
```
diff --git a/docs/3.api/1.composables/use-request-event.md b/docs/3.api/2.composables/use-request-event.md
similarity index 50%
rename from docs/3.api/1.composables/use-request-event.md
rename to docs/3.api/2.composables/use-request-event.md
index 68ddeeec85..5cb1b318bb 100644
--- a/docs/3.api/1.composables/use-request-event.md
+++ b/docs/3.api/2.composables/use-request-event.md
@@ -1,13 +1,16 @@
---
-title: "useRequestEvent"
-description: "You can use useRequestEvent to access the incoming request."
+title: 'useRequestEvent'
+description: 'Access the incoming request event with the useRequestEvent composable.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts
+ size: xs
---
-# `useRequestEvent`
-
Within your pages, components, and plugins you can use `useRequestEvent` to access the incoming request.
-```js
+```ts
// Get underlying request event
const event = useRequestEvent()
@@ -15,6 +18,6 @@ const event = useRequestEvent()
const url = event.path
```
-::alert{icon=👉}
+::callout
In the browser, `useRequestEvent` will return `undefined`.
::
diff --git a/docs/3.api/1.composables/use-request-headers.md b/docs/3.api/2.composables/use-request-headers.md
similarity index 58%
rename from docs/3.api/1.composables/use-request-headers.md
rename to docs/3.api/2.composables/use-request-headers.md
index 7a89b69f07..76434bddb0 100644
--- a/docs/3.api/1.composables/use-request-headers.md
+++ b/docs/3.api/2.composables/use-request-headers.md
@@ -1,10 +1,13 @@
---
title: "useRequestHeaders"
description: "Use useRequestHeaders to access the incoming request headers."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts
+ size: xs
---
-# `useRequestHeaders`
-
You can use built-in [`useRequestHeaders`](/docs/api/composables/use-request-headers) composable to access the incoming request headers within your pages, components, and plugins.
```js
@@ -15,13 +18,13 @@ const headers = useRequestHeaders()
const headers = useRequestHeaders(['cookie'])
```
-::alert{icon=👉}
-In the browser, [`useRequestHeaders`](/docs/api/composables/use-request-headers) will return an empty object.
+::callout
+In the browser, `useRequestHeaders` will return an empty object.
::
## Example
-We can use [`useRequestHeaders`](/docs/api/composables/use-request-headers) to access and proxy the initial request's `authorization` header to any future internal requests during SSR.
+We can use `useRequestHeaders` to access and proxy the initial request's `authorization` header to any future internal requests during SSR.
The example below adds the `authorization` request header to an isomorphic `$fetch` call.
@@ -32,7 +35,3 @@ const { data } = await useFetch('/api/confidential', {
})
```
-
-::alert{icon=👉}
-[Another example](/docs/getting-started/data-fetching#example-pass-client-headers-to-the-api) shows how we can pass cookies from the initial request to another API route.
-::
diff --git a/docs/3.api/2.composables/use-request-url.md b/docs/3.api/2.composables/use-request-url.md
new file mode 100644
index 0000000000..29a0486bd1
--- /dev/null
+++ b/docs/3.api/2.composables/use-request-url.md
@@ -0,0 +1,35 @@
+---
+title: 'useRequestURL'
+description: 'Access the incoming request URL with the useRequestURL composable.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/url.ts
+ size: xs
+---
+
+`useRequestURL` is a helper function that returns an [URL object](https://developer.mozilla.org/en-US/docs/Web/API/URL/URL) working on both server-side and client-side.
+
+::code-group
+
+```vue [pages/about.vue]
+
+
+
+ URL is: {{ url }}
+ Path is: {{ url.pathname }}
+
+```
+
+```html [Result in development]
+URL is: http://localhost:3000/about
+Path is: /about
+```
+
+::
+
+::callout{icon="i-simple-icons-mdnwebdocs" color="gray" to="https://developer.mozilla.org/en-US/docs/Web/API/URL#instance_properties" target="_blank"}
+Read about the URL instance properties on the MDN documentation.
+::
diff --git a/docs/3.api/1.composables/use-route.md b/docs/3.api/2.composables/use-route.md
similarity index 50%
rename from docs/3.api/1.composables/use-route.md
rename to docs/3.api/2.composables/use-route.md
index c2875bf51d..2b315a4c70 100644
--- a/docs/3.api/1.composables/use-route.md
+++ b/docs/3.api/2.composables/use-route.md
@@ -1,13 +1,16 @@
---
title: "useRoute"
description: The useRoute composable returns the current route.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
---
-# `useRoute`
-
-The [`useRoute`](/docs/api/composables/use-route) composable returns the current route and must be called in a `setup` function, plugin, or route middleware.
-
+::callout
Within the template of a Vue component, you can access the route using `$route`.
+::
## Example
@@ -16,7 +19,7 @@ In the following example, we call an API via [`useFetch`](/docs/api/composables/
```html [~/pages/[slug\\].vue]
@@ -29,15 +32,16 @@ const { data: mountain } = await useFetch(`https://api.nuxtjs.dev/mountains/${ro
If you need to access the route query parameters (for example `example` in the path `/test?example=true`), then you can use `useRoute().query` instead of `useRoute().params`.
+## API
+
Apart from dynamic parameters and query parameters, `useRoute()` also provides the following computed references related to the current route:
-* **fullPath**: encoded URL associated with the current route that contains path, query and hash
-* **hash**: decoded hash section of the URL that starts with a #
-* **matched**: array of normalized matched routes with current route location
-* **meta**: custom data attached to the record
-* **name**: unique name for the route record
-* **path**: encoded pathname section of the URL
-* **redirectedFrom**: route location that was attempted to access before ending up on the current route location
+- `fullPath`: encoded URL associated with the current route that contains path, query and hash
+- `hash`: decoded hash section of the URL that starts with a #
+- `matched`: array of normalized matched routes with current route location
+- `meta`: custom data attached to the record
+- `name`: unique name for the route record
+- `path`: encoded pathname section of the URL
+- `redirectedFrom`: route location that was attempted to access before ending up on the current route location
-::ReadMore{link="https://router.vuejs.org/api/interfaces/RouteLocationNormalizedLoaded.html"}
-::
+:read-more{icon="i-simple-icons-vuedotjs" to="https://router.vuejs.org/api/interfaces/RouteLocationNormalizedLoaded.html"}
diff --git a/docs/3.api/2.composables/use-router.md b/docs/3.api/2.composables/use-router.md
new file mode 100644
index 0000000000..db57089111
--- /dev/null
+++ b/docs/3.api/2.composables/use-router.md
@@ -0,0 +1,92 @@
+---
+title: "useRouter"
+description: "The useRouter composable returns the router instance."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
+---
+
+```vue [pages/index.vue]
+
+```
+
+If you only need the router instance within your template, use `$router`:
+
+```vue [pages/index.vue]
+
+ Back
+
+```
+
+If you have a `pages/` directory, `useRouter` is identical in behavior to the one provided by `vue-router`.
+
+::read-more{icon="i-simple-icons-vuedotjs" to="https://router.vuejs.org/api/interfaces/Router.html#Properties-currentRoute" target="_blank"}
+Read `vue-router` documentation about the `Router` interface.
+::
+
+## Basic Manipulation
+
+- [`addRoute()`](https://router.vuejs.org/api/interfaces/Router.html#addRoute): Add a new route to the router instance. `parentName` can be provided to add new route as the child of an existing route.
+- [`removeRoute()`](https://router.vuejs.org/api/interfaces/Router.html#removeRoute): Remove an existing route by its name.
+- [`getRoutes()`](https://router.vuejs.org/api/interfaces/Router.html#getRoutes): Get a full list of all the route records.
+- [`hasRoute()`](https://router.vuejs.org/api/interfaces/Router.html#hasRoute): Checks if a route with a given name exists.
+- [`resolve()`](https://router.vuejs.org/api/interfaces/Router.html#resolve): Returns the normalized version of a route location. Also includes an `href` property that includes any existing base.
+
+```ts [Example]
+const router = useRouter()
+
+router.addRoute({ name: 'home', path: '/home', component: Home })
+router.removeRoute('home')
+router.getRoutes()
+router.hasRoute('home')
+router.resolve({ name: 'home' })
+```
+
+::callout
+`router.addRoute()` adds route details into an array of routes and it is useful while building [Nuxt plugins](/docs/guide/directory-structure/plugins) while `router.push()` on the other hand, triggers a new navigation immediately and it is useful in pages, Vue components and composable.
+::
+
+## Based on History API
+
+- [`back()`](https://router.vuejs.org/api/interfaces/Router.html#back): Go back in history if possible, same as `router.go(-1)`.
+- [`forward()`](https://router.vuejs.org/api/interfaces/Router.html#forward): Go forward in history if possible, same as `router.go(1)`.
+- [`go()`](https://router.vuejs.org/api/interfaces/Router.html#go): Move forward or backward through the history without the hierarchical restrictions enforced in `router.back()` and `router.forward()`.
+- [`push()`](https://router.vuejs.org/api/interfaces/Router.html#push): Programmatically navigate to a new URL by pushing an entry in the history stack. **It is recommended to use [`navigateTo`](/docs/api/utils/navigate-to) instead.**
+- [`replace()`](https://router.vuejs.org/api/interfaces/Router.html#replace): Programmatically navigate to a new URL by replacing the current entry in the routes history stack. **It is recommended to use [`navigateTo`](/docs/api/utils/navigate-to) instead.**
+
+```ts [Example]
+const router = useRouter()
+
+router.back()
+router.forward()
+router.go(3)
+router.push({ path: "/home" })
+router.replace({ hash: "#bio" })
+```
+
+::read-more{icon="i-simple-icons-mdnwebdocs" color="gray" to="https://developer.mozilla.org/en-US/docs/Web/API/History" target="_blank"}
+Read more about the browser's History API.
+::
+
+## Navigation Guards
+
+`useRouter` composable provides `afterEach`, `beforeEach` and `beforeResolve` helper methods that acts as navigation guards.
+
+However, Nuxt has a concept of **route middleware** that simplifies the implementation of navigation guards and provides a better developer experience.
+
+:read-more{to="/docs/guide/directory-structure/middleware"}
+
+## Promise and Error Handling
+
+- [`isReady()`](https://router.vuejs.org/api/interfaces/Router.html#isReady): Returns a Promise that resolves when the router has completed the initial navigation.
+- [`onError`](https://router.vuejs.org/api/interfaces/Router.html#onError): Adds an error handler that is called every time a non caught error happens during navigation.
+
+:read-more{icon="i-simple-icons-vuedotjs" to="https://router.vuejs.org/api/interfaces/Router.html#Methods" title="Vue Router Docs" target="_blank"}
+
+## Universal Router Instance
+
+If you do not have a `pages/` folder, then [`useRouter`](/docs/api/composables/use-router) will return a universal router instance with similar helper methods, but be aware that not all features may be supported or behave in exactly the same way as with `vue-router`.
diff --git a/docs/3.api/1.composables/use-runtime-config.md b/docs/3.api/2.composables/use-runtime-config.md
similarity index 81%
rename from docs/3.api/1.composables/use-runtime-config.md
rename to docs/3.api/2.composables/use-runtime-config.md
index 88b3c50912..cafac034b3 100644
--- a/docs/3.api/1.composables/use-runtime-config.md
+++ b/docs/3.api/2.composables/use-runtime-config.md
@@ -1,6 +1,12 @@
-# `useRuntimeConfig`
-
-The [`useRuntimeConfig`](/docs/api/composables/use-runtime-config) composable is used to expose config variables within your app.
+---
+title: 'useRuntimeConfig'
+description: 'Access runtime config variables with the useRuntimeConfig composable.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/asyncData.ts
+ size: xs
+---
## Usage
@@ -12,10 +18,12 @@ const config = useRuntimeConfig()
```ts [server/api/foo.ts]
export default defineEventHandler((event) => {
- const config = useRuntimeConfig()
+ const config = useRuntimeConfig(event)
})
```
+:read-more{to="/docs/guide/going-further/runtime-config"}
+
## Define Runtime Config
The example below shows how to set a public API base URL and a secret API token that is only accessible on the server.
@@ -36,20 +44,19 @@ export default defineNuxtConfig({
})
```
-::alert
+::callout
Variables that need to be accessible on the server are added directly inside `runtimeConfig`. Variables that need to be accessible on both the client and the server are defined in `runtimeConfig.public`.
::
-::ReadMore{link="/docs/guide/going-further/runtime-config"}
-::
+:read-more{to="/docs/guide/going-further/runtime-config"}
## Access Runtime Config
To access runtime config, we can use `useRuntimeConfig()` composable:
```ts [server/api/test.ts]
-export default async () => {
- const config = useRuntimeConfig()
+export default defineEventHandler((event) => {
+ const config = useRuntimeConfig(event)
// Access public variables
const result = await $fetch(`/test`, {
@@ -69,8 +76,7 @@ In this example, since `apiBase` is defined within the `public` namespace, it is
It is possible to update runtime config values using a matching environment variable name prefixed with `NUXT_`.
-::ReadMore{link="/docs/guide/going-further/runtime-config"}
-::
+:read-more{to="/docs/guide/going-further/runtime-config"}
### Using the `.env` File
@@ -81,23 +87,21 @@ NUXT_PUBLIC_API_BASE = "https://api.localhost:5555"
NUXT_API_SECRET = "123"
```
-::alert{type=info}
+::callout
Any environment variables set within `.env` file are accessed using `process.env` in the Nuxt app during **development** and **build/generate**.
::
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
In **production runtime**, you should use platform environment variables and `.env` is not used.
::
-::alert{type=warning}
-When using git, make sure to add `.env` to the `.gitignore` file to avoid leaking secrets to the git history.
-::
+:read-more{to="/docs/guide/directory-structure/env"}
## `app` namespace
Nuxt uses `app` namespace in runtime-config with keys including `baseURL` and `cdnURL`. You can customize their values at runtime by setting environment variables.
-::alert{type=info}
+::callout
This is a reserved namespace. You should not introduce additional keys inside `app`.
::
@@ -135,5 +139,4 @@ export default defineEventHandler((event) => {
})
```
-::ReadMore{link="/docs/guide/going-further/runtime-config"}
-::
+:read-more{to="/docs/guide/going-further/runtime-config"}
diff --git a/docs/3.api/1.composables/use-seo-meta.md b/docs/3.api/2.composables/use-seo-meta.md
similarity index 79%
rename from docs/3.api/1.composables/use-seo-meta.md
rename to docs/3.api/2.composables/use-seo-meta.md
index 8a5cbac2d1..8bec86dbeb 100644
--- a/docs/3.api/1.composables/use-seo-meta.md
+++ b/docs/3.api/2.composables/use-seo-meta.md
@@ -1,17 +1,22 @@
---
+title: 'useSeoMeta'
description: The useSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/unjs/unhead/blob/main/packages/unhead/src/composables/useSeoMeta.ts
+ size: xs
---
-# `useSeoMeta`
-
-The `useSeoMeta` composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.
-
This helps you avoid common mistakes, such as using `name` instead of `property`, as well as typos - with over 100+ meta tags fully typed.
+::callout
This is the recommended way to add meta tags to your site as it is XSS safe and has full TypeScript support.
-:ReadMore{link="/docs/getting-started/seo-meta"}
+::
-## Example
+:read-more{to="/docs/getting-started/seo-meta"}
+
+## Usage
```vue [app.vue]
+```
+
+Parameters are exactly the same as with [`useSeoMeta`](/docs/api/composables/use-seo-meta)
+
+:read-more{to="/docs/getting-started/seo-meta"}
diff --git a/docs/3.api/2.composables/use-state.md b/docs/3.api/2.composables/use-state.md
new file mode 100644
index 0000000000..6d5a8d4294
--- /dev/null
+++ b/docs/3.api/2.composables/use-state.md
@@ -0,0 +1,47 @@
+---
+title: "useState"
+description: The useState composable creates a reactive and SSR-friendly shared state.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/state.ts
+ size: xs
+---
+
+## Usage
+
+```ts
+// Create a reactive state and set default value
+const count = useState('counter', () => Math.round(Math.random() * 100))
+
+```
+
+:read-more{to="/docs/getting-started/state-management"}
+
+::callout
+Because the data inside `useState` will be serialized to JSON, it is important that it does not contain anything that cannot be serialized, such as classes, functions or symbols.
+::
+
+::callout{color="amber" icon="i-ph-warning-duotone"}
+`useState` is a reserved function name transformed by the compiler, so you should not name your own function `useState`.
+::
+
+## Using `shallowRef`
+
+If you don't need your state to be deeply reactive, you can combine `useState` with [`shallowRef`](https://vuejs.org/api/reactivity-advanced.html#shallowref). This can improve performance when your state contains large objects and arrays.
+
+```ts
+const state = useState('my-shallow-state', () => shallowRef({ deep: 'not reactive' }))
+// isShallow(state) === true
+```
+
+## Type
+
+```ts
+useState(init?: () => T | Ref): Ref
+useState(key: string, init?: () => T | Ref): Ref
+```
+
+- `key`: A unique key ensuring that data fetching is properly de-duplicated across requests. If you do not provide a key, then a key that is unique to the file and line number of the instance of [`useState`](/docs/api/composables/use-state) will be generated for you.
+- `init`: A function that provides initial value for the state when not initiated. This function can also return a `Ref`.
+- `T`: (typescript only) Specify the type of state
diff --git a/docs/3.api/3.utils/$fetch.md b/docs/3.api/3.utils/$fetch.md
index c780897eee..8e5ff25f08 100644
--- a/docs/3.api/3.utils/$fetch.md
+++ b/docs/3.api/3.utils/$fetch.md
@@ -1,19 +1,26 @@
---
title: "$fetch"
description: Nuxt uses ofetch to expose globally the $fetch helper for making HTTP requests.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/entry.ts
+ size: xs
---
-# `$fetch`
-
Nuxt uses [ofetch](https://github.com/unjs/ofetch) to expose globally the `$fetch` helper for making HTTP requests within your Vue app or API routes.
+::callout{icon="i-ph-rocket-launch-duotone"}
During server-side rendering, calling `$fetch` to fetch your internal [API routes](/docs/guide/directory-structure/server) will directly call the relevant function (emulating the request), **saving an additional API call**.
+::
-However, using `$fetch` in components without wrapping it with [`useAsyncData`](/docs/api/composables/use-async-data) causes fetching the data twice: initially on the server, then again on the client-side during hydration, because `$fetch` does not transfer state from the server to the client. Thus, the fetch will be executed on both sides because the client has to get the data again.
+::callout{color="blue" icon="i-ph-info-duotone"}
+Using `$fetch` in components without wrapping it with [`useAsyncData`](/docs/api/composables/use-async-data) causes fetching the data twice: initially on the server, then again on the client-side during hydration, because `$fetch` does not transfer state from the server to the client. Thus, the fetch will be executed on both sides because the client has to get the data again.
+::
-We recommend to use [`useFetch`](https://nuxt.com/docs/api/composables/use-fetch) or [`useAsyncData`](https://nuxt.com/docs/api/composables/use-async-data) + `$fetch` to prevent double data fetching when fetching the component data.
+We recommend to use [`useFetch`](/docs/api/composables/use-fetch) or [`useAsyncData`](/docs/api/composables/use-async-data) + `$fetch` to prevent double data fetching when fetching the component data.
-```vue
+```vue [app.vue]
```
-:ReadMore{link="/docs/getting-started/data-fetching"}
+:read-more{to="/docs/getting-started/data-fetching"}
You can use `$fetch` for any method that are executed only on client-side.
-```vue
+```vue [pages/contact.vue]
```
-## Throwing Errors in API Routes
+## In API Routes
Use `createError` to trigger error handling in server API routes.
@@ -44,5 +48,4 @@ export default eventHandler(() => {
})
```
-::ReadMore{link="/docs/getting-started/error-handling"}
-::
+:read-more{to="/docs/getting-started/error-handling"}
diff --git a/docs/3.api/3.utils/define-nuxt-component.md b/docs/3.api/3.utils/define-nuxt-component.md
index 8ac2b97a7f..26e1d18320 100644
--- a/docs/3.api/3.utils/define-nuxt-component.md
+++ b/docs/3.api/3.utils/define-nuxt-component.md
@@ -1,17 +1,22 @@
---
title: "defineNuxtComponent"
description: defineNuxtComponent() is a helper function for defining type safe components with Options API.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/component.ts
+ size: xs
---
-# `defineNuxtComponent`
+::callout
+`defineNuxtComponent()` is a helper function for defining type safe Vue components using options API similar to [`defineComponent()`](https://vuejs.org/api/general.html#definecomponent). `defineNuxtComponent()` wrapper also adds support for `asyncData` and `head` component options.
+::
-`defineNuxtComponent()` is a helper function for defining type safe Vue components using options API similar to [defineComponent()](https://vuejs.org/api/general.html#definecomponent). `defineNuxtComponent()` wrapper also adds support for `asyncData` and `head` component options.
-
-::Alert
+::callout{color="blue" icon="i-ph-info-duotone"}
Using `
```
-::ReadMore{link="/docs/guide/directory-structure/pages/#page-metadata"}
-::
+:read-more{to="/docs/guide/directory-structure/pages/#page-metadata"}
## Type
diff --git a/docs/3.api/3.utils/define-route-rules.md b/docs/3.api/3.utils/define-route-rules.md
new file mode 100644
index 0000000000..cbe87b4c4a
--- /dev/null
+++ b/docs/3.api/3.utils/define-route-rules.md
@@ -0,0 +1,52 @@
+---
+title: 'defineRouteRules'
+description: 'Define route rules for hybrid rendering at the page level.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/pages/runtime/composables.ts
+ size: xs
+---
+
+::read-more{to="/docs/guide/going-further/experimental-features#inlinerouterules" icon="i-ph-star-duotone"}
+This feature is experimental and in order to use it you must enable the `experimental.inlineRouteRules` option in your `nuxt.config`.
+::
+
+## Usage
+
+```vue [pages/index.vue]
+
+
+
+ Hello world!
+
+```
+
+Will be translated to:
+
+```ts [nuxt.config.ts]
+export default defineNuxtConfig({
+ routeRules: {
+ '/': { prerender: true }
+ }
+})
+```
+
+::callout
+When running [`nuxt build`](/docs/api/commands/build), the home page will be pre-rendered in `.output/public/index.html` and statically served.
+::
+
+## Notes
+
+- A rule defined in `~/pages/foo/bar.vue` will be applied to `/foo/bar` requests.
+- A rule in `~/pages/foo/[id].vue` will be applied to `/foo/**` requests.
+
+For more control, such as if you are using a custom `path` or `alias` set in the page's [`definePageMeta`](/docs/api/utils/define-page-meta), you should set `routeRules` directly within your `nuxt.config`.
+
+::read-more{to="/docs/guide/concepts/rendering#hybrid-rendering" icon="i-ph-medal-duotone"}
+Read more about the `routeRules`.
+::
diff --git a/docs/3.api/3.utils/index.md b/docs/3.api/3.utils/index.md
deleted file mode 100644
index a9369a314b..0000000000
--- a/docs/3.api/3.utils/index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: "Utils"
-navigation: false
-redirect: /api/utils/
----
diff --git a/docs/3.api/3.utils/navigate-to.md b/docs/3.api/3.utils/navigate-to.md
index e2dc246e91..8fd4eeb696 100644
--- a/docs/3.api/3.utils/navigate-to.md
+++ b/docs/3.api/3.utils/navigate-to.md
@@ -1,13 +1,84 @@
---
title: "navigateTo"
description: navigateTo is a helper function that programmatically navigates users.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
---
-# `navigateTo`
+::callout
+`navigateTo` is available on both server side and client side.
+::
-`navigateTo` is a router helper function that allows programmatically navigating users through your Nuxt application.
+## Usage
-`navigateTo` is available on both server side and client side. It can be used within plugins, middleware or can be called directly to perform page navigation.
+### Within a Vue Component
+
+```vue
+
+```
+
+### Within Route Middleware
+
+```ts
+export default defineNuxtRouteMiddleware((to, from) => {
+ if (to.path !== '/search') {
+ // setting the redirect code to '301 Moved Permanently'
+ return navigateTo('/search', { redirectCode: 301 })
+ }
+})
+```
+
+:read-more{to="/docs/guide/directory-structure/middleware"}
+
+### External URL
+
+```vue
+
+```
+
+### Using open()
+
+```vue
+
+```
## Type
@@ -22,7 +93,7 @@ interface NavigateToOptions {
}
```
-::alert{type="warning"}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Make sure to always use `await` or `return` on result of `navigateTo` when calling it.
::
@@ -121,72 +192,3 @@ An object accepting the following properties:
**Type**: `boolean`
Refer to the [documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) for more detailed information on the **windowFeatures** properties.
-
-## Examples
-
-### Navigating Within a Vue Component
-
-```vue
-
-```
-
-### Navigating Within Route Middleware
-
-```ts
-export default defineNuxtRouteMiddleware((to, from) => {
- if (to.path !== '/search') {
- // setting the redirect code to '301 Moved Permanently'
- return navigateTo('/search', { redirectCode: 301 })
- }
-})
-```
-
-::ReadMore{link="/docs/guide/directory-structure/middleware"}
-::
-
-### Navigating to an External URL
-
-```vue
-
-```
-
-### Navigating using open()
-
-```vue
-
-```
diff --git a/docs/3.api/3.utils/on-before-route-leave.md b/docs/3.api/3.utils/on-before-route-leave.md
index af5cc55469..9353f8df79 100644
--- a/docs/3.api/3.utils/on-before-route-leave.md
+++ b/docs/3.api/3.utils/on-before-route-leave.md
@@ -1,11 +1,11 @@
---
title: "onBeforeRouteLeave"
description: The onBeforeRouteLeave composable allows registering a route guard within a component.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
---
-# `onBeforeRouteLeave`
-
-The `onBeforeRouteLeave` composable adds a navigation guard that triggers whenever the component for the current location is about to be left.
-
-::ReadMore{link="https://router.vuejs.org/api/#Functions-onBeforeRouteLeave"}
-::
+:read-more{icon="i-simple-icons-vuedotjs" to="https://router.vuejs.org/api/#onBeforeRouteLeave" title="Vue Router Docs" target="_blank"}
diff --git a/docs/3.api/3.utils/on-before-route-update.md b/docs/3.api/3.utils/on-before-route-update.md
index c6886147e7..fb603447cd 100644
--- a/docs/3.api/3.utils/on-before-route-update.md
+++ b/docs/3.api/3.utils/on-before-route-update.md
@@ -1,11 +1,11 @@
---
title: "onBeforeRouteUpdate"
description: The onBeforeRouteUpdate composable allows registering a route guard within a component.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
---
-# `onBeforeRouteUpdate`
-
-The `onBeforeRouteUpdate` composable adds a navigation guard that triggers whenever the component for the current location is about to be updated.
-
-::ReadMore{link="https://router.vuejs.org/api/#Functions-onBeforeRouteUpdate"}
-::
+:read-more{icon="i-simple-icons-vuedotjs" to="https://router.vuejs.org/api/#onBeforeRouteUpdate" title="Vue Router Docs" target="_blank"}
diff --git a/docs/3.api/3.utils/on-nuxt-ready.md b/docs/3.api/3.utils/on-nuxt-ready.md
index 9990cbebc2..e259e3d0e7 100644
--- a/docs/3.api/3.utils/on-nuxt-ready.md
+++ b/docs/3.api/3.utils/on-nuxt-ready.md
@@ -1,13 +1,19 @@
---
title: "onNuxtReady"
description: The onNuxtReady composable allows running a callback after your app has finished initializing.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ready.ts
+ size: xs
---
-# `onNuxtReady`
+::callout
+`onNuxtReady` only runs on the client-side. :br
+It is ideal for running code that should not block the initial rendering of your app.
+::
-The `onNuxtReady` composable allows running a callback after your app has finished initializing. It is ideal for running code that should not block the initial rendering of your app.
-
-```ts
+```ts [plugins/ready.client.ts]
export default defineNuxtPlugin(() => {
onNuxtReady(async () => {
const myAnalyticsLibrary = await import('my-big-analytics-library')
@@ -17,7 +23,3 @@ export default defineNuxtPlugin(() => {
```
It is 'safe' to run even after your app has initialized. In this case, then the code will be registered to run in the next idle callback.
-
-::alert
-`onNuxtReady` only runs on the client-side.
-::
diff --git a/docs/3.api/3.utils/prefetch-components.md b/docs/3.api/3.utils/prefetch-components.md
index f61bd3c784..d14bcf2680 100644
--- a/docs/3.api/3.utils/prefetch-components.md
+++ b/docs/3.api/3.utils/prefetch-components.md
@@ -1,25 +1,28 @@
---
-description: Nuxt provides utilities to give you control over prefetching and preloading components.
+title: 'prefetchComponents'
+description: Nuxt provides utilities to give you control over prefetching components.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/preload.ts
+ size: xs
---
-# `prefetchComponents`
-Nuxt provides composables and utilities to give you fine-grained control over prefetching and preloading components.
+Prefetching component downloads the code in the background, this is based on the assumption that the component will likely be used for rendering, enabling the component to load instantly if and when the user requests it. The component is downloaded and cached for anticipated future use without the user making an explicit request for it.
-> Prefetching component downloads the code in the background, this is based on the assumption that the component will likely be used for rendering, enabling the component to load instantly if and when the user requests it. The component is downloaded and cached for anticipated future use without the user making an explicit request for it.
+Use `prefetchComponents` to manually prefetch individual components that have been registered globally in your Nuxt app. By default Nuxt registers these as async components. You must use the Pascal-cased version of the component name.
-Use `prefetchComponents` to manually prefetch individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
-
-```js
+```ts
await prefetchComponents('MyGlobalComponent')
await prefetchComponents(['MyGlobalComponent1', 'MyGlobalComponent2'])
```
-::alert{icon=👉}
+::callout
Current implementation behaves exactly the same as [`preloadComponents`](/docs/api/utils/preload-components) by preloading components instead of just prefetching we are working to improve this behavior.
::
-::alert{icon=👉}
-Currently, on server, `prefetchComponents` will have no effect.
+::callout
+On server, `prefetchComponents` will have no effect.
::
diff --git a/docs/3.api/3.utils/preload-components.md b/docs/3.api/3.utils/preload-components.md
index 9d85800aba..59a557aa67 100644
--- a/docs/3.api/3.utils/preload-components.md
+++ b/docs/3.api/3.utils/preload-components.md
@@ -1,14 +1,16 @@
---
-description: Nuxt provides utilities to give you control over prefetching and preloading components.
+title: 'preloadComponents'
+description: Nuxt provides utilities to give you control over preloading components.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/preload.ts
+ size: xs
---
-# `preloadComponents`
+Preloading components loads components that your page will need very soon, which you want to start loading early in rendering lifecycle. This ensures they are available earlier and are less likely to block the page's render, improving performance.
-Nuxt provides composables and utilities to give you fine-grained control over prefetching and preloading components.
-
-> Preloading components loads components that your page will need very soon, which you want to start loading early in rendering lifecycle. This ensures they are available earlier and are less likely to block the page's render, improving performance.
-
-Use `preloadComponents` to manually preload individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
+Use `preloadComponents` to manually preload individual components that have been registered globally in your Nuxt app. By default Nuxt registers these as async components. You must use the Pascal-cased version of the component name.
```js
await preloadComponents('MyGlobalComponent')
@@ -16,6 +18,6 @@ await preloadComponents('MyGlobalComponent')
await preloadComponents(['MyGlobalComponent1', 'MyGlobalComponent2'])
```
-::alert{icon=👉}
-Currently, on server, `preloadComponents` will have no effect.
+::callout
+On server, `preloadComponents` will have no effect.
::
diff --git a/docs/3.api/3.utils/preload-route-components.md b/docs/3.api/3.utils/preload-route-components.md
index 8ad0f29247..fcf4aac98b 100644
--- a/docs/3.api/3.utils/preload-route-components.md
+++ b/docs/3.api/3.utils/preload-route-components.md
@@ -1,18 +1,20 @@
---
-title: "preloadRouteComponents"
+title: 'preloadRouteComponents'
+description: preloadRouteComponents allows you to manually preload individual pages in your Nuxt app.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/preload.ts
+ size: xs
---
-# `preloadRouteComponents`
+Preloading routes loads the components of a given route that the user might navigate to in future. This ensures that the components are available earlier and less likely to block the navigation, improving performance.
-`preloadRouteComponents` allows you to manually preload individual pages in your Nuxt app.
-
-> Preloading routes loads the components of a given route that the user might navigate to in future. This ensures that the components are available earlier and less likely to block the navigation, improving performance.
-
-::alert
+::callout{color="green" icon="i-ph-rocket-launch-duotone"}
Nuxt already automatically preloads the necessary routes if you're using the `NuxtLink` component.
::
-::ReadMore{link="/docs/api/components/nuxt-link"}
-::
+
+:read-more{to="/docs/api/components/nuxt-link"}
## Example
@@ -32,9 +34,8 @@ const submit = async () => {
}
```
-::ReadMore{link="/docs/api/utils/navigate-to"}
-::
+:read-more{to="/docs/api/utils/navigate-to"}
-::alert{icon=👉}
-Currently, on server, `preloadRouteComponents` will have no effect.
+::callout
+On server, `preloadRouteComponents` will have no effect.
::
diff --git a/docs/3.api/3.utils/prerender-routes.md b/docs/3.api/3.utils/prerender-routes.md
index f672364210..763ffc88b2 100644
--- a/docs/3.api/3.utils/prerender-routes.md
+++ b/docs/3.api/3.utils/prerender-routes.md
@@ -1,13 +1,15 @@
---
+title: 'prerenderRoutes'
description: prerenderRoutes hints to Nitro to prerender an additional route.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts
+ size: xs
---
-# `prerenderRoutes`
-
When prerendering, you can hint to Nitro to prerender additional paths, even if their URLs do not show up in the HTML of the generated page.
-`prerenderRoutes` can only be called within component setup functions, plugins, and route middleware.
-
```js
const route = useRoute()
@@ -15,6 +17,6 @@ prerenderRoutes('/')
prerenderRoutes(['/', '/about'])
```
-::alert{icon=👉}
+::callout
In the browser, or if called outside prerendering, `prerenderRoutes` will have no effect.
::
diff --git a/docs/3.api/3.utils/refresh-nuxt-data.md b/docs/3.api/3.utils/refresh-nuxt-data.md
index 2150d61670..c871ff57b7 100644
--- a/docs/3.api/3.utils/refresh-nuxt-data.md
+++ b/docs/3.api/3.utils/refresh-nuxt-data.md
@@ -1,11 +1,16 @@
---
-title: "refreshNuxtData"
+title: 'refreshNuxtData'
description: refreshNuxtData refetches all data from the server and updates the page.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/asyncData.ts
+ size: xs
---
-# `refreshNuxtData`
-
+::callout
`refreshNuxtData` re-fetches all data from the server and updates the page as well as invalidates the cache of [`useAsyncData`](/docs/api/composables/use-async-data) , `useLazyAsyncData`, [`useFetch`](/docs/api/composables/use-fetch) and `useLazyFetch`.
+::
## Type
@@ -21,9 +26,7 @@ refreshNuxtData(keys?: string | string[])
`refreshNuxtData` accepts a single or an array of strings as `keys` that are used to fetch the data. This parameter is **optional**. All [`useAsyncData`](/docs/api/composables/use-async-data) and [`useFetch`](/docs/api/composables/use-fetch) are re-fetched when no `keys` are specified.
-## Examples
-
-### Refresh All data
+## Refresh All Data
This example below refreshes all data being fetched using [`useAsyncData`](/docs/api/composables/use-async-data) and [`useFetch`](/docs/api/composables/use-fetch) on the current page.
@@ -49,7 +52,7 @@ const refreshAll = async () => {
```
-### Refresh Specific Data
+## Refresh Specific Data
This example below refreshes only data where the key matches to `count`.
@@ -67,5 +70,4 @@ const refresh = () => refreshNuxtData('count')
```
-::ReadMore{link="/docs/getting-started/data-fetching"}
-::
+:read-more{to="/docs/getting-started/data-fetching"}
diff --git a/docs/3.api/3.utils/reload-nuxt-app.md b/docs/3.api/3.utils/reload-nuxt-app.md
index 79502aa56a..0868e1319c 100644
--- a/docs/3.api/3.utils/reload-nuxt-app.md
+++ b/docs/3.api/3.utils/reload-nuxt-app.md
@@ -1,13 +1,22 @@
---
-title: "reloadNuxtApp"
+title: 'reloadNuxtApp'
description: reloadNuxtApp will perform a hard reload of the page.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/chunk.ts
+ size: xs
---
-# `reloadNuxtApp`
-
+::callout
`reloadNuxtApp` will perform a hard reload of your app, re-requesting a page and its dependencies from the server.
+::
-By default, it will also save the current `state` of your app (that is, any state you could access with `useState`). You can enable experimental restoration of this state by enabling the `experimental.restoreState` option in your `nuxt.config` file.
+By default, it will also save the current `state` of your app (that is, any state you could access with `useState`).
+
+::read-more{to="/docs/guide/going-further/experimental-features#restorestate" icon="i-ph-star-duotone"}
+You can enable experimental restoration of this state by enabling the `experimental.restoreState` option in your `nuxt.config` file.
+::
## Type
diff --git a/docs/3.api/3.utils/set-page-layout.md b/docs/3.api/3.utils/set-page-layout.md
index 41ca0f02d9..1a0a6f1968 100644
--- a/docs/3.api/3.utils/set-page-layout.md
+++ b/docs/3.api/3.utils/set-page-layout.md
@@ -1,17 +1,24 @@
---
+title: 'setPageLayout'
description: setPageLayout allows you to dynamically change the layout of a page.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/router.ts
+ size: xs
---
-# `setPageLayout`
-`setPageLayout` allows you to dynamically change the layout of a page. It relies on access to the Nuxt context and can only be called within components' setup functions, plugins, and route middleware.
+::callout
+`setPageLayout` relies on access to the Nuxt context and can only be called within components' setup functions, plugins, and route middleware.
+::
-```ts
+```ts [middleware/custom-layout.ts]
export default defineNuxtRouteMiddleware((to) => {
// Set the layout on the route you are navigating _to_
setPageLayout('other')
})
```
-::alert{icon=👉}
+::callout
If you choose to set the layout dynamically on the server side, you _must_ do so before the layout is rendered by Vue (that is, within a plugin or route middleware) to avoid a hydration mismatch.
::
diff --git a/docs/3.api/3.utils/set-response-status.md b/docs/3.api/3.utils/set-response-status.md
index 946a715815..200d644f91 100644
--- a/docs/3.api/3.utils/set-response-status.md
+++ b/docs/3.api/3.utils/set-response-status.md
@@ -1,14 +1,17 @@
---
+title: 'setResponseStatus'
description: setResponseStatus sets the statusCode (and optionally the statusMessage) of the response.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/ssr.ts
+ size: xs
---
-# `setResponseStatus`
Nuxt provides composables and utilities for first-class server-side-rendering support.
`setResponseStatus` sets the statusCode (and optionally the statusMessage) of the response.
-`setResponseStatus` can only be called within component setup functions, plugins, and route middleware.
-
```js
const event = useRequestEvent()
@@ -19,6 +22,8 @@ setResponseStatus(event, 404)
setResponseStatus(event, 404, 'Page Not Found')
```
-::alert{icon=👉}
+::callout
In the browser, `setResponseStatus` will have no effect.
::
+
+:read-more{to="/docs/getting-started/error-handling"}
diff --git a/docs/3.api/3.utils/show-error.md b/docs/3.api/3.utils/show-error.md
index 51eae9ad77..c0a32fdd87 100644
--- a/docs/3.api/3.utils/show-error.md
+++ b/docs/3.api/3.utils/show-error.md
@@ -1,6 +1,12 @@
-# `showError`
-
-Nuxt provides a quick and simple way to show a full screen error page if needed.
+---
+title: 'showError'
+description: Nuxt provides a quick and simple way to show a full screen error page if needed.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/error.ts
+ size: xs
+---
Within your pages, components and plugins you can use `showError` to show an error.
@@ -8,14 +14,18 @@ Within your pages, components and plugins you can use `showError` to show an err
- `error`: `string | Error | Partial<{ cause, data, message, name, stack, statusCode, statusMessage }>`
-```js
+```ts
showError("😱 Oh no, an error has been thrown.")
-showError({ statusCode: 404, statusMessage: "Page Not Found" })
+showError({
+ statusCode: 404,
+ statusMessage: "Page Not Found"
+})
```
The error is set in the state using [`useError()`](/docs/api/composables/use-error) to create a reactive and SSR-friendly shared error state across components.
+::callout
`showError` calls the `app:error` hook.
-
-::ReadMore{link="/docs/getting-started/error-handling"}
::
+
+:read-more{to="/docs/getting-started/error-handling"}
diff --git a/docs/3.api/3.utils/update-app-config.md b/docs/3.api/3.utils/update-app-config.md
index a51dfcacdf..15f32044be 100644
--- a/docs/3.api/3.utils/update-app-config.md
+++ b/docs/3.api/3.utils/update-app-config.md
@@ -1,8 +1,18 @@
-# `updateAppConfig`
+---
+title: 'updateAppConfig'
+description: 'Update the App Config at runtime.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/config.ts
+ size: xs
+---
-Updates [app config](/docs/guide/directory-structure/app-config) using deep assignment. Existing (nested) properties will be preserved.
+::callout
+Updates the [`app.config`](/docs/guide/directory-structure/app-config) using deep assignment. Existing (nested) properties will be preserved.
+::
-**Usage:**
+## Usage
```js
const appConfig = useAppConfig() // { foo: 'bar' }
@@ -14,4 +24,4 @@ updateAppConfig(newAppConfig)
console.log(appConfig) // { foo: 'baz' }
```
-::ReadMore{link="/docs/guide/directory-structure/app-config"}
+:read-more{to="/docs/guide/directory-structure/app-config"}
diff --git a/docs/3.api/4.commands/_dir.yml b/docs/3.api/4.commands/_dir.yml
new file mode 100644
index 0000000000..b1123168e0
--- /dev/null
+++ b/docs/3.api/4.commands/_dir.yml
@@ -0,0 +1,3 @@
+title: 'Commands'
+icon: i-ph-terminal-window-duotone
+titleTemplate: '%s · Nuxt Commands'
diff --git a/docs/3.api/6.commands/add.md b/docs/3.api/4.commands/add.md
similarity index 80%
rename from docs/3.api/6.commands/add.md
rename to docs/3.api/4.commands/add.md
index b94e56d545..6b88b119fd 100644
--- a/docs/3.api/6.commands/add.md
+++ b/docs/3.api/4.commands/add.md
@@ -1,11 +1,14 @@
---
title: "nuxi add"
description: "Scaffold an entity into your Nuxt application."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/add.ts
+ size: xs
---
-# `nuxi add`
-
-```{bash}
+```bash [Terminal]
npx nuxi add [--cwd] [--force]
```
@@ -20,33 +23,30 @@ Option | Default | Description
Some templates support additional modifier flags to add a suffix (like `.client` or `.get`) to their name.
-**Example:** `npx nuxi add plugin sockets --client` generates `/plugins/sockets.client.ts`.
+```bash [Terminal]
+# Generates `/plugins/sockets.client.ts`
+npx nuxi add plugin sockets --client
+```
## `nuxi add component`
* Modifier flags: `--mode client|server` or `--client` or `--server`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `components/TheHeader.vue`
npx nuxi add component TheHeader
```
## `nuxi add composable`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `composables/foo.ts`
npx nuxi add composable foo
```
## `nuxi add layout`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `layouts/custom.vue`
npx nuxi add layout custom
```
@@ -55,23 +55,19 @@ npx nuxi add layout custom
* Modifier flags: `--mode client|server` or `--client`or `--server`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `plugins/analytics.ts`
npx nuxi add plugin analytics
```
## `nuxi add page`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `pages/about.vue`
npx nuxi add page about
```
-```bash
+```bash [Terminal]
# Generates `pages/category/[id].vue`
npx nuxi add page "category/[id]"
```
@@ -80,9 +76,7 @@ npx nuxi add page "category/[id]"
* Modifier flags: `--global`
-Example:
-
-```bash
+```bash [Terminal]
# Generates `middleware/auth.ts`
npx nuxi add middleware auth
```
@@ -91,9 +85,7 @@ npx nuxi add middleware auth
* Modifier flags: `--method` (can accept `connect`, `delete`, `get`, `head`, `options`, `patch`, `post`, `put` or `trace`) or alternatively you can directly use `--get`, `--post`, etc.
-Example:
-
-```bash
+```bash [Terminal]
# Generates `server/api/hello.ts`
npx nuxi add api hello
```
diff --git a/docs/3.api/6.commands/analyze.md b/docs/3.api/4.commands/analyze.md
similarity index 72%
rename from docs/3.api/6.commands/analyze.md
rename to docs/3.api/4.commands/analyze.md
index b7a59f25f8..2d5dbe2c75 100644
--- a/docs/3.api/6.commands/analyze.md
+++ b/docs/3.api/4.commands/analyze.md
@@ -1,11 +1,14 @@
---
title: "nuxi analyze"
description: "Analyze the production bundle or your Nuxt application."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/analyze.ts
+ size: xs
---
-# `nuxi analyze`
-
-```{bash}
+```bash [Terminal]
npx nuxi analyze [--log-level] [rootDir]
```
@@ -15,4 +18,6 @@ Option | Default | Description
-------------------------|-----------------|------------------
`rootDir` | `.` | The directory of the target application.
+::callout
This command sets `process.env.NODE_ENV` to `production`.
+::
diff --git a/docs/3.api/6.commands/build-module.md b/docs/3.api/4.commands/build-module.md
similarity index 56%
rename from docs/3.api/6.commands/build-module.md
rename to docs/3.api/4.commands/build-module.md
index 1445a52c49..6d0c277339 100644
--- a/docs/3.api/6.commands/build-module.md
+++ b/docs/3.api/4.commands/build-module.md
@@ -1,6 +1,14 @@
-# `nuxi build-module`
+---
+title: 'nuxi build-module'
+description: 'Nuxt command to build your Nuxt module before publishing.'
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/build-module.ts
+ size: xs
+---
-```{bash}
+```bash [Terminal]
npx nuxi build-module [--stub] [rootDir]
```
@@ -11,6 +19,6 @@ Option | Default | Description
`rootDir` | `.` | The root directory of the module to bundle.
`--stub` | `false` | Stub out your module for development using [jiti](https://github.com/unjs/jiti#jiti). (**note:** This is mainly for development purposes.)
-::alert
-This command is only available when you are using `@nuxt/module-builder` to build your module. Please see [this readme](https://github.com/nuxt/module-builder#-nuxt-module-builder) for more information.
+::read-more{to="https://github.com/nuxt/module-builder" icon="i-simple-icons-github" color="gray" target="_blank"}
+Read more about `@nuxt/module-builder`.
::
diff --git a/docs/3.api/6.commands/build.md b/docs/3.api/4.commands/build.md
similarity index 81%
rename from docs/3.api/6.commands/build.md
rename to docs/3.api/4.commands/build.md
index 05d11cd15c..2ff30e32d8 100644
--- a/docs/3.api/6.commands/build.md
+++ b/docs/3.api/4.commands/build.md
@@ -1,11 +1,14 @@
---
title: "nuxi build"
description: "Build your Nuxt application."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/build.ts
+ size: xs
---
-# `nuxi build`
-
-```{bash}
+```bash [Terminal]
npx nuxi build [--prerender] [--dotenv] [--log-level] [rootDir]
```
@@ -17,4 +20,6 @@ Option | Default | Description
`--prerender` | `false` | Pre-render every route of your application. (**note:** This is an experimental flag. The behavior might be changed.)
`--dotenv` | `.` | Point to another `.env` file to load, **relative** to the root directory.
+::callout
This command sets `process.env.NODE_ENV` to `production`.
+::
diff --git a/docs/3.api/6.commands/cleanup.md b/docs/3.api/4.commands/cleanup.md
similarity index 70%
rename from docs/3.api/6.commands/cleanup.md
rename to docs/3.api/4.commands/cleanup.md
index 2e37dcd197..656675055c 100644
--- a/docs/3.api/6.commands/cleanup.md
+++ b/docs/3.api/4.commands/cleanup.md
@@ -1,14 +1,18 @@
---
+title: 'nuxi cleanup'
description: "Remove common generated Nuxt files and caches."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/cleanup.ts
+ size: xs
---
-# `nuxi cleanup`
-```{bash}
+```bash [Terminal]
npx nuxi clean|cleanup [rootDir]
```
The `cleanup` command removes common generated Nuxt files and caches, including:
-
- `.nuxt`
- `.output`
- `node_modules/.vite`
diff --git a/docs/3.api/6.commands/dev.md b/docs/3.api/4.commands/dev.md
similarity index 90%
rename from docs/3.api/6.commands/dev.md
rename to docs/3.api/4.commands/dev.md
index e7eda852d8..4d1e79a4b6 100644
--- a/docs/3.api/6.commands/dev.md
+++ b/docs/3.api/4.commands/dev.md
@@ -1,11 +1,14 @@
---
-title: "nuxi dev"
+title: 'nuxi dev'
description: The dev command starts a development server with hot module replacement at http://localhost:3000
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/dev.ts
+ size: xs
---
-# `nuxi dev`
-
-```{bash}
+```bash [Terminal]
npx nuxi dev [rootDir] [--dotenv] [--log-level] [--clipboard] [--open, -o] [--no-clear] [--port, -p] [--host, -h] [--https] [--ssl-cert] [--ssl-key]
```
@@ -30,6 +33,6 @@ Additionally to the above options, `nuxi` can pass options through to `listhen`,
This command sets `process.env.NODE_ENV` to `development`.
-::alert{type="info"}
+::callout
If you are using a self-signed certificate in development, you will need to set `NODE_TLS_REJECT_UNAUTHORIZED=0` in your environment.
::
diff --git a/docs/3.api/6.commands/devtools.md b/docs/3.api/4.commands/devtools.md
similarity index 69%
rename from docs/3.api/6.commands/devtools.md
rename to docs/3.api/4.commands/devtools.md
index 714b300e90..6f8947592e 100644
--- a/docs/3.api/6.commands/devtools.md
+++ b/docs/3.api/4.commands/devtools.md
@@ -1,11 +1,14 @@
---
title: "nuxi devtools"
description: The devtools command allows you to enable or disable Nuxt DevTools on a per-project basis.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/devtools.ts
+ size: xs
---
-# `nuxi devtools`
-
-```{bash}
+```bash [Terminal]
npx nuxi devtools enable|disable [rootDir]
```
@@ -15,5 +18,6 @@ Option | Default | Description
-------------------------|-----------------|------------------
`rootDir` | `.` | The root directory of the app you want to enable devtools for.
-::ReadMore{link="https://github.com/nuxt/devtools"}
+::read-more{icon="i-simple-icons-nuxtdotjs" to="https://devtools.nuxt.com" target="_blank"}
+Read more about the **Nuxt DevTools**.
::
diff --git a/docs/3.api/6.commands/generate.md b/docs/3.api/4.commands/generate.md
similarity index 71%
rename from docs/3.api/6.commands/generate.md
rename to docs/3.api/4.commands/generate.md
index 5aae757cff..1077ea4b1f 100644
--- a/docs/3.api/6.commands/generate.md
+++ b/docs/3.api/4.commands/generate.md
@@ -1,11 +1,14 @@
---
title: "nuxi generate"
description: Pre-renders every route of the application and stores the result in plain HTML files.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/generate.ts
+ size: xs
---
-# `nuxi generate`
-
-```{bash}
+```bash [Terminal]
npx nuxi generate [rootDir] [--dotenv]
```
@@ -16,6 +19,6 @@ Option | Default | Description
`rootDir` | `.` | The root directory of the application to generate
`--dotenv` | `.` | Point to another `.env` file to load, **relative** to the root directory.
-::alert{type=info}
-Read more about [pre-rendering and static hosting](/docs/getting-started/deployment#static-hosting).
+::read-more{to="/docs/getting-started/deployment#static-hosting"}
+Read more about pre-rendering and static hosting.
::
diff --git a/docs/3.api/6.commands/info.md b/docs/3.api/4.commands/info.md
similarity index 71%
rename from docs/3.api/6.commands/info.md
rename to docs/3.api/4.commands/info.md
index 12519e7b00..98fce37251 100644
--- a/docs/3.api/6.commands/info.md
+++ b/docs/3.api/4.commands/info.md
@@ -1,11 +1,14 @@
---
title: "nuxi info"
description: The info command logs information about the current or specified Nuxt project.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/info.ts
+ size: xs
---
-# `nuxi info`
-
-```{bash}
+```bash [Terminal]
npx nuxi info [rootDir]
```
diff --git a/docs/3.api/6.commands/init.md b/docs/3.api/4.commands/init.md
similarity index 87%
rename from docs/3.api/6.commands/init.md
rename to docs/3.api/4.commands/init.md
index 345373f496..f7ed124084 100644
--- a/docs/3.api/6.commands/init.md
+++ b/docs/3.api/4.commands/init.md
@@ -1,11 +1,14 @@
---
title: "nuxi init"
description: The init command initializes a fresh Nuxt project.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/init.ts
+ size: xs
---
-# `nuxi init`
-
-```{bash}
+```bash [Terminal]
npx nuxi init|create [--verbose|-v] [--template,-t] [dir]
```
diff --git a/docs/3.api/4.commands/prepare.md b/docs/3.api/4.commands/prepare.md
new file mode 100644
index 0000000000..395719ca57
--- /dev/null
+++ b/docs/3.api/4.commands/prepare.md
@@ -0,0 +1,19 @@
+---
+title: 'nuxi prepare'
+description: The prepare command creates a .nuxt directory in your application and generates types.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/prepare.ts
+ size: xs
+---
+
+```bash [Terminal]
+npx nuxi prepare [--log-level] [rootDir]
+```
+
+The `prepare` command creates a [`.nuxt`](/docs/guide/directory-structure/nuxt) directory in your application and generates types. This can be useful in a CI environment or as a `postinstall` command in your [`package.json`](/docs/guide/directory-structure/package).
+
+Option | Default | Description
+-------------------------|-----------------|------------------
+`rootDir` | `.` | The root directory of the application to prepare.
diff --git a/docs/3.api/6.commands/preview.md b/docs/3.api/4.commands/preview.md
similarity index 68%
rename from docs/3.api/6.commands/preview.md
rename to docs/3.api/4.commands/preview.md
index 363cb66d83..ed2736faee 100644
--- a/docs/3.api/6.commands/preview.md
+++ b/docs/3.api/4.commands/preview.md
@@ -1,11 +1,14 @@
---
title: "nuxi preview"
description: The preview command starts a server to preview your application after the build command.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/preview.ts
+ size: xs
---
-# `nuxi preview`
-
-```{bash}
+```bash [Terminal]
npx nuxi preview [rootDir] [--dotenv]
```
@@ -18,6 +21,6 @@ Option | Default | Description
This command sets `process.env.NODE_ENV` to `production`. To override, define `NODE_ENV` in a `.env` file or as command-line argument.
-::alert{type=info}
-For convenience, in preview mode, your `.env` file will be loaded into `process.env`. (However, in production you will need to ensure your environment variables are set yourself.)
+::callout
+For convenience, in preview mode, your [`.env`](/docs/guide/directory-structure/env) file will be loaded into `process.env`. (However, in production you will need to ensure your environment variables are set yourself.)
::
diff --git a/docs/3.api/6.commands/typecheck.md b/docs/3.api/4.commands/typecheck.md
similarity index 56%
rename from docs/3.api/6.commands/typecheck.md
rename to docs/3.api/4.commands/typecheck.md
index 234ab51021..1666997a5c 100644
--- a/docs/3.api/6.commands/typecheck.md
+++ b/docs/3.api/4.commands/typecheck.md
@@ -1,11 +1,14 @@
---
title: "nuxi typecheck"
description: The typecheck command runs vue-tsc to check types throughout your app.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/typecheck.ts
+ size: xs
---
-# `nuxi typecheck`
-
-```{bash}
+```bash [Terminal]
npx nuxi typecheck [--log-level] [rootDir]
```
@@ -15,8 +18,10 @@ Option | Default | Description
-------------------------|-----------------|------------------
`rootDir` | `.` | The directory of the target application.
-This command sets `process.env.NODE_ENV` to `production`. To override, define `NODE_ENV` in a `.env` file or as a command-line argument.
-
-::alert
-You can also enable type-checking at build or development time by installing `typescript` and `vue-tsc` as devDependencies and enabling [the `typescript.typeCheck` option in your `nuxt.config` file](/docs/api/configuration/nuxt-config#typescript).
+::callout
+This command sets `process.env.NODE_ENV` to `production`. To override, define `NODE_ENV` in a [`.env`](/docs/guide/directory-structure/env) file or as a command-line argument.
+::
+
+::read-more{to="/docs/guide/concepts/typescript#type-checking"}
+Read more on how to enable type-checking at build or development time.
::
diff --git a/docs/3.api/6.commands/upgrade.md b/docs/3.api/4.commands/upgrade.md
similarity index 71%
rename from docs/3.api/6.commands/upgrade.md
rename to docs/3.api/4.commands/upgrade.md
index eb86321bd5..187e915635 100644
--- a/docs/3.api/6.commands/upgrade.md
+++ b/docs/3.api/4.commands/upgrade.md
@@ -1,11 +1,14 @@
---
title: "nuxi upgrade"
description: The upgrade command upgrades Nuxt 3 to the latest version.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/cli/blob/main/src/commands/upgrade.ts
+ size: xs
---
-# `nuxi upgrade`
-
-```{bash}
+```bash [Terminal]
npx nuxi upgrade [--force|-f]
```
diff --git a/docs/3.api/4.kit/_dir.yml b/docs/3.api/4.kit/_dir.yml
deleted file mode 100644
index 6c91c01d53..0000000000
--- a/docs/3.api/4.kit/_dir.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-title: Kit Utilities
-navigation.icon: uil:suitcase-alt
-image: '/socials/advanced.jpg'
diff --git a/docs/3.api/5.advanced/_dir.yml b/docs/3.api/5.advanced/_dir.yml
deleted file mode 100644
index b14c8461d5..0000000000
--- a/docs/3.api/5.advanced/_dir.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-navigation.icon: uil:cell
-image: '/socials/advanced.jpg'
diff --git a/docs/3.api/4.kit/1.modules.md b/docs/3.api/5.kit/1.modules.md
similarity index 96%
rename from docs/3.api/4.kit/1.modules.md
rename to docs/3.api/5.kit/1.modules.md
index 80e6f9adfe..8845c92fa8 100644
--- a/docs/3.api/4.kit/1.modules.md
+++ b/docs/3.api/5.kit/1.modules.md
@@ -1,10 +1,12 @@
---
title: "Modules"
description: Nuxt Kit provides a set of utilities to help you create and use modules. You can use these utilities to create your own modules or to reuse existing modules.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/module
+ size: xs
---
-# Modules
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/module)
Modules are the building blocks of Nuxt. Kit provides a set of utilities to help you create and use modules. You can use these utilities to create your own modules or to reuse existing modules. For example, you can use the `defineNuxtModule` function to define a module and the `installModule` function to install a module programmatically.
diff --git a/docs/3.api/4.kit/10.templates.md b/docs/3.api/5.kit/10.templates.md
similarity index 98%
rename from docs/3.api/4.kit/10.templates.md
rename to docs/3.api/5.kit/10.templates.md
index 1c34766bb1..e02b76ff71 100644
--- a/docs/3.api/4.kit/10.templates.md
+++ b/docs/3.api/5.kit/10.templates.md
@@ -1,12 +1,13 @@
---
title: "Templates"
description: Nuxt Kit provides a set of utilities to help you work with templates. These functions allow you to generate extra files during development and build time.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/template.ts
+ size: xs
---
-# Templates
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/template.ts)
-
Templates allows to generate extra files during development and build time. These files will be available in virtual filesystem and can be used in plugins, layouts, components, etc. `addTemplate` and `addTypeTemplate` allow you to add templates to the Nuxt application. `updateTemplates` allows you to regenerate templates that match the filter.
## `addTemplate`
diff --git a/docs/3.api/4.kit/11.nitro.md b/docs/3.api/5.kit/11.nitro.md
similarity index 97%
rename from docs/3.api/4.kit/11.nitro.md
rename to docs/3.api/5.kit/11.nitro.md
index 001c6424ea..535ad03473 100644
--- a/docs/3.api/4.kit/11.nitro.md
+++ b/docs/3.api/5.kit/11.nitro.md
@@ -1,12 +1,13 @@
---
title: "Nitro"
description: Nuxt Kit provides a set of utilities to help you work with Nitro. These functions allow you to add server handlers, plugins, and prerender routes.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/nitro.ts
+ size: xs
---
-# Nitro
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/nitro.ts)
-
Nitro is an open source TypeScript framework to build ultra-fast web servers. Nuxt 3 (and, optionally, Nuxt Bridge) uses Nitro as its server engine. You can use `useNitro` to access the Nitro instance, `addServerHandler` to add a server handler, `addDevServerHandler` to add a server handler to be used only in development mode, `addServerPlugin` to add a plugin to extend Nitro's runtime behavior, and `addPrerenderRoutes` to add routes to be prerendered by Nitro.
## `addServerHandler`
@@ -206,11 +207,11 @@ export default defineNuxtModule({
Returns the Nitro instance.
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
You can call `useNitro()` only after `ready` hook.
::
-::alert{type=info}
+::callout
Changes to the Nitro instance configuration are not applied.
::
@@ -263,7 +264,7 @@ export default defineNuxtModule({
Add plugin to extend Nitro's runtime behavior.
-::alert{type=info}
+::callout
You can read more about Nitro plugins in the [Nitro documentation](https://nitro.unjs.io/guide/plugins).
::
diff --git a/docs/3.api/4.kit/12.resolving.md b/docs/3.api/5.kit/12.resolving.md
similarity index 97%
rename from docs/3.api/4.kit/12.resolving.md
rename to docs/3.api/5.kit/12.resolving.md
index 750179948c..d8df4589ba 100644
--- a/docs/3.api/4.kit/12.resolving.md
+++ b/docs/3.api/5.kit/12.resolving.md
@@ -1,12 +1,13 @@
---
title: Resolving
description: Nuxt Kit provides a set of utilities to help you resolve paths. These functions allow you to resolve paths relative to the current module, with unknown name or extension.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/resolve.ts
+ size: xs
---
-# Resolving
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/resolve.ts)
-
Sometimes you need to resolve a paths: relative to the current module, with unknown name or extension. For example, you may want to add a plugin that is located in the same directory as the module. To handle this cases, nuxt provides a set of utilities to resolve paths. `resolvePath` and `resolveAlias` are used to resolve paths relative to the current module. `findPath` is used to find first existing file in given paths. `createResolver` is used to create resolver relative to base path.
## `resolvePath`
diff --git a/docs/3.api/4.kit/13.logging.md b/docs/3.api/5.kit/13.logging.md
similarity index 85%
rename from docs/3.api/4.kit/13.logging.md
rename to docs/3.api/5.kit/13.logging.md
index 2c7c379810..721d6fcd44 100644
--- a/docs/3.api/4.kit/13.logging.md
+++ b/docs/3.api/5.kit/13.logging.md
@@ -1,12 +1,13 @@
---
title: "Logging"
description: Nuxt Kit provides a set of utilities to help you work with logging. These functions allow you to log messages with extra features.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/logger.ts
+ size: xs
---
-# Logging
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/logger.ts)
-
Nuxt provides a logger instance that you can use to log messages with extra features. `useLogger` allows you to get a logger instance.
## `useLogger`
diff --git a/docs/3.api/4.kit/14.builder.md b/docs/3.api/5.kit/14.builder.md
similarity index 95%
rename from docs/3.api/4.kit/14.builder.md
rename to docs/3.api/5.kit/14.builder.md
index 2ddbb943df..166a1eb3fc 100644
--- a/docs/3.api/4.kit/14.builder.md
+++ b/docs/3.api/5.kit/14.builder.md
@@ -1,12 +1,13 @@
---
title: Builder
description: Nuxt Kit provides a set of utilities to help you work with the builder. These functions allow you to extend the webpack and vite configurations.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/build.ts
+ size: xs
---
-# Builder
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/build.ts)
-
Nuxt have builders based on [webpack](https://github.com/nuxt/nuxt/tree/main/packages/webpack) and [vite](https://github.com/nuxt/nuxt/tree/main/packages/vite). You can extend the config passed to each one using `extendWebpackConfig` and `extendViteConfig` functions. You can also add additional plugins via `addVitePlugin`, `addWebpackPlugin` and `addBuildPlugin`.
## `extendWebpackConfig`
@@ -27,8 +28,8 @@ export interface ExtendWebpackConfigOptions {
}
```
-::alert{type=info}
-See [webpack website](https://webpack.js.org/configuration/) for more information about webpack configuration.
+::read-more{to="https://webpack.js.org/configuration/" target="_blank" color="gray" icon="i-simple-icons-webpack"}
+Checkout webpack website for more information about its configuration.
::
### Parameters
@@ -122,8 +123,8 @@ export interface ExtendViteConfigOptions {
}
```
-::alert{type=info}
-See [Vite website](https://vitejs.dev/config/) for more information about Vite configuration.
+::read-more{to="https://vitejs.dev/config/" target="_blank" color="gray" icon="i-simple-icons-vite"}
+Checkout Vite website for more information about its configuration.
::
### Parameters
@@ -219,7 +220,7 @@ interface ExtendWebpackConfigOptions {
}
```
-::alert{type=info}
+::callout
See [webpack website](https://webpack.js.org/concepts/plugins/) for more information about webpack plugins. You can also use [this collection](https://webpack.js.org/awesome-webpack/#webpack-plugins) to find a plugin that suits your needs.
::
@@ -327,7 +328,7 @@ interface ExtendViteConfigOptions {
}
```
-::alert{type=info}
+::callout
See [Vite website](https://vitejs.dev/guide/api-plugin.html) for more information about Vite plugins. You can also use [this repository](https://github.com/vitejs/awesome-vite#plugins) to find a plugin that suits your needs.
::
diff --git a/docs/3.api/4.kit/15.examples.md b/docs/3.api/5.kit/15.examples.md
similarity index 99%
rename from docs/3.api/4.kit/15.examples.md
rename to docs/3.api/5.kit/15.examples.md
index d0477a0e91..86753f95fe 100644
--- a/docs/3.api/4.kit/15.examples.md
+++ b/docs/3.api/5.kit/15.examples.md
@@ -3,8 +3,6 @@ title: "Examples"
description: Examples of Nuxt Kit utilities in use.
---
-# Examples
-
## Accessing Nuxt Vite Config
If you are building an integration that needs access to the runtime Vite or webpack config that Nuxt uses, it is possible to extract this using Kit utilities.
diff --git a/docs/3.api/4.kit/2.programmatic.md b/docs/3.api/5.kit/2.programmatic.md
similarity index 95%
rename from docs/3.api/4.kit/2.programmatic.md
rename to docs/3.api/5.kit/2.programmatic.md
index 8f28ac6a9a..2c2544bc02 100644
--- a/docs/3.api/4.kit/2.programmatic.md
+++ b/docs/3.api/5.kit/2.programmatic.md
@@ -1,12 +1,13 @@
---
title: "Programmatic Usage"
description: Nuxt Kit provides a set of utilities to help you work with Nuxt programmatically. These functions allow you to load Nuxt, build Nuxt, and load Nuxt configuration.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/loader
+ size: xs
---
-# Programmatic Usage
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/loader)
-
Programmatic usage can be helpful when you want to use Nuxt programmatically, for example, when building a [CLI tool](https://github.com/nuxt/cli) or [test utils](https://github.com/nuxt/nuxt/tree/main/packages/test-utils).
## `loadNuxt`
diff --git a/docs/3.api/4.kit/3.compatibility.md b/docs/3.api/5.kit/3.compatibility.md
similarity index 96%
rename from docs/3.api/4.kit/3.compatibility.md
rename to docs/3.api/5.kit/3.compatibility.md
index ccd6ecc1c2..d958f367a3 100644
--- a/docs/3.api/4.kit/3.compatibility.md
+++ b/docs/3.api/5.kit/3.compatibility.md
@@ -1,12 +1,13 @@
---
title: "Compatibility"
description: Nuxt Kit provides a set of utilities to help you check the compatibility of your modules with different Nuxt versions.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/compatibility.ts
+ size: xs
---
-# Compatibility
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/compatibility.ts)
-
Nuxt Kit utilities can be used in Nuxt 3, Nuxt 2 with Bridge and even Nuxt 2 without Bridge. To make sure your module is compatible with all versions, you can use the `checkNuxtCompatibility`, `assertNuxtCompatibility` and `hasNuxtCompatibility` functions. They will check if the current Nuxt version meets the constraints you provide. Also you can use `isNuxt2`, `isNuxt3` and `getNuxtVersion` functions for more granular checks.
## `checkNuxtCompatibility`
diff --git a/docs/3.api/4.kit/4.autoimports.md b/docs/3.api/5.kit/4.autoimports.md
similarity index 97%
rename from docs/3.api/4.kit/4.autoimports.md
rename to docs/3.api/5.kit/4.autoimports.md
index 49a90b4e77..66e781afbf 100644
--- a/docs/3.api/4.kit/4.autoimports.md
+++ b/docs/3.api/5.kit/4.autoimports.md
@@ -1,15 +1,18 @@
---
title: "Auto-imports"
description: Nuxt Kit provides a set of utilities to help you work with auto-imports. These functions allow you to register your own utils, composables and Vue APIs.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/imports.ts
+ size: xs
---
# Auto-imports
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/imports.ts)
-
Nuxt auto-imports helper functions, composables and Vue APIs to use across your application without explicitly importing them. Based on the directory structure, every Nuxt application can also use auto-imports for its own composables and plugins. With Nuxt Kit you can also add your own auto-imports. `addImports` and `addImportsDir` allow you to add imports to the Nuxt application. `addImportsSources` allows you to add listed imports from 3rd party packages to the Nuxt application.
-::alert{type=info}
+::callout
These functions are designed for registering your own utils, composables and Vue APIs. For pages, components and plugins, please refer to the specific sections: [Pages](/docs/api/kit/pages), [Components](/docs/api/kit/components), [Plugins](/docs/api/kit/plugins).
::
diff --git a/docs/3.api/4.kit/5.components.md b/docs/3.api/5.kit/5.components.md
similarity index 96%
rename from docs/3.api/4.kit/5.components.md
rename to docs/3.api/5.kit/5.components.md
index c755cea8a9..64c7adcab3 100644
--- a/docs/3.api/4.kit/5.components.md
+++ b/docs/3.api/5.kit/5.components.md
@@ -1,12 +1,13 @@
---
title: "Components"
description: Nuxt Kit provides a set of utilities to help you work with components. You can register components globally or locally, and also add directories to be scanned for components.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/components.ts
+ size: xs
---
-# Components
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/components.ts)
-
Components are the building blocks of your Nuxt application. They are reusable Vue instances that can be used to create a user interface. In Nuxt, components from the components directory are automatically imported by default. However, if you need to import components from an alternative directory or wish to selectively import them as needed, `@nuxt/kit` provides the `addComponentsDir` and `addComponent` methods. These utils allow you to customize the component configuration to better suit your needs.
## `addComponentsDir`
@@ -265,7 +266,7 @@ An object with the following properties:
**Type**: `boolean`
- If enabled, registers component as island. You can read more about islands in [ ](/docs/api/components/nuxt-island#nuxtisland) component description.
+ If enabled, registers component as island. You can read more about islands in [` `](/docs/api/components/nuxt-island#nuxtisland) component description.
- `mode` (optional)
diff --git a/docs/3.api/4.kit/6.context.md b/docs/3.api/5.kit/6.context.md
similarity index 95%
rename from docs/3.api/4.kit/6.context.md
rename to docs/3.api/5.kit/6.context.md
index b5a5caf083..91232cbafe 100644
--- a/docs/3.api/4.kit/6.context.md
+++ b/docs/3.api/5.kit/6.context.md
@@ -1,15 +1,16 @@
---
title: "Context"
description: Nuxt Kit provides a set of utilities to help you work with context.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/context.ts
+ size: xs
---
-# Context
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/context.ts)
-
Nuxt modules allow you to enhance Nuxt's capabilities. They offer a structured way to keep your code organized and modular. If you're looking to break down your module into smaller components, Nuxt offers the `useNuxt` and `tryUseNuxt` functions. These functions enable you to conveniently access the Nuxt instance from the context without having to pass it as argument.
-::alert{type=info}
+::callout
When you're working with the `setup` function in Nuxt modules, Nuxt is already provided as the second argument. This means you can directly utilize it without needing to call `useNuxt()`. You can look at [Nuxt Site Config](https://github.com/harlan-zw/nuxt-site-config) as an example of usage.
::
diff --git a/docs/3.api/4.kit/7.pages.md b/docs/3.api/5.kit/7.pages.md
similarity index 97%
rename from docs/3.api/4.kit/7.pages.md
rename to docs/3.api/5.kit/7.pages.md
index 078afd8e17..27b7a0d410 100644
--- a/docs/3.api/4.kit/7.pages.md
+++ b/docs/3.api/5.kit/7.pages.md
@@ -1,12 +1,13 @@
---
title: Pages
description: Nuxt Kit provides a set of utilities to help you create and use pages. You can use these utilities to manipulate the pages configuration or to define route rules.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/pages.ts
+ size: xs
---
-# Pages
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/pages.ts)
-
## `extendPages`
In Nuxt 3, routes are automatically generated based on the structure of the files in the `pages` directory. However, there may be scenarios where you'd want to customize these routes. For instance, you might need to add a route for a dynamic page not generated by Nuxt, remove an existing route, or modify the configuration of a route. For such customizations, Nuxt 3 offers the `extendPages` feature, which allows you to extend and alter the pages configuration.
@@ -62,7 +63,7 @@ export default defineNuxtModule({
Nuxt is powered by the [Nitro](https://nitro.unjs.io) server engine. With Nitro, you can incorporate high-level logic directly into your configuration, which is useful for actions like redirects, proxying, caching, and appending headers to routes. This configuration works by associating route patterns with specific route settings.
-::alert{type=info icon=👉}
+::callout
You can read more about Nitro route rules in the [Nitro documentation](https://nitro.unjs.io/guide/routing#route-rules).
::
@@ -179,7 +180,7 @@ Registers route middlewares to be available for all routes or for specific route
Route middlewares can be also defined in plugins via [`addRouteMiddleware`](/docs/api/utils/add-route-middleware) composable.
-::alert{type=info icon=👉}
+::callout
Read more about route middlewares in the [Route middleware documentation](/docs/getting-started/routing#route-middleware).
::
diff --git a/docs/3.api/4.kit/8.layout.md b/docs/3.api/5.kit/8.layout.md
similarity index 93%
rename from docs/3.api/4.kit/8.layout.md
rename to docs/3.api/5.kit/8.layout.md
index 9affb24215..da80a70c90 100644
--- a/docs/3.api/4.kit/8.layout.md
+++ b/docs/3.api/5.kit/8.layout.md
@@ -1,19 +1,20 @@
---
title: "Layout"
description: "Nuxt Kit provides a set of utilities to help you work with layouts."
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/layout.ts
+ size: xs
---
-# Layout
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/layout.ts)
-
Layouts is used to be a wrapper around your pages. It can be used to wrap your pages with common components, for example, a header and a footer. Layouts can be registered using `addLayout` utility.
## `addLayout`
Register template as layout and add it to the layouts.
-::alert{type=info icon=👉}
+::callout
In Nuxt 2 `error` layout can also be registered using this utility. In Nuxt 3 `error` layout [replaced](/docs/getting-started/error-handling#rendering-an-error-page) with `error.vue` page in project root.
::
diff --git a/docs/3.api/4.kit/9.plugins.md b/docs/3.api/5.kit/9.plugins.md
similarity index 96%
rename from docs/3.api/4.kit/9.plugins.md
rename to docs/3.api/5.kit/9.plugins.md
index 6785c91868..da4940419d 100644
--- a/docs/3.api/4.kit/9.plugins.md
+++ b/docs/3.api/5.kit/9.plugins.md
@@ -1,12 +1,13 @@
---
title: Plugins
description: Nuxt Kit provides a set of utilities to help you create and use plugins. You can add plugins or plugin templates to your module using these functions.
+links:
+ - label: Source
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/nuxt/blob/main/packages/kit/src/plugin.ts
+ size: xs
---
-# Plugins
-
-[source code](https://github.com/nuxt/nuxt/blob/main/packages/kit/src/plugin.ts)
-
Plugins are self-contained code that usually add app-level functionality to Vue. In Nuxt, plugins are automatically imported from the `plugins` directory. However, if you need to ship a plugin with your module, Nuxt Kit provides the `addPlugin` and `addPluginTemplate` methods. These utils allow you to customize the plugin configuration to better suit your needs.
## `addPlugin`
@@ -59,7 +60,7 @@ A plugin object or a string with the path to the plugin. If a string is provided
Order of the plugin. This allows more granular control over plugin order and should only be used by advanced users. Lower numbers run first, and user plugins default to `0`. It's recommended to set `order` to a number between `-20` for `pre`-plugins (plugins that run before Nuxt plugins) and `20` for `post`-plugins (plugins that run after Nuxt plugins).
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Don't use `order` unless you know what you're doing. For most plugins, the default `order` of `0` is sufficient. To append a plugin to the end of the plugins array, use the `append` option instead.
::
@@ -196,7 +197,7 @@ A plugin template object with the following properties:
Order of the plugin. This allows more granular control over plugin order and should only be used by advanced users. Lower numbers run first, and user plugins default to `0`. It's recommended to set `order` to a number between `-20` for `pre`-plugins (plugins that run before Nuxt plugins) and `20` for `post`-plugins (plugins that run after Nuxt plugins).
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
Don't use `order` unless you know what you're doing. For most plugins, the default `order` of `0` is sufficient. To append a plugin to the end of the plugins array, use the `append` option instead.
::
diff --git a/docs/3.api/5.kit/_dir.yml b/docs/3.api/5.kit/_dir.yml
new file mode 100644
index 0000000000..dda66db56e
--- /dev/null
+++ b/docs/3.api/5.kit/_dir.yml
@@ -0,0 +1,3 @@
+title: Nuxt Kit
+navigation.icon: i-ph-toolbox-duotone
+titleTemplate: '%s · Nuxt Kit'
diff --git a/docs/3.api/5.advanced/1.hooks.md b/docs/3.api/6.advanced/1.hooks.md
similarity index 96%
rename from docs/3.api/5.advanced/1.hooks.md
rename to docs/3.api/6.advanced/1.hooks.md
index d81f831935..99530c5933 100644
--- a/docs/3.api/5.advanced/1.hooks.md
+++ b/docs/3.api/6.advanced/1.hooks.md
@@ -1,13 +1,11 @@
---
-title: "Lifecycle Hooks"
+title: 'Lifecycle Hooks'
description: Nuxt provides a powerful hooking system to expand almost every aspect using hooks.
---
-# Lifecycle Hooks
+:read-more{to="/docs/guide/going-further/hooks"}
-:ReadMore{link="/docs/guide/going-further/hooks"}
-
-# App Hooks (runtime)
+## App Hooks (runtime)
Check the [app source code](https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/nuxt.ts#L27) for all available hooks.
@@ -29,7 +27,7 @@ Hook | Arguments | Environment | Description
`page:finish` | `pageComponent?` | Client | Called on [Suspense](https://vuejs.org/guide/built-ins/suspense.html#suspense) resolved event.
`page:transition:finish`| `pageComponent?` | Client | After page transition [onAfterLeave](https://vuejs.org/guide/built-ins/transition.html#javascript-hooks) event.
-# Nuxt Hooks (build time)
+## Nuxt Hooks (build time)
Check the [schema source code](https://github.com/nuxt/nuxt/blob/main/packages/schema/src/types/hooks.ts#L53) for all available hooks.
@@ -43,7 +41,7 @@ Hook | Arguments | Description
`modules:done` | - | Called during Nuxt initialization, after installing user modules.
`app:resolve` | `app` | Called after resolving the `app` instance.
`app:templates` | `app` | Called during `NuxtApp` generation, to allow customizing, modifying or adding new files to the build directory (either virtually or to written to `.nuxt`).
-`app:templatesGenerated` | `app` | Called after templates are compiled into the [virtual file system](https://nuxt.com/docs/guide/directory-structure/nuxt#virtual-file-system) (vfs).
+`app:templatesGenerated` | `app` | Called after templates are compiled into the [virtual file system](/docs/guide/directory-structure/nuxt#virtual-file-system) (vfs).
`build:before` | - | Called before Nuxt bundle builder.
`build:done` | - | Called after Nuxt bundle builder is complete.
`build:manifest` | `manifest` | Called during the manifest build by Vite and webpack. This allows customizing the manifest that Nitro will use to render `
```
-::alert
+::callout
Be careful not to use both `useNuxt2Meta()` and the Options API `head()` within the same component, as behavior may be unpredictable.
::
diff --git a/docs/6.bridge/6.meta.md b/docs/6.bridge/6.meta.md
index b8f0456de0..e15a8b5143 100644
--- a/docs/6.bridge/6.meta.md
+++ b/docs/6.bridge/6.meta.md
@@ -1,4 +1,7 @@
-# Meta Tags
+---
+title: Meta Tags
+description: 'Learn how to migrate from Nuxt 2 to Nuxt Bridge new meta tags.'
+---
If you need to access the component state with `head`, you should migrate to using [`useHead`](/docs/api/composables/use-head) .
@@ -66,11 +69,11 @@ useHead({
```
-::alert
+::callout
This [`useHead`](/docs/api/composables/use-head) composable uses `@unhead/vue` under the hood (rather than `vue-meta`) to manipulate your ``.
::
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
We recommend not using the native Nuxt 2 `head()` properties in addition to [`useHead`](/docs/api/composables/use-head) , as they may conflict.
::
diff --git a/docs/6.bridge/7.runtime-config.md b/docs/6.bridge/7.runtime-config.md
index 11d9e397b7..70c0f06579 100644
--- a/docs/6.bridge/7.runtime-config.md
+++ b/docs/6.bridge/7.runtime-config.md
@@ -1,6 +1,9 @@
-# Runtime Config
+---
+title: Runtime Config
+description: 'Nuxt provides a runtime config API to expose configuration and secrets within your application.'
+---
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
When using `runtimeConfig` option, [nitro](/docs/bridge/nitro) must have been configured.
::
diff --git a/docs/6.bridge/8.nitro.md b/docs/6.bridge/8.nitro.md
index 01b5f5a902..e2bd72a322 100644
--- a/docs/6.bridge/8.nitro.md
+++ b/docs/6.bridge/8.nitro.md
@@ -1,4 +1,7 @@
-# Nitro
+---
+title: Nitro
+description: 'Activate Nitro to your Nuxt 2 application with Nuxt Bridge.'
+---
## Remove Modules
@@ -6,7 +9,7 @@
## Update Config
-```ts [nuxt.config.js|ts]
+```ts [nuxt.config.ts]
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
@@ -26,7 +29,7 @@ Install `nuxi` as a development dependency:
::code-group
-```bash [Yarn]
+```bash [yarn]
yarn add --dev nuxi
```
@@ -53,7 +56,7 @@ Nuxt 3 introduced the new Nuxt CLI command [`nuxi`](/docs/api/commands/add). Upd
}
```
-::alert
+::callout
If `nitro: false`, use the `nuxt2` command.
::
diff --git a/docs/6.bridge/9.vite.md b/docs/6.bridge/9.vite.md
index 4bf7d289aa..cb44570118 100644
--- a/docs/6.bridge/9.vite.md
+++ b/docs/6.bridge/9.vite.md
@@ -1,6 +1,9 @@
-# Vite
+---
+title: Vite
+description: 'Activate Vite to your Nuxt 2 application with Nuxt Bridge.'
+---
-::alert{type=warning}
+::callout{color="amber" icon="i-ph-warning-duotone"}
When using `vite`, [nitro](/docs/bridge/nitro) must have been configured.
::
@@ -10,7 +13,7 @@ When using `vite`, [nitro](/docs/bridge/nitro) must have been configured.
## Update Config
-```ts [nuxt.config.js|ts]
+```ts [nuxt.config.ts]
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
@@ -23,7 +26,7 @@ export default defineNuxtConfig({
## Configuration
-```ts [nuxt.config.js|ts]
+```ts [nuxt.config.ts]
import { defineNuxtConfig } from '@nuxt/bridge'
export default defineNuxtConfig({
diff --git a/docs/6.bridge/_dir.yml b/docs/6.bridge/_dir.yml
index c1f97f550b..f2a37c2daa 100644
--- a/docs/6.bridge/_dir.yml
+++ b/docs/6.bridge/_dir.yml
@@ -1,2 +1,3 @@
-titleTemplate: 'Migrate to Bridge: %s'
-image: '/socials/guide.jpg'
+titleTemplate: 'Migrate to Nuxt Bridge: %s'
+title: 'Migrate to Nuxt Bridge'
+icon: i-ph-bridge-duotone
diff --git a/docs/7.migration/1.overview.md b/docs/7.migration/1.overview.md
index f19d6826c2..cef7bc52e4 100644
--- a/docs/7.migration/1.overview.md
+++ b/docs/7.migration/1.overview.md
@@ -1,16 +1,11 @@
-# Overview
+---
+title: Overview
+description: Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies.
+---
-Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies.
+There are significant changes when migrating a Nuxt 2 app to Nuxt 3, although you can expect migration to become more straightforward as we move toward a stable release.
-That means there will be significant changes when migrating a Nuxt 2 app to Nuxt 3, although you can expect migration to become more straightforward as we move toward a stable release.
-
-
-
-::alert{type=info}
+::callout
This migration guide is under progress to align with the development of Nuxt 3.
::
@@ -20,7 +15,7 @@ Some of these significant changes include:
1. Moving from webpack 4 and Babel to Vite or webpack 5 and esbuild.
1. Moving from a runtime Nuxt dependency to a minimal, standalone server compiled with nitropack.
-::alert{type=info}
+::callout
If you need to remain on Nuxt 2, but want to benefit from Nuxt 3 features in Nuxt 2, you can alternatively check out [how to get started with Bridge](/docs/bridge/overview).
::
diff --git a/docs/7.migration/10.bundling.md b/docs/7.migration/10.bundling.md
index d71237e67b..d4830cf4dd 100644
--- a/docs/7.migration/10.bundling.md
+++ b/docs/7.migration/10.bundling.md
@@ -1,4 +1,7 @@
-# Build Tooling
+---
+title: Build Tooling
+description: 'Learn how to migrate from Nuxt 2 to Nuxt 3 build tooling.'
+---
We use the following build tools by default:
@@ -11,13 +14,15 @@ For this reason, most of your previous `build` configuration in `nuxt.config` wi
If you need to configure any of Nuxt's build tools, you can do so in your `nuxt.config`, using the new top-level `vite`, `webpack` and `postcss` keys.
-In addition, Nuxt ships with TypeScript support. [Find out more](/docs/guide/concepts/typescript).
+In addition, Nuxt ships with TypeScript support.
+
+:read-more{to="/docs/guide/concepts/typescript"}
## Steps
1. Remove `@nuxt/typescript-build` and `@nuxt/typescript-runtime` from your dependencies and modules.
-1. Remove any unused babel dependencies from your project.
-1. Remove any explicit core-js dependencies.
-1. Migrate `require` to `import`.
+2. Remove any unused babel dependencies from your project.
+3. Remove any explicit core-js dependencies.
+4. Migrate `require` to `import`.
diff --git a/docs/7.migration/11.server.md b/docs/7.migration/11.server.md
index 9dd6f560ec..6e7e36aa46 100644
--- a/docs/7.migration/11.server.md
+++ b/docs/7.migration/11.server.md
@@ -1,12 +1,17 @@
-# Server
+---
+title: Server
+description: 'Learn how to migrate from Nuxt 2 to Nuxt 3 server.'
+---
In a built Nuxt 3 application, there is no runtime Nuxt dependency. That means your site will be highly performant, and ultra-slim. But it also means you can no longer hook into runtime Nuxt server hooks.
-[Read more about the Nitro server engine](/docs/guide/concepts/server-engine).
+:read-more{to="/docs/guide/concepts/server-engine"}
## Steps
1. Remove the `render` key in your `nuxt.config`.
-1. Any files in `~/server/api` and `~/server/middleware` will be automatically registered; you can remove them from your `serverMiddleware` array.
-1. Update any other items in your `serverMiddleware` array to point to files or npm packages directly, rather than using inline functions.
-1. If you are adding any server hooks, such as `server:` or `vue-renderer:` you will need to remove these and wait for [nitropack](https://github.com/unjs/nitropack) support for runtime hooks and plugins.
+2. Any files in `~/server/api` and `~/server/middleware` will be automatically registered; you can remove them from your `serverMiddleware` array.
+3. Update any other items in your `serverMiddleware` array to point to files or npm packages directly, rather than using inline functions.
+
+:read-more{to="/docs/guide/directory-structure/server"}
+:read-more{to="/docs/guide/going-further/hooks#server-hooks-runtime"}
diff --git a/docs/7.migration/2.configuration.md b/docs/7.migration/2.configuration.md
index 1f7aba5334..992ffc92bd 100644
--- a/docs/7.migration/2.configuration.md
+++ b/docs/7.migration/2.configuration.md
@@ -1,10 +1,13 @@
-# Configuration
+---
+title: Configuration
+description: 'Learn how to migrate from Nuxt 2 to Nuxt 3 new configuration.'
+---
## `nuxt.config`
The starting point for your Nuxt app remains your `nuxt.config` file.
-::alert{icon=📦}
+::callout
Nuxt configuration will be loaded using [`unjs/jiti`](https://github.com/unjs/jiti) and [`unjs/c12`](https://github.com/unjs/c12).
::
@@ -88,16 +91,15 @@ Nuxt and Nuxt Modules are now build-time-only.
})
```
-::alert
+::callout
If you are a module author, you can check out [more information about module compatibility](/docs/migration/module-authors) and [our module author guide](/docs/guide/going-further/modules).
::
## Directory Changes
-The [`static/` directory](/docs/guide/directory-structure/static) (for storing static assets) has been renamed to `public/`. You can either rename your `static` directory to `public`, or keep the name by setting `dir.public` in your `nuxt.config`.
+The `static/` (for storing static assets) has been renamed to `public/`. You can either rename your `static` directory to `public`, or keep the name by setting `dir.public` in your `nuxt.config`.
-::ReadMore{link="/docs/guide/directory-structure/public"}
-::
+:read-more{to="/docs/guide/directory-structure/public"}
## TypeScript
@@ -105,7 +107,7 @@ It will be much easier to migrate your application if you use Nuxt's TypeScript
You can read more about Nuxt's TypeScript support [in the docs](/docs/guide/concepts/typescript).
-::alert{icon=📦}
+::callout
Nuxt can type-check your app using [`vue-tsc`](https://github.com/vuejs/language-tools/tree/master/packages/vue-tsc) with `nuxi typecheck` command.
::
@@ -136,9 +138,9 @@ Nuxt no longer provides a Vuex integration. Instead, the official Vue recommenda
A simple way to provide global state management with pinia would be:
-Install the [@pinia/nuxt](https://nuxt.com/modules/pinia) module:
+Install the [`@pinia/nuxt`](/modules/pinia) module:
-```bash
+```bash [Terminal]
yarn add pinia @pinia/nuxt
```
diff --git a/docs/7.migration/20.module-authors.md b/docs/7.migration/20.module-authors.md
index 0536e713b7..6c6df5e796 100644
--- a/docs/7.migration/20.module-authors.md
+++ b/docs/7.migration/20.module-authors.md
@@ -1,4 +1,7 @@
-# Modules
+---
+title: Modules
+description: 'Learn how to migrate from Nuxt 2 to Nuxt 3 modules.'
+---
## Module Compatibility
@@ -6,14 +9,16 @@ Nuxt 3 has a basic backward compatibility layer for Nuxt 2 modules using `@nuxt/
We have prepared a [Dedicated Guide](/docs/guide/going-further/modules) for authoring Nuxt 3 ready modules using `@nuxt/kit`. Currently best migration path is to follow it and rewrite your modules. Rest of this guide includes preparation steps if you prefer to avoid a full rewrite yet making modules compatible with Nuxt 3.
-::alert
-You can check for a list of Nuxt 3 ready modules from [Nuxt Modules](/modules).
+::callout{icon="i-ph-puzzle-piece-duotone" to="/modules"}
+Explore Nuxt 3 compatible modules.
::
### Plugin Compatibility
Nuxt 3 plugins are **not** fully backward compatible with Nuxt 2.
+:read-more{to="/docs/guide/directory-structure/plugins"}
+
### Vue Compatibility
Plugins or components using the Composition API need exclusive Vue 2 or Vue 3 support.
@@ -72,18 +77,18 @@ Your module should work even if it's only added to [`buildModules`](/docs/guide/
(*) Unless it is for `nuxt dev` purpose only and guarded with `if (nuxt.options.dev) { }`.
-::alert{type=info icon=🔎}
-Continue reading about Nuxt 3 modules in the [Modules guide](/docs/guide/going-further/modules).
+::callout
+Continue reading about Nuxt 3 modules in the [Modules Author Guide](/docs/guide/going-further/modules).
::
### Use TypeScript (Optional)
While it is not essential, most of the Nuxt ecosystem is shifting to use TypeScript, so it is highly recommended to consider migration.
-::alert{icon=💡}
+::callout
You can start migration by renaming `.js` files, to `.ts`. TypeScript is designed to be progressive!
::
-::alert{icon=💡}
+::callout
You can use TypeScript syntax for Nuxt 2 and 3 modules and plugins without any extra dependencies.
::
diff --git a/docs/7.migration/3.auto-imports.md b/docs/7.migration/3.auto-imports.md
index 55fe2b2aa4..ddfb19208f 100644
--- a/docs/7.migration/3.auto-imports.md
+++ b/docs/7.migration/3.auto-imports.md
@@ -1,8 +1,9 @@
-# Auto Imports
+---
+title: Auto Imports
+description: Nuxt 3 adopts a minimal friction approach, meaning wherever possible components and composables are auto-imported.
+---
-Nuxt 3 adopts a minimal friction approach, meaning wherever possible components and composables are auto-imported.
-
-::alert{type=info}
+::callout
In the rest of the migration documentation, you will notice that key Nuxt and Vue utilities do not have explicit imports. This is not a typo; Nuxt will automatically import them for you, and you should get full type hinting if you have followed [the instructions](/docs/migration/configuration#typescript) to use Nuxt's TypeScript support.
::
@@ -12,6 +13,6 @@ In the rest of the migration documentation, you will notice that key Nuxt and Vu
1. If you have been using `@nuxt/components` in Nuxt 2, you can remove `components: true` in your `nuxt.config`. If you had a more complex setup, then note that the component options have changed somewhat. See the [components documentation](/docs/guide/directory-structure/components) for more information.
-::alert{type=info}
+::callout
You can look at `.nuxt/types/components.d.ts` and `.nuxt/types/imports.d.ts` to see how Nuxt has resolved your components and composable auto-imports.
::
diff --git a/docs/7.migration/4.meta.md b/docs/7.migration/4.meta.md
index cc59864230..d46509d5d3 100644
--- a/docs/7.migration/4.meta.md
+++ b/docs/7.migration/4.meta.md
@@ -1,26 +1,28 @@
-# Meta Tags
-
-Nuxt 3 provides several different ways to manage your meta tags.
+---
+title: Meta Tags
+description: Manage your meta tags, from Nuxt 2 to Nuxt 3.
+---
+Nuxt 3 provides several different ways to manage your meta tags:
1. Through your `nuxt.config`.
2. Through the [`useHead`](/docs/api/composables/use-head) [composable](/docs/getting-started/seo-meta)
3. Through [global meta components](/docs/getting-started/seo-meta)
You can customize `title`, `titleTemplate`, `base`, `script`, `noscript`, `style`, `meta`, `link`, `htmlAttrs` and `bodyAttrs`.
-::alert{icon=📦}
+::callout
Nuxt currently uses [`vueuse/head`](https://github.com/vueuse/head) to manage your meta tags, but implementation details may change.
::
-[Read more about meta tags](/docs/getting-started/seo-meta).
+:read-more{to="/docs/getting-started/seo-meta"}
## Migration
1. In your `nuxt.config`, rename `head` to `meta`. Consider moving this shared meta configuration into your `app.vue` instead. (Note that objects no longer have a `hid` key for deduplication.)
-1. If you need to access the component state with `head`, you should migrate to using [`useHead`](/docs/api/composables/use-head) . You might also consider using the built-in meta-components.
-1. If you need to use the Options API, there is a `head()` method you can use when you use `defineNuxtComponent`.
+2. If you need to access the component state with `head`, you should migrate to using [`useHead`](/docs/api/composables/use-head) . You might also consider using the built-in meta-components.
+3. If you need to use the Options API, there is a `head()` method you can use when you use `defineNuxtComponent`.
-### Example: useHead
+### useHead
::code-group
@@ -63,7 +65,7 @@ useHead({
::
-### Example: Built-in Meta-components
+### Meta-components
Nuxt 3 also provides meta components that you can use to accomplish the same task. While these components look similar to HTML tags, they are provided by Nuxt and have similar functionality.
@@ -100,13 +102,12 @@ export default {
::
-::alert{icon=👉}
-
+::callout
1. Make sure you use capital letters for these component names to distinguish them from native HTML elements (`` rather than ``).
-1. You can place these components anywhere in your template for your page.
+2. You can place these components anywhere in your template for your page.
::
-### Example: Options API
+### Options API
```vue [Nuxt 3 (Options API)]
-```
-
-::
+ ```diff [layouts/custom.vue]
+
+
+
+ -
+ +
+
+
+
+ ```
+2. Use [`definePageMeta`](/docs/api/utils/define-page-meta) to select the layout used by your page.
+ ```diff [pages/index.vue]
+
+ ```
+3. Move `~/layouts/_error.vue` to `~/error.vue`. See [the error handling docs](/docs/getting-started/error-handling). If you want to ensure that this page uses a layout, you can use [``](/docs/guide/directory-structure/layouts) directly within `error.vue`:
+ ```vue [error.vue]
+
+
+
+
+
+
+
+ ```
## Pages
-Nuxt 3 ships with an optional `vue-router` integration triggered by the existence of a [`pages/` directory](/docs/guide/directory-structure/pages) in your source directory. If you only have a single page, you may consider instead moving it to `app.vue` for a lighter build.
+Nuxt 3 ships with an optional `vue-router` integration triggered by the existence of a [`pages/`](/docs/guide/directory-structure/pages) directory in your source directory. If you only have a single page, you may consider instead moving it to `app.vue` for a lighter build.
### Dynamic Routes
The format for defining dynamic routes in Nuxt 3 is slightly different from Nuxt 2, so you may need to rename some of the files within `pages/`.
1. Where you previously used `_id` to define a dynamic route parameter you now use `[id]`.
-1. Where you previously used `_.vue` to define a catch-all route, you now use `[...slug].vue`.
+2. Where you previously used `_.vue` to define a catch-all route, you now use `[...slug].vue`.
### Nested Routes
@@ -81,19 +83,19 @@ In Nuxt 2, you will have defined any nested routes (with parent and child compon
If you were passing a custom page key or keep-alive props to ``, you will now use `definePageMeta` to set these options.
-See [more about migrating Nuxt component hooks](/docs/migration/component-options).
+:read-more{to="/docs/migration/component-options"}
### Page and Layout Transitions
If you have been defining transitions for your page or layout directly in your component options, you will now need to use `definePageMeta` to set the transition. Since Vue 3, [-enter and -leave CSS classes have been renamed](https://v3-migration.vuejs.org/breaking-changes/transition.html). The `style` prop from `` no longer applies to transition when used on ``, so move the styles to your `-active` class.
-[Read more about `pages/`](/docs/guide/directory-structure/pages).
+:read-more{to="/docs/getting-started/transitions"}
### Migration
1. Rename any pages with dynamic parameters to match the new format.
-1. Update `` and `` to be ``.
-1. If you're using the Composition API, you can also migrate `this.$route` and `this.$router` to use [`useRoute`](/docs/api/composables/use-route) and [`useRouter`](/docs/api/composables/use-router) composables.
+2. Update `` and `` to be ``.
+3. If you're using the Composition API, you can also migrate `this.$route` and `this.$router` to use [`useRoute`](/docs/api/composables/use-route) and [`useRouter`](/docs/api/composables/use-router) composables.
#### Example: Dynamic Routes
@@ -181,13 +183,17 @@ definePageMeta({
Most of the syntax and functionality are the same for the global [NuxtLink](/docs/api/components/nuxt-link) component. If you have been using the shortcut `` format, you should update this to use ``.
-`` is now a drop-in replacement for _all_ links, even external ones. You can read more about it, and how to extend it to provide your own link component, [in the docs](/docs/api/components/nuxt-link).
+`` is now a drop-in replacement for _all_ links, even external ones. You can read more about it, and how to extend it to provide your own link component.
+
+:read-more{to="/docs/api/components/nuxt-link"}
## Programmatic Navigation
When migrating from Nuxt 2 to Nuxt 3, you will have to update how you programmatically navigate your users. In Nuxt 2, you had access to the underlying Vue Router with `this.$router`. In Nuxt 3, you can use the `navigateTo()` utility method which allows you to pass a route and parameters to Vue Router.
-**Note:** Ensure to always `await` on `navigateTo` or chain it's result by returning from functions.
+::callout{color="amber" icon="i-ph-warning-duotone"}
+Ensure to always `await` on [`navigateTo`](/docs/api/utils/navigate-to) or chain it's result by returning from functions.
+::
::code-group
diff --git a/docs/7.migration/7.component-options.md b/docs/7.migration/7.component-options.md
index af3dc28b8a..245e42fd43 100644
--- a/docs/7.migration/7.component-options.md
+++ b/docs/7.migration/7.component-options.md
@@ -1,6 +1,9 @@
-# Component Options
+---
+title: Component Options
+description: 'Learn how to migrate from Nuxt 2 components options to Nuxt 3 composables.'
+---
-## `asyncData` and `fetch` component options
+## `asyncData` and `fetch`
Nuxt 3 provides new options for [fetching data from an API](/docs/getting-started/data-fetching).
@@ -11,7 +14,7 @@ Nuxt 3 provides new options for [fetching data from an API](/docs/getting-starte
In Nuxt 2 you might use `@nuxtjs/axios` or `@nuxt/http` to fetch your data - or just the polyfilled global `fetch`.
-In Nuxt 3 you can use a globally available `fetch` method that has the same API as [the Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) or `$fetch` method which is using [unjs/ofetch](https://github.com/unjs/ofetch). It has a number of benefits, including:
+In Nuxt 3 you can use a globally available `fetch` method that has the same API as [the Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) or [`$fetch`](/docs/api/utils/dollarfetch) method which is using [unjs/ofetch](https://github.com/unjs/ofetch). It has a number of benefits, including:
1. It will handle 'smartly' making [direct API calls](/docs/guide/concepts/server-engine#direct-api-calls) if it's running on the server, or making a client-side call to your API if it's running on the client. (It can also handle calling third-party APIs.)
@@ -19,7 +22,7 @@ In Nuxt 3 you can use a globally available `fetch` method that has the same API
You can read more [about direct API calls](/docs/guide/concepts/server-engine#direct-api-calls) or [fetching data](/docs/getting-started/data-fetching).
-### Using Composables
+### Composables
Nuxt 3 provides new composables for fetching data: [`useAsyncData`](/docs/api/composables/use-async-data) and `useFetch`. They each have 'lazy' variants (`useLazyAsyncData` and `useLazyFetch`), which do not block client-side navigation.
@@ -53,22 +56,22 @@ const { data: post, refresh } = await useFetch(`https://api.nuxtjs.dev/posts/${p
You can now use `post` inside of your Nuxt 3 template, or call `refresh` to update the data.
-::alert{type=info}
+::callout
Despite the names, [`useFetch`](/docs/api/composables/use-fetch) is not a direct replacement of the `fetch()` hook. Rather, [`useAsyncData`](/docs/api/composables/use-async-data) replaces both hooks and is more customizable; it can do more than simply fetching data from an endpoint. [`useFetch`](/docs/api/composables/use-fetch) is a convenience wrapper around [`useAsyncData`](/docs/api/composables/use-async-data) for simply fetching data from an endpoint.
::
### Migration
1. Replace the `asyncData` hook with [`useAsyncData`](/docs/api/composables/use-async-data) or [`useFetch`](/docs/api/composables/use-fetch) in your page/component.
-1. Replace the `fetch` hook with [`useAsyncData`](/docs/api/composables/use-async-data) or [`useFetch`](/docs/api/composables/use-fetch) in your component.
+2. Replace the `fetch` hook with [`useAsyncData`](/docs/api/composables/use-async-data) or [`useFetch`](/docs/api/composables/use-fetch) in your component.
## `head`
-See [meta tag migration](/docs/migration/meta).
+:read-more{to="/docs/migration/meta"}
## `key`
-You can now define a key within the `definePageMeta` compiler macro.
+You can now define a key within the [`definePageMeta`](/docs/api/utils/define-page-meta) compiler macro.
```diff [pages/index.vue]
-
+
```
-### Migration
-
-1. Migrate `key` from component options to `definePageMeta`.
-
## `layout`
-See [layout migration](/docs/migration/pages-and-layouts).
+:read-more{to="/docs/migration/pages-and-layouts"}
## `loading`
@@ -100,15 +99,28 @@ This feature is not yet supported in Nuxt 3.
## `middleware`
-See [middleware migration](/docs/migration/plugins-and-middleware).
+:read-more{to="/docs/migration/plugins-and-middleware"}
## `scrollToTop`
This feature is not yet supported in Nuxt 3. If you want to overwrite the default scroll behavior of `vue-router`, you can do so in `~/app/router.options.ts` (see [docs](/docs/guide/going-further/custom-routing#router-options)) for more info.
+Similar to `key`, specify it within the [`definePageMeta`](/docs/api/utils/define-page-meta) compiler macro.
+
+```diff [pages/index.vue]
+-
+```
## `transition`
-See [layout migration](/docs/migration/pages-and-layouts).
+:read-more{to="/docs/getting-started/transitions"}
## `validate`
diff --git a/docs/7.migration/8.runtime-config.md b/docs/7.migration/8.runtime-config.md
index ce75cc62e8..1cf95231c0 100644
--- a/docs/7.migration/8.runtime-config.md
+++ b/docs/7.migration/8.runtime-config.md
@@ -1,4 +1,7 @@
-# Runtime Config
+---
+title: Runtime Config
+description: 'Learn how to migrate from Nuxt 2 to Nuxt 3 runtime config.'
+---
If you wish to reference environment variables within your Nuxt 3 app, you will need to use runtime config.
@@ -6,14 +9,12 @@ When referencing these variables within your components, you will have to use th
In the `server/` portion of your app, you can use [`useRuntimeConfig`](/docs/api/composables/use-runtime-config) without any import.
-[Read more about runtime config](/docs/guide/going-further/runtime-config).
+:read-more{to="/docs/guide/going-further/runtime-config"}
## Migration
1. Add any environment variables that you use in your app to the `runtimeConfig` property of the `nuxt.config` file.
-1. Migrate `process.env` to [`useRuntimeConfig`](/docs/api/composables/use-runtime-config) throughout the Vue part of your app.
-
-## Example
+2. Migrate `process.env` to [`useRuntimeConfig`](/docs/api/composables/use-runtime-config) throughout the Vue part of your app.
::code-group
@@ -40,13 +41,12 @@ console.log(config.public.apiBase)
```
```ts [server/api/hello.ts]
-const config = useRuntimeConfig()
-
-export default (req, res) => {
+export default defineEventhandler((event) => {
+ const config = useRuntimeConfig(event)
// In server, you can now access config.apiSecret, in addition to config.public
console.log(config.apiSecret)
console.log(config.public.apiBase)
-}
+})
```
```ini [.env]
diff --git a/docs/7.migration/_dir.yml b/docs/7.migration/_dir.yml
index 04f0d8d1ea..54585df393 100644
--- a/docs/7.migration/_dir.yml
+++ b/docs/7.migration/_dir.yml
@@ -1,2 +1,3 @@
titleTemplate: 'Migrate to Nuxt 3: %s'
-image: '/socials/guide.jpg'
+title: 'Migrate to Nuxt 3'
+icon: i-ph-arrow-circle-up-duotone
diff --git a/docs/README.md b/docs/README.md
index 18bc0d5ec4..4d778da911 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -4,8 +4,8 @@ navigation: false
# Nuxt Docs
-This repository contains the documentation of Nuxt hosted on nuxt.com.
+This repository contains the documentation of Nuxt hosted on
## Contributing
-You can contribute directly on GitHub for now, we are planning to open source nuxt.com repo for everyone to contribute with ease very soon.
+Have a look at to run the website locally.
diff --git a/docs/_dir.yml b/docs/_dir.yml
index 5d512327bd..6639eb3a35 100644
--- a/docs/_dir.yml
+++ b/docs/_dir.yml
@@ -1 +1,2 @@
title: Docs
+icon: i-ph-book-bookmark-duotone
diff --git a/package.json b/package.json
index d530d9bc3a..2f53730372 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,6 @@
"lint:docs": "markdownlint ./docs && case-police 'docs/**/*.md' *.md",
"lint:docs:fix": "markdownlint ./docs --fix && case-police 'docs/**/*.md' *.md --fix",
"lint:knip": "pnpx knip",
- "docs:dev": "nuxi dev .website",
"play": "nuxi dev playground",
"play:build": "nuxi build playground",
"play:preview": "nuxi preview playground",
diff --git a/packages/kit/src/plugin.ts b/packages/kit/src/plugin.ts
index 21b6b33ee1..5421c3027f 100644
--- a/packages/kit/src/plugin.ts
+++ b/packages/kit/src/plugin.ts
@@ -23,7 +23,7 @@ export function normalizePlugin (plugin: NuxtPlugin | string): NuxtPlugin {
// TODO: only scan top-level files #18418
const nonTopLevelPlugin = plugin.src.match(/\/plugins\/[^/]+\/index\.[^/]+$/i)
if (nonTopLevelPlugin && nonTopLevelPlugin.length > 0 && !useNuxt().options.plugins.find(i => (typeof i === 'string' ? i : i.src).endsWith(nonTopLevelPlugin[0]))) {
- logger.warn(`[deprecation] You are using a plugin that is within a subfolder of your plugins directory without adding it to your config explicitly. You can move it to the top-level plugins directory, or include the file '~${nonTopLevelPlugin[0]}' in your plugins config (https://nuxt.com/docs/api/configuration/nuxt-config#plugins-1) to remove this warning.`)
+ logger.warn(`[deprecation] You are using a plugin that is within a subfolder of your plugins directory without adding it to your config explicitly. You can move it to the top-level plugins directory, or include the file '~${nonTopLevelPlugin[0]}' in your plugins config (https://nuxt.com/docs/api/nuxt-config#plugins-1) to remove this warning.`)
}
// Normalize full path to plugin
diff --git a/packages/nuxt/src/core/builder.ts b/packages/nuxt/src/core/builder.ts
index ffa65a40ac..99aa2a51f2 100644
--- a/packages/nuxt/src/core/builder.ts
+++ b/packages/nuxt/src/core/builder.ts
@@ -199,7 +199,7 @@ async function loadBuilder (nuxt: Nuxt, builder: string): Promise {
const builderPath = await tryResolveModule(builder, [nuxt.options.rootDir, import.meta.url])
if (!builderPath) {
- throw new Error(`Loading \`${builder}\` builder failed. You can read more about the nuxt \`builder\` option at: \`https://nuxt.com/docs/api/configuration/nuxt-config#builder\``)
+ throw new Error(`Loading \`${builder}\` builder failed. You can read more about the nuxt \`builder\` option at: \`https://nuxt.com/docs/api/nuxt-config#builder\``)
}
return import(pathToFileURL(builderPath).href)
}
diff --git a/packages/nuxt/src/core/external-config-files.ts b/packages/nuxt/src/core/external-config-files.ts
index 84b7231954..517c88ecba 100644
--- a/packages/nuxt/src/core/external-config-files.ts
+++ b/packages/nuxt/src/core/external-config-files.ts
@@ -30,7 +30,7 @@ async function checkViteConfig () {
return await checkAndWarnAboutConfigFileExistence({
fileName: 'vite.config',
extensions: ['.js', '.mjs', '.ts', '.cjs', '.mts', '.cts'],
- createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.vite\` instead. You can read more in \`https://nuxt.com/docs/api/configuration/nuxt-config#vite\`.`
+ createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.vite\` instead. You can read more in \`https://nuxt.com/docs/api/nuxt-config#vite\`.`
})
}
@@ -39,7 +39,7 @@ async function checkWebpackConfig () {
return await checkAndWarnAboutConfigFileExistence({
fileName: 'webpack.config',
extensions: ['.js', '.mjs', '.ts', '.cjs', '.mts', '.cts', 'coffee'],
- createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.webpack\` instead. You can read more in \`https://nuxt.com/docs/api/configuration/nuxt-config#webpack-1\`.`
+ createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.webpack\` instead. You can read more in \`https://nuxt.com/docs/api/nuxt-config#webpack-1\`.`
})
}
@@ -48,7 +48,7 @@ async function checkNitroConfig () {
return await checkAndWarnAboutConfigFileExistence({
fileName: 'nitro.config',
extensions: ['.ts', '.mts'],
- createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.nitro\` instead. You can read more in \`https://nuxt.com/docs/api/configuration/nuxt-config#nitro\`.`
+ createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.nitro\` instead. You can read more in \`https://nuxt.com/docs/api/nuxt-config#nitro\`.`
})
}
@@ -56,7 +56,7 @@ async function checkPostCSSConfig () {
return await checkAndWarnAboutConfigFileExistence({
fileName: 'postcss.config',
extensions: ['.js', '.cjs'],
- createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.postcss\` instead. You can read more in \`https://nuxt.com/docs/api/configuration/nuxt-config#postcss\`.`
+ createWarningMessage: foundFile => `Using \`${foundFile}\` is not supported together with Nuxt. Use \`options.postcss\` instead. You can read more in \`https://nuxt.com/docs/api/nuxt-config#postcss\`.`
})
}
diff --git a/packages/schema/src/config/common.ts b/packages/schema/src/config/common.ts
index 7d87c0c3b9..66762b69b6 100644
--- a/packages/schema/src/config/common.ts
+++ b/packages/schema/src/config/common.ts
@@ -393,7 +393,7 @@ export default defineUntypedSchema({
* For ease of configuration, you can also structure them as an hierarchical
* object in `nuxt.config` (as below).
* @example
- * ```js'node:fs'
+ * ```js
* import fs from 'node:fs'
* import path from 'node:path'
* export default {
diff --git a/packages/schema/src/config/experimental.ts b/packages/schema/src/config/experimental.ts
index fb65f1c513..68410ce4aa 100644
--- a/packages/schema/src/config/experimental.ts
+++ b/packages/schema/src/config/experimental.ts
@@ -11,11 +11,11 @@ export default defineUntypedSchema({
/**
* Enable Vue's reactivity transform
- * @see https://vuejs.org/guide/extras/reactivity-transform.html
+ * @see [Vue Reactivity Transform Docs](https://vuejs.org/guide/extras/reactivity-transform.html)
*
* Warning: Reactivity transform feature has been marked as deprecated in Vue 3.3 and is planned to be
* removed from core in Vue 3.4.
- * @see https://github.com/vuejs/rfcs/discussions/369#discussioncomment-5059028
+ * @see [Vue RFC#369](https://github.com/vuejs/rfcs/discussions/369#discussioncomment-5059028)
*/
reactivityTransform: false,
@@ -23,13 +23,13 @@ export default defineUntypedSchema({
// https://github.com/unjs/nitro/issues/1118
/**
* Externalize `vue`, `@vue/*` and `vue-router` when building.
- * @see https://github.com/nuxt/nuxt/issues/13632
+ * @see [Nuxt Issue #13632](https://github.com/nuxt/nuxt/issues/13632)
*/
externalVue: true,
/**
* Tree shakes contents of client-only components from server bundle.
- * @see https://github.com/nuxt/framework/pull/5750
+ * @see [Nuxt PR #5750](https://github.com/nuxt/framework/pull/5750)
*/
treeshakeClientOnly: true,
@@ -42,7 +42,7 @@ export default defineUntypedSchema({
*
* You can disable automatic handling by setting this to `false`, or handle
* chunk errors manually by setting it to `manual`.
- * @see https://github.com/nuxt/nuxt/pull/19038
+ * @see [Nuxt PR #19038](https://github.com/nuxt/nuxt/pull/19038)
* @type {false | 'manual' | 'automatic'}
*/
emitRouteChunkError: {
@@ -130,7 +130,7 @@ export default defineUntypedSchema({
/**
* Enable View Transition API integration with client-side router.
- * @see https://developer.chrome.com/docs/web-platform/view-transitions
+ * @see [View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions)
*/
viewTransition: false,
@@ -154,7 +154,7 @@ export default defineUntypedSchema({
/**
* Config schema support
- * @see https://github.com/nuxt/nuxt/issues/15592
+ * @see [Nuxt Issue #15592](https://github.com/nuxt/nuxt/issues/15592)
*/
configSchema: true,
@@ -216,15 +216,15 @@ export default defineUntypedSchema({
* performance in large projects or on Windows platforms.
*
* You can also set this to `chokidar` to watch all files in your source directory.
- * @see https://github.com/paulmillr/chokidar
- * @see https://github.com/parcel-bundler/watcher
+ * @see [chokidar](https://github.com/paulmillr/chokidar)
+ * @see [Parcel watcher](https://github.com/parcel-bundler/watcher)
* @type {'chokidar' | 'parcel' | 'chokidar-granular'}
*/
watcher: 'chokidar-granular',
/**
* Enable native async context to be accessible for nested composables
- * @see https://github.com/nuxt/nuxt/pull/20918
+ * @see [Nuxt PR #20918](https://github.com/nuxt/nuxt/pull/20918)
*/
asyncContext: false,
@@ -232,7 +232,7 @@ export default defineUntypedSchema({
* Use new experimental head optimisations:
* - Add the capo.js head plugin in order to render tags in of the head in a more performant way.
* - Uses the hash hydration plugin to reduce initial hydration
- * @see https://github.com/nuxt/nuxt/discussions/22632
+ * @see [Nuxt Discussion #22632](https://github.com/nuxt/nuxt/discussions/22632]
*/
headNext: false,
diff --git a/packages/schema/src/config/vite.ts b/packages/schema/src/config/vite.ts
index f62bd2880d..2a4beb35aa 100644
--- a/packages/schema/src/config/vite.ts
+++ b/packages/schema/src/config/vite.ts
@@ -34,7 +34,7 @@ export default defineUntypedSchema({
publicDir: {
$resolve: async (val, get) => {
if (val) {
- consola.warn('Directly configuring the `vite.publicDir` option is not supported. Instead, set `dir.public`. You can read more in `https://nuxt.com/docs/api/configuration/nuxt-config#public`.')
+ consola.warn('Directly configuring the `vite.publicDir` option is not supported. Instead, set `dir.public`. You can read more in `https://nuxt.com/docs/api/nuxt-config#public`.')
}
return val ?? resolve((await get('srcDir')), (await get('dir')).public)
}
diff --git a/packages/schema/src/types/config.ts b/packages/schema/src/types/config.ts
index f1494dfc2f..f8351a378a 100644
--- a/packages/schema/src/types/config.ts
+++ b/packages/schema/src/types/config.ts
@@ -88,7 +88,7 @@ export interface NuxtConfig extends DeepPartial {
entry?: string
/**
* Options passed to @vitejs/plugin-vue.
- * @see https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue
+ * @see [@vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue)
*/
vue?: VuePluginOptions
/**
* Options passed to @vitejs/plugin-vue-jsx.
- * @see https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue-jsx
+ * @see [@vitejs/plugin-vue-jsx.](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue-jsx)
*/
vueJsx?: VueJsxPluginOptions
@@ -153,7 +153,7 @@ export interface ViteConfig extends Omit {
/**
* Directly configuring the `vite.publicDir` option is not supported. Instead, set `dir.public`.
*
- * You can read more in .
+ * You can read more in .
* @deprecated
*/
publicDir?: never
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 871981334f..0abd8d11da 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -140,12 +140,6 @@ importers:
specifier: 1.8.19
version: 1.8.19(typescript@5.2.2)
- .website:
- devDependencies:
- '@nuxt-themes/docus':
- specifier: 1.15.0
- version: 1.15.0(nuxt@packages+nuxt)(postcss@8.4.31)(vue@3.3.4)
-
packages/kit:
dependencies:
'@nuxt/schema':
@@ -1348,31 +1342,6 @@ packages:
dependencies:
mime: 3.0.0
- /@csstools/cascade-layer-name-parser@1.0.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0):
- resolution: {integrity: sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^2.3.1
- '@csstools/css-tokenizer': ^2.2.0
- dependencies:
- '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0)
- '@csstools/css-tokenizer': 2.2.0
- dev: true
-
- /@csstools/css-parser-algorithms@2.3.1(@csstools/css-tokenizer@2.2.0):
- resolution: {integrity: sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- '@csstools/css-tokenizer': ^2.2.0
- dependencies:
- '@csstools/css-tokenizer': 2.2.0
- dev: true
-
- /@csstools/css-tokenizer@2.2.0:
- resolution: {integrity: sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==}
- engines: {node: ^14 || ^16 || >=18}
- dev: true
-
/@discoveryjs/json-ext@0.5.7:
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'}
@@ -1387,15 +1356,6 @@ packages:
jsdoc-type-pratt-parser: 4.0.0
dev: true
- /@esbuild/android-arm64@0.17.19:
- resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/android-arm64@0.18.20:
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
@@ -1412,15 +1372,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/android-arm@0.17.19:
- resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/android-arm@0.18.20:
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
@@ -1437,15 +1388,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/android-x64@0.17.19:
- resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/android-x64@0.18.20:
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
@@ -1462,15 +1404,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/darwin-arm64@0.17.19:
- resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/darwin-arm64@0.18.20:
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
@@ -1487,15 +1420,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/darwin-x64@0.17.19:
- resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/darwin-x64@0.18.20:
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
@@ -1512,15 +1436,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/freebsd-arm64@0.17.19:
- resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/freebsd-arm64@0.18.20:
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
@@ -1537,15 +1452,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/freebsd-x64@0.17.19:
- resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/freebsd-x64@0.18.20:
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
@@ -1562,15 +1468,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-arm64@0.17.19:
- resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-arm64@0.18.20:
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
@@ -1587,15 +1484,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-arm@0.17.19:
- resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-arm@0.18.20:
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
@@ -1612,15 +1500,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-ia32@0.17.19:
- resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-ia32@0.18.20:
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
@@ -1637,15 +1516,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-loong64@0.17.19:
- resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-loong64@0.18.20:
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
@@ -1662,15 +1532,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-mips64el@0.17.19:
- resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-mips64el@0.18.20:
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
@@ -1687,15 +1548,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-ppc64@0.17.19:
- resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-ppc64@0.18.20:
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
@@ -1712,15 +1564,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-riscv64@0.17.19:
- resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-riscv64@0.18.20:
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
@@ -1737,15 +1580,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-s390x@0.17.19:
- resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-s390x@0.18.20:
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
@@ -1762,15 +1596,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/linux-x64@0.17.19:
- resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/linux-x64@0.18.20:
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
@@ -1787,15 +1612,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/netbsd-x64@0.17.19:
- resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/netbsd-x64@0.18.20:
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
@@ -1812,15 +1628,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/openbsd-x64@0.17.19:
- resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/openbsd-x64@0.18.20:
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
@@ -1837,15 +1644,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/sunos-x64@0.17.19:
- resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/sunos-x64@0.18.20:
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
@@ -1862,15 +1660,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-arm64@0.17.19:
- resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/win32-arm64@0.18.20:
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
@@ -1887,15 +1676,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-ia32@0.17.19:
- resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/win32-ia32@0.18.20:
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
@@ -1912,15 +1692,6 @@ packages:
requiresBuild: true
optional: true
- /@esbuild/win32-x64@0.17.19:
- resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
/@esbuild/win32-x64@0.18.20:
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
@@ -1987,19 +1758,6 @@ packages:
/@humanwhocodes/object-schema@1.2.1:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
- /@iconify/types@2.0.0:
- resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
- dev: true
-
- /@iconify/vue@4.1.1(vue@3.3.4):
- resolution: {integrity: sha512-RL85Bm/DAe8y6rT6pux7D2FJSiUEM/TPfyK7GrbAOfTSwrhvwJW+S5yijdGcmtXouA8MtuH9C7l4hiSE4mLMjg==}
- peerDependencies:
- vue: 3.3.4
- dependencies:
- '@iconify/types': 2.0.0
- vue: 3.3.4
- dev: true
-
/@ioredis/commands@1.2.0:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
@@ -2289,136 +2047,6 @@ packages:
- supports-color
dev: false
- /@nuxt-themes/docus@1.15.0(nuxt@packages+nuxt)(postcss@8.4.31)(vue@3.3.4):
- resolution: {integrity: sha512-V2kJ5ecGUxXcEovXeQkJBPYfQwjmjaxB5fnl2XaQV+S2Epcn+vhPWShSlL6/WXzLPiAkQFdwbBj9xedTvXgjkw==}
- dependencies:
- '@nuxt-themes/elements': 0.9.5(postcss@8.4.31)(vue@3.3.4)
- '@nuxt-themes/tokens': 1.9.1(postcss@8.4.31)(vue@3.3.4)
- '@nuxt-themes/typography': 0.11.0(postcss@8.4.31)(vue@3.3.4)
- '@nuxt/content': 2.8.5(vue@3.3.4)
- '@nuxthq/studio': 1.0.0
- '@vueuse/integrations': 10.4.1(focus-trap@7.5.3)(fuse.js@6.6.2)(vue@3.3.4)
- '@vueuse/nuxt': 10.4.1(nuxt@packages+nuxt)(vue@3.3.4)
- focus-trap: 7.5.3
- fuse.js: 6.6.2
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@capacitor/preferences'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/kv'
- - '@vue/composition-api'
- - async-validator
- - axios
- - bufferutil
- - change-case
- - drauu
- - idb-keyval
- - jwt-decode
- - nprogress
- - nuxt
- - postcss
- - qrcode
- - sass
- - sortablejs
- - supports-color
- - universal-cookie
- - utf-8-validate
- - vue
- dev: true
-
- /@nuxt-themes/elements@0.9.5(postcss@8.4.31)(vue@3.3.4):
- resolution: {integrity: sha512-uAA5AiIaT1SxCBjNIURJyCDPNR27+8J+t3AWuzWyhbNPr3L1inEcETZ3RVNzFdQE6mx7MGAMwFBqxPkOUhZQuA==}
- dependencies:
- '@nuxt-themes/tokens': 1.9.1(postcss@8.4.31)(vue@3.3.4)
- '@vueuse/core': 9.13.0(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - postcss
- - sass
- - supports-color
- - vue
- dev: true
-
- /@nuxt-themes/tokens@1.9.1(postcss@8.4.31)(vue@3.3.4):
- resolution: {integrity: sha512-5C28kfRvKnTX8Tux+xwyaf+2pxKgQ53dC9l6C33sZwRRyfUJulGDZCFjKbuNq4iqVwdGvkFSQBYBYjFAv6t75g==}
- dependencies:
- '@nuxtjs/color-mode': 3.3.0
- '@vueuse/core': 9.13.0(vue@3.3.4)
- pinceau: 0.18.9(postcss@8.4.31)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - postcss
- - sass
- - supports-color
- - vue
- dev: true
-
- /@nuxt-themes/typography@0.11.0(postcss@8.4.31)(vue@3.3.4):
- resolution: {integrity: sha512-TqyvD7sDWnqGmL00VtuI7JdmNTPL5/g957HCAWNzcNp+S20uJjW/FXSdkM76d4JSVDHvBqw7Wer3RsqVhqvA4w==}
- dependencies:
- '@nuxtjs/color-mode': 3.3.0
- nuxt-config-schema: 0.4.6
- nuxt-icon: 0.3.3(vue@3.3.4)
- pinceau: 0.18.9(postcss@8.4.31)
- ufo: 1.3.1
- transitivePeerDependencies:
- - postcss
- - sass
- - supports-color
- - vue
- dev: true
-
- /@nuxt/content@2.8.5(vue@3.3.4):
- resolution: {integrity: sha512-sWVGoZJOjwEd8v6XYTrHYtQ7c11HR6yK9dcqruf+7WM2WJmwTSeY8B1ir6+9mE1FPQAFnqg26qSkxwafpS9o+g==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- '@nuxtjs/mdc': 0.2.1
- '@vueuse/head': 2.0.0(vue@3.3.4)
- consola: 3.2.3
- defu: 6.1.2
- destr: 2.0.1
- json5: 2.2.3
- knitwork: 1.0.0
- listhen: 1.5.5
- mdast-util-to-string: 4.0.0
- mdurl: 1.0.1
- micromark: 4.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-types: 2.0.0
- ohash: 1.1.3
- pathe: 1.1.1
- scule: 1.0.0
- shiki-es: 0.14.0
- slugify: 1.6.6
- socket.io-client: 4.7.2
- ufo: 1.3.1
- unist-util-stringify-position: 4.0.0
- unstorage: 1.9.0
- ws: 8.14.2
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@capacitor/preferences'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/kv'
- - bufferutil
- - idb-keyval
- - supports-color
- - utf-8-validate
- - vue
- dev: true
-
/@nuxt/devalue@2.0.2:
resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
dev: false
@@ -2559,29 +2187,6 @@ packages:
resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==}
dev: false
- /@nuxthq/studio@1.0.0:
- resolution: {integrity: sha512-W4dUsj4ypJc2jG6cE8ECmnAx99SKX0qqzoAYqj1KJ9QmknLON/DIHdyhUtIoPMHlzcBgErTeUzy4prxsO5cHBg==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- defu: 6.1.2
- nuxt-component-meta: 0.5.3
- nuxt-config-schema: 0.4.6
- socket.io-client: 4.7.2
- ufo: 1.3.1
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
- dev: true
-
- /@nuxtjs/color-mode@3.3.0:
- resolution: {integrity: sha512-YVFNmTISke1eL7uk5p9I1suOsM222FxrqKoF13HS4x94OKCWwPLLeTCEzHZ8orzKnaFUbCXpuL4pRv8gvW+0Kw==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- lodash.template: 4.5.0
- pathe: 1.1.1
- dev: true
-
/@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.51.0)(typescript@5.2.2):
resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==}
peerDependencies:
@@ -2622,43 +2227,6 @@ packages:
- supports-color
dev: true
- /@nuxtjs/mdc@0.2.1:
- resolution: {integrity: sha512-14TPZ4p2UcG3IWqdPArx03hsUmWYQBlEYXkfm2Eq5sXu7hAg8UI9wEqZNNadMdnEi/WZvcMNf0xsbBhcRnxqew==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- '@types/hast': 3.0.1
- '@types/mdast': 4.0.1
- '@vue/compiler-core': 3.3.4
- consola: 3.2.3
- defu: 6.1.2
- destr: 2.0.1
- detab: 3.0.2
- github-slugger: 2.0.0
- hast-util-to-string: 3.0.0
- mdast-util-to-hast: 13.0.2
- micromark-util-sanitize-uri: 2.0.0
- ohash: 1.1.3
- property-information: 6.3.0
- rehype-external-links: 3.0.0
- rehype-raw: 6.1.1
- rehype-slug: 6.0.0
- rehype-sort-attribute-values: 5.0.0
- rehype-sort-attributes: 5.0.0
- remark-emoji: 4.0.0
- remark-gfm: 3.0.1
- remark-mdc: 2.0.0
- remark-parse: 10.0.2
- remark-rehype: 10.1.0
- scule: 1.0.0
- shikiji: 0.6.8
- ufo: 1.3.1
- unified: 11.0.3
- unist-builder: 4.0.0
- unist-util-visit: 5.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@one-ini/wasm@0.1.1:
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
dev: true
@@ -2812,24 +2380,6 @@ packages:
rollup: 3.29.1
slash: 4.0.0
- /@rollup/plugin-commonjs@24.1.0(rollup@3.29.1):
- resolution: {integrity: sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^2.68.0||^3.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
- dependencies:
- '@rollup/pluginutils': 5.0.4(rollup@3.29.1)
- commondir: 1.0.1
- estree-walker: 2.0.2
- glob: 8.1.0
- is-reference: 1.2.1
- magic-string: 0.30.5
- rollup: 3.29.1
- dev: true
-
/@rollup/plugin-commonjs@25.0.4(rollup@3.29.1):
resolution: {integrity: sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==}
engines: {node: '>=14.0.0'}
@@ -2985,11 +2535,6 @@ packages:
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- /@sindresorhus/is@3.1.2:
- resolution: {integrity: sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==}
- engines: {node: '>=10'}
- dev: true
-
/@sinonjs/commons@3.0.0:
resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==}
dependencies:
@@ -3002,10 +2547,6 @@ packages:
'@sinonjs/commons': 3.0.0
dev: true
- /@socket.io/component-emitter@3.1.0:
- resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
- dev: true
-
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
@@ -3049,12 +2590,6 @@ packages:
'@types/node': 18.18.5
dev: true
- /@types/debug@4.1.8:
- resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==}
- dependencies:
- '@types/ms': 0.7.31
- dev: true
-
/@types/eslint-scope@3.7.4:
resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
dependencies:
@@ -3096,18 +2631,6 @@ packages:
resolution: {integrity: sha512-5JLywbPgWZVgxhAV//qTU6LPurKfQeiyw20GKZMi9V7AjHnAP4t1eNCJ1mC2L4TAicuS71MVoFYVcEM+EiR4lg==}
dev: true
- /@types/hast@2.3.5:
- resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==}
- dependencies:
- '@types/unist': 2.0.7
- dev: true
-
- /@types/hast@3.0.1:
- resolution: {integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
/@types/http-proxy@1.17.11:
resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==}
dependencies:
@@ -3149,22 +2672,6 @@ packages:
resolution: {integrity: sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==}
dev: true
- /@types/mdast@3.0.12:
- resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==}
- dependencies:
- '@types/unist': 2.0.7
- dev: true
-
- /@types/mdast@4.0.1:
- resolution: {integrity: sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
- /@types/ms@0.7.31:
- resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
- dev: true
-
/@types/node-sass@4.11.3:
resolution: {integrity: sha512-wXPCn3t9uu5rR4zXNSLasZHQMuRzUKBsdi4MsgT8uq4Lp1gQQo+T2G23tGj4SSgDHeNBle6vGseZtM2XV/X9bw==}
dependencies:
@@ -3182,10 +2689,6 @@ packages:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
dev: false
- /@types/parse5@6.0.3:
- resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
- dev: true
-
/@types/pify@5.0.2:
resolution: {integrity: sha512-+d6bogL6/YV6e/T+JYgVIkLA8rA7mjqiHRCFB/x2RcQBM2GWE1vtYBdWzkPY6NiEEB09pxwyBUi7mH7HJ0G+zQ==}
dev: true
@@ -3228,22 +2731,6 @@ packages:
source-map: 0.6.1
dev: true
- /@types/unist@2.0.7:
- resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==}
- dev: true
-
- /@types/unist@3.0.0:
- resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==}
- dev: true
-
- /@types/web-bluetooth@0.0.16:
- resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
- dev: true
-
- /@types/web-bluetooth@0.0.17:
- resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==}
- dev: true
-
/@types/webpack-bundle-analyzer@4.6.1:
resolution: {integrity: sha512-MQ9GBzu8N7bsjmE9xtWe9JUrRUsPljKxS8fd5EdSIU/x+/U0Ga8f0OsVJZTX1yWF87xZSt0Ai1Iaiwi+Gq+ugA==}
dependencies:
@@ -3434,21 +2921,19 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
- /@ungap/structured-clone@1.2.0:
- resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- dev: true
-
/@unhead/dom@1.7.4:
resolution: {integrity: sha512-xanQMtGmgikqTvDtuyJy6GXgqvUXOdrdnIyqAabpeS8goD8udxo0stzjtbT8ERbMQibzPGSGcN+Ux+MKoWzrjQ==}
dependencies:
'@unhead/schema': 1.7.4
'@unhead/shared': 1.7.4
+ dev: false
/@unhead/schema@1.7.4:
resolution: {integrity: sha512-wUL4CK0NSEm3KH4kYsiqVYQw5xBk1hpBi5tiNj0BTZgpQVrRufICdK5EHA9Fh7OIAR6tOTWwTvsf5+nK0BgQDA==}
dependencies:
hookable: 5.5.3
zhead: 2.1.3
+ dev: false
/@unhead/schema@1.7.5:
resolution: {integrity: sha512-qmXRX8HoRS6OlIJGM1HMsP67+QFNKD7segptggHR7vrV+MaumVoIrzL1Tq5TPkk9hxeP38o1wnX+KCZiDKifXg==}
@@ -3461,12 +2946,14 @@ packages:
resolution: {integrity: sha512-YUNA2UxAuDPnDps41BQ8aEIY5hdyvruSB1Vs3AALhRo07MxMivSq5DjNKfYr/JvRN6593RtfI1NHnP9x5M57xA==}
dependencies:
'@unhead/schema': 1.7.4
+ dev: false
/@unhead/ssr@1.7.4:
resolution: {integrity: sha512-2QqaHdC48XJGP9Pd0F2fblPv9/6G4IU04iZ5qLRAs6MFFmFEzrdvoooFlcwdcoH/WDGRnpYBmo+Us2nzQz1MMQ==}
dependencies:
'@unhead/schema': 1.7.4
'@unhead/shared': 1.7.4
+ dev: false
/@unhead/vue@1.7.4(vue@3.3.4):
resolution: {integrity: sha512-ZfgzOhg1Bxo9xwp3upawqerw4134hc9Lhz6t005ixcBwPX+39Wpgc9dC3lf+owFQEVuWkf8F+eAwK2sghVBK4A==}
@@ -3478,10 +2965,7 @@ packages:
hookable: 5.5.3
unhead: 1.7.4
vue: 3.3.4
-
- /@unocss/reset@0.50.8:
- resolution: {integrity: sha512-2WoM6O9VyuHDPAnvCXr7LBJQ8ZRHDnuQAFsL1dWXp561Iq2l9whdNtPuMcozLGJGUUrFfVBXIrHY4sfxxScgWg==}
- dev: true
+ dev: false
/@vercel/nft@0.23.1:
resolution: {integrity: sha512-NE0xSmGWVhgHF1OIoir71XAd0W0C1UE3nzFyhpFiMr3rVhetww7NvM1kc41trBsPG37Bh+dE5FYCTMzM/gBu0w==}
@@ -3586,42 +3070,16 @@ packages:
dependencies:
'@volar/source-map': 1.10.4
- /@volar/language-core@1.4.1:
- resolution: {integrity: sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==}
- dependencies:
- '@volar/source-map': 1.4.1
- dev: true
-
/@volar/source-map@1.10.4:
resolution: {integrity: sha512-RxZdUEL+pV8p+SMqnhVjzy5zpb1QRZTlcwSk4bdcBO7yOu4rtEWqDGahVCEj4CcXour+0yJUMrMczfSCpP9Uxg==}
dependencies:
muggle-string: 0.3.1
- /@volar/source-map@1.4.1:
- resolution: {integrity: sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==}
- dependencies:
- muggle-string: 0.2.2
- dev: true
-
/@volar/typescript@1.10.4:
resolution: {integrity: sha512-BCCUEBASBEMCrz7qmNSi2hBEWYsXD0doaktRKpmmhvb6XntM2sAWYu6gbyK/MluLDgluGLFiFRpWgobgzUqolg==}
dependencies:
'@volar/language-core': 1.10.4
- /@volar/vue-language-core@1.6.5:
- resolution: {integrity: sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg==}
- dependencies:
- '@volar/language-core': 1.4.1
- '@volar/source-map': 1.4.1
- '@vue/compiler-dom': 3.3.4
- '@vue/compiler-sfc': 3.3.4
- '@vue/reactivity': 3.3.4
- '@vue/shared': 3.3.4
- minimatch: 9.0.3
- muggle-string: 0.2.2
- vue-template-compiler: 2.7.14
- dev: true
-
/@vue-macros/common@1.8.0(rollup@3.29.1)(vue@3.3.4):
resolution: {integrity: sha512-auDJJzE0z3uRe3867e0DsqcseKImktNf5ojCZgUKqiVxb2yTlwlgOVAYCgoep9oITqxkXQymSvFeKhedi8PhaA==}
engines: {node: '>=16.14.0'}
@@ -3718,25 +3176,6 @@ packages:
typescript: 5.2.2
vue-template-compiler: 2.7.14
- /@vue/language-core@1.8.8(typescript@5.2.2):
- resolution: {integrity: sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@volar/language-core': 1.10.4
- '@volar/source-map': 1.10.4
- '@vue/compiler-dom': 3.3.4
- '@vue/reactivity': 3.3.4
- '@vue/shared': 3.3.4
- minimatch: 9.0.3
- muggle-string: 0.3.1
- typescript: 5.2.2
- vue-template-compiler: 2.7.14
- dev: true
-
/@vue/reactivity-transform@3.3.4:
resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
dependencies:
@@ -3798,135 +3237,6 @@ packages:
transitivePeerDependencies:
- typescript
- /@vueuse/core@10.4.1(vue@3.3.4):
- resolution: {integrity: sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==}
- dependencies:
- '@types/web-bluetooth': 0.0.17
- '@vueuse/metadata': 10.4.1
- '@vueuse/shared': 10.4.1(vue@3.3.4)
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/core@9.13.0(vue@3.3.4):
- resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
- dependencies:
- '@types/web-bluetooth': 0.0.16
- '@vueuse/metadata': 9.13.0
- '@vueuse/shared': 9.13.0(vue@3.3.4)
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/head@2.0.0(vue@3.3.4):
- resolution: {integrity: sha512-ykdOxTGs95xjD4WXE4na/umxZea2Itl0GWBILas+O4oqS7eXIods38INvk3XkJKjqMdWPcpCyLX/DioLQxU1KA==}
- peerDependencies:
- vue: 3.3.4
- dependencies:
- '@unhead/dom': 1.7.4
- '@unhead/schema': 1.7.5
- '@unhead/ssr': 1.7.4
- '@unhead/vue': 1.7.4(vue@3.3.4)
- vue: 3.3.4
- dev: true
-
- /@vueuse/integrations@10.4.1(focus-trap@7.5.3)(fuse.js@6.6.2)(vue@3.3.4):
- resolution: {integrity: sha512-uRBPyG5Lxoh1A/J+boiioPT3ELEAPEo4t8W6Mr4yTKIQBeW/FcbsotZNPr4k9uz+3QEksMmflWloS9wCnypM7g==}
- peerDependencies:
- async-validator: '*'
- axios: '*'
- change-case: '*'
- drauu: '*'
- focus-trap: '*'
- fuse.js: '*'
- idb-keyval: '*'
- jwt-decode: '*'
- nprogress: '*'
- qrcode: '*'
- sortablejs: '*'
- universal-cookie: '*'
- peerDependenciesMeta:
- async-validator:
- optional: true
- axios:
- optional: true
- change-case:
- optional: true
- drauu:
- optional: true
- focus-trap:
- optional: true
- fuse.js:
- optional: true
- idb-keyval:
- optional: true
- jwt-decode:
- optional: true
- nprogress:
- optional: true
- qrcode:
- optional: true
- sortablejs:
- optional: true
- universal-cookie:
- optional: true
- dependencies:
- '@vueuse/core': 10.4.1(vue@3.3.4)
- '@vueuse/shared': 10.4.1(vue@3.3.4)
- focus-trap: 7.5.3
- fuse.js: 6.6.2
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/metadata@10.4.1:
- resolution: {integrity: sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==}
- dev: true
-
- /@vueuse/metadata@9.13.0:
- resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
- dev: true
-
- /@vueuse/nuxt@10.4.1(nuxt@packages+nuxt)(vue@3.3.4):
- resolution: {integrity: sha512-tJ25KCkozZaQEy0qli4Ta8WXlbMIjSD7gPnVfLScZ2DpSSgImMB5R66PQEkrbSg4GfFj0OuoYc4+vCHQ/FqTsw==}
- peerDependencies:
- nuxt: workspace:*
- dependencies:
- '@nuxt/kit': link:packages/kit
- '@vueuse/core': 10.4.1(vue@3.3.4)
- '@vueuse/metadata': 10.4.1
- local-pkg: 0.4.3
- nuxt: link:packages/nuxt
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/shared@10.4.1(vue@3.3.4):
- resolution: {integrity: sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==}
- dependencies:
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
- /@vueuse/shared@9.13.0(vue@3.3.4):
- resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
- dependencies:
- vue-demi: 0.14.5(vue@3.3.4)
- transitivePeerDependencies:
- - '@vue/composition-api'
- - vue
- dev: true
-
/@webassemblyjs/ast@1.11.6:
resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==}
dependencies:
@@ -4318,15 +3628,6 @@ packages:
resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==}
dev: false
- /assert@2.0.0:
- resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
- dependencies:
- es6-object-assign: 1.1.0
- is-nan: 1.3.2
- object-is: 1.1.5
- util: 0.12.5
- dev: true
-
/assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
dev: true
@@ -4353,13 +3654,6 @@ packages:
- rollup
dev: false
- /ast-types@0.15.2:
- resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==}
- engines: {node: '>=4'}
- dependencies:
- tslib: 2.6.1
- dev: true
-
/ast-walker-scope@0.5.0(rollup@3.29.1):
resolution: {integrity: sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==}
engines: {node: '>=16.14.0'}
@@ -4440,10 +3734,6 @@ packages:
'@babel/types': 7.23.0
dev: false
- /bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- dev: true
-
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -4603,13 +3893,6 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- /camel-case@4.1.2:
- resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
- dependencies:
- pascal-case: 3.1.2
- tslib: 2.6.1
- dev: true
-
/camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
@@ -4631,23 +3914,11 @@ packages:
/caniuse-lite@1.0.30001538:
resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==}
- /capital-case@1.0.4:
- resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
- dependencies:
- no-case: 3.0.4
- tslib: 2.6.1
- upper-case-first: 2.0.2
- dev: true
-
/case-police@0.6.1:
resolution: {integrity: sha512-tOgkG3HhtzNVHU+HVHqbpVJ3CICPDihtlgoM2C4dx0RLeo6qcNVeBgiYJN5Bln+stxKrnKrw89CFgqYQDqwZQg==}
hasBin: true
dev: true
- /ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- dev: true
-
/chai@4.3.7:
resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==}
engines: {node: '>=4'}
@@ -4680,23 +3951,6 @@ packages:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- /change-case@4.1.2:
- resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
- dependencies:
- camel-case: 4.1.2
- capital-case: 1.0.4
- constant-case: 3.0.4
- dot-case: 3.0.4
- header-case: 2.0.4
- no-case: 3.0.4
- param-case: 3.0.4
- pascal-case: 3.1.2
- path-case: 3.0.4
- sentence-case: 3.0.4
- snake-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
/changelogen@0.5.5:
resolution: {integrity: sha512-IzgToIJ/R9NhVKmL+PW33ozYkv53bXvufDNUSH3GTKXq1iCHGgkbgbtqEWbo8tnWNnt7nPDpjL8PwSG2iS8RVw==}
hasBin: true
@@ -4720,33 +3974,12 @@ packages:
- supports-color
dev: true
- /char-regex@1.0.2:
- resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
- engines: {node: '>=10'}
- dev: true
-
- /character-entities-html4@2.1.0:
- resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- dev: true
-
- /character-entities-legacy@3.0.0:
- resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
- dev: true
-
- /character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- dev: true
-
/character-parser@2.2.0:
resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==}
dependencies:
is-regex: 1.1.4
dev: false
- /character-reference-invalid@2.0.1:
- resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
- dev: true
-
/check-error@1.0.2:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
dev: true
@@ -4769,10 +4002,6 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
- /chroma-js@2.4.2:
- resolution: {integrity: sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==}
- dev: true
-
/chrome-trace-event@1.0.3:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
@@ -4850,10 +4079,6 @@ packages:
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- /comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- dev: true
-
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
@@ -4906,6 +4131,7 @@ packages:
/consola@2.15.3:
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
+ dev: false
/consola@3.2.3:
resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
@@ -4914,14 +4140,6 @@ packages:
/console-control-strings@1.1.0:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
- /constant-case@3.0.4:
- resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
- dependencies:
- no-case: 3.0.4
- tslib: 2.6.1
- upper-case: 2.0.2
- dev: true
-
/constantinople@4.0.1:
resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
dependencies:
@@ -5193,12 +4411,6 @@ packages:
dependencies:
ms: 2.1.2
- /decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
- dependencies:
- character-entities: 2.0.2
- dev: true
-
/deep-eql@4.1.3:
resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
engines: {node: '>=6'}
@@ -5264,11 +4476,6 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
- /dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
- dev: true
-
/destr@2.0.1:
resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==}
@@ -5276,10 +4483,6 @@ packages:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- /detab@3.0.2:
- resolution: {integrity: sha512-7Bp16Bk8sk0Y6gdXiCtnpGbghn8atnTJdd/82aWvS5ESnlcNvgUc10U2NYS0PAiDSGjWiI8qs/Cv1b2uSGdQ8w==}
- dev: true
-
/detect-libc@1.0.3:
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
engines: {node: '>=0.10'}
@@ -5292,12 +4495,6 @@ packages:
/devalue@4.3.2:
resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
- /devlop@1.1.0:
- resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dependencies:
- dequal: 2.0.3
- dev: true
-
/diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -5306,6 +4503,7 @@ packages:
/diff@5.1.0:
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
engines: {node: '>=0.3.1'}
+ dev: false
/dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
@@ -5357,13 +4555,6 @@ packages:
domhandler: 5.0.3
dev: false
- /dot-case@3.0.4:
- resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
- dependencies:
- no-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
/dot-prop@8.0.2:
resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==}
engines: {node: '>=16'}
@@ -5403,18 +4594,10 @@ packages:
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- /emojilib@2.4.0:
- resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==}
- dev: true
-
/emojis-list@3.0.0:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'}
- /emoticon@4.0.1:
- resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==}
- dev: true
-
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
@@ -5427,25 +4610,6 @@ packages:
dev: false
optional: true
- /engine.io-client@6.5.2:
- resolution: {integrity: sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==}
- dependencies:
- '@socket.io/component-emitter': 3.1.0
- debug: 4.3.4
- engine.io-parser: 5.2.1
- ws: 8.11.0
- xmlhttprequest-ssl: 2.0.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
- dev: true
-
- /engine.io-parser@5.2.1:
- resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==}
- engines: {node: '>=10.0.0'}
- dev: true
-
/enhanced-resolve@4.5.0:
resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==}
engines: {node: '>=6.9.0'}
@@ -5574,10 +4738,6 @@ packages:
is-symbol: 1.0.4
dev: true
- /es6-object-assign@1.1.0:
- resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==}
- dev: true
-
/esbuild-loader@4.0.2(webpack@5.89.0):
resolution: {integrity: sha512-kj88m0yrtTEJDeUEF+3TZsq7t9VPzQQj7UmXAzUbIaipoYSrd0UxKAcg4l9CBgP8uVoploiw+nKr8DIv6Y9gXw==}
peerDependencies:
@@ -5589,36 +4749,6 @@ packages:
webpack: 5.89.0
webpack-sources: 1.4.3
- /esbuild@0.17.19:
- resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.17.19
- '@esbuild/android-arm64': 0.17.19
- '@esbuild/android-x64': 0.17.19
- '@esbuild/darwin-arm64': 0.17.19
- '@esbuild/darwin-x64': 0.17.19
- '@esbuild/freebsd-arm64': 0.17.19
- '@esbuild/freebsd-x64': 0.17.19
- '@esbuild/linux-arm': 0.17.19
- '@esbuild/linux-arm64': 0.17.19
- '@esbuild/linux-ia32': 0.17.19
- '@esbuild/linux-loong64': 0.17.19
- '@esbuild/linux-mips64el': 0.17.19
- '@esbuild/linux-ppc64': 0.17.19
- '@esbuild/linux-riscv64': 0.17.19
- '@esbuild/linux-s390x': 0.17.19
- '@esbuild/linux-x64': 0.17.19
- '@esbuild/netbsd-x64': 0.17.19
- '@esbuild/openbsd-x64': 0.17.19
- '@esbuild/sunos-x64': 0.17.19
- '@esbuild/win32-arm64': 0.17.19
- '@esbuild/win32-ia32': 0.17.19
- '@esbuild/win32-x64': 0.17.19
- dev: true
-
/esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
@@ -6144,10 +5274,6 @@ packages:
resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
dev: false
- /extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: true
-
/externality@1.0.2:
resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==}
dependencies:
@@ -6253,12 +5379,6 @@ packages:
/flatted@3.2.9:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
- /focus-trap@7.5.3:
- resolution: {integrity: sha512-7UsT/eSJcTPF0aZp73u7hBRTABz26knRRTJfoTGFCQD5mUImLIIOwWWCrtoQdmWa7dykBi6H+Cp5i3S/kvsMeA==}
- dependencies:
- tabbable: 6.2.0
- dev: true
-
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
@@ -6363,11 +5483,6 @@ packages:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true
- /fuse.js@6.6.2:
- resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==}
- engines: {node: '>=10'}
- dev: true
-
/gauge@3.0.2:
resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
engines: {node: '>=10'}
@@ -6479,10 +5594,6 @@ packages:
dependencies:
git-up: 7.0.0
- /github-slugger@2.0.0:
- resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
- dev: true
-
/glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -6678,172 +5789,10 @@ packages:
/hash-sum@2.0.0:
resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
- /hast-util-from-parse5@7.1.2:
- resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/unist': 2.0.7
- hastscript: 7.2.0
- property-information: 6.3.0
- vfile: 5.3.7
- vfile-location: 4.1.0
- web-namespaces: 2.0.1
- dev: true
-
- /hast-util-from-parse5@8.0.1:
- resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
- dependencies:
- '@types/hast': 3.0.1
- '@types/unist': 3.0.0
- devlop: 1.1.0
- hastscript: 8.0.0
- property-information: 6.3.0
- vfile: 6.0.1
- vfile-location: 5.0.2
- web-namespaces: 2.0.1
- dev: true
-
- /hast-util-heading-rank@3.0.0:
- resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
- dependencies:
- '@types/hast': 3.0.1
- dev: true
-
- /hast-util-is-element@3.0.0:
- resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
- dependencies:
- '@types/hast': 3.0.1
- dev: true
-
- /hast-util-parse-selector@3.1.1:
- resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
- dependencies:
- '@types/hast': 2.3.5
- dev: true
-
- /hast-util-parse-selector@4.0.0:
- resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
- dependencies:
- '@types/hast': 3.0.1
- dev: true
-
- /hast-util-raw@7.2.3:
- resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/parse5': 6.0.3
- hast-util-from-parse5: 7.1.2
- hast-util-to-parse5: 7.1.0
- html-void-elements: 2.0.1
- parse5: 6.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- vfile: 5.3.7
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: true
-
- /hast-util-raw@9.0.1:
- resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
- dependencies:
- '@types/hast': 3.0.1
- '@types/unist': 3.0.0
- '@ungap/structured-clone': 1.2.0
- hast-util-from-parse5: 8.0.1
- hast-util-to-parse5: 8.0.0
- html-void-elements: 3.0.0
- mdast-util-to-hast: 13.0.2
- parse5: 7.1.2
- unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
- vfile: 6.0.1
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: true
-
- /hast-util-to-html@9.0.0:
- resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==}
- dependencies:
- '@types/hast': 3.0.1
- '@types/unist': 3.0.0
- ccount: 2.0.1
- comma-separated-tokens: 2.0.3
- hast-util-raw: 9.0.1
- hast-util-whitespace: 3.0.0
- html-void-elements: 3.0.0
- mdast-util-to-hast: 13.0.2
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- stringify-entities: 4.0.3
- zwitch: 2.0.4
- dev: true
-
- /hast-util-to-parse5@7.1.0:
- resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
- dependencies:
- '@types/hast': 2.3.5
- comma-separated-tokens: 2.0.3
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: true
-
- /hast-util-to-parse5@8.0.0:
- resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
- dependencies:
- '@types/hast': 3.0.1
- comma-separated-tokens: 2.0.3
- devlop: 1.1.0
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- web-namespaces: 2.0.1
- zwitch: 2.0.4
- dev: true
-
- /hast-util-to-string@3.0.0:
- resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
- dependencies:
- '@types/hast': 3.0.1
- dev: true
-
- /hast-util-whitespace@3.0.0:
- resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- dependencies:
- '@types/hast': 3.0.1
- dev: true
-
- /hastscript@7.2.0:
- resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
- dependencies:
- '@types/hast': 2.3.5
- comma-separated-tokens: 2.0.3
- hast-util-parse-selector: 3.1.1
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- dev: true
-
- /hastscript@8.0.0:
- resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
- dependencies:
- '@types/hast': 3.0.1
- comma-separated-tokens: 2.0.3
- hast-util-parse-selector: 4.0.0
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- dev: true
-
/he@1.2.0:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
- /header-case@2.0.4:
- resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
- dependencies:
- capital-case: 1.0.4
- tslib: 2.6.1
- dev: true
-
/hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
@@ -6866,14 +5815,6 @@ packages:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
engines: {node: '>=8'}
- /html-void-elements@2.0.1:
- resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
- dev: true
-
- /html-void-elements@3.0.0:
- resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- dev: true
-
/http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
dev: false
@@ -7062,30 +6003,6 @@ packages:
/iron-webcrypto@0.10.1:
resolution: {integrity: sha512-QGOS8MRMnj/UiOa+aMIgfyHcvkhqNUsUxb1XzskENvbo+rEfp6TOwqd1KPuDzXC4OnGHcMSVxDGRoilqB8ViqA==}
- /is-absolute-url@4.0.1:
- resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: true
-
- /is-alphabetical@2.0.1:
- resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
- dev: true
-
- /is-alphanumerical@2.0.1:
- resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- dependencies:
- is-alphabetical: 2.0.1
- is-decimal: 2.0.1
- dev: true
-
- /is-arguments@1.1.1:
- resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
-
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
@@ -7117,11 +6034,6 @@ packages:
has-tostringtag: 1.0.0
dev: true
- /is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
- dev: true
-
/is-builtin-module@3.2.1:
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
engines: {node: '>=6'}
@@ -7145,10 +6057,6 @@ packages:
has-tostringtag: 1.0.0
dev: true
- /is-decimal@2.0.1:
- resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
- dev: true
-
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
@@ -7174,23 +6082,12 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- /is-generator-function@1.0.10:
- resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-tostringtag: 1.0.0
- dev: true
-
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
- /is-hexadecimal@2.0.1:
- resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
- dev: true
-
/is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -7213,14 +6110,6 @@ packages:
/is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
- /is-nan@1.3.2:
- resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- dev: true
-
/is-negative-zero@2.0.2:
resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
engines: {node: '>= 0.4'}
@@ -7241,11 +6130,6 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
- /is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
- dev: true
-
/is-plain-object@5.0.0:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
@@ -7614,11 +6498,6 @@ packages:
engines: {node: '>=6'}
dev: false
- /kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: true
-
/klona@2.0.6:
resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
engines: {node: '>= 8'}
@@ -7736,10 +6615,6 @@ packages:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
dev: true
- /lodash._reinterpolate@3.0.0:
- resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==}
- dev: true
-
/lodash.clonedeep@4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
dev: false
@@ -7785,19 +6660,6 @@ packages:
resolution: {integrity: sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==}
dev: false
- /lodash.template@4.5.0:
- resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==}
- dependencies:
- lodash._reinterpolate: 3.0.0
- lodash.templatesettings: 4.2.0
- dev: true
-
- /lodash.templatesettings@4.2.0:
- resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==}
- dependencies:
- lodash._reinterpolate: 3.0.0
- dev: true
-
/lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
dev: false
@@ -7809,22 +6671,12 @@ packages:
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- /longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- dev: true
-
/loupe@2.3.6:
resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
dependencies:
get-func-name: 2.0.0
dev: true
- /lower-case@2.0.2:
- resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
- dependencies:
- tslib: 2.6.1
- dev: true
-
/lru-cache@10.0.1:
resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
engines: {node: 14 || >=16.14}
@@ -7931,10 +6783,6 @@ packages:
uc.micro: 1.0.6
dev: true
- /markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
- dev: true
-
/markdownlint-cli@0.33.0:
resolution: {integrity: sha512-zMK1oHpjYkhjO+94+ngARiBBrRDEUMzooDHBAHtmEIJ9oYddd9l3chCReY2mPlecwH7gflQp1ApilTo+o0zopQ==}
engines: {node: '>=14'}
@@ -7958,204 +6806,6 @@ packages:
markdown-it: 13.0.1
dev: true
- /mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
- dependencies:
- '@types/mdast': 3.0.12
- '@types/unist': 2.0.7
- unist-util-visit: 4.1.2
- dev: true
-
- /mdast-util-find-and-replace@2.2.2:
- resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
- dependencies:
- '@types/mdast': 3.0.12
- escape-string-regexp: 5.0.0
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
- dev: true
-
- /mdast-util-find-and-replace@3.0.1:
- resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
- dependencies:
- '@types/mdast': 4.0.1
- escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
- dev: true
-
- /mdast-util-from-markdown@1.3.1:
- resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
- dependencies:
- '@types/mdast': 3.0.12
- '@types/unist': 2.0.7
- decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.2.0
- micromark: 3.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-decode-string: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-from-markdown@2.0.0:
- resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
- dependencies:
- '@types/mdast': 4.0.1
- '@types/unist': 3.0.0
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- mdast-util-to-string: 4.0.0
- micromark: 4.0.0
- micromark-util-decode-numeric-character-reference: 2.0.0
- micromark-util-decode-string: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- unist-util-stringify-position: 4.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
- dependencies:
- '@types/mdast': 3.0.12
- ccount: 2.0.1
- mdast-util-find-and-replace: 2.2.2
- micromark-util-character: 1.2.0
- dev: true
-
- /mdast-util-gfm-footnote@1.0.2:
- resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
- dependencies:
- '@types/mdast': 3.0.12
- mdast-util-to-markdown: 1.5.0
- micromark-util-normalize-identifier: 1.1.0
- dev: true
-
- /mdast-util-gfm-strikethrough@1.0.3:
- resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
- dependencies:
- '@types/mdast': 3.0.12
- mdast-util-to-markdown: 1.5.0
- dev: true
-
- /mdast-util-gfm-table@1.0.7:
- resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
- dependencies:
- '@types/mdast': 3.0.12
- markdown-table: 3.0.3
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-gfm-task-list-item@1.0.2:
- resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
- dependencies:
- '@types/mdast': 3.0.12
- mdast-util-to-markdown: 1.5.0
- dev: true
-
- /mdast-util-gfm@2.0.2:
- resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
- dependencies:
- mdast-util-from-markdown: 1.3.1
- mdast-util-gfm-autolink-literal: 1.0.3
- mdast-util-gfm-footnote: 1.0.2
- mdast-util-gfm-strikethrough: 1.0.3
- mdast-util-gfm-table: 1.0.7
- mdast-util-gfm-task-list-item: 1.0.2
- mdast-util-to-markdown: 1.5.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
- dependencies:
- '@types/mdast': 3.0.12
- unist-util-is: 5.2.1
- dev: true
-
- /mdast-util-phrasing@4.0.0:
- resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==}
- dependencies:
- '@types/mdast': 4.0.1
- unist-util-is: 6.0.0
- dev: true
-
- /mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/mdast': 3.0.12
- mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.2.0
- trim-lines: 3.0.1
- unist-util-generated: 2.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
- dev: true
-
- /mdast-util-to-hast@13.0.2:
- resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
- dependencies:
- '@types/hast': 3.0.1
- '@types/mdast': 4.0.1
- '@ungap/structured-clone': 1.2.0
- devlop: 1.1.0
- micromark-util-sanitize-uri: 2.0.0
- trim-lines: 3.0.1
- unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
- dev: true
-
- /mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
- dependencies:
- '@types/mdast': 3.0.12
- '@types/unist': 2.0.7
- longest-streak: 3.1.0
- mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.2.0
- micromark-util-decode-string: 1.1.0
- unist-util-visit: 4.1.2
- zwitch: 2.0.4
- dev: true
-
- /mdast-util-to-markdown@2.1.0:
- resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
- dependencies:
- '@types/mdast': 4.0.1
- '@types/unist': 3.0.0
- longest-streak: 3.1.0
- mdast-util-phrasing: 4.0.0
- mdast-util-to-string: 4.0.0
- micromark-util-decode-string: 2.0.0
- unist-util-visit: 5.0.0
- zwitch: 2.0.4
- dev: true
-
- /mdast-util-to-string@3.2.0:
- resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
- dependencies:
- '@types/mdast': 3.0.12
- dev: true
-
- /mdast-util-to-string@4.0.0:
- resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
- dependencies:
- '@types/mdast': 4.0.1
- dev: true
-
/mdn-data@2.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
dev: false
@@ -8203,428 +6853,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- /micromark-core-commonmark@1.1.0:
- resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.1.0
- micromark-factory-label: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-factory-title: 1.1.0
- micromark-factory-whitespace: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-html-tag-name: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-core-commonmark@2.0.0:
- resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
- dependencies:
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- micromark-factory-destination: 2.0.0
- micromark-factory-label: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-factory-title: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-html-tag-name: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-extension-gfm-autolink-literal@1.0.5:
- resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-extension-gfm-footnote@1.1.2:
- resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
- dependencies:
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-gfm-strikethrough@1.0.7:
- resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-gfm-table@1.0.7:
- resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-gfm-tagfilter@1.0.2:
- resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
- dependencies:
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-extension-gfm-task-list-item@1.0.5:
- resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-extension-gfm@2.0.3:
- resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
- dependencies:
- micromark-extension-gfm-autolink-literal: 1.0.5
- micromark-extension-gfm-footnote: 1.1.2
- micromark-extension-gfm-strikethrough: 1.0.7
- micromark-extension-gfm-table: 1.0.7
- micromark-extension-gfm-tagfilter: 1.0.2
- micromark-extension-gfm-task-list-item: 1.0.5
- micromark-util-combine-extensions: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-destination@1.1.0:
- resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-destination@2.0.0:
- resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-factory-label@1.1.0:
- resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-factory-label@2.0.0:
- resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
- dependencies:
- devlop: 1.1.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-space@2.0.0:
- resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-factory-title@1.1.0:
- resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-title@2.0.0:
- resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
- dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-factory-whitespace@1.1.0:
- resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
- dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-factory-whitespace@2.0.0:
- resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
- dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
- dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-character@2.0.1:
- resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
- dependencies:
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-chunked@1.1.0:
- resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-chunked@2.0.0:
- resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: true
-
- /micromark-util-classify-character@1.1.0:
- resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-classify-character@2.0.0:
- resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-combine-extensions@1.1.0:
- resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-combine-extensions@2.0.0:
- resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
- dependencies:
- micromark-util-chunked: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-decode-numeric-character-reference@1.1.0:
- resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-decode-numeric-character-reference@2.0.0:
- resolution: {integrity: sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: true
-
- /micromark-util-decode-string@1.1.0:
- resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 1.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-decode-string@2.0.0:
- resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 2.0.1
- micromark-util-decode-numeric-character-reference: 2.0.0
- micromark-util-symbol: 2.0.0
- dev: true
-
- /micromark-util-encode@1.1.0:
- resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
- dev: true
-
- /micromark-util-encode@2.0.0:
- resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
- dev: true
-
- /micromark-util-html-tag-name@1.2.0:
- resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
- dev: true
-
- /micromark-util-html-tag-name@2.0.0:
- resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
- dev: true
-
- /micromark-util-normalize-identifier@1.1.0:
- resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
- dependencies:
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-normalize-identifier@2.0.0:
- resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: true
-
- /micromark-util-resolve-all@1.1.0:
- resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
- dependencies:
- micromark-util-types: 1.1.0
- dev: true
-
- /micromark-util-resolve-all@2.0.0:
- resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
- dependencies:
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-sanitize-uri@1.2.0:
- resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
- dependencies:
- micromark-util-character: 1.2.0
- micromark-util-encode: 1.1.0
- micromark-util-symbol: 1.1.0
- dev: true
-
- /micromark-util-sanitize-uri@2.0.0:
- resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-encode: 2.0.0
- micromark-util-symbol: 2.0.0
- dev: true
-
- /micromark-util-subtokenize@1.1.0:
- resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
- dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- dev: true
-
- /micromark-util-subtokenize@2.0.0:
- resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
- dependencies:
- devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: true
-
- /micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
- dev: true
-
- /micromark-util-symbol@2.0.0:
- resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
- dev: true
-
- /micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
- dev: true
-
- /micromark-util-types@2.0.0:
- resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
- dev: true
-
- /micromark@3.2.0:
- resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
- dependencies:
- '@types/debug': 4.1.8
- debug: 4.3.4
- decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-combine-extensions: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-encode: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /micromark@4.0.0:
- resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
- dependencies:
- '@types/debug': 4.1.8
- debug: 4.3.4
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-chunked: 2.0.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-decode-numeric-character-reference: 2.0.0
- micromark-util-encode: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -8835,10 +7063,6 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- /muggle-string@0.2.2:
- resolution: {integrity: sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==}
- dev: true
-
/muggle-string@0.3.1:
resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
@@ -8954,13 +7178,6 @@ packages:
- idb-keyval
- supports-color
- /no-case@3.0.4:
- resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
- dependencies:
- lower-case: 2.0.2
- tslib: 2.6.1
- dev: true
-
/node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
dev: false
@@ -8968,15 +7185,6 @@ packages:
/node-addon-api@7.0.0:
resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==}
- /node-emoji@2.1.0:
- resolution: {integrity: sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==}
- dependencies:
- '@sindresorhus/is': 3.1.2
- char-regex: 1.0.2
- emojilib: 2.4.0
- skin-tone: 2.0.0
- dev: true
-
/node-fetch-native@1.4.0:
resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==}
@@ -9171,38 +7379,6 @@ packages:
optionalDependencies:
fsevents: 2.3.3
- /nuxt-component-meta@0.5.3:
- resolution: {integrity: sha512-+MHUrESdr+Si9PdbkxQrzQv+X6RdRd/ffmFWVVsZAHA7X9vGoNAYxwvoB1Pbs15TaPtFBWA1P5a4VGqtp+bhAg==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- scule: 1.0.0
- typescript: 5.2.2
- vue-component-meta: 1.8.8(typescript@5.2.2)
- dev: true
-
- /nuxt-config-schema@0.4.6:
- resolution: {integrity: sha512-kHLWJFynj5QrxVZ1MjY2xmDaTSN1BCMLGExA+hMMLoCb3wn9TJlDVqnE/nSdUJPMRkNn/NQ5WP9NLA9vlAXRUw==}
- dependencies:
- '@nuxt/kit': link:packages/kit
- defu: 6.1.2
- jiti: 1.20.0
- pathe: 1.1.1
- untyped: 1.4.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /nuxt-icon@0.3.3(vue@3.3.4):
- resolution: {integrity: sha512-KdhJAigBGTP8/YIFZ3orwetk40AgLq6VQ5HRYuDLmv5hiDptor9Ro+WIdZggHw7nciRxZvDdQkEwi9B5G/jrkQ==}
- dependencies:
- '@iconify/vue': 4.1.1(vue@3.3.4)
- '@nuxt/kit': link:packages/kit
- nuxt-config-schema: 0.4.6
- transitivePeerDependencies:
- - supports-color
- - vue
- dev: true
-
/nuxt-vitest@0.11.0(@vitejs/plugin-vue-jsx@3.0.2)(@vitejs/plugin-vue@4.4.0)(happy-dom@12.9.1)(vite@4.4.11)(vitest@0.33.0)(vue-router@4.2.5)(vue@3.3.4):
resolution: {integrity: sha512-3gXY/c6bfIQnrwUp1tVLdc5jNEk9m2czmebCSWn9fmMz7wVO3BX1k1qJaWvwU0Q4q7WEzHNn6toUXwI8BuhV1Q==}
peerDependencies:
@@ -9250,14 +7426,6 @@ packages:
resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
dev: true
- /object-is@1.1.5:
- resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.2.0
- dev: true
-
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
@@ -9450,41 +7618,12 @@ packages:
- supports-color
dev: false
- /paneer@0.1.0:
- resolution: {integrity: sha512-SZfJe/y9fbpeXZU+Kf7cSG2G7rnGP50hUYzCvcWyhp7hYzA3YXGthpkGfv6NSt0oo6QbcRyKwycg/6dpG5p8aw==}
- deprecated: Please migrate to https://github.com/unjs/magicast
- dependencies:
- '@babel/parser': 7.23.0
- '@types/estree': 1.0.3
- recast: 0.22.0
- dev: true
-
- /param-case@3.0.4:
- resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
- dependencies:
- dot-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
/parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
dependencies:
callsites: 3.1.0
- /parse-entities@4.0.1:
- resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
- dependencies:
- '@types/unist': 2.0.7
- character-entities: 2.0.2
- character-entities-legacy: 3.0.0
- character-reference-invalid: 2.0.1
- decode-named-character-reference: 1.0.2
- is-alphanumerical: 2.0.1
- is-decimal: 2.0.1
- is-hexadecimal: 2.0.1
- dev: true
-
/parse-git-config@3.0.0:
resolution: {integrity: sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==}
engines: {node: '>=8'}
@@ -9511,34 +7650,10 @@ packages:
dependencies:
parse-path: 7.0.0
- /parse5@6.0.1:
- resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
- dev: true
-
- /parse5@7.1.2:
- resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
- dependencies:
- entities: 4.5.0
- dev: true
-
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
- /pascal-case@3.1.2:
- resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
- dependencies:
- no-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
- /path-case@3.0.4:
- resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
- dependencies:
- dot-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
/path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -9596,35 +7711,6 @@ packages:
engines: {node: '>=14.16'}
dev: false
- /pinceau@0.18.9(postcss@8.4.31):
- resolution: {integrity: sha512-GJ+l8a5Y+7PP/diwuajJhd2QONTIFkk2YXjrVTh7QKC3sMQEphpLH6ZJfXSeeSonQ0/BnhrrMi9a5e14mmqXug==}
- dependencies:
- '@unocss/reset': 0.50.8
- '@volar/vue-language-core': 1.6.5
- acorn: 8.10.0
- chroma-js: 2.4.2
- consola: 3.2.3
- csstype: 3.1.2
- defu: 6.1.2
- magic-string: 0.30.5
- nanoid: 4.0.2
- ohash: 1.1.3
- paneer: 0.1.0
- pathe: 1.1.1
- postcss-custom-properties: 13.1.4(postcss@8.4.31)
- postcss-dark-theme-class: 0.7.3(postcss@8.4.31)
- postcss-nested: 6.0.1(postcss@8.4.31)
- recast: 0.22.0
- scule: 1.0.0
- style-dictionary-esm: 1.3.7
- unbuild: 1.2.1
- unplugin: 1.5.0
- transitivePeerDependencies:
- - postcss
- - sass
- - supports-color
- dev: true
-
/pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
@@ -9683,28 +7769,6 @@ packages:
postcss-value-parser: 4.2.0
dev: false
- /postcss-custom-properties@13.1.4(postcss@8.4.31):
- resolution: {integrity: sha512-iSAdaZrM3KMec8cOSzeTUNXPYDlhqsMJHpt62yrjwG6nAnMtRHPk5JdMzGosBJtqEahDolvD5LNbcq+EZ78o5g==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.4
- dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.4(@csstools/css-parser-algorithms@2.3.1)(@csstools/css-tokenizer@2.2.0)
- '@csstools/css-parser-algorithms': 2.3.1(@csstools/css-tokenizer@2.2.0)
- '@csstools/css-tokenizer': 2.2.0
- postcss: 8.4.31
- postcss-value-parser: 4.2.0
- dev: true
-
- /postcss-dark-theme-class@0.7.3(postcss@8.4.31):
- resolution: {integrity: sha512-M9vtfh8ORzQsVdT9BWb+xpEDAzC7nHBn7wVc988/JkEVLPupKcUnV0jw7RZ8sSj0ovpqN1POf6PLdt19JCHfhQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
- dependencies:
- postcss: 8.4.31
- dev: true
-
/postcss-discard-comments@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==}
engines: {node: ^14 || ^16 || >=18.0}
@@ -9882,16 +7946,6 @@ packages:
postcss: 8.4.31
dev: false
- /postcss-nested@6.0.1(postcss@8.4.31):
- resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
- dependencies:
- postcss: 8.4.31
- postcss-selector-parser: 6.0.13
- dev: true
-
/postcss-normalize-charset@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==}
engines: {node: ^14 || ^16 || >=18.0}
@@ -10057,6 +8111,7 @@ packages:
/postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ dev: false
/postcss@8.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
@@ -10127,10 +8182,6 @@ packages:
sisteransi: 1.0.5
dev: false
- /property-information@6.3.0:
- resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==}
- dev: true
-
/proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
dev: true
@@ -10357,17 +8408,6 @@ packages:
dependencies:
picomatch: 2.3.1
- /recast@0.22.0:
- resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==}
- engines: {node: '>= 4'}
- dependencies:
- assert: 2.0.0
- ast-types: 0.15.2
- esprima: 4.0.1
- source-map: 0.6.1
- tslib: 2.6.1
- dev: true
-
/redis-errors@1.2.0:
resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
engines: {node: '>=4'}
@@ -10397,114 +8437,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /rehype-external-links@3.0.0:
- resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
- dependencies:
- '@types/hast': 3.0.1
- '@ungap/structured-clone': 1.2.0
- hast-util-is-element: 3.0.0
- is-absolute-url: 4.0.1
- space-separated-tokens: 2.0.2
- unist-util-visit: 5.0.0
- dev: true
-
- /rehype-raw@6.1.1:
- resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==}
- dependencies:
- '@types/hast': 2.3.5
- hast-util-raw: 7.2.3
- unified: 10.1.2
- dev: true
-
- /rehype-slug@6.0.0:
- resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
- dependencies:
- '@types/hast': 3.0.1
- github-slugger: 2.0.0
- hast-util-heading-rank: 3.0.0
- hast-util-to-string: 3.0.0
- unist-util-visit: 5.0.0
- dev: true
-
- /rehype-sort-attribute-values@5.0.0:
- resolution: {integrity: sha512-dQdHdCIRnpiU+BkrLSqH+aM4lWJyLqGzv49KvH4gHj+JxYwNqvGhoTXckS3AJu4V9ZutwsTcawP0pC7PhwX0tQ==}
- dependencies:
- '@types/hast': 3.0.1
- hast-util-is-element: 3.0.0
- unist-util-visit: 5.0.0
- dev: true
-
- /rehype-sort-attributes@5.0.0:
- resolution: {integrity: sha512-6tJUH4xHFcdO85CZRwAcEtHNCzjZ9V9S0VZLgo1pzbN04qy8jiVCZ3oAxDmBVG3Rth5b1xFTDet5WG/UYZeJLQ==}
- dependencies:
- '@types/hast': 3.0.1
- unist-util-visit: 5.0.0
- dev: true
-
- /remark-emoji@4.0.0:
- resolution: {integrity: sha512-lQP1lFaYOz6zyJTBfOwYChM1YkgJEVcxSnUBkjo9qujqWwpY36MRFzDjYDk9YNdHqkw5yExB8MnVVHb6wX9QNA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- emoticon: 4.0.1
- mdast-util-find-and-replace: 3.0.1
- node-emoji: 2.1.0
- dev: true
-
- /remark-gfm@3.0.1:
- resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
- dependencies:
- '@types/mdast': 3.0.12
- mdast-util-gfm: 2.0.2
- micromark-extension-gfm: 2.0.3
- unified: 10.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /remark-mdc@2.0.0:
- resolution: {integrity: sha512-zBonqJya1254h84GRLjJc1fU4aXng2cKaie5qk0T1edUIkP4lVY1kJD4TP+uoFaUziTeyR6LSvkmRcHDZiWtoA==}
- dependencies:
- '@types/mdast': 4.0.1
- '@types/unist': 3.0.0
- flat: 5.0.2
- js-yaml: 4.1.0
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- micromark: 4.0.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-types: 2.0.0
- parse-entities: 4.0.1
- scule: 1.0.0
- stringify-entities: 4.0.3
- unified: 11.0.3
- unist-util-visit: 5.0.0
- unist-util-visit-parents: 6.0.1
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /remark-parse@10.0.2:
- resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
- dependencies:
- '@types/mdast': 3.0.12
- mdast-util-from-markdown: 1.3.1
- unified: 10.1.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
- dependencies:
- '@types/hast': 2.3.5
- '@types/mdast': 3.0.12
- mdast-util-to-hast: 12.3.0
- unified: 10.1.2
- dev: true
-
/require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
@@ -10555,20 +8487,6 @@ packages:
glob: 10.3.7
dev: true
- /rollup-plugin-dts@5.3.1(rollup@3.29.1)(typescript@5.2.2):
- resolution: {integrity: sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==}
- engines: {node: '>=v14.21.3'}
- peerDependencies:
- rollup: ^3.0
- typescript: ^4.1 || ^5.0
- dependencies:
- magic-string: 0.30.5
- rollup: 3.29.1
- typescript: 5.2.2
- optionalDependencies:
- '@babel/code-frame': 7.22.13
- dev: true
-
/rollup-plugin-dts@6.0.0(rollup@3.29.1)(typescript@5.2.2):
resolution: {integrity: sha512-A996xSZDAqnx/KfFttzC8mDEuyMjsRpiLCrlGc8effhK8KhE3AG0g1woQiITgFc5HSE8HWU7ccR9CiQ3vXgUlQ==}
engines: {node: '>=v18.17.1'}
@@ -10633,13 +8551,6 @@ packages:
tslib: 2.6.1
dev: false
- /sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
- dependencies:
- mri: 1.2.0
- dev: true
-
/safe-array-concat@1.0.0:
resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==}
engines: {node: '>=0.4'}
@@ -10739,14 +8650,6 @@ packages:
transitivePeerDependencies:
- supports-color
- /sentence-case@3.0.4:
- resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
- dependencies:
- no-case: 3.0.4
- tslib: 2.6.1
- upper-case-first: 2.0.2
- dev: true
-
/serialize-javascript@6.0.1:
resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
dependencies:
@@ -10788,16 +8691,6 @@ packages:
resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
dev: false
- /shiki-es@0.14.0:
- resolution: {integrity: sha512-e+/aueHx0YeIEut6RXC6K8gSf0PykwZiHD7q7AHtpTW8Kd8TpFUIWqTwhAnrGjOyOMyrwv+syr5WPagMpDpVYQ==}
- dev: true
-
- /shikiji@0.6.8:
- resolution: {integrity: sha512-K0axxNAdB9KvLUflU7QoLC7p6i2p1R2MFG0eP+iclbjtuEZqng99jHcg3VJL0GWRO67yozTICnykjo1HjOzdkg==}
- dependencies:
- hast-util-to-html: 9.0.0
- dev: true
-
/side-channel@1.0.4:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
@@ -10851,13 +8744,6 @@ packages:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: false
- /skin-tone@2.0.0:
- resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==}
- engines: {node: '>=8'}
- dependencies:
- unicode-emoji-modifier-base: 1.0.0
- dev: true
-
/slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -10867,11 +8753,6 @@ packages:
resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
engines: {node: '>=12'}
- /slugify@1.6.6:
- resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
- engines: {node: '>=8.0.0'}
- dev: true
-
/smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -10880,37 +8761,6 @@ packages:
/smob@1.4.0:
resolution: {integrity: sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==}
- /snake-case@3.0.4:
- resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
- dependencies:
- dot-case: 3.0.4
- tslib: 2.6.1
- dev: true
-
- /socket.io-client@4.7.2:
- resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==}
- engines: {node: '>=10.0.0'}
- dependencies:
- '@socket.io/component-emitter': 3.1.0
- debug: 4.3.4
- engine.io-client: 6.5.2
- socket.io-parser: 4.2.4
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
- dev: true
-
- /socket.io-parser@4.2.4:
- resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
- engines: {node: '>=10.0.0'}
- dependencies:
- '@socket.io/component-emitter': 3.1.0
- debug: 4.3.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/socks-proxy-agent@7.0.0:
resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
engines: {node: '>= 10'}
@@ -10962,10 +8812,6 @@ packages:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
- /space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: true
-
/spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
dependencies:
@@ -11081,13 +8927,6 @@ packages:
dependencies:
safe-buffer: 5.2.1
- /stringify-entities@4.0.3:
- resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
- dependencies:
- character-entities-html4: 2.1.0
- character-entities-legacy: 3.0.0
- dev: true
-
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -11129,23 +8968,6 @@ packages:
dependencies:
acorn: 8.10.0
- /style-dictionary-esm@1.3.7:
- resolution: {integrity: sha512-xO2o8sKGera0SMLCLtix1dPvgD2ZyX2VohZ09cGRRuXBb8HQObqhgDQw4dLW+qJy4gj7r4Mdhz9J1rS2p50xDw==}
- engines: {node: '>=12.0.0'}
- hasBin: true
- dependencies:
- chalk: 4.1.2
- change-case: 4.1.2
- commander: 10.0.1
- consola: 2.15.3
- glob: 8.1.0
- jiti: 1.20.0
- json5: 2.2.3
- jsonc-parser: 3.2.0
- lodash.template: 4.5.0
- tinycolor2: 1.6.0
- dev: true
-
/stylehacks@6.0.0(postcss@8.4.31):
resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==}
engines: {node: ^14 || ^16 || >=18.0}
@@ -11199,10 +9021,6 @@ packages:
picocolors: 1.0.0
dev: false
- /tabbable@6.2.0:
- resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
- dev: true
-
/tapable@1.1.3:
resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==}
engines: {node: '>=6'}
@@ -11300,10 +9118,6 @@ packages:
resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==}
dev: true
- /tinycolor2@1.6.0:
- resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
- dev: true
-
/tinypool@0.6.0:
resolution: {integrity: sha512-FdswUUo5SxRizcBc6b1GSuLpLjisa8N8qMyYoP3rl+bym+QauhtJP5bvZY1ytt8krKGmMLYIRl36HBZfeAoqhQ==}
engines: {node: '>=14.0.0'}
@@ -11347,14 +9161,6 @@ packages:
/tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- /trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- dev: true
-
- /trough@2.1.0:
- resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
- dev: true
-
/ts-api-utils@1.0.2(typescript@5.2.2):
resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==}
engines: {node: '>=16.13.0'}
@@ -11375,6 +9181,7 @@ packages:
/tslib@2.6.1:
resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==}
+ dev: false
/tuf-js@2.1.0:
resolution: {integrity: sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==}
@@ -11459,10 +9266,6 @@ packages:
is-typed-array: 1.1.12
dev: true
- /typesafe-path@0.2.2:
- resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==}
- dev: true
-
/typescript@5.2.2:
resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
engines: {node: '>=14.17'}
@@ -11488,40 +9291,6 @@ packages:
which-boxed-primitive: 1.0.2
dev: true
- /unbuild@1.2.1:
- resolution: {integrity: sha512-J4efk69Aye43tWcBPCsLK7TIRppGrEN4pAlDzRKo3HSE6MgTSTBxSEuE3ccx7ixc62JvGQ/CoFXYqqF2AHozow==}
- hasBin: true
- dependencies:
- '@rollup/plugin-alias': 5.0.0(rollup@3.29.1)
- '@rollup/plugin-commonjs': 24.1.0(rollup@3.29.1)
- '@rollup/plugin-json': 6.0.0(rollup@3.29.1)
- '@rollup/plugin-node-resolve': 15.2.1(rollup@3.29.1)
- '@rollup/plugin-replace': 5.0.4(rollup@3.29.1)
- '@rollup/pluginutils': 5.0.4(rollup@3.29.1)
- chalk: 5.3.0
- consola: 3.2.3
- defu: 6.1.2
- esbuild: 0.17.19
- globby: 13.2.2
- hookable: 5.5.3
- jiti: 1.20.0
- magic-string: 0.30.5
- mkdist: 1.3.0(typescript@5.2.2)
- mlly: 1.4.2
- mri: 1.2.0
- pathe: 1.1.1
- pkg-types: 1.0.3
- pretty-bytes: 6.1.1
- rollup: 3.29.1
- rollup-plugin-dts: 5.3.1(rollup@3.29.1)(typescript@5.2.2)
- scule: 1.0.0
- typescript: 5.2.2
- untyped: 1.4.0
- transitivePeerDependencies:
- - sass
- - supports-color
- dev: true
-
/unbuild@2.0.0(typescript@5.2.2):
resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==}
hasBin: true
@@ -11594,35 +9363,7 @@ packages:
'@unhead/schema': 1.7.4
'@unhead/shared': 1.7.4
hookable: 5.5.3
-
- /unicode-emoji-modifier-base@1.0.0:
- resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==}
- engines: {node: '>=4'}
- dev: true
-
- /unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
- dependencies:
- '@types/unist': 2.0.7
- bail: 2.0.2
- extend: 3.0.2
- is-buffer: 2.0.5
- is-plain-obj: 4.1.0
- trough: 2.1.0
- vfile: 5.3.7
- dev: true
-
- /unified@11.0.3:
- resolution: {integrity: sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==}
- dependencies:
- '@types/unist': 3.0.0
- bail: 2.0.2
- devlop: 1.1.0
- extend: 3.0.2
- is-plain-obj: 4.1.0
- trough: 2.1.0
- vfile: 6.0.1
- dev: true
+ dev: false
/unimport@3.4.0(rollup@3.29.1):
resolution: {integrity: sha512-M/lfFEgufIT156QAr/jWHLUn55kEmxBBiQsMxvRSIbquwmeJEyQYgshHDEvQDWlSJrVOOTAgnJ3FvlsrpGkanA==}
@@ -11655,82 +9396,6 @@ packages:
imurmurhash: 0.1.4
dev: false
- /unist-builder@4.0.0:
- resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
- /unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
- dev: true
-
- /unist-util-is@5.2.1:
- resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
- dependencies:
- '@types/unist': 2.0.7
- dev: true
-
- /unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
- dependencies:
- '@types/unist': 2.0.7
- dev: true
-
- /unist-util-position@5.0.0:
- resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
- /unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
- dependencies:
- '@types/unist': 2.0.7
- dev: true
-
- /unist-util-stringify-position@4.0.0:
- resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- dependencies:
- '@types/unist': 3.0.0
- dev: true
-
- /unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
- dependencies:
- '@types/unist': 2.0.7
- unist-util-is: 5.2.1
- dev: true
-
- /unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
- dependencies:
- '@types/unist': 3.0.0
- unist-util-is: 6.0.0
- dev: true
-
- /unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
- dependencies:
- '@types/unist': 2.0.7
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
- dev: true
-
- /unist-util-visit@5.0.0:
- resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
- dependencies:
- '@types/unist': 3.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
- dev: true
-
/universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
@@ -11858,18 +9523,6 @@ packages:
escalade: 3.1.1
picocolors: 1.0.0
- /upper-case-first@2.0.2:
- resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
- dependencies:
- tslib: 2.6.1
- dev: true
-
- /upper-case@2.0.2:
- resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
- dependencies:
- tslib: 2.6.1
- dev: true
-
/uqr@0.1.2:
resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==}
@@ -11901,27 +9554,6 @@ packages:
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- /util@0.12.5:
- resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
- dependencies:
- inherits: 2.0.4
- is-arguments: 1.1.1
- is-generator-function: 1.0.10
- is-typed-array: 1.1.12
- which-typed-array: 1.1.11
- dev: true
-
- /uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
- dependencies:
- dequal: 2.0.3
- diff: 5.1.0
- kleur: 4.1.5
- sade: 1.8.1
- dev: true
-
/validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
dependencies:
@@ -11935,51 +9567,6 @@ packages:
builtins: 5.0.1
dev: false
- /vfile-location@4.1.0:
- resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==}
- dependencies:
- '@types/unist': 2.0.7
- vfile: 5.3.7
- dev: true
-
- /vfile-location@5.0.2:
- resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
- dependencies:
- '@types/unist': 3.0.0
- vfile: 6.0.1
- dev: true
-
- /vfile-message@3.1.4:
- resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
- dependencies:
- '@types/unist': 2.0.7
- unist-util-stringify-position: 3.0.3
- dev: true
-
- /vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
- dependencies:
- '@types/unist': 3.0.0
- unist-util-stringify-position: 4.0.0
- dev: true
-
- /vfile@5.3.7:
- resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
- dependencies:
- '@types/unist': 2.0.7
- is-buffer: 2.0.5
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.4
- dev: true
-
- /vfile@6.0.1:
- resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
- dependencies:
- '@types/unist': 3.0.0
- unist-util-stringify-position: 4.0.0
- vfile-message: 4.0.2
- dev: true
-
/vite-node@0.33.0(@types/node@18.18.5):
resolution: {integrity: sha512-19FpHYbwWWxDr73ruNahC+vtEdza52kA90Qb3La98yZ0xULqV8A5JLNPUff0f5zID4984tW7l3DH2przTJUZSw==}
engines: {node: '>=v14.18.0'}
@@ -12286,44 +9873,10 @@ packages:
dependencies:
ufo: 1.3.1
- /vue-component-meta@1.8.8(typescript@5.2.2):
- resolution: {integrity: sha512-iVwH7wGm6VpOAvQoMjFmv8Coe9oV61JqbRkUVx95Xegwb3hEYmltvv4hYvLwUjaev07JRkskPQctyzPBU3YFyQ==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
- dependencies:
- '@volar/typescript': 1.10.4
- '@vue/language-core': 1.8.8(typescript@5.2.2)
- typesafe-path: 0.2.2
- typescript: 5.2.2
- vue-component-type-helpers: 1.8.8
- dev: true
-
/vue-component-type-helpers@1.8.4:
resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
dev: true
- /vue-component-type-helpers@1.8.8:
- resolution: {integrity: sha512-Ohv9HQY92nSbpReC6WhY0X4YkOszHzwUHaaN/lev5tHQLM1AEw+LrLeB2bIGIyKGDU7ZVrncXcv/oBny4rjbYg==}
- dev: true
-
- /vue-demi@0.14.5(vue@3.3.4):
- resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- peerDependencies:
- '@vue/composition-api': ^1.0.0-rc.1
- vue: 3.3.4
- peerDependenciesMeta:
- '@vue/composition-api':
- optional: true
- dependencies:
- vue: 3.3.4
- dev: true
-
/vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
dev: false
@@ -12411,10 +9964,6 @@ packages:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
- /web-namespaces@2.0.1:
- resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
- dev: true
-
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -12669,19 +10218,6 @@ packages:
optional: true
dev: false
- /ws@8.11.0:
- resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- dev: true
-
/ws@8.14.2:
resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
engines: {node: '>=10.0.0'}
@@ -12693,17 +10229,13 @@ packages:
optional: true
utf-8-validate:
optional: true
+ dev: false
/xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}
dev: true
- /xmlhttprequest-ssl@2.0.0:
- resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==}
- engines: {node: '>=0.4.0'}
- dev: true
-
/xxhashjs@0.2.2:
resolution: {integrity: sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==}
dependencies:
@@ -12764,7 +10296,3 @@ packages:
archiver-utils: 4.0.1
compress-commons: 5.0.1
readable-stream: 3.6.2
-
- /zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: true
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 92caab7c9d..0b568a37d5 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -2,4 +2,3 @@ packages:
- "packages/**"
- "playground"
- "test/fixtures/*"
- - ".website"
diff --git a/test/fixtures/runtime-compiler/nuxt.config.ts b/test/fixtures/runtime-compiler/nuxt.config.ts
index d321af9c18..b6151acf98 100644
--- a/test/fixtures/runtime-compiler/nuxt.config.ts
+++ b/test/fixtures/runtime-compiler/nuxt.config.ts
@@ -1,4 +1,4 @@
-// https://nuxt.com/docs/api/configuration/nuxt-config
+// https://nuxt.com/docs/api/nuxt-config
export default defineNuxtConfig({
experimental: {
externalVue: false