Merge branch 'main' into patch-21

This commit is contained in:
Michael Brevard 2024-06-16 12:23:21 +03:00 committed by GitHub
commit ee6cd61e2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
35 changed files with 233 additions and 166 deletions

View File

@ -46,7 +46,7 @@ jobs:
run: pnpm build run: pnpm build
- name: Run benchmarks - name: Run benchmarks
uses: CodSpeedHQ/action@0b631f8998f2389eb5144632b6f9f8fabd33a86e # v2.4.1 uses: CodSpeedHQ/action@f11c406b8c87cda176ff341ed4925bc98086f6d1 # v2.4.2
with: with:
run: pnpm vitest bench run: pnpm vitest bench
token: ${{ secrets.CODSPEED_TOKEN }} token: ${{ secrets.CODSPEED_TOKEN }}

View File

@ -5,7 +5,7 @@
<p> <p>
<a href="https://www.npmjs.com/package/nuxt"><img src="https://img.shields.io/npm/v/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="Version"></a> <a href="https://www.npmjs.com/package/nuxt"><img src="https://img.shields.io/npm/v/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="Version"></a>
<a href="https://www.npmjs.com/package/nuxt"><img src="https://img.shields.io/npm/dm/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="Downloads"></a> <a href="https://www.npmjs.com/package/nuxt"><img src="https://img.shields.io/npm/dm/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="Downloads"></a>
<a href="./LICENSE"><img src="https://img.shields.io/github/license/nuxt/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="License"></a> <a href="https://github.com/nuxt/nuxt/tree/main/LICENSE"><img src="https://img.shields.io/github/license/nuxt/nuxt.svg?style=flat&colorA=18181B&colorB=28CF8D" alt="License"></a>
<a href="https://nuxt.com"><img src="https://img.shields.io/badge/Nuxt%20Docs-18181B?logo=nuxt.js" alt="Website"></a> <a href="https://nuxt.com"><img src="https://img.shields.io/badge/Nuxt%20Docs-18181B?logo=nuxt.js" alt="Website"></a>
<a href="https://chat.nuxt.dev"><img src="https://img.shields.io/badge/Nuxt%20Discord-18181B?logo=discord" alt="Discord"></a> <a href="https://chat.nuxt.dev"><img src="https://img.shields.io/badge/Nuxt%20Discord-18181B?logo=discord" alt="Discord"></a>
</p> </p>
@ -120,4 +120,4 @@ If you expect to be using Nuxt 2 beyond the EOL (End of Life) date (June 30, 202
## <a name="license">⚖️ License</a> ## <a name="license">⚖️ License</a>
[MIT](./LICENSE) [MIT](https://github.com/nuxt/nuxt/tree/main/LICENSE)

View File

@ -117,10 +117,13 @@ In most cases, Nuxt can work with third-party content that is not generated or c
Accordingly, you should make sure that the following options are unchecked / disabled in Cloudflare. Otherwise, unnecessary re-rendering or hydration errors could impact your production application. Accordingly, you should make sure that the following options are unchecked / disabled in Cloudflare. Otherwise, unnecessary re-rendering or hydration errors could impact your production application.
1. Speed > Optimization > Auto Minify: Uncheck JavaScript, CSS and HTML 1. Speed > Optimization > Content Optimization > Auto Minify: Uncheck JavaScript, CSS and HTML
2. Speed > Optimization > Disable "Rocket Loader™" 2. Speed > Optimization > Content Optimization > Disable "Rocket Loader™"
3. Speed > Optimization > Disable "Mirage" 3. Speed > Optimization > Image Optimization > Disable "Mirage"
4. Scrape Shield > Disable "Email Address Obfuscation" 4. Scrape Shield > Disable "Email Address Obfuscation"
5. Scrape Shield > Disable "Server-side Excludes"
With these settings, you can be sure that Cloudflare won't inject scripts into your Nuxt application that may cause unwanted side effects. With these settings, you can be sure that Cloudflare won't inject scripts into your Nuxt application that may cause unwanted side effects.
::tip
Their location on the Cloudfalre dashboard sometimes changes so don't hesitate to look around.
::

View File

@ -150,10 +150,10 @@ Read more about `useError` composable.
### `createError` ### `createError`
```ts [TS Signature] ```ts [TS Signature]
function createError (err: { cause, data, message, name, stack, statusCode, statusMessage, fatal }): Error function createError (err: string | { cause, data, message, name, stack, statusCode, statusMessage, fatal }): Error
``` ```
Create an error object with additional metadata. It is usable in both the Vue and Server portions of your app, and is meant to be thrown. Create an error object with additional metadata. You can pass a string to be set as the error `message` or an object containing error properties. It is usable in both the Vue and Server portions of your app, and is meant to be thrown.
If you throw an error created with `createError`: If you throw an error created with `createError`:
- on server-side, it will trigger a full-screen error page which you can clear with [`clearError`](#clearerror). - on server-side, it will trigger a full-screen error page which you can clear with [`clearError`](#clearerror).

View File

@ -12,7 +12,9 @@ You can use this function to create an error object with additional metadata. It
## Parameters ## Parameters
- `err`: `{ cause, data, message, name, stack, statusCode, statusMessage, fatal }` - `err`: `string | { cause, data, message, name, stack, statusCode, statusMessage, fatal }`
You can pass either a string or an object to the `createError` function. If you pass a string, it will be used as the error `message`, and the `statusCode` will default to `500`. If you pass an object, you can set multiple properties of the error, such as `statusCode`, `message`, and other error properties.
## In Vue App ## In Vue App
@ -48,4 +50,6 @@ export default eventHandler(() => {
}) })
``` ```
In API routes, using `createError` by passing an object with a short `statusMessage` is recommended because it can be accessed on the client side. Otherwise, a `message` passed to `createError` on an API route will not propagate to the client. Alternatively, you can use the `data` property to pass data back to the client. In any case, always consider avoiding to put dynamic user input to the message to avoid potential security issues.
:read-more{to="/docs/getting-started/error-handling"} :read-more{to="/docs/getting-started/error-handling"}

View File

@ -46,7 +46,7 @@
"vue": "3.4.29" "vue": "3.4.29"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "9.4.0", "@eslint/js": "9.5.0",
"@nuxt/eslint-config": "0.3.13", "@nuxt/eslint-config": "0.3.13",
"@nuxt/kit": "workspace:*", "@nuxt/kit": "workspace:*",
"@nuxt/test-utils": "3.13.1", "@nuxt/test-utils": "3.13.1",
@ -64,7 +64,7 @@
"changelogen": "0.5.5", "changelogen": "0.5.5",
"consola": "3.2.3", "consola": "3.2.3",
"devalue": "5.0.0", "devalue": "5.0.0",
"eslint": "9.4.0", "eslint": "9.5.0",
"eslint-plugin-no-only-tests": "3.1.0", "eslint-plugin-no-only-tests": "3.1.0",
"eslint-plugin-perfectionist": "2.11.0", "eslint-plugin-perfectionist": "2.11.0",
"eslint-typegen": "0.2.4", "eslint-typegen": "0.2.4",

View File

@ -1,6 +1,6 @@
{ {
"name": "@nuxt/kit", "name": "@nuxt/kit",
"version": "3.12.1", "version": "3.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/nuxt.git", "url": "git+https://github.com/nuxt/nuxt.git",

View File

@ -43,8 +43,11 @@ export function normalizePlugin (plugin: NuxtPlugin | string): NuxtPlugin {
* Note: By default plugin is prepended to the plugins array. You can use second argument to append (push) instead. * Note: By default plugin is prepended to the plugins array. You can use second argument to append (push) instead.
* @example * @example
* ```js * ```js
* import { createResolver } from '@nuxt/kit'
* const resolver = createResolver(import.meta.url)
*
* addPlugin({ * addPlugin({
* src: path.resolve(__dirname, 'templates/foo.js'), * src: resolver.resolve('templates/foo.js'),
* filename: 'foo.server.js' // [optional] only include in server bundle * filename: 'foo.server.js' // [optional] only include in server bundle
* }) * })
* ``` * ```

View File

@ -1,6 +1,6 @@
{ {
"name": "nuxt", "name": "nuxt",
"version": "3.12.1", "version": "3.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/nuxt.git", "url": "git+https://github.com/nuxt/nuxt.git",

View File

@ -60,9 +60,15 @@ export function useScriptGoogleTagManager (...args: unknown[]) {
export function useScriptSegment (...args: unknown[]) { export function useScriptSegment (...args: unknown[]) {
renderStubMessage('useScriptSegment') renderStubMessage('useScriptSegment')
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useScriptFacebookPixel (...args: unknown[]) { export function useScriptClarity (...args: unknown[]) {
renderStubMessage('useScriptFacebookPixel') renderStubMessage('useScriptClarity')
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useScriptMetaPixel (...args: unknown[]) {
renderStubMessage('useScriptMetaPixel')
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useScriptXPixel (...args: unknown[]) { export function useScriptXPixel (...args: unknown[]) {
@ -100,3 +106,13 @@ export function useScriptGoogleMaps (...args: unknown[]) {
export function useScriptNpm (...args: unknown[]) { export function useScriptNpm (...args: unknown[]) {
renderStubMessage('useScriptNpm') renderStubMessage('useScriptNpm')
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useScriptGoogleAdsense (...args: unknown[]) {
renderStubMessage('useScriptGoogleAdsense')
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useScriptYouTubePlayer (...args: unknown[]) {
renderStubMessage('useScriptYouTubePlayer')
}

View File

@ -46,10 +46,12 @@ export async function build (nuxt: Nuxt) {
if (!nuxt.options._prepare) { if (!nuxt.options._prepare) {
await Promise.all([checkForExternalConfigurationFiles(), bundle(nuxt)]) await Promise.all([checkForExternalConfigurationFiles(), bundle(nuxt)])
await nuxt.callHook('build:done') await nuxt.callHook('build:done')
}
if (!nuxt.options.dev) { if (!nuxt.options.dev) {
await nuxt.callHook('close', nuxt) await nuxt.callHook('close', nuxt)
}
} else {
nuxt.hook('prepare:types', () => nuxt.close())
} }
} }

View File

@ -355,6 +355,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
nitroConfig.rollupConfig!.plugins!.push( nitroConfig.rollupConfig!.plugins!.push(
ImportProtectionPlugin.rollup({ ImportProtectionPlugin.rollup({
rootDir: nuxt.options.rootDir, rootDir: nuxt.options.rootDir,
modulesDir: nuxt.options.modulesDir,
patterns: nuxtImportProtections(nuxt, { isNitro: true }), patterns: nuxtImportProtections(nuxt, { isNitro: true }),
exclude: [/core[\\/]runtime[\\/]nitro[\\/]renderer/], exclude: [/core[\\/]runtime[\\/]nitro[\\/]renderer/],
}), }),
@ -497,7 +498,11 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
for (const route of ['/200.html', '/404.html']) { for (const route of ['/200.html', '/404.html']) {
routes.add(route) routes.add(route)
} }
if (!nuxt.options.ssr) { if (nuxt.options.ssr) {
if (nitro.options.prerender.crawlLinks) {
routes.add('/')
}
} else {
routes.add('/index.html') routes.add('/index.html')
} }
}) })

View File

@ -49,14 +49,13 @@ export function createNuxt (options: NuxtOptions): Nuxt {
addHooks: hooks.addHooks, addHooks: hooks.addHooks,
hook: hooks.hook, hook: hooks.hook,
ready: () => initNuxt(nuxt), ready: () => initNuxt(nuxt),
close: async () => { close: () => hooks.callHook('close', nuxt),
await hooks.callHook('close', nuxt)
hooks.removeAllHooks()
},
vfs: {}, vfs: {},
apps: {}, apps: {},
} }
hooks.hookOnce('close', () => { hooks.removeAllHooks() })
return nuxt return nuxt
} }
@ -168,6 +167,7 @@ async function initNuxt (nuxt: Nuxt) {
// Exclude top-level resolutions by plugins // Exclude top-level resolutions by plugins
exclude: [join(nuxt.options.srcDir, 'index.html')], exclude: [join(nuxt.options.srcDir, 'index.html')],
patterns: nuxtImportProtections(nuxt), patterns: nuxtImportProtections(nuxt),
modulesDir: nuxt.options.modulesDir,
} }
addVitePlugin(() => ImportProtectionPlugin.vite(config)) addVitePlugin(() => ImportProtectionPlugin.vite(config))
addWebpackPlugin(() => ImportProtectionPlugin.webpack(config)) addWebpackPlugin(() => ImportProtectionPlugin.webpack(config))
@ -664,7 +664,9 @@ export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
const nuxt = createNuxt(options) const nuxt = createNuxt(options)
await Promise.all(keyDependencies.map(dependency => checkDependencyVersion(dependency, nuxt._version))) for (const dep of keyDependencies) {
checkDependencyVersion(dep, nuxt._version)
}
// We register hooks layer-by-layer so any overrides need to be registered separately // We register hooks layer-by-layer so any overrides need to be registered separately
if (opts.overrides?.hooks) { if (opts.overrides?.hooks) {

View File

@ -1,14 +1,13 @@
import { createRequire } from 'node:module'
import { createUnplugin } from 'unplugin' import { createUnplugin } from 'unplugin'
import { logger } from '@nuxt/kit' import { logger } from '@nuxt/kit'
import { resolvePath } from 'mlly'
import { isAbsolute, join, relative, resolve } from 'pathe' import { isAbsolute, join, relative, resolve } from 'pathe'
import escapeRE from 'escape-string-regexp' import escapeRE from 'escape-string-regexp'
import type { NuxtOptions } from 'nuxt/schema' import type { NuxtOptions } from 'nuxt/schema'
const _require = createRequire(import.meta.url)
interface ImportProtectionOptions { interface ImportProtectionOptions {
rootDir: string rootDir: string
modulesDir: string[]
patterns: [importPattern: string | RegExp, warning?: string][] patterns: [importPattern: string | RegExp, warning?: string][]
exclude?: Array<RegExp | string> exclude?: Array<RegExp | string>
} }
@ -58,6 +57,7 @@ export const nuxtImportProtections = (nuxt: { options: NuxtOptions }, options: {
export const ImportProtectionPlugin = createUnplugin(function (options: ImportProtectionOptions) { export const ImportProtectionPlugin = createUnplugin(function (options: ImportProtectionOptions) {
const cache: Record<string, Map<string | RegExp, boolean>> = {} const cache: Record<string, Map<string | RegExp, boolean>> = {}
const importersToExclude = options?.exclude || [] const importersToExclude = options?.exclude || []
const proxy = resolvePath('unenv/runtime/mock/proxy', { url: options.modulesDir })
return { return {
name: 'nuxt:import-protection', name: 'nuxt:import-protection',
enforce: 'pre', enforce: 'pre',
@ -85,7 +85,7 @@ export const ImportProtectionPlugin = createUnplugin(function (options: ImportPr
matched = true matched = true
} }
if (matched) { if (matched) {
return _require.resolve('unenv/runtime/mock/proxy') return proxy
} }
return null return null
}, },

View File

@ -698,7 +698,7 @@ function replaceIslandTeleports (ssrContext: NuxtSSRContext, html: string) {
if (matchClientComp) { if (matchClientComp) {
const [, uid, clientId] = matchClientComp const [, uid, clientId] = matchClientComp
if (!uid || !clientId) { continue } if (!uid || !clientId) { continue }
html = html.replace(new RegExp(` data-island-component="${clientId}"[^>]*>`), (full) => { html = html.replace(new RegExp(` data-island-uid="${uid}" data-island-component="${clientId}"[^>]*>`), (full) => {
return full + teleports[key] return full + teleports[key]
}) })
continue continue

View File

@ -275,20 +275,6 @@ export default defineNuxtModule({
} }
}) })
// TODO: inject routes in `200.html` in next nitro upgrade (2.9.7+) via https://github.com/unjs/nitro/pull/2517
if (!nuxt.options.dev && !nuxt.options._prepare) {
nuxt.hook('app:templatesGenerated', (app) => {
const nitro = useNitro()
if (nitro.options.prerender.crawlLinks) {
for (const page of app.pages!) {
if (page.path && !page.path.includes(':')) {
nitro.options.prerender.routes.push(page.path)
}
}
}
})
}
nuxt.hook('imports:extend', (imports) => { nuxt.hook('imports:extend', (imports) => {
imports.push( imports.push(
{ name: 'definePageMeta', as: 'definePageMeta', from: resolve(runtimeDir, 'composables') }, { name: 'definePageMeta', as: 'definePageMeta', from: resolve(runtimeDir, 'composables') },

View File

@ -1,7 +1,7 @@
import { readFileSync } from 'node:fs' import { readFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url'
import { describe, expect, it } from 'vitest' import { describe, expect, it } from 'vitest'
import { join } from 'pathe' import { findExports } from 'mlly'
import { createCommonJS, findExports } from 'mlly'
import * as VueFunctions from 'vue' import * as VueFunctions from 'vue'
import type { Import } from 'unimport' import type { Import } from 'unimport'
import { createUnimport } from 'unimport' import { createUnimport } from 'unimport'
@ -59,8 +59,8 @@ const excludedNuxtHelpers = ['useHydration', 'useHead', 'useSeoMeta', 'useServer
describe('imports:nuxt', () => { describe('imports:nuxt', () => {
try { try {
const { __dirname } = createCommonJS(import.meta.url) const entrypointPath = fileURLToPath(new URL('../src/app/composables/index.ts', import.meta.url))
const entrypointContents = readFileSync(join(__dirname, '../src/app/composables/index.ts'), 'utf8') const entrypointContents = readFileSync(entrypointPath, 'utf8')
const names = findExports(entrypointContents).flatMap(i => i.names || i.name) const names = findExports(entrypointContents).flatMap(i => i.names || i.name)
for (let name of names) { for (let name of names) {

View File

@ -1,3 +1,4 @@
import { fileURLToPath } from 'node:url'
import { normalize } from 'pathe' import { normalize } from 'pathe'
import { describe, expect, it } from 'vitest' import { describe, expect, it } from 'vitest'
import { ImportProtectionPlugin, nuxtImportProtections } from '../src/core/plugins/import-protection' import { ImportProtectionPlugin, nuxtImportProtections } from '../src/core/plugins/import-protection'
@ -40,6 +41,7 @@ describe('import protection', () => {
const transformWithImportProtection = (id: string, importer: string) => { const transformWithImportProtection = (id: string, importer: string) => {
const plugin = ImportProtectionPlugin.rollup({ const plugin = ImportProtectionPlugin.rollup({
rootDir: '/root', rootDir: '/root',
modulesDir: [fileURLToPath(new URL('..', import.meta.url))],
patterns: nuxtImportProtections({ patterns: nuxtImportProtections({
options: { options: {
modules: ['some-nuxt-module'], modules: ['some-nuxt-module'],

View File

@ -1,10 +1,11 @@
import { fileURLToPath } from 'node:url'
import { resolve } from 'pathe' import { resolve } from 'pathe'
import { expect, it, vi } from 'vitest' import { expect, it, vi } from 'vitest'
import type { ComponentsDir } from 'nuxt/schema' import type { ComponentsDir } from 'nuxt/schema'
import { scanComponents } from '../src/components/scan' import { scanComponents } from '../src/components/scan'
const fixtureDir = resolve(__dirname, 'fixture') const fixtureDir = fileURLToPath(new URL('fixture', import.meta.url))
const rFixture = (...p: string[]) => resolve(fixtureDir, ...p) const rFixture = (...p: string[]) => resolve(fixtureDir, ...p)
vi.mock('@nuxt/kit', () => ({ vi.mock('@nuxt/kit', () => ({

View File

@ -1,6 +1,6 @@
import { resolve } from 'pathe' import { fileURLToPath } from 'node:url'
export const fixtureDir = resolve(__dirname, 'fixture') export const fixtureDir = fileURLToPath(new URL('fixture', import.meta.url))
export function normalizeLineEndings (str: string, normalized = '\n') { export function normalizeLineEndings (str: string, normalized = '\n') {
return str.replace(/\r?\n/g, normalized) return str.replace(/\r?\n/g, normalized)

View File

@ -1,6 +1,6 @@
{ {
"name": "@nuxt/schema", "name": "@nuxt/schema",
"version": "3.12.1", "version": "3.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/nuxt.git", "url": "git+https://github.com/nuxt/nuxt.git",

View File

@ -1,4 +1,5 @@
import { consola } from 'consola' import { consola } from 'consola'
import { resolve } from 'pathe'
import { isTest } from 'std-env' import { isTest } from 'std-env'
import { withoutLeadingSlash } from 'ufo' import { withoutLeadingSlash } from 'ufo'
import { defineUntypedSchema } from 'untyped' import { defineUntypedSchema } from 'untyped'
@ -109,5 +110,8 @@ export default defineUntypedSchema({
}, },
}, },
}, },
cacheDir: {
$resolve: async (val, get) => val ?? resolve(await get('rootDir') as string, 'node_modules/.cache/vite'),
},
}, },
}) })

View File

@ -1,10 +1,13 @@
import { join, resolve } from 'node:path' import { join, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import { promises as fsp } from 'node:fs' import { promises as fsp } from 'node:fs'
import type { Plugin } from 'vite' import type { Plugin } from 'vite'
import { template } from 'lodash-es' import { template } from 'lodash-es'
import genericMessages from '../templates/messages.json' import genericMessages from '../templates/messages.json'
const r = (...path: string[]) => resolve(join(__dirname, '..', ...path)) const templatesRoot = fileURLToPath(new URL('..', import.meta.url))
const r = (...path: string[]) => resolve(join(templatesRoot, ...path))
export const DevRenderingPlugin = () => { export const DevRenderingPlugin = () => {
return <Plugin>{ return <Plugin>{

View File

@ -1,8 +1,11 @@
import { join, resolve } from 'node:path' import { join, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import { promises as fsp } from 'node:fs' import { promises as fsp } from 'node:fs'
import { globby } from 'globby' import { globby } from 'globby'
const r = (...path: string[]) => resolve(join(__dirname, '..', ...path)) const templatesRoot = fileURLToPath(new URL('..', import.meta.url))
const r = (...path: string[]) => resolve(join(templatesRoot, ...path))
async function main () { async function main () {
const templates = await globby(r('dist/templates/*.js')) const templates = await globby(r('dist/templates/*.js'))

View File

@ -1,5 +1,5 @@
import { fileURLToPath } from 'node:url' import { fileURLToPath } from 'node:url'
import { join } from 'node:path' import { resolve } from 'node:path'
import { readdirSync } from 'node:fs' import { readdirSync } from 'node:fs'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
@ -8,7 +8,8 @@ import UnoCSS from 'unocss/vite'
import { DevRenderingPlugin } from './lib/dev' import { DevRenderingPlugin } from './lib/dev'
import { RenderPlugin } from './lib/render' import { RenderPlugin } from './lib/render'
const r = (...path: string[]) => fileURLToPath(new URL(join(...path), import.meta.url)) const rootDir = fileURLToPath(new URL('.', import.meta.url))
const r = (...path: string[]) => resolve(rootDir, ...path)
export default defineConfig({ export default defineConfig({
build: { build: {
@ -32,7 +33,7 @@ export default defineConfig({
], ],
server: { server: {
fs: { fs: {
allow: ['./templates', __dirname], allow: ['./templates', rootDir],
}, },
}, },
}) })

View File

@ -1,6 +1,6 @@
{ {
"name": "@nuxt/vite-builder", "name": "@nuxt/vite-builder",
"version": "3.12.1", "version": "3.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/nuxt.git", "url": "git+https://github.com/nuxt/nuxt.git",

View File

@ -118,7 +118,7 @@ export async function buildClient (ctx: ViteBuildContext) {
'vue', 'vue',
], ],
}, },
cacheDir: resolve(ctx.nuxt.options.rootDir, 'node_modules/.cache/vite', 'client'), cacheDir: resolve(ctx.nuxt.options.rootDir, ctx.config.cacheDir ?? 'node_modules/.cache/vite', 'client'),
build: { build: {
sourcemap: ctx.nuxt.options.sourcemap.client ? ctx.config.build?.sourcemap ?? ctx.nuxt.options.sourcemap.client : false, sourcemap: ctx.nuxt.options.sourcemap.client ? ctx.config.build?.sourcemap ?? ctx.nuxt.options.sourcemap.client : false,
manifest: 'manifest.json', manifest: 'manifest.json',

View File

@ -19,6 +19,7 @@ export function resolveCSSOptions (nuxt: Nuxt): ViteConfig['css'] {
for (const [name, opts] of plugins) { for (const [name, opts] of plugins) {
if (opts) { if (opts) {
// TODO: remove use of requireModule in favour of ESM import
const plugin = requireModule(name, { const plugin = requireModule(name, {
paths: [ paths: [
...nuxt.options.modulesDir, ...nuxt.options.modulesDir,

View File

@ -71,7 +71,7 @@ export async function buildServer (ctx: ViteBuildContext) {
/(nuxt|nuxt3|nuxt-nightly)\/(dist|src|app)/, /(nuxt|nuxt3|nuxt-nightly)\/(dist|src|app)/,
], ],
}, },
cacheDir: resolve(ctx.nuxt.options.rootDir, 'node_modules/.cache/vite', 'server'), cacheDir: resolve(ctx.nuxt.options.rootDir, ctx.config.cacheDir ?? 'node_modules/.cache/vite', 'server'),
build: { build: {
// we'll display this in nitro build output // we'll display this in nitro build output
reportCompressedSize: false, reportCompressedSize: false,

View File

@ -1,6 +1,6 @@
{ {
"name": "@nuxt/webpack-builder", "name": "@nuxt/webpack-builder",
"version": "3.12.1", "version": "3.12.2",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nuxt/nuxt.git", "url": "git+https://github.com/nuxt/nuxt.git",
@ -42,7 +42,7 @@
"hash-sum": "^2.0.0", "hash-sum": "^2.0.0",
"lodash-es": "4.17.21", "lodash-es": "4.17.21",
"magic-string": "^0.30.10", "magic-string": "^0.30.10",
"memfs": "^4.9.2", "memfs": "^4.9.3",
"mini-css-extract-plugin": "^2.9.0", "mini-css-extract-plugin": "^2.9.0",
"mlly": "^1.7.1", "mlly": "^1.7.1",
"ohash": "^1.1.3", "ohash": "^1.1.3",

View File

@ -1,5 +1,5 @@
import { fileURLToPath } from 'node:url'
import createResolver from 'postcss-import-resolver' import createResolver from 'postcss-import-resolver'
import { createCommonJS } from 'mlly'
import { requireModule } from '@nuxt/kit' import { requireModule } from '@nuxt/kit'
import type { Nuxt } from '@nuxt/schema' import type { Nuxt } from '@nuxt/schema'
import { defu } from 'defu' import { defu } from 'defu'
@ -61,9 +61,10 @@ export const getPostcssConfig = (nuxt: Nuxt) => {
// Keep the order of default plugins // Keep the order of default plugins
if (!Array.isArray(postcssOptions.plugins) && isPureObject(postcssOptions.plugins)) { if (!Array.isArray(postcssOptions.plugins) && isPureObject(postcssOptions.plugins)) {
// Map postcss plugins into instances on object mode once // Map postcss plugins into instances on object mode once
const cjs = createCommonJS(import.meta.url) const cwd = fileURLToPath(new URL('.', import.meta.url))
postcssOptions.plugins = sortPlugins(postcssOptions).map((pluginName: string) => { postcssOptions.plugins = sortPlugins(postcssOptions).map((pluginName: string) => {
const pluginFn = requireModule(pluginName, { paths: [cjs.__dirname] }) // TODO: remove use of requireModule in favour of ESM import
const pluginFn = requireModule(pluginName, { paths: [cwd] })
const pluginOptions = postcssOptions.plugins[pluginName] const pluginOptions = postcssOptions.plugins[pluginName]
if (!pluginOptions || typeof pluginFn !== 'function') { return null } if (!pluginOptions || typeof pluginFn !== 'function') { return null }
return pluginFn(pluginOptions) return pluginFn(pluginOptions)

View File

@ -21,11 +21,11 @@ importers:
.: .:
devDependencies: devDependencies:
'@eslint/js': '@eslint/js':
specifier: 9.4.0 specifier: 9.5.0
version: 9.4.0 version: 9.5.0
'@nuxt/eslint-config': '@nuxt/eslint-config':
specifier: 0.3.13 specifier: 0.3.13
version: 0.3.13(eslint@9.4.0)(typescript@5.4.5) version: 0.3.13(eslint@9.5.0)(typescript@5.4.5)
'@nuxt/kit': '@nuxt/kit':
specifier: workspace:* specifier: workspace:*
version: link:packages/kit version: link:packages/kit
@ -75,17 +75,17 @@ importers:
specifier: 5.0.0 specifier: 5.0.0
version: 5.0.0 version: 5.0.0
eslint: eslint:
specifier: 9.4.0 specifier: 9.5.0
version: 9.4.0 version: 9.5.0
eslint-plugin-no-only-tests: eslint-plugin-no-only-tests:
specifier: 3.1.0 specifier: 3.1.0
version: 3.1.0 version: 3.1.0
eslint-plugin-perfectionist: eslint-plugin-perfectionist:
specifier: 2.11.0 specifier: 2.11.0
version: 2.11.0(eslint@9.4.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.4.0)) version: 2.11.0(eslint@9.5.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.5.0))
eslint-typegen: eslint-typegen:
specifier: 0.2.4 specifier: 0.2.4
version: 0.2.4(eslint@9.4.0) version: 0.2.4(eslint@9.5.0)
execa: execa:
specifier: 9.2.0 specifier: 9.2.0
version: 9.2.0 version: 9.2.0
@ -727,7 +727,7 @@ importers:
version: 1.6.0(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0) version: 1.6.0(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0)
vite-plugin-checker: vite-plugin-checker:
specifier: ^0.6.4 specifier: ^0.6.4
version: 0.6.4(eslint@9.4.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.3.1(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0))(vue-tsc@2.0.21(typescript@5.4.5)) version: 0.6.4(eslint@9.5.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.3.1(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0))(vue-tsc@2.0.21(typescript@5.4.5))
vue-bundle-renderer: vue-bundle-renderer:
specifier: ^2.1.0 specifier: ^2.1.0
version: 2.1.0 version: 2.1.0
@ -808,8 +808,8 @@ importers:
specifier: ^0.30.10 specifier: ^0.30.10
version: 0.30.10 version: 0.30.10
memfs: memfs:
specifier: ^4.9.2 specifier: ^4.9.3
version: 4.9.2 version: 4.9.3
mini-css-extract-plugin: mini-css-extract-plugin:
specifier: ^2.9.0 specifier: ^2.9.0
version: 2.9.0(webpack@5.92.0) version: 2.9.0(webpack@5.92.0)
@ -1830,20 +1830,20 @@ packages:
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.15.1': '@eslint/config-array@0.16.0':
resolution: {integrity: sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==} resolution: {integrity: sha512-/jmuSd74i4Czf1XXn7wGRWZCuyaUZ330NH1Bek0Pplatt4Sy1S5haN21SCLLdbeKslQ+S0wEJ+++v5YibSi+Lg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.1.0': '@eslint/eslintrc@3.1.0':
resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.4.0': '@eslint/js@9.5.0':
resolution: {integrity: sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==} resolution: {integrity: sha512-A7+AOT2ICkodvtsWnxZP4Xxk3NbZ3VMHd8oihydLRGrJgqqdEz1qSeEgXYyT/Cu8h1TWWsQRejIx48mtjZ5y1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.3': '@eslint/object-schema@2.1.4':
resolution: {integrity: sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==} resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/busboy@2.0.0': '@fastify/busboy@2.0.0':
@ -4210,8 +4210,8 @@ packages:
resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.4.0: eslint@9.5.0:
resolution: {integrity: sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==} resolution: {integrity: sha512-+NAOZFrW/jFTS3dASCGBxX1pkFD0/fsO+hfAkJ4TyYKwgsXZbqzrw+seCYFCcPCYXvnD67tAnglU7GQTz6kcVw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true hasBin: true
@ -5306,6 +5306,10 @@ packages:
resolution: {integrity: sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==} resolution: {integrity: sha512-f16coDZlTG1jskq3mxarwB+fGRrd0uXWt+o1WIhRfOwbXQZqUDsTVxQBFK9JjRQHblg8eAG2JSbprDXKjc7ijQ==}
engines: {node: '>= 4.0.0'} engines: {node: '>= 4.0.0'}
memfs@4.9.3:
resolution: {integrity: sha512-bsYSSnirtYTWi1+OPMFb0M048evMKyUYe0EbtuGQgq6BVQM1g1W8/KIUJCCvjgI/El0j6Q4WsmMiBwLUBSw8LA==}
engines: {node: '>= 4.0.0'}
memory-fs@0.5.0: memory-fs@0.5.0:
resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==}
engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'}
@ -6922,6 +6926,12 @@ packages:
tr46@0.0.3: tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
tree-dump@1.0.1:
resolution: {integrity: sha512-WCkcRBVPSlHHq1dc/px9iOfqklvzCbdRwvlNfxGZsrHqf6aZttfPrd7DJTt6oR10dwUfpFFQeVTkPbBIZxX/YA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
trim-lines@3.0.1: trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@ -8197,16 +8207,16 @@ snapshots:
'@esbuild/win32-x64@0.21.5': '@esbuild/win32-x64@0.21.5':
optional: true optional: true
'@eslint-community/eslint-utils@4.4.0(eslint@9.4.0)': '@eslint-community/eslint-utils@4.4.0(eslint@9.5.0)':
dependencies: dependencies:
eslint: 9.4.0 eslint: 9.5.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.10.0': {} '@eslint-community/regexpp@4.10.0': {}
'@eslint/config-array@0.15.1': '@eslint/config-array@0.16.0':
dependencies: dependencies:
'@eslint/object-schema': 2.1.3 '@eslint/object-schema': 2.1.4
debug: 4.3.4 debug: 4.3.4
minimatch: 3.1.2 minimatch: 3.1.2
transitivePeerDependencies: transitivePeerDependencies:
@ -8226,9 +8236,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@eslint/js@9.4.0': {} '@eslint/js@9.5.0': {}
'@eslint/object-schema@2.1.3': {} '@eslint/object-schema@2.1.4': {}
'@fastify/busboy@2.0.0': {} '@fastify/busboy@2.0.0': {}
@ -8587,35 +8597,35 @@ snapshots:
- utf-8-validate - utf-8-validate
- vue - vue
'@nuxt/eslint-config@0.3.13(eslint@9.4.0)(typescript@5.4.5)': '@nuxt/eslint-config@0.3.13(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint/js': 9.4.0 '@eslint/js': 9.5.0
'@nuxt/eslint-plugin': 0.3.13(eslint@9.4.0)(typescript@5.4.5) '@nuxt/eslint-plugin': 0.3.13(eslint@9.5.0)(typescript@5.4.5)
'@rushstack/eslint-patch': 1.10.3 '@rushstack/eslint-patch': 1.10.3
'@stylistic/eslint-plugin': 2.1.0(eslint@9.4.0)(typescript@5.4.5) '@stylistic/eslint-plugin': 2.1.0(eslint@9.5.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
eslint-config-flat-gitignore: 0.1.5 eslint-config-flat-gitignore: 0.1.5
eslint-flat-config-utils: 0.2.5 eslint-flat-config-utils: 0.2.5
eslint-plugin-import-x: 0.5.0(eslint@9.4.0)(typescript@5.4.5) eslint-plugin-import-x: 0.5.0(eslint@9.5.0)(typescript@5.4.5)
eslint-plugin-jsdoc: 48.2.5(eslint@9.4.0) eslint-plugin-jsdoc: 48.2.5(eslint@9.5.0)
eslint-plugin-regexp: 2.5.0(eslint@9.4.0) eslint-plugin-regexp: 2.5.0(eslint@9.5.0)
eslint-plugin-unicorn: 53.0.0(eslint@9.4.0) eslint-plugin-unicorn: 53.0.0(eslint@9.5.0)
eslint-plugin-vue: 9.26.0(eslint@9.4.0) eslint-plugin-vue: 9.26.0(eslint@9.5.0)
globals: 15.2.0 globals: 15.2.0
pathe: 1.1.2 pathe: 1.1.2
tslib: 2.6.2 tslib: 2.6.2
vue-eslint-parser: 9.4.2(eslint@9.4.0) vue-eslint-parser: 9.4.2(eslint@9.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@nuxt/eslint-plugin@0.3.13(eslint@9.4.0)(typescript@5.4.5)': '@nuxt/eslint-plugin@0.3.13(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -9066,49 +9076,49 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {} '@sindresorhus/merge-streams@4.0.0': {}
'@stylistic/eslint-plugin-js@2.1.0(eslint@9.4.0)': '@stylistic/eslint-plugin-js@2.1.0(eslint@9.5.0)':
dependencies: dependencies:
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
acorn: 8.12.0 acorn: 8.12.0
eslint: 9.4.0 eslint: 9.5.0
eslint-visitor-keys: 4.0.0 eslint-visitor-keys: 4.0.0
espree: 10.0.1 espree: 10.0.1
'@stylistic/eslint-plugin-jsx@2.1.0(eslint@9.4.0)': '@stylistic/eslint-plugin-jsx@2.1.0(eslint@9.5.0)':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0)
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
eslint: 9.4.0 eslint: 9.5.0
estraverse: 5.3.0 estraverse: 5.3.0
picomatch: 4.0.2 picomatch: 4.0.2
'@stylistic/eslint-plugin-plus@2.1.0(eslint@9.4.0)(typescript@5.4.5)': '@stylistic/eslint-plugin-plus@2.1.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@stylistic/eslint-plugin-ts@2.1.0(eslint@9.4.0)(typescript@5.4.5)': '@stylistic/eslint-plugin-ts@2.1.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0)
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
'@stylistic/eslint-plugin@2.1.0(eslint@9.4.0)(typescript@5.4.5)': '@stylistic/eslint-plugin@2.1.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.1.0(eslint@9.4.0) '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.5.0)
'@stylistic/eslint-plugin-jsx': 2.1.0(eslint@9.4.0) '@stylistic/eslint-plugin-jsx': 2.1.0(eslint@9.5.0)
'@stylistic/eslint-plugin-plus': 2.1.0(eslint@9.4.0)(typescript@5.4.5) '@stylistic/eslint-plugin-plus': 2.1.0(eslint@9.5.0)(typescript@5.4.5)
'@stylistic/eslint-plugin-ts': 2.1.0(eslint@9.4.0)(typescript@5.4.5) '@stylistic/eslint-plugin-ts': 2.1.0(eslint@9.5.0)(typescript@5.4.5)
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
eslint: 9.4.0 eslint: 9.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -9320,15 +9330,15 @@ snapshots:
'@types/youtube@0.0.50': {} '@types/youtube@0.0.50': {}
'@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.4.0)(typescript@5.4.5))(eslint@9.4.0)(typescript@5.4.5)': '@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.5.0)(typescript@5.4.5))(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/parser': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.9.0 '@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/type-utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/type-utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0 '@typescript-eslint/visitor-keys': 7.9.0
eslint: 9.4.0 eslint: 9.5.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.1 ignore: 5.3.1
natural-compare: 1.4.0 natural-compare: 1.4.0
@ -9338,14 +9348,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@7.9.0(eslint@9.4.0)(typescript@5.4.5)': '@typescript-eslint/parser@7.9.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 7.9.0 '@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0 '@typescript-eslint/visitor-keys': 7.9.0
debug: 4.3.4 debug: 4.3.4
eslint: 9.4.0 eslint: 9.5.0
optionalDependencies: optionalDependencies:
typescript: 5.4.5 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
@ -9356,12 +9366,12 @@ snapshots:
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0 '@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/type-utils@7.9.0(eslint@9.4.0)(typescript@5.4.5)': '@typescript-eslint/type-utils@7.9.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 9.4.0 eslint: 9.5.0
ts-api-utils: 1.3.0(typescript@5.4.5) ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies: optionalDependencies:
typescript: 5.4.5 typescript: 5.4.5
@ -9385,13 +9395,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@7.9.0(eslint@9.4.0)(typescript@5.4.5)': '@typescript-eslint/utils@7.9.0(eslint@9.5.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0)
'@typescript-eslint/scope-manager': 7.9.0 '@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -11294,12 +11304,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import-x@0.5.0(eslint@9.4.0)(typescript@5.4.5): eslint-plugin-import-x@0.5.0(eslint@9.5.0)(typescript@5.4.5):
dependencies: dependencies:
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
doctrine: 3.0.0 doctrine: 3.0.0
eslint: 9.4.0 eslint: 9.5.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
get-tsconfig: 4.7.3 get-tsconfig: 4.7.3
is-glob: 4.0.3 is-glob: 4.0.3
@ -11309,14 +11319,14 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
eslint-plugin-jsdoc@48.2.5(eslint@9.4.0): eslint-plugin-jsdoc@48.2.5(eslint@9.5.0):
dependencies: dependencies:
'@es-joy/jsdoccomment': 0.43.0 '@es-joy/jsdoccomment': 0.43.0
are-docs-informative: 0.0.2 are-docs-informative: 0.0.2
comment-parser: 1.4.1 comment-parser: 1.4.1
debug: 4.3.4 debug: 4.3.4
escape-string-regexp: 4.0.0 escape-string-regexp: 4.0.0
eslint: 9.4.0 eslint: 9.5.0
esquery: 1.5.0 esquery: 1.5.0
is-builtin-module: 3.2.1 is-builtin-module: 3.2.1
semver: 7.6.2 semver: 7.6.2
@ -11326,38 +11336,38 @@ snapshots:
eslint-plugin-no-only-tests@3.1.0: {} eslint-plugin-no-only-tests@3.1.0: {}
eslint-plugin-perfectionist@2.11.0(eslint@9.4.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.4.0)): eslint-plugin-perfectionist@2.11.0(eslint@9.5.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.5.0)):
dependencies: dependencies:
'@typescript-eslint/utils': 7.9.0(eslint@9.4.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.5.0)(typescript@5.4.5)
eslint: 9.4.0 eslint: 9.5.0
minimatch: 9.0.4 minimatch: 9.0.4
natural-compare-lite: 1.4.0 natural-compare-lite: 1.4.0
optionalDependencies: optionalDependencies:
vue-eslint-parser: 9.4.2(eslint@9.4.0) vue-eslint-parser: 9.4.2(eslint@9.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
eslint-plugin-regexp@2.5.0(eslint@9.4.0): eslint-plugin-regexp@2.5.0(eslint@9.5.0):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0)
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
comment-parser: 1.4.1 comment-parser: 1.4.1
eslint: 9.4.0 eslint: 9.5.0
jsdoc-type-pratt-parser: 4.0.0 jsdoc-type-pratt-parser: 4.0.0
refa: 0.12.1 refa: 0.12.1
regexp-ast-analysis: 0.7.1 regexp-ast-analysis: 0.7.1
scslre: 0.3.0 scslre: 0.3.0
eslint-plugin-unicorn@53.0.0(eslint@9.4.0): eslint-plugin-unicorn@53.0.0(eslint@9.5.0):
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.24.7 '@babel/helper-validator-identifier': 7.24.7
'@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0)
'@eslint/eslintrc': 3.1.0 '@eslint/eslintrc': 3.1.0
ci-info: 4.0.0 ci-info: 4.0.0
clean-regexp: 1.0.0 clean-regexp: 1.0.0
core-js-compat: 3.37.1 core-js-compat: 3.37.1
eslint: 9.4.0 eslint: 9.5.0
esquery: 1.5.0 esquery: 1.5.0
indent-string: 4.0.0 indent-string: 4.0.0
is-builtin-module: 3.2.1 is-builtin-module: 3.2.1
@ -11371,16 +11381,16 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-vue@9.26.0(eslint@9.4.0): eslint-plugin-vue@9.26.0(eslint@9.5.0):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0)
eslint: 9.4.0 eslint: 9.5.0
globals: 13.24.0 globals: 13.24.0
natural-compare: 1.4.0 natural-compare: 1.4.0
nth-check: 2.1.1 nth-check: 2.1.1
postcss-selector-parser: 6.1.0 postcss-selector-parser: 6.1.0
semver: 7.6.2 semver: 7.6.2
vue-eslint-parser: 9.4.2(eslint@9.4.0) vue-eslint-parser: 9.4.2(eslint@9.5.0)
xml-name-validator: 4.0.0 xml-name-validator: 4.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -11400,10 +11410,10 @@ snapshots:
esrecurse: 4.3.0 esrecurse: 4.3.0
estraverse: 5.3.0 estraverse: 5.3.0
eslint-typegen@0.2.4(eslint@9.4.0): eslint-typegen@0.2.4(eslint@9.5.0):
dependencies: dependencies:
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
eslint: 9.4.0 eslint: 9.5.0
json-schema-to-typescript-lite: 14.0.1 json-schema-to-typescript-lite: 14.0.1
ohash: 1.1.3 ohash: 1.1.3
@ -11411,13 +11421,13 @@ snapshots:
eslint-visitor-keys@4.0.0: {} eslint-visitor-keys@4.0.0: {}
eslint@9.4.0: eslint@9.5.0:
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.4.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.5.0)
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@eslint/config-array': 0.15.1 '@eslint/config-array': 0.16.0
'@eslint/eslintrc': 3.1.0 '@eslint/eslintrc': 3.1.0
'@eslint/js': 9.4.0 '@eslint/js': 9.5.0
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.3.0 '@humanwhocodes/retry': 0.3.0
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
@ -12714,6 +12724,13 @@ snapshots:
sonic-forest: 1.0.0(tslib@2.6.2) sonic-forest: 1.0.0(tslib@2.6.2)
tslib: 2.6.2 tslib: 2.6.2
memfs@4.9.3:
dependencies:
'@jsonjoy.com/json-pack': 1.0.3(tslib@2.6.2)
'@jsonjoy.com/util': 1.1.2(tslib@2.6.2)
tree-dump: 1.0.1(tslib@2.6.2)
tslib: 2.6.2
memory-fs@0.5.0: memory-fs@0.5.0:
dependencies: dependencies:
errno: 0.1.8 errno: 0.1.8
@ -14617,6 +14634,10 @@ snapshots:
tr46@0.0.3: {} tr46@0.0.3: {}
tree-dump@1.0.1(tslib@2.6.2):
dependencies:
tslib: 2.6.2
trim-lines@3.0.1: {} trim-lines@3.0.1: {}
trough@2.2.0: {} trough@2.2.0: {}
@ -15030,7 +15051,7 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-plugin-checker@0.6.4(eslint@9.4.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.3.1(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0))(vue-tsc@2.0.21(typescript@5.4.5)): vite-plugin-checker@0.6.4(eslint@9.5.0)(optionator@0.9.3)(typescript@5.4.5)(vite@5.3.1(@types/node@20.14.2)(sass@1.69.4)(terser@5.27.0))(vue-tsc@2.0.21(typescript@5.4.5)):
dependencies: dependencies:
'@babel/code-frame': 7.24.7 '@babel/code-frame': 7.24.7
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
@ -15049,7 +15070,7 @@ snapshots:
vscode-languageserver-textdocument: 1.0.11 vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8 vscode-uri: 3.0.8
optionalDependencies: optionalDependencies:
eslint: 9.4.0 eslint: 9.5.0
optionator: 0.9.3 optionator: 0.9.3
typescript: 5.4.5 typescript: 5.4.5
vue-tsc: 2.0.21(typescript@5.4.5) vue-tsc: 2.0.21(typescript@5.4.5)
@ -15190,10 +15211,10 @@ snapshots:
vue-devtools-stub@0.1.0: {} vue-devtools-stub@0.1.0: {}
vue-eslint-parser@9.4.2(eslint@9.4.0): vue-eslint-parser@9.4.2(eslint@9.5.0):
dependencies: dependencies:
debug: 4.3.4 debug: 4.3.4
eslint: 9.4.0 eslint: 9.5.0
eslint-scope: 7.2.2 eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
espree: 9.6.1 espree: 9.6.1

View File

@ -18,6 +18,9 @@ if [[ ! -z ${NODE_AUTH_TOKEN} ]] ; then
npm whoami npm whoami
fi fi
# use absolute urls for better rendering on npm
sed -i '' 's/\.\/\.github\/assets/https:\/\/github.com\/nuxt\/nuxt\/tree\/main\/\.github\/assets/g' README.md
# Release packages # Release packages
for p in packages/* ; do for p in packages/* ; do
if [[ $p == "packages/nuxi" ]] ; then if [[ $p == "packages/nuxi" ]] ; then

View File

@ -8,6 +8,9 @@ git restore -s@ -SW -- packages examples
# Build all once to ensure things are nice # Build all once to ensure things are nice
pnpm build pnpm build
# use absolute urls for better rendering on npm
sed -i '' 's/\.\/\.github\/assets/https:\/\/github.com\/nuxt\/nuxt\/tree\/main\/\.github\/assets/g' README.md
# Release packages # Release packages
for PKG in packages/* ; do for PKG in packages/* ; do
if [[ $PKG == "packages/nuxi" ]] ; then if [[ $PKG == "packages/nuxi" ]] ; then

View File

@ -8,6 +8,9 @@ git restore -s@ -SW -- packages examples
# Build all once to ensure things are nice # Build all once to ensure things are nice
pnpm build pnpm build
# use absolute urls for better rendering on npm
sed -i '' 's/\.\/\.github\/assets/https:\/\/github.com\/nuxt\/nuxt\/tree\/main\/\.github\/assets/g' README.md
# Release packages # Release packages
for PKG in packages/* ; do for PKG in packages/* ; do
if [[ $PKG == "packages/nuxi" ]] ; then if [[ $PKG == "packages/nuxi" ]] ; then